日期:2014-05-16 浏览次数:20518 次
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 数据库装载完毕。
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
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:\DEM