设为首页 加入收藏

TOP

Oracle学习(十三):闪回(一)
2015-07-24 12:07:35 来源: 作者: 【 】 浏览:59
Tags:Oracle 学习 十三 闪回

1.知识点:可以对照下面的录屏进行阅读

SQL> --1. 错误地删除了记录
SQL> --2. 错误地删除了表
SQL> --3. 查询历史记录
SQL> --4. 如何撤销一个已经提交的事务
SQL> 
SQL> --闪回的类型
SQL> --1. 闪回表:将表回退到过去的一个时间上
SQL> --2. 闪回删除:Oracle回收站
SQL> --3. 闪回版本查询:所有历史记录
SQL> --4. 闪回事务查询:通过select语句得到一个 undo_sql

SQL> --5. 闪回数据库
SQL> --6. 闪回归档日志
--------------------------------------------------------------------------
需要考虑的事情
FLASHBACK TABLE命令作为单一的事务执行,会得到一个单一的DML锁
表的统计数据不会被闪回
当前的索引和从属的对象会被维持
闪回表操作:1、系统表不能被闪回2、不能跨越DDL操作3、会被写入警告日志4、产生撤销和重做的数据

--------------------------------------------------------------------------
语法:
FLASHBACK TABLE[achema.]
TO
{[BEFORE DROP[RENAME TO table]]
[SCN|TIMESTAMP]expr
[ENABLE|DISABLE]TRIGGERS}
schema:模式名,一般为用户名
TO TIMESTAMP:系统邮戳,包含年月日时分秒
TO SCN:系统更改号
ENABLE TRIGGERS:表示触发器恢复以后为enable状态,而默认为disable状态
TO BEFORE DROP:表示恢复到删除前
RENAME TO table:表示更换表名
--------------------------------------------------------------------------
--SCN:系统改变号(时间)
SQL> select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss*ff') time,
  2         timestamp_to_scn(systimestamp) SCN
  3  from dual;

--scope的取值: momery  spfile  both
--momery:只改当前内存(即数据库),不改参数文件;重启数据库后恢复原样
--spfile:只改参数文件,不改数据库;重启数据库后变为修改后的
--both:数据库,参数都改

--授予闪回权限:grant flashback any table to scott;
--授予事务查询权限:grant select any transaction to scott;

SQL> -- 1.闪回表:将表回退到过去的一个时间上
SQL> flashback table  flashback_table to scn 3784220;

SQL> --开启表的行移动
SQL> alter table flashback_table enable row movement;

SQL> --2.闪回删除
SQL> flashback table testseq to before drop;
SQL> --闪回重名的表
SQL> flashback table testseq to before drop rename to testseq_old;

SQL> --查看回收站,管理员没有回收站
SQL> show recyclebin
SQL> --清空回收站
SQL> purge recyclebin;
SQL> --通过回收站的名字查看表要加双引号
SQL> select * from "BIN$UhseqyX1Reyl5iurpupyEg==$0";

SQL> /*
SQL> 小结:
SQL> 基本概念: 1. SCN   2. 900秒  3. 权限 flashback any tables
SQL> 闪回表:将表回退到过去的一个时间
SQL>          1. 行移动
SQL>          2. 执行闪回表
SQL>         注意: 系统表不能闪回;不能跨越DDL
SQL>         问题: 如何得到离该操作最近的一个时间??
SQL> 闪回删除: Oracle的回收站
SQL>         1. 执行闪回删除
SQL>         2. 通过回收站中的名字闪回(双引号)
SQL>         3. 重名的表
SQL>         4. 触发器(disable)
SQL> */

SQL> --3.闪回版本查询
SQL> --执行闪回版本查询
SQL> select tid,tname,versions_operation 操作,versions_starttime 起始时间,
  2             versions_endtime 结束时间,versions_xid 事务号
  3  from versions_table
  4  versions between TIMESTAMP MINVALUE and MAXVALUE
  5  order by 1,4;

SQL> --4.闪回事务查询
SQL> --视图flashback_transaction_query
SQL> desc flashback_transaction_query

SQL> --得到XID
SQL> select tid,tname,versions_operation 操作,versions_starttime 起始时间,
  2             versions_endtime 结束时间,versions_xid 事务号
  3  from transaction_table
  4  versions between TIMESTAMP MINVALUE and MAXVALUE
  5  order by 事务号;

SQL> --通过XID查询事务信息,再利用undo_sql撤销事务操作
SQL> select operation,undo_sql
  2  from flashback_transaction_query
  3  where xid='080029005C050000';
2.在Sqlplus下实际执行的结果录屏
SQL> host cls

SQL> /*
SQL> 1. 错误地删除了记录
SQL> 2. 错误地删除了表
SQL> 3. 查询历史记录
SQL> 4. 如何撤销一个已经提交的事务
SQL> 
SQL> 闪回的类型
SQL> 1. 闪回表:将表回退到过去的一个时间上
SQL> 2. 闪回删除:Oracle回收站
SQL> 3. 闪回版本查询:所有历史记录
SQL> 4. 闪回事务查询: 通过select语句得到一个 undo_sql
SQL> 
SQL> 5. 闪回数据库
SQL> 6. 闪回归档日志
SQL> */
SQL> --SCN系统改变号(时间)
SQL> select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss*ff') 时间,
  2         timestamp_to_scn(systimestamp) SCN
  3  from dual;

时间                                 SCN                                        
-----------------------
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇oracle性能优化操作一:避免对列.. 下一篇ORACLE11GDataGuard角色转换

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: