首页 > Linux操作系统 > Linux操作系统 > 撤销事务报错ORA-55505
这个bug发生在Oracle11g for Linux x86环境中。
尝试撤销事务,出现下面令人费解的错误信息:
SQL> CREATE TABLE T_FLASH_TRANS (ID NUMBER, NAME VARCHAR2(30));
表已创建。
SQL> INSERT INTO T_FLASH_TRANS VALUES (1, 'A');
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> UPDATE T_FLASH_TRANS SET NAME = 'C' WHERE ID = 1;
已更新 1 行。
SQL> COMMIT;
提交完成。
SQL> UPDATE T_FLASH_TRANS SET NAME = 'D' WHERE ID = 1;
已更新 1 行。
SQL> INSERT INTO T_FLASH_TRANS VALUES (2, 'B');
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> CONN SYS@ORA11G AS SYSDBA输入口令: ****已连接。
SQL> SELECT XID, OPERATION, UNDO_SQL
2 FROM FLASHBACK_TRANSACTION_QUERY
3 WHERE TABLE_NAME = 'T_FLASH_TRANS';
XID OPERATION UNDO_SQL
---------------- ---------- ------------------------------------------------------------------------
01001B00D8120000 INSERT delete from "YANGTK"."T_FLASH_TRANS" where ROWID = 'AAARpjAAGAAADB9AAB';
01001B00D8120000 UPDATE update "YANGTK"."T_FLASH_TRANS" set "NAME" = 'C' where ROWID = 'AAARpjAA
03000D00F40E0000 INSERT delete from "YANGTK"."T_FLASH_TRANS" where ROWID = 'AAARpjAAGAAADB9AAA';
0A001800ED110000 UPDATE update "YANGTK"."T_FLASH_TRANS" set "NAME" = 'A' where ROWID = 'AAARpjAA
SQL> DECLARE
2 V_XID XID_ARRAY;
3 BEGIN
4 V_XID := SYS.XID_ARRAY('0A001800ED110000');
5 DBMS_FLASHBACK.TRANSACTION_BACKOUT(1, V_XID, DBMS_FLASHBACK.CASCADE);
6 END;
7 /
DECLARE
*第 1 行出现错误:
ORA-55505: 在挖掘起始 SCN 后已经对感兴趣的对象完成了 DDL
ORA-06512: 在 "SYS.DBMS_FLASHBACK", line 37
ORA-06512: 在 "SYS.DBMS_FLASHBACK", line 70
ORA-06512: 在 line 5
这个错误很让人迷惑,从错误信息上看,应该是在指定的SCN后发生了DDL语句。
查询一下Oracle的metalink,发现是由于事务与建表DDL时间间隔太段造成的,如果时间间隔超过6秒,则不会出现这个错误。
看来这个问题是继承了LOGMINER的特点。
Metalink的文档Bug No. 5750226对这个问题进行了详细的描述。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69545/,如需转载,请注明出处,否则将追究法律责任。