`
kiddwyl
  • 浏览: 398983 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

通过Oracle10g的FLASHBACK_TRANSACTION_QUERY指定事务的历史信息

SQL 
阅读更多
在数据库操作中,我们经常会遇到余下情况:
1.莫名其妙数据被DML了,不知道是谁DML的
2.想知道某张表某个时间段中被那个用户操作了什么SQL

以上问题我相信大家都遇到过,当然我们可以通过v$sql、v$sqltext、v$session找到我们需要的答案,我们更加可以通过FLASHBACK_TRANSACTION_QUERY中获得指定事务的历史信息以及Undo_SQL,通过这个UNDO_SQL,我们还可以恢复特定的事务。

--通过flashback version query获得crm_user的XID--
select versions_starttime,  --事务开始时间--
       versions_endtime,    --事务结束时间--
       versions_xid,        --事务ID--
       versions_operation   --事务操作符--
  from crm3x.crm_user versions between timestamp minvalue and maxvalue
order by VERSIONS_STARTTIME

--通过XID得到FLASHBACK_TRANSACTION_QUERY中的UNDO_SQL和LOGON_USER--
SELECT UNDO_SQL,
       LOGON_USER
  FROM sys.FLASHBACK_TRANSACTION_QUERY
WHERE XID in
       (select versions_xid
          from crm3x.crm_user versions between timestamp minvalue and maxvalue);

当然,通过以上方式就可以找到你需要的SQL语句和登录的“罪魁祸首”:)
同样,通过UNDO语句我们还可以撤销该事物
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics