-4

私はテーブルを落とし、ロールバックしようとしましたが、役に立たなかった。このように機能するのでしょうか、それともここで間違ってプレイするのでしょうか?

ほとんどのコメントから、DDLステートメントはロールバックでは元に戻せず、FLASHBACKでのみ元に戻すことができることは明らかです。

DELETEFROMSTUDENTを元に戻してみました。

それでも元に戻すことはできません:

私の処刑順序は

  • 入れる、

  • から削除、

  • ロールバック。

4

8 に答える 8

13

ロールバックによってスキーマの変更が取り消されるとは思わない。

于 2012-01-20T13:19:49.333 に答える
5

ROLLBACKセーブポイント修飾子がないと、現在のトランザクション全体がロールバックされます。

DDLステートメントの場合、ロールバックする現在のトランザクションはありません。DDLステートメントCOMMITは、ステートメントの開始前と完了後に暗黙的にaを生成します。したがって、ROLLBACK次のを発行した場合DROP、現在のトランザクションでは作業が行われていないため、ロールバックするものはありません。

DMLステートメントの場合、現在のトランザクション全体をロールバックします。もし、するなら

  • 入れる
  • 消去
  • ロールバック

操作を実行すると、トランザクションが開始されますINSERT。したがって、を発行すると、とのROLLBACK両方がロールバックされるため、テーブルにデータがない状態に戻ります(データがない状態で開始したと仮定します)。その後の場合、次のトランザクションはで始まり、操作をロールバックするだけです。または、の後にセーブポイントを宣言して、セーブポイントにロールバックすることもできます。INSERTDELETECOMMITINSERTDELETEROLLBACKDELETEINSERT

SQL> create table foo( col1 number );

Table created.

SQL> insert into foo values( 1 );

1 row created.

SQL> savepoint after_insert;

Savepoint created.

SQL> delete from foo;

1 row deleted.

SQL> rollback to savepoint after_insert;

Rollback complete.

SQL> select * from foo;

      COL1
----------
         1
于 2012-01-20T14:40:47.367 に答える
4

ロールバックはスキーマの変更を元に戻すことはありませんが、テーブルの削除操作を元に戻すには、次を確認できます。

http://docs.oracle.com/cd/B19306_01/backup.102/b14192/flashptr004.htm

于 2012-01-20T13:22:47.523 に答える
3

ドキュメントから:

Oracle Databaseは、各DDL文の前後に現在のトランザクションを暗黙的にコミットします。

ROLLBACKこれは、DDL ステートメント (つまり、スキーマの変更)を実行できないことを意味します。

于 2012-01-20T13:22:57.740 に答える
1

ロールバックは、drop table alter table などのデータ定義コマンドを元に戻すことはありません。

于 2012-01-20T13:22:17.937 に答える
0

テーブルを削除すると、データベースの構造が変更されます ( CREATE、DROP などのDDLステートメントを使用)。

COMMIT と ROLLBACK は、DMLステートメント (INSERT、UPDATE など)を使用してデータベースと交換されるデータに対してのみ機能します。

だから、いいえ、このように機能することは決してありません。

于 2012-01-20T13:21:13.230 に答える
0

ddl の変更をロールバックするには、Flashback を使用する必要があります。

于 2012-01-21T06:53:03.873 に答える
0

ロールバック:

ROLLBACK ステートメントを使用して、保留中のすべての変更を破棄します。ROLLBACK ステートメントの後:

  • データの変更は取り消されます。
  • データの以前の状態が復元されます。
  • 影響を受ける行のロックが解放されます。

TEST テーブルからレコードを削除しようとしているときに、誤ってテーブルを空にすることができます。誤りを訂正し、適切なステートメントを再発行して、データの変更を永続的にすることができます。

DELETE FROM test;
25,000 rows deleted.

ROLLBACK;
Rollback complete.

DELETE FROM test
WHERE id = 100;

1 row deleted.

SELECT *
FROM test
WHERE id = 100;
No rows selected.

COMMIT;
Commit complete

コミットした後は、ロールバックできません。

于 2012-01-21T13:47:26.580 に答える