前端之家收集整理的这篇文章主要介绍了
Oracle闪回-闪回错误的DML操作,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
闪回
错误的DML操作: 利用还原段(回滚段)中的数据进行恢复。 详情: 1、查看undo_retention参数值:保存时长
sql> show parameter undo_retention; NAME TYPE VALUE ------------------------------------ ----------- ------------- undo_retention integer 900 2、
修改时长为2小时 60*60*2=7200s
sql> alter system set undo_retention=7200; 系统已更改。 注:闪回时长、磁盘空间、效率等多个因素互相影响。 3、
修改数据:scott
用户,
sql> update emp_dump set sal=8888; 4、使用带有versions子句的oracle
查询语句
获取信息 VERSIONS_XID 为事务号
sql> select versions_xid,empno,ename,sal from emp_dump 2 versions between scn minvalue and maxvalue ; VERSIONS_XID EMPNO ENAME SAL ---------------- ----- ---------- --------- 7566 JONES 2975.00 7698 BLAKE 2850.00 7782 CLARK 2450.00 7788 SCOTT 3000.00 7839 KING 5000.00 7902 FORD 3000.00 6 rows selected 5、
提示事务:
sql> commit; 提交完成。 6、查看 数据已经
修改,事务号有数据。
sql> select versions_xid,sal from emp_dump 2 versions between scn minvalue and maxvalue ; VERSIONS_XID EMPNO ENAME SAL ---------------- ----- ---------- --------- 0A000C0062030000 7902 FORD 8888.00 0A000C0062030000 7839 KING 8888.00 0A000C0062030000 7788 SCOTT 8888.00 0A000C0062030000 7566 JONES 8888.00 0A000C0062030000 7698 BLAKE 8888.00 0A000C0062030000 7782 CLARK 8888.00 7566 JONES 2975.00 7698 BLAKE 2850.00 7782 CLARK 2450.00 7788 SCOTT 3000.00 7839 KING 5000.00 7902 FORD 3000.00 12 rows selected 7、使用数据字典flashback_transaction_query查看恢复原来值的语句:
sql> select operation,undo_
sql from flashback_transaction_query 2 where xid=hextoraw('0A000C0062030000'); xid为:6中VERSIONS_XID 8、 恢复前
查询提交事务对应的SCN号:
sql> select operation,start_scn from flashback_transaction_query 2 where xid =hextoraw('0A000C0062030000'); OPERATION START_SCN ---------- ---------- UNKNOWN 2199600592 UNKNOWN 2199600592 UNKNOWN 2199600592 UNKNOWN 2199600592 BEGIN 2199600592 9、使用闪回命令:闪回之前
修改的数据
sql> flashback table scott.emp_dump to scn 2199600592; flashback table scott.emp_dump to scn 2199600592 ORA-08189: 因为未启用行移动
功能,不能闪回表 10、命令启动行移动
功能 sql> alter table scott.emp_dump enable row movement; Table altered 11、闪回:
sql> flashback table scott.emp_dump to scn 2199600592; Done 12、闪回时间点: flashback table scott.emp_dump to timestamp to_timestamp('9:30','hh24:mi')