0

次のような削除クエリがあります。

delete from table1 where dataA between Date1 and Date2

エラーが発生しました:

Caused by: java.sql.SQLException: ORA-01628: max # extents (10100) reached 
for rollback segment.

追加して削除ステートメントを修正したい

AND ROWNUM < 200 

これは問題を解決する正しい方法ですか(テーブルにはblob列が含まれています。このため、ロールバックセグメントは小さいと思います)。

4

1 に答える 1

1

私はOracleでデータウェアハウスの一括処理を行っていますが、あなたの方法はまったく問題ありません。私はdbaに、大量のロールバック/ tmpスペースを追加して、これに遭遇しないように言っておきたいと思います...しかし、多くのクライアントと同様に...リソースは何度も私たちの制御の及ばないものです。

チャンクで削除したい繰り返しの削除操作で私が行うことは次のとおりです(Oracle Pl / sqlの例ですが、任意の言語に移植されます)このソリューションは、条件付きのwhere式(例)... where条件がある場合は、最初にROWID /キーを配列に一括でフェッチし、ループをチャンクで削除することをお勧めします...

//psuedo code
Create procedure (iCommit In Integer) 
   Loop
      Delete From Table where rownum < iCommit + 1;
      if SQL%ROWCOUNT < iCommit then
         exit loop;
      end if
      // incremental commit
      commit;
   End Loop;
   // final commit
   commit;
)
于 2013-01-14T21:53:05.353 に答える