ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 10G的闪回技术

10G的闪回技术

原创 Linux操作系统 作者:xin2v 时间:2009-03-19 14:57:35 0 删除 编辑

1.flash query
需要有flashback any table的系统权限或者是该表的flashback对象权限。
  需要有该表的SELECT, INSERT, DELETE, ALTER权限
  必须保证该表ROW MOVEMENT

A.drop table:
在普通用户下使用 flashback table test to before drop;
但是在sys下面会报错ORA-38305: object not in RECYCLE BIN

如果删除一个表,而不想放到回收站中,可以利用purge选项在drop语句中,如
drop table tablename purge

另外,还有一些需要注意的地方
·drop tablespace tsname including contents时,表空间内的所有对象包括回收站内的对象都将被清除。
·只执行drop tablespace,如果有永久对象将不能执行,如果仅仅是有回收站内的对象,将先清除回收站,然后删除表空间
·如果drop user username cascade时,所有对象将被删除,而且不放入回收站

B.delete/update/insert:
可以使用下列语句查询历史数据,但是超过undo_retention(默认15分钟)的时候就不一定能查到:
SELECT * FROM test AS OF TIMESTAMP
  TO_TIMESTAMP('2009-01-9 09:00:00', 'YYYY-MM-DD HH:MI:SS')WHERE XXX
但是作了truncate等DDL操作用上面的查询就,不能用闪回了
会报ORA-01466: 无法读取数据 - 表定义已更改

执行FLASHBACK TABLE XXXXXXXXXX的时候必须先
alter table test enable ROW MOVEMENT
然后
FLASHBACK TABLE test TO TIMESTAMP TO_TIMESTAMP('2009-01-08 19:37:15', 'YYYY-MM-DD HH24:MI:SS')
多个表都需要flash back就可以
FLASHBACK TABLE test,test1,test2 TO TIMESTAMP TO_TIMESTAMP('2009-01-08 19:37:15', 'YYYY-MM-DD HH24:MI:SS')
  
10g的flashback table有如下特性
  · 在线操作
  · 恢复到指定时间点或者SCN的任何数据.
  · 自动恢复相关属性,如索引,触发器等
  · 满足分布式的一致性
  · 满足数据一致性,所有相关对象将自动一致
  语法为:
  FLASHBACK TABLE test TO TIMESTAMP  TO_TIMESTAMP('2009-01-08 19:37:15', 'YYYY-MM-DD HH24:MI:SS')
  FLASHBACK TABLE test TO SCN 123456;
  FLASHBACK TABLE test TO TIMESTAMP '2009-01-08 19:37:15' ENABLE TRIGGERS;
  其中ENABLE TRIGGERS表示触发器恢复之后为enable状态,而默认为disable状态。
以上的都是可以在线作,因为它使用的undo里面的数据。
C.truncate table 不能恢复,其他对象比如package等就需要flash database了
D.其他操作:
a.
select versions_starttime,versions_endtime, versions_xid,versions_operation
from test versions
between timestamp minvalue and maxvalue
order by versions_starttime
在上述查询中,列 versions_starttime、versions_endtime、versions_xid、versions_operation是伪列,
还有一些伪列,如versions_startscn和versions_endscn显示了该时刻的系统更改号。列versions_xid显示了更改该行的事务标识符
b.某一段时间内的操作
select dummy,versions_starttime,versions_endtime, versions_xid,versions_operation from test 
versions between timestamp to_date('2009-01-09 08:30:00','yyyy-mm-dd hh24:mi:ss') and to_date('2009-01-09 08:30:00','yyyy-mm-dd hh24:mi:ss')

2.Flashback Transaction Query:
select * from FLASHBACK_TRANSACTION_QUERY
必须在SYS用户下执行
里面查询的是undo的SQL,比如删除了一笔数据,里面的就是插入数据的SQL,如果知道v$transaction的xid就可以查到这条undo SQL

3.flash database:
数据不要超过db_flashback_retention_target(默认一天),否则就有可能救不回来。
使用的回闪区域,所以,与下列的参数有关系
db_recovery_file_dest = /oracle/compard/flashbackarea
db_recovery_file_dest_size = 2G
db_flashback_retention_target = 1440


这些参数要事先设置好,否则mount下执行flashback on的时候,会报错误:
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
ORA-38709: Recovery Area is not enabled.

在mount状态下,确认数据库开启到archivelog模式,打开回闪,指令如下:
alter database flashback on;
用下列指令确认数据库是否开启在闪回模式下
select flashback_on from v$database;
如果发现数据库出问题,需要回闪,就可以使用下列指令,将整个数据库回闪到过去某个时刻。
flashback database to timestamp TO_TIMESTAMP('2008-01-08 19:46:15', 'YYYY-MM-DD HH24:MI:SS');
alter database open read only;
看看是否正确,如果不正确,可以退到mount下继续闪回
如果确认恢复的是正确的就是用这条SQL,把数据库打开alter database open resetlogs;

 

试了一下,依次执行下面的这三条SQL都可以成功:

flashback database to timestamp TO_TIMESTAMP('2008-01-14 10:00:15', 'YYYY-MM-DD HH24:MI:SS');
flashback database to timestamp TO_TIMESTAMP('2008-01-14 09:58:34', 'YYYY-MM-DD HH24:MI:SS');
flashback database to timestamp TO_TIMESTAMP('2008-01-14 10:07:15', 'YYYY-MM-DD HH24:MI:SS');

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

上一篇: Oracle RMAN测试
请登录后发表评论 登录
全部评论

注册时间:2009-03-19

  • 博文量
    45
  • 访问量
    64460