一、简单的
(1)检查是否启用了flash recover area
SQL> conn sys/ymhas sysdba;
已连接。
SQL> showparameter db_recover
NAME TYPE VALUE
----------------------------------------------- ----------------
db_recovery_file_dest string D:\oracle\produc
_recovery_area
db_recovery_file_dest_size big integer 5000M
(2)检查是启用了归档
SQL> archive loglist
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 119
下一个存档日志序列 121
当前日志序列 121
(3)检查是否启用了flashback database 和 force logging
SQL> selectflashback_on,force_logging from v$database;
FLASHBACK_ON FOR
---------------------
YES NO
(4)查询当前的SCN
SQL> selectdbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1051174
(5)模拟误操作
SQL> connscott/tiger
已连接。
SQL> drop tableflash_tbl purge;
表已删除。
SQL> drop tabledept purge;
表已删除。
SQL>
SQL> conn sys/ymhas sysdba;
已连接。
SQL> shutdownimmediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startupmount;
ORACLE 例程已经启动。
Total System GlobalArea 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 264244100 bytes
Database Buffers 339738624 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> flashbackdatabase to scn 1051174;
闪回完成。========》全库闪回时可以闪回sys用户的表。
SQL> alterdatabase open;
alter database open
*
第 1 行出现错误:
ORA-01589:要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
=========》为何flashback回来的库需要resetlogs??因为控制文件也被flashback了吗
SQL> alterdatabase open resetlogs;
数据库已更改。
SQL> select * fromscott.flash_tbl;
ID VL
----------------------------------------
201 A1
202 B1
7 PK_DEPT
8 PK_DEPT
9 PK_DEPT
二、可能丢数据的。
SQL> show user
USER 为"SYS"
SQL> selectdbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1051804
SQL> create table scott.s_test(a int);========》在要恢复的SCN后的数据
表已创建。
SQL> insert intoscott.s_test values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> drop table scott.dept;=======》删除一张之前的表
表已删除。
SQL> shutdownimmediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startupmount;
ORACLE 例程已经启动。
Total System GlobalArea 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 272632708 bytes
Database Buffers 331350016 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> flashback database to scn 1051804;==========》mount状态下闪回
闪回完成。
SQL> alter database open read only;====》如果用resetlogs,那么恢复点之后创建的
scott.s_test(a int);就会彻底丢失,因此以只读方式打开。
数据库已更改。
SQL> select * fromscott.dept;======》删除的表存在了
DEPTNO DNAME LOC
------------------------ -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select * fromscott.s_test;======》后面新建的表不存在,因为重做日志没有应用
select * from scott.s_test
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> host exp scott/tiger tables=dept file=d:/dept.dmp===》将被删除的dept表的数据导出
连接到: Oracle Database10g Enterprise Edition Release 10.2.0.1.0 - Production
With thePartitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径...
. . 正在导出表 DEPT导出了 4 行
成功终止导出, 没有出现警告。
SQL> recover database;=====》介质恢复,要重启到mount下
ORA-00283: 恢复会话因错误而取消
ORA-01124: 无法恢复数据文件 1- 文件在使用中或在恢复中
ORA-01110: 数据文件 1:'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF'
SQL> shutdownimmediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startupmount;
ORACLE 例程已经启动。
Total System GlobalArea 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 272632708 bytes
Database Buffers 331350016 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> recover database; ===========》介质恢复
完成介质恢复。
SQL> alter database open;========》正常打开
数据库已更改。
SQL> select * fromscott.dept;=======》因为重做日志被应用,所以该表又被删除了
select * from scott.dept
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from scott.s_test;=======》因为重做日志被应用,所以该表又被创建了
A
----------
1
SQL>host imp scott/tiger tables=dept file=d:/dept.dmp=======》讲dept.dmp导入
Import: Release10.2.0.1.0 - Production on 星期六 7月 30 11:49:19 2011
Copyright (c) 1982,2005, Oracle. All rights reserved.
连接到: Oracle Database10g Enterprise Edition Release 10.2.0.1.0 - Production
With thePartitioning, OLAP and Data Mining options
经由常规路径由EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和AL16UTF16 NCHAR 字符集中的导入
. 正在将 SCOTT 的对象导入到SCOTT
. 正在将 SCOTT 的对象导入到SCOTT
. . 正在导入表 "DEPT"导入了 4 行
成功终止导入, 没有出现警告。
SQL> select * from scott.dept;
DEPTNO DNAME LOC
------------------------ -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
===========》这样处理数据就不会丢失了