35列の250Gbの会社のデータテーブルがあります。テーブルから削除する行数が明らかに多い約215Gbのデータを削除する必要があります。このテーブルには主キーがありません。
このテーブルからデータを削除するための最速の方法は何でしょうか?このような大規模な削除プロセスのためのツールはOracleにありますか?
Oracleを使用してこれを行う最速の方法を教えてください。
上記の回答で述べられているように、保持する行を別のテーブルに移動し、テーブルを切り捨てる方がよいでしょう。これは、と呼ばれるものがあるためです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にかなり当てはまります:)。
それが問題を少しでも明らかにすることを願っています。
ありがとう。
私たちはずっと前に同様の問題を抱えていました。10億行のテーブルがありましたが、特定のルールに基づいてデータの大部分を削除する必要がありました。保持したいデータを抽出してルールを適用するPro*Cジョブを作成し、保持するデータをcsvファイルにスプリントすることで解決しました。
次に、直接パスを使用してデータをアップロードするsqlldr制御ファイルを作成しました(これにより、元に戻す/やり直しは作成されません(ただし、テーブルを回復する必要がある場合は、次のバックアップを実行するまでCSVファイルがあります)。
シーケンスは
並列処理の量は、DBサーバーのCPUとメモリによって異なります。16個のCPUと数ギガのRAMを使用できるため、問題はありません。
正しいデータの抽出は、これの最も長い部分でした。数回の試行の後、SQLローダーは1時間以内に10億行全体(つまり、10億行または1億行)をロードすることができました。
どのレコードを保持する必要があるか知っていますか?各レコードをどのように識別しますか?
解決策は、保持するレコードを一時データベースに移動してから、大きなテーブルを切り捨てることです。その後、保持されているレコードを元に戻します。
このため、トランザクションログファイルが非常に大きくなる可能性があることに注意してください(ただし、リカバリモデルによって異なります)。