Flahsback database

一、启用数据库闪回
1、确定当前模式
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
2、查看恢复区设置(位置/容量)
SQL> show parameter db_recover
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /orahome/flash_recovery_area/
db_recovery_file_dest_size           big integer 2G
SQL>
3、修改闪回时间设置(retention)
SQL> show parameter db_flashback_retention_target
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target        integer     720
SQL> alter system set db_flashback_retention_target=1440;
System altered .
4、重启数据库,启用闪回模式
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area  603979776 bytes
Fixed Size                  1220796 bytes
Variable Size             176164676 bytes
Database Buffers          419430400 bytes
Redo Buffers                7163904 bytes
Database mounted.

SQL> alter database flashback on;
Database altered.
注意:以下情况,不能使用flashback database:
a.控制文件被恢复(restore)或重建(re-create)
b.表空间被删除
c.数据文件被收缩(shrunk),如要闪回,需将此类文件脱机

二、闪回查询
1、Flashback Query
可查看指定时间点(TIMESTAMP或SCN),表中的数据。
   SELECT employee_id,salary FROM employees AS OF TIMESTAMP t1 WHERE employee_id=200;
   SELECT employee_id,salary FROM employees AS OF SCN t1 WHERE employee_id=200;
2、Flashback Versions Query(闪回版本查询)
使用VERSIONS子句,检索指定时间或SCN范围内,数据的更改记录。只检索commit的事务,不检索uncommit的事务。
SELECT * FROM employees VERSIONS BETWEEN TIMESTAMP t1 AND t2;
SELECT * FROM employees VERSIONS BETWEEN SCN t1 AND t2;
3、Flashback Transaction Query(闪回事务查询)
可查询事务所做的修改。
flashback_transaction_query;该视图可查看指定版本的transaction内的修改数据的sql
当特定的事务没有足够的还原数据,FLASHBACK_TRANSACTION_QUERY的OPERATION列中会返回UNKNOWN的行。

三、闪回数据库
启动数据库到mount状态
SQL> shutdown immediate
SQL> startup mount
闪回数据库到指定时间
SQL> flashback database to timestamp to_timestamp ('2011-03-29 17:02:48','yyyy-mm-dd hh24:mi:ss');
  只读模式打开数据库,验证flashbackup
SQL> alter database open read only;
   resetlog截断日志,打开数据库。
   SQL> alter database open resetlogs;
注意:一旦以resetlog方式打开数据库,就无法闪回到resetlog之前的时间点
四、闪回表
1、注意事项
a.可通过授予flashback对象权限或flashback any table系统权限,以允许非表的所有者对表执行flashback
b.必需对要执行flashback的表启用行移动(row movement),否则会报错误ORA-08189: cannot flashback the table because row movement is not enabled
ALTER TABLE employees ENABLE ROW MOVEMENT;
c.不能对系统表执行闪回
d.不能跨越多个DDL操作执行闪回
e.会生成undo(还原)和redo(重做)数据
f.使用flashback可以恢复表及其关联的对象,如索引、约束条件、触发器等。
2、闪回表
通过时间戳执行闪回
SQL> FLASHBACK TABLE hr.employees TO TIMESTAMP TO_TIMESTAMP('2011-03-28 05:32:00','YYYY-MM-DD HH24:MI:SS');
通过SCN执行闪回
SQL> flashback table test01.t1 to scn 3217049;
Flashback complete.

五、闪回删除(flash drop只针对表)
可闪回误删除的表,删除的表可在视图DBA_RECYCLEBIN中查询
1、注意事项
a.system表空间中drop的表不能flashback
b.使用fine-gained auditing或Virtual Private DB的表不能flashback
c.字典管理的表空间中的表不能flashback drop
d.已经从回收站清空(purge)的表,不能flashback drop
e.闪回drop的表,其关联的索引与触发器也同样被恢复。
2、闪回删除的表
SQL> flashback table t to before drop;
3、闪回删除的表,并重命名表
若待闪回的表名与库中现存的表重名,则可在闪回drop时,将表重命名:
SQL> flashback table t to berore drop rename t1;
4、闪回drop的表,其关联的索引也会被恢复,但名字已不是drop之前的名字了。
SQL> create table t(id number);
Table created.
SQL> create index idx_t on t(id);
Index created.
SQL>select * from dba_objetc where wner='TEST01';
OWNER                          OBJECT_NAME
-------------------    -------------------------------------
TEST01                         IDX_T
TEST01                         T 
drop表时,其关联的索引同时被drop
SQL> drop table t;
Table dropped.
SQL> select object_name,original_name,type,related from recyclebin;
OBJECT_NAME                                                 ORIGINAL_NAME                  TYPE 
------------------------------------------------------ -------------------------------- ----------------------
BIN$n73n3F+LxW3gQKjAFwEp2Q==$0               T                                TABLE             
BIN$n73n3F+KxW3gQKjAFwEp2Q==$0            IDX_T                           INDEX           
SQL>
闪回drop的表,其关联的索引也被闪回,但是索引名却是回收站中的名字
SQL> flashback table t to before drop;
Flashback complete.
SQL> select * from dba_objects where wner='TEST01';
OWNER                          OBJECT_NAME
-------------------    -------------------------------------
TEST01                         T 
TEST01               BIN$n73n3F+KxW3gQKjAFwEp2Q==$0 

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

转载于:http://blog.itpub.net/25264937/viewspace-691123/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值