4

backup1 つのトリガーを適用したテーブルが 1 つありますupd_trig。ここで、テーブルを削除してから、関連するすべてのトリガー/インデックスも削除されるか、そこに残るかどうかを確認しました。

ここでいくつかの議論を見つけたので、テーブルを削除すると、トリガー/インデックスはすべて削除されると言われました。しかし、トリガーはまだ存在しているようです。テーブルをドロップすると正確に何が起こるか、誰か説明できますか

SQL> drop table backup;

Table dropped.

SQL> select text from user_source;

TEXT
----------------------------------------------------------------------------------------------------
TRIGGER
"BIN$Dg5j/bf6Rq6ugyN5ELwQkw==$0" BEFORE UPDATE ON backup FOR EACH ROW
BEGIN
INSERT INTO BACKUP VALUES(USER,:OLD.ENAME,SYSDATE);
END;

9 rows selected.

SQL> select count(*) from user_triggers;

  COUNT(*)
----------
         1

SQL> select trigger_name from user_triggers;

TRIGGER_NAME
------------------------------
BIN$Dg5j/bf6Rq6ugyN5ELwQkw==$0
4

1 に答える 1

8

テーブルは削除されましたが、ごみ箱flashback ... before dropあり、そこからフラッシュバック コマンド ( ]を使用して復元できますBIN$...BIN$...もごみ箱にあり、すべてのインデックスもごみ箱になります。

ごみ箱を空にして、その中のオブジェクトを完全に削除できます。ごみ箱に移動せずにテーブルをすぐに削除するには、ドキュメントでpurge説明されているように、キーワードをdropコマンドに追加できます。これにより、インデックスとトリガーもすぐに削除されます。


自動的に削除されなかった場合、削除されたテーブルで DML を実行できなかったため、トリガーはとにかく無関係になり、起動することはありません。これは、トリガーが対象するテーブルが削除された場合です。あなたのトリガーは奇妙です。同じテーブルに挿入しています。通常、1 つのテーブルにトリガーを挿入してバックアップ テーブルに挿入します (トリガーを 1 回使用するため)。その場合、バックアップ テーブルを削除すると、ライブ テーブルのトリガーは無効になりますが、削除はされません。ライブ テーブルを削除するだけで、ライブ テーブルのトリガーが削除されます。

于 2013-04-02T18:24:13.230 に答える