Oracle 表空间恢复
为啥要写这个呢,因为之前遇到个场景。操作系统为Solaris的,oracle11.2.0.4。
一个运维把一张关键表drop了。然后发现recyclebin是off的,然后。。然后好像只能从备份里面找了,没有逻辑备份,只有备份到虚拟磁带机的RMAN备份。好吧,问题也不大找个测试机基于时间点恢复,再expdp导入。可是没有Solaris的机器,整个数据库4T,跨平台恢复呢。。也要好长时间。于是想到了表空间恢复,但是出故障后,并没有及时把表空间offline,导致其他的表继续写,然后就尴尬了。后来找的专家用工具修复的。
------------------------------------------------------------------------------------------------------------------------
想了想有个很low思路可行(请不要嘲笑本咸鱼),但可能局限性比较大。
1.先将除了A表(被drop的表)其他的表备份出来(expdp)或者移动到其他表空间。
2.用表空间恢复到指定时间点,找到了A表。
3.再将其他的表再导入表空间。
-------------------------------------------------------------------------------------------------------------------------
记录下表空间恢复步骤(其实我也是抄别人的哈哈哈)。
1.故障表空间offline,实例时open的
2.建立辅助实例恢复
全自动(自动建立辅助实例)
rman target /
RMAN> RECOVER TABLESPACE test01 UNTIL SCN=1002453 auxiliary destination '/home/oracle';
手动(需要建立辅助实例)
rman target / auxiliary sys/oracle@jssdup
run
{
set newname for tablespace test01 to '/home/oracle/data/%b';
set newname for datafile '/u01/app/oracle/oradata/orcl/system01.dbf' to '/home/oracle/data/system01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/sysaux01.dbf' to '/home/oracle/data/sysaux01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf' to '/home/oracle/data/undotbs01.dbf';
set newname for datafile '/u01/app/oracle/oradata/orcl/users01.dbf' to '/home/oracle/data/users01.dbf';
allocate auxiliary channel c1 device type disk;
recover tablespace test01 until scn 1002453;
}
3.然后就OK了。
-----------------------------------------------------------------------------------------------------------------
表空间时点恢复TSPITR原理及步骤
1.自包含检查,也就是检查是否存在依赖性。执行DBMS_TTS.TRANSPORT_SET_CHECK后,查看视图TRANSPORT_SET_VIOLATIONS,如果有记录被返回,则需要先解决依赖。
2.检查是否连接到一个用户管理的辅助实例,否则RMAN将创建一个辅助实例,启动并连接到辅助实例。
3.在目标数据库中将要被恢复的表空间置于脱机状态。
4.对辅助实例使用恢复目标时间之前的控制文件备份来还原控制文件。
5.从恢复集和辅助集中将数据文件还原到辅助实例。还原的数据文件可以存储在你指定的目录中或者是文件的原始目录中(对于恢复集文件)或者在辅助目录中(对于辅助集文件,如果你使用了有auxliary destination参数的recover tablespace命令)。
6.在辅助实例中将数据文件还原和恢复到指定的目标时间点。
7.使用resetlogs选项将辅助实例打开
8.将辅助实例上恢复集表空间置为只读模式
9.使用DataPump从辅助实例导出恢复集表空间产生一个传输表空间dump文件
10.关闭辅助实例
11.从目标实例删除恢复集表空间(即需要进行时点还原的表空间)
12.DataPump程序将使用传输表空间方式将dump文件导入到目标数据库
13.将导入到目标数据库的表空间置为读/写并立即离线
14.删除所有辅助集数据文件
原文:https://blog.csdn.net/leshami/article/details/70670220
-------------------------------------------------------------------------------------------------------------
其实我一直只想做到第8步,然后从辅助实例中expdp导出表A,但是好像一直没办法停下。。。有大佬有办法请告诉我,谢谢!