oracle取消正在回滚的事务,Oracle11新特性——撤销事务(一)

打算写一系列的文章介绍11g的新特性和变化。

Oracle11g提供了撤销事务的功能,可以撤销一个已经提交的事务。

这一篇简单介绍撤销事务的用法。

Oracle的发起一个事务后,可以选择提交或者回滚。回滚的话,会恢复到这个事务发生之前的状态,而一旦提交,这个事务的所有修改都被保存到数据库中。

从11g开始,Oracle提供了撤销一个已经提交事务的能力。这个功能是通过DBMS_FLASHBACK.TRANSACTION_BACKOUT过程实现的。

首先建立一张测试表:

SQL> CREATE TABLE T (ID NUMBER);

Table created.

SQL> INSERT INTO T VALUES (1);

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT XID, TABLE_NAME, OPERATION, UNDO_SQL FROM FLASHBACK_TRANSACTION_QUERY WHERE TABLE_NAME = 'T';

XID TABLE_NAME OPERATION UNDO_SQL

---------------- ---------- ---------- ------------------------------------------------------------

0007001100000157 T INSERT delete from "YANGTK"."T" where ROWID = 'AAARNZAAFAAACYxAAA';

找到要撤销的事务后,通过调用DBMS_FLASHBACK.TRANSACTION_BACKOUT过程:

SQL> DECLARE

2 V_XID SYS.XID_ARRAY;

3 BEGIN

4 V_XID := SYS.XID_ARRAY('0002003A00000157');

5 DBMS_FLASHBACK.TRANSACTION_BACKOUT(1, V_XID);

6 END;

7 /

DECLARE

*

ERROR at line 1:

ORA-01031: insufficient privileges

ORA-06512: at "SYS.DBMS_FLASHBACK", line 37

ORA-06512: at "SYS.DBMS_FLASHBACK", line 70

ORA

你可能感兴趣的:(oracle取消正在回滚的事务)