dポイントプレゼントキャンペーン実施中!

大量(30万件程)のデータを削除したいのですが、ロールバックする必要がないのでトランザクションログを出力したくありません。一部のデータは残す必要があるので、トランケートはできないのですが、なにか良い方法はご教授ください。

A 回答 (5件)

大量削除の前に、レコード数の全体件数が重要です。


(例えば 100万レコード超なのか30万+α程度なのか)

代表的な手法としては

件数が少ない場合
・ファイル書き出し(CSVなど)をして TRUNCATE 後
SQL loader(directモード)で再度取り込む

・ワークテーブルで同様な事をする。

件数が多い場合
・Data pumpアクセスドライバ経由で外部表を作成
CREATE TABLE ~ TYPE oracle_datapump ~ as select ~
または、CSVから外部表を作成する

・TRUNCATE
・ダイレクトパスインサートで復旧
INSERT /*+ APPEND */ INTO to_table SELECT * FROM from_table ~

となります。

細かな作業は、マニュアル等で調べてください。
    • good
    • 0

>トランケートはできないのですが、なにか良い方法はご教授ください。


すんません。
では#2様のやり方がよいと思います。
まず必要なデータを退避ですが、
CREATE TABLE WRK_TBL AS SELECT * From TARGET_TBL where ・・・
SELECT句で退避したいデータを指定して、テーブルを作成する。
そのあと、TARGET_TBLをTRUNCATEできれいさっぱりでどうでしょうか?
    • good
    • 0

TRUNCATE TABLEコマンドがあったはずです。


RBSを使用せずに表を切り離します。
調べてみてください。
    • good
    • 0

ワークテーブルでも作成して、残すデータをそこに退避させてから元テーブルをTRUNCATEして退避データを戻す。


これくらいしか方法はないと思いますが。
    • good
    • 0

こんにちは。



しばらくOracleから離れていてとんでもない回答をしているのかもしれませんが、

ノーアーカイブモードにするとログを吐かなかったのでは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A