• ベストアンサー

トランザクションログを出力せずにデータを削除する方法

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

質問者が選んだベストアンサー

  • ベストアンサー
  • GoF
  • ベストアンサー率37% (34/91)
回答No.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 ~ となります。 細かな作業は、マニュアル等で調べてください。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • geso775
  • ベストアンサー率29% (15/51)
回答No.4

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

すると、全ての回答が全文表示されます。
  • geso775
  • ベストアンサー率29% (15/51)
回答No.3

TRUNCATE TABLEコマンドがあったはずです。 RBSを使用せずに表を切り離します。 調べてみてください。

すると、全ての回答が全文表示されます。
  • entree
  • ベストアンサー率55% (405/735)
回答No.2

ワークテーブルでも作成して、残すデータをそこに退避させてから元テーブルをTRUNCATEして退避データを戻す。 これくらいしか方法はないと思いますが。

すると、全ての回答が全文表示されます。
回答No.1

こんにちは。 しばらくOracleから離れていてとんでもない回答をしているのかもしれませんが、 ノーアーカイブモードにするとログを吐かなかったのでは?

すると、全ての回答が全文表示されます。

関連するQ&A