一、启用数据库闪回
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/