0

35列の250Gbの会社のデータテーブルがあります。テーブルから削除する行数が明らかに多い約215Gbのデータを削除する必要があります。このテーブルには主キーがありません。

このテーブルからデータを削除するための最速の方法は何でしょうか?このような大規模な削除プロセスのためのツールはOracleにありますか?

Oracleを使用してこれを行う最速の方法を教えてください。

4

3 に答える 3

3

上記の回答で述べられているように、保持する行を別のテーブルに移動し、テーブルを切り捨てる方がよいでしょう。これは、と呼ばれるものがあるためですHIGH WATERMARK。詳細については、http://sysdba.wordpress.com/2006/04/28/how-to-adjust-the-high-watermark-in-oracle-10g-alter-table-shrink/を参照してください。削除操作は、呼び出されたユーザーを圧倒しますUNDO TABLESPACE

このrecovery model用語は、私が信じているmssqlにかなり当てはまります:)。


それが問題を少しでも明らかにすることを願っています。

ありがとう。

于 2012-08-09T09:09:01.327 に答える
1

私たちはずっと前に同様の問題を抱えていました。10億行のテーブルがありましたが、特定のルールに基づいてデータの大部分を削除する必要がありました。保持したいデータを抽出してルールを適用するPro*Cジョブを作成し、保持するデータをcsvファイルにスプリントすることで解決しました。

次に、直接パスを使用してデータをアップロードするsqlldr制御ファイルを作成しました(これにより、元に戻す/やり直しは作成されません(ただし、テーブルを回復する必要がある場合は、次のバックアップを実行するまでCSVファイルがあります)。

シーケンスは

  • Pro*Cを実行してデータのCSVファイルを作成します
  • インデックスのDDLを生成します
  • インデックスを削除します
  • CSVファイルを使用してsql*loadを実行します
  • 並列ヒントを使用してインデックスを再作成する
  • 度(8)を使用してテーブルを分析します

並列処理の量は、DBサーバーのCPUとメモリによって異なります。16個のCPUと数ギガのRAMを使用できるため、問題はありません。

正しいデータの抽出は、これの最も長い部分でした。数回の試行の後、SQLローダーは1時間以内に10億行全体(つまり、10億行または1億行)をロードすることができました。

于 2012-08-09T14:51:44.220 に答える
1

どのレコードを保持する必要があるか知っていますか?各レコードをどのように識別しますか?

解決策は、保持するレコードを一時データベースに移動してから、大きなテーブルを切り捨てることです。その後、保持されているレコードを元に戻します。

このため、トランザクションログファイルが非常に大きくなる可能性があることに注意してください(ただし、リカバリモデルによって異なります)。

于 2012-08-09T08:52:04.983 に答える