1、首先,关闭数据库,然后备份所有的数据文件,注意,包括:system表空间的文件,用户表空间的文件、undo表空间的文件。
2、登录数据库,然后,创建一个表data01,并插入数据,提交,显示时间。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1068937216 bytes
Fixed Size 2182592 bytes
Variable Size 675283520 bytes
Database Buffers 385875968 bytes
Redo Buffers 5595136 bytes
数据库装载完毕。
数据库已经打开。
SQL> create table data01 (v int) tablespace data01
2 ;
表已创建。
SQL> insert into data01 select 1 from dual;
已创建 1 行。
SQL> commit;
提交完成。
SQL> select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
TO_CHAR(SYSDATE,YY
-------------------
2014-03-11 04:12:51
3、模拟误操作:truncate 了scott.emp
SQL> truncate table scott.emp;
表被截断。
4、关闭数据库,把数据库启动到mount状态,然后,把刚才备份的文件,也就是truncate之前备份的数据文件,复制到目录下并覆盖原来的文件:
SQL> shutdown;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1068937216 bytes
Fixed Size 2182592 bytes
Variable Size 675283520 bytes
Database Buffers 385875968 bytes
Redo Buffers 5595136 bytes
数据库装载完毕。
5、进行基于time的不完全恢复,恢复到'2014-03-11 04:12:51'这个时间点的状态,注意,必须用resetlogs来打开数据库。
SQL> recover automatic database until time '2014-03-11 04:12:51';
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
6、之所以要这样,是因为把数据库恢复到过去的状态,而联机日志是最新的状态,所以需要重置日志,日志序列号会重新从1开始:
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 d:\demo\archive3
最早的联机日志序列 1
下一个存档日志序列 1
当前日志序列 1
7、测试发现scott.emp数据已经恢复,而创建的data01没有恢复,之所以不能恢复,应该是由于时间点不够精确,导致虽然scott.emp恢复了,但是data01表确没有恢复:
SQL> select count(*) from scott.emp;
COUNT(*)
----------
12
SQL> select * from data01;
select * from data01
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\DEMO\SYSTEM01.DBF
D:\DEMO\SYSAUX01.DBF
D:\DEMO\UNDOTBS1.DBF
D:\DEMO\DATA01.DBF
SQL> alter database begin backup;
数据库已更改。
SQL> host copy d:\demo\system01.dbf d:\demo\backup1\system01.dbf;
已复制 1 个文件。
SQL> host copy d:\demo\sysaux01.dbf d:\demo\backup1\sysaux01.dbf;
已复制 1 个文件。
SQL> host copy d:\demo\undotbs01.dbf d:\demo\backup1\undotbs01.dbf;
系统找不到指定的文件。
SQL> host copy d:\demo\undotbs1.dbf d:\demo\backup1\undotbs1.dbf;
已复制 1 个文件。
SQL> host copy d:\demo\data01.dbf d:\demo\backup1\data01.dbf;
已复制 1 个文件。
SQL> alter database end backup;
数据库已更改。
SQL> alter database backup controlfile to 'd:\demo\backup1\orcl.ctl' reuse;
数据库已更改。
SQL> alter system archive log current;
系统已更改。