闪回事务查询:
检索一个事务的所有撤销数据,不考虑它影响了多少对象。关键的视图如下:
SQL> desc flashback_transaction_query
名称 是否为空? 类型
----------------------------------------- -------- ------------------
XID RAW(8)
START_SCN NUMBER
START_TIMESTAMP DATE
COMMIT_SCN NUMBER
COMMIT_TIMESTAMP DATE
LOGON_USER VARCHAR2(30)
UNDO_CHANGE# NUMBER
OPERATION VARCHAR2(32)
TABLE_NAME VARCHAR2(256)
TABLE_OWNER VARCHAR2(32)
ROW_ID VARCHAR2(19)
UNDO_SQL VARCHAR2(4000)
在能够查询它之前必须授权select any transaction.默认情况下,将此权限授予sys和dba角色。
其中:
xid:事务标识符,这是闪回版本查询中显示的versions_xid伪列的连接列
start_scn:事务开始时的系统变更号
start_timestamp:事务开始时的时间戳
commit_scn:提交事务时的系统变更号
commit_timestamp:提交事务时的时间戳
logon_user:执行事务的会话的Oracle用户名
undo_change#:撤销系统变更号,这不大可能与大多数工作相关。
operation:应用到行的DML操作,insert,update或delete
table_name:行所属的表
table_owner:表所属的模式
row_id:受影响的行的唯一标识符
undo_sql:反转操作的结构化语句。例如operation是delete,那么这将是insert
如下:
SQL> update emp set sal=sal*11 where empno=7902;
已更新 1 行。
SQL> commit;
提交完成。
SQL> select ename,sal,versions_xid from emp versions between scn minvalue and
2 maxvalue where empno=7902;
ENAME SAL VERSIONS_XID
---------- ------ ----------------
FORD 33000 06001A00DB060000
FORD 3000
SQL> select operation,undo_sql from flashback_transaction_query where xid=
2 hextoraw('06001A00DB060000');
OPERATION UNDO_SQL
---------- ----------------------------------------
UNKNOWN
BEGIN