基于表空间的时间点恢复:
适用环境:7×24的系统出现表被丢弃的现象,可以在不影响系统正常运行的情况下对此表空间上的表恢复到删除之前。
要求:1,版本要8i或者以上 2, 此表空间必须是自包含的 3,数据库运行在归档模式下
步骤:做clone数据库
1,客户反映表被误删除,表空间假设为test,则 sql>alter tablespace test offline immediate;(这点很重要)
2,sql>alter database backup controlfile to 'e:oradatabackupctl.ctl';
3,拷贝系统数据文件,test表空间的数据文件,init参数,相应的归档日志,联机日志,还有2中的备份控制文件 到另一环境下;
4,修改init参数
首先修改控制文件,将控制文件修改成我们备份的backupctl.ctl,必须是备份控制文件。如果用非backup命令产生的控制文件在mount的时候将报控制文件为非clone控制文件。
加入以下三行:
db_file_name_convert = 'd:oracleoradatastudy','e:oradatastudy' (将以前的数据文件路径修改成目前的新环境的路径)
log_file_name_convert ='d:oracleoradatastudy,'e:oradatastudy' (同上)
lock_name_space=CLONE (此参数允许如果实例名和先前的数据库的实例名不同的话,仍可以打开数据库)
以上参数db_file_name_convert log_file_name_convert 如果不加的话,在mount数据库的时候要手动讲路径都rename一遍;lock_name_space=CLONE此参数不加的话,在打开数据库的时候会报无法用exclusive模式打开数据库的错误。
5,用指定init启动到nomount ,sql>startup nomount pfile=e:oradatainit.ora
6,mount, sql>alter database mount clone database 这里和正常的mount有些区别,这里的数据文件这时的状态都是offline的,正常的mount都是online的。
7,将系统表空间system,临时表空间temp,需要恢复的表空间test的数据文件online,如果你曾经创建了自己的临时表空间建议先删除,实验中发现创建的临时表空间时如果用的是临时文件在后面exp的时候会报错,可以先删除这样的临时表空间然后继续。
8,恢复到表被删除的时间点,sql>alter database recover until time '2004-03-23:22:22:12';这期间可能可能要把联机日志应用一遍。
9,将联机日志rename到目前新环境下的路径。open,sql>alter database open resetlogs;
10,校验表空间的自包含性,sql>exec dbms_tts.transport_set_check('TEST',TRUE);
然后sql >select * from ts_pitr_check where ts1_name='TEST';如果没有返回行证明是自包含的(对于非自包含的没有去实验,以后补上);
11,cmd>exp 'sys/oracle as sysdba' point_in_time_recover=y tablespaces=test file=e:tspitr.dmp log=e:tspitr.log
12,连接到生产库上sql>alter tablespace test offline for recover;
13,cmd>imp 'sys/oracle as sysdba' point_in_time_recovery=y file=e:tspitr.dmp
14,sql>alter tablespace test online;
测试数据,完成。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-84985/,如需转载,请注明出处,否则将追究法律责任。