做操作前先备份数据库


RMAN> backup database;




1. 检查是否启动了flash recovery area:  


SQL> show parameter db_recovery_file


NAME                    TYPE        VALUE


------------------------------------  ----------- ------------------------------


db_recovery_file_dest       tring       D:\oracle/flash_recovery_area


db_recovery_file_dest_size  big integer 1G




2. 检查是否启用了归档  


SQL> archive log list;


数据库日志模式      存档模式


自动存档            启用


存档终点            USE_DB_RECOVERY_FILE_DEST


最早的联机日志序列  9


下一个存档日志序列  11


当前日志序列        11




3. 检查是否启用了flashback database  


SQL> select flashback_on from v$database;


FLASHBACK_ON      


------------------  


YES                




4. 查询当前的scn  


SQL> SELECT CURRENT_SCN FROM V$DATABASE;




CURRENT_SCN


-----------


947921




5. 查询当前的时间


SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual;




TIME


-----------------


09-10-14 14:37:05




6. 删除表A


SQL> select * from A;




ID  NAME


---------- ----------


1  tianle


2  dave




SQL> drop table A;


表已删除。


SQL> commit;




7. Flashback Database 实际是对数据库的一个不完全恢复操作,因为需要关闭数据库重启到mount状态。


SQL> shutdown immediate


数据库已经关闭。


已经卸载数据库。


ORACLE 例程已经关闭。


SQL> startup mount


ORACLE 例程已经启动。




Total System Global Area  209715200 bytes


Fixed Size                  1248116 bytes


Variable Size              79692940 bytes


Database Buffers          121634816 bytes


Redo Buffers                7139328 bytes


数据库装载完毕。




8. 执行恢复:分timestamp 或者SCN两种




SQL> Flashback database to timestamp to_timestamp('09-10-14 14:37:05','yy-mm-dd


hh24:mi:ss');


闪回完成。




或者:


SQL> Flashback database to scn 947921;


闪回完成。




9. 打开数据库:


在执行完flashback database 命令之后,oracle 提供了两种方式让你修复数据库:


1). 直接alter database open resetlogs 打开数据库,当然,指定scn 或者timestamp 时间点之后产生的数据统统丢失。


2). 先执行alter database open read only 命令以read-only 模式打开数据库,然后立刻通过逻辑导出的方式将误操作涉及表的数据导出,再执行recover database 命令以重新应用数据库产生的redo,将数据库修复到flashback database 操作前的状态,然后再通过逻辑导入的方式,将之前误操作的表重新导入,这样的话对现有数据的影响最小,不会有数据丢失。




这里演示,就以resetlogs方式打开:


SQL> alter database open resetlogs;


数据库已更改。




验证数据:


SQL> select * from A;




       ID NAME


---------- ----------


        1 tianle


        2 dave



oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html