プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

Oracle 9iで特定のテーブルを高速に削除したいのですが
Truncateを使うと、Insertが完了し、Commitするまでの間に
読み取り一貫性が崩れるので、使いたくありません。
(他のセッションからは、当該テーブルは0件と映るのではなく
削除前の状態が見えてほしい。)

なにか逃げ道ありませんでしょうか?

A 回答 (3件)

>Truncateされた後、かつ次のCommitまでの間に


>他に新たにセッションが確立された場合に、この状況となります。

DDLに分類されるTRUNCATEは、非トランザクションなSQLですので、
コミットするまでもなく、自動的に即時反映です。
占有的に動作し、即時反映するので、読みとり一貫性が崩れることは
ありません。

トランザクション中で削除するには、DELETE文を実行する以外に
削除の方法はありません。
データベース環境を変更できるのであれば、ログの抑制等で、
DELETE文速くすることは出来ますが。

この回答への補足

>> データベース環境を変更できるのであれば、ログの抑制等で、
>> DELETE文速くすることは出来ますが。

はい、こういう逃げ道を探しています。
これについて、詳しく教えていただませんでしょうか?

補足日時:2007/05/16 14:26
    • good
    • 0

ALTER TABLE テーブル名 NOLOGGING;



ALTER INDEX インデックス名 NOLOGGING;
をすれば、REDOログの出力が減り、相応の時間が節約できます。
当然、REDOログを出力しないことによる弊害も考慮してください。

詳しくはマニュアルで。
    • good
    • 0
この回答へのお礼

k_o_r_o_c_h_a_n さん
ありがとうございます。
NOLOGGINGオプションをつけてやってみたいと思います。
ありがとうございました。

お礼日時:2007/05/21 11:17

>他のセッションからは、当該テーブルは0件と映るのではなく


>削除前の状態が見えてほしい。

このような状況にはならないと思いますよ。
他セッションで使われているテーブルは、Truncateが拒否されるハズです。
Tuncateできるなら、瞬間的には占有状態のハズですから・・

この回答への補足

Truncateされた後、かつ次のCommitまでの間に
他に新たにセッションが確立された場合に、この状況となります。

補足日時:2007/05/15 08:57
    • good
    • 0

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

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