1

更新、削除、挿入したいときは、コミットする必要があります。これはたいていの場合役に立ちます。間違った情報を更新したり、誤って何かを削除したりしても、元に戻すことができます。

列をドロップするとき、コミットは必要ありません。変更をすばやく取り消すことができるロールバック (フラッシュバックではない) のようなものはありますか? 長い分析の後であっても、列をドロップすると、テーブル (pk、fk) が損傷する可能性があります。

Oracle が DML のコミットを提供したのに、DDL のコミットを提供しなかったのはなぜですか?

4

1 に答える 1

6

Oracle が DML のコミットを提供したのに、DDL のコミットを提供しなかったのはなぜですか?

DDL ステートメントを発行すると、基本的に Oracle データ ディクショナリに対してトランザクションが開始されます。このトランザクションは、オーバーヘッドを排除するために、できるだけ短く、できるだけ早く有効にする必要があります。このため、DDL ステートメントは、DDL ステートメントの前と、ステートメントの直後 (または何か問題が発生した場合はロールバック) の二重コミットを行います。この動作により、Oracle の DDL はトランザクション DDL ではなくなり、明示的にコミットまたはロールバックできなくなります。それはまさにその通りです。

そうは言っても、テーブルを削除した場合、10g 以降では、flashback tableテクノロジを使用して 1 つのステートメントでテーブルを取り戻すことができますdrop table。これは、ステートメントを発行した後、Oracle はテーブルを削除せず、代わりにごみ箱に入れるためです。

flashback table <<table_name>> to before drop

残念ながら、フラッシュバック テーブルを使用してテーブルの削除された列を復元することはできません。これは、削除された列がごみ箱に入れられないためです。データベース全体または単一のテーブルスペースのポイント イン タイム リカバリを実行するか、論理バックアップ (*.dmp ファイル) がある場合は、impまたはimpdpユーティリティを使用してそこからテーブルを復元する必要があります。

于 2013-09-28T11:29:30.077 に答える