2013年(350)
分类: Oracle
2013-04-25 11:26:25
Flashback database即可以在rman中执行,也可以在sql*plus中执行,其命令格式都是一样的,在这个示例中,我们所有操作都是在sql*plus中执行。
A. 检查是否启动了flash recovery area:
JSSWEB> show parameter db_recovery_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string f:\oracle\oradata\jssweb\recoveryarea\
db_recovery_file_dest_size big integer 2G
B. 检查是否启用了归档
JSSWEB> archive log list;
日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 51
下一个存档日志序列 53
当前日志序列 53
C. 检查是否启用了flashback database和force_logging
JSSWEB> select flashback_on,force_logging from v$database;
FLASHBACK_ON FOR
------------------ ---
YES YES
D. 查询当前的scn
JSSWEB> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
-----------
686384
JSSWEB> select current_scn from v$database;
CURRENT_SCN
-----------
213749
E. 模拟误删除操作
JSSWEB> conn jss/jss
已连接。
JSSWEB> drop table jss_tb1;
表已删除。
JSSWEB> delete jss_tb2 where id>5;
已删除15行。
JSSWEB> select count(0) from jss_tb2;
COUNT(0)
----------
5
JSSWEB> commit;
提交完成。
F. 重新启动到mount状态,然后执行恢复
JSSWEB> conn / as sysdba
已连接。
JSSWEB> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
JSSWEB> startup mount
ORACLE 例程已经启动。
Total System Global Area 343932928 bytes
Fixed Size 1296620 bytes
Variable Size 125830932 bytes
Database Buffers 209715200 bytes
Redo Buffers 7090176 bytes
数据库装载完毕。
JSSWEB> flashback database to scn 686384;
完成。
提示:此处flashback database to timestamp也是一样的,不过你需要估计好恢复到的时间点。
注意此处,在你执行完flashback database命令之后,提供了两种方式让你修复数据库:
第一种直接alter database open resetlogs打开数据库,当然,指定scn或者timestamp时间点之后产生的数据统统丢失。
另一种方式是先执行alter database open read only命令以read-only模式打开数据库,然后立刻通过逻辑导出的方式将误操作涉及表的数据导出,再执行recover database命令以重新应用数据库产生的redo,将数据库修复到flashback database操作前的状态,然后再通过逻辑导入的方式,将之前误操作的表重新导入,这样的话对现有数据的影响最小,不会有数据丢失。
由于是演示过程,为了更简便和快速,我们这里采用方法一中提示的方式,但如果是比较重要的数据库的话,你要采用哪种方式,就需要仔细评估一下了。
G. 打开数据库
JSSWEB> alter database open resetlogs;
数据库已更改。
H. 验证数据
JSSWEB> conn jss/jss
已连接。
JSSWEB> select *from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
JSS_TB1 TABLE
TP TABLE
JSS_TB2 TABLE
JSSWEB> select count(0) from jss_tb2;
COUNT(0)
----------
20
如上,之前的误操作数据均已恢复。
可以看到这个过程非常迅速(当然跟我们操作的数据量小也有很大关系),这甚至都不算是在做恢复,从头到尾,我们都没有执行任何restore,也没有recover的操作,这就是flashback database的优势,速度。
全文完~~~~~~~~~~~
===================================