ITPub博客

首页 > 数据库 > Oracle > oracle视图flashback_transaction_query中列operation为unknown

oracle视图flashback_transaction_query中列operation为unknown

Oracle 作者:贺子_DBA时代 时间:2015-02-13 18:05:29 0 删除 编辑
      
        分类:            oracle 经典文献857人阅读评论(0)收藏举报

很多时候在首次使用 视图flashback_transaction_query 执行闪回事务查询是,列operation全是unknown 而且undo_sql 也为空,

SQL> select operation,undo_sql from flashback_transaction_query
  2  where xid=hextoraw('09000E0065060000');

OPERATION            UNDO_SQL
-------------------- ----------------------------------------------------------------------
UNKNOWN
BEGIN

出现这种情况的原因可能有如下两种

一:因为撤销表空间有限,因此flashback_transaction_query视图中只包含一部分事务,对于任何所选事务不再显示在撤销表空间的DML,operation列的值是unknown。

二:使用闪回查询前,必须先启用重做日志流的其他日志记录。重做日志流数据时撤销表空间记录的信息的补充,闪回事务查询时既需要增强的重做信息,也需要撤销表空间的撤销信息。

首先,使用alter database命令,启用对DML更改引用的列值和主键值的日志记录:

SQL> alter database add supplemental log data;

数据库已更改。

SQL> alter database add supplemental log data (primary key) columns;

数据库已更改。

注意,只有对alter database命令之后的DML操作在flashback_transaction_query中列operation和undo_sql才会有相应的值

SQL> update student set snum=200605,add_col='boy in ChengDu' where sid=24;

已更新 1 行。

SQL> commit;

提交完成。

SQL> select operation,undo_sql
  2  from flashback_transaction_query
  3  where xid=hextoraw('01001A00CE040000');

OPERATION            UNDO_SQL
-------------------- ----------------------------------------------------------------------
UPDATE               update "SU"."STUDENT" set "SNUM" = '21', "ADD_COL" = 'null' where ROWI
                     D = 'AAASU1AAEAAAAI9AAA';

BEGIN


另外补充一点,用户在执行闪回事务查询之前,必须为用户授予适当的DBMS_FLASHBACK包上的权限。

grant execute on dbms_flashback to user;

grant select any transaction to user;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29654823/viewspace-1435454/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
10年数据库管理员从业经历,熟悉Oracle、mysql、tidb、oceanbase、redis、 mongodb 、python等技术栈,持有11g ocm 、mysql 5.7 ocp 、tidb 5.0 ptcp、tidb 6.0 ptca、oceanbase obcp等

注册时间:2014-05-12

  • 博文量
    327
  • 访问量
    2149054