RMAN 高级恢复(四)--表空间时间点恢复


二、手工执行TSPITR


Oracle 支持为TSPITR 创建自己的辅助实例。 也可以使用手工的TSPITR来完成失败的自动TSPITR操作。 首先,依然是应用前面的准备阶段中列出的步骤,接着必须准备辅助实例,然后执行TSPITR过程。


3.2.1 准备辅助实例


首先,需要启动和运行辅助实例。辅助实例只是RMAN用于执行TSPITR的临时实例。 辅助实例必须驻留在与目标数据库相同的机器中,并且在辅助实例上不能执行任何类型的DML。


在启动TSPITR前,需要准备辅助实例。和普通的数据库实例创建一样。


Windows Oracle 10G手工创建数据库


http://blog.csdn.net/tianlesoftware/archive/2009/10/17/4680230.aspx


   linux 下手工新建数据库


http://blog.csdn.net/tianlesoftware/archive/2009/10/17/4680213.aspx


我们假设创建的辅助实例名是TEST. 操作步骤如下:


(1) 创建口令文件


C:>orapwd file=D:/app/Administrator/product/11.2.0/dbhome_1/database/PWDTEST.ora password=admin


(2) 创建服务


C:/>oradim -new -sid TEST


oradim是创建实例的工具程序名称,-new表明执行新建实例,-delete表明执行删掉实例,-sid指定害例的名称。


(3) 创建参数文件


辅助数据库的参数文件不同于目标数据库所使用的参数文件。辅助实例中应该添加的一些参数如下表:


参数名


可选或必选


说明


Db_name


可选


与目标数据库相同的名称


Lock_name_space


必选


不同于创建辅助实例所在系统上其他数据库名的唯一名称。


Db_file_name_convert


可选


用RMAN还原辅助数据库中的数据文件时,该参数用于为这些数据文件定义一组文件命名转换模式。 它可以代替RMAN的configure auxname命令。


Log_file_name_convert


可选


用RMAN还原辅助数据库中的重做日志时,该参数用于为这些重做日志定义一组命令转换模式。 它可以代替RMAN的set newnameml .


Control_files


必要


这个参数定义了辅助实例控制文件的名称和位置。 辅助实例控制文件的名称应当不同于锁一定位置中已有的其他控制文件名。


Remote_login_passwordfile


可选/必要


用于允许RMAN 通过Oracle networking 服务连接辅助数据库。 要求存在一个当前的口令文件。 如果要本地连接辅助数据库,就不需要设置该参数。


Compatible


必要


必须与目标数据库的设置相同


Db_block_size


可选/必要


如果在目标数据库上设置了该参数,在辅助数据库中也必须设置为同样的参数值。


我们将所有辅助实例都放到F:/TEST目录下,辅助实例的参数如下:


db_name=BL


db_unique_name=TEST


db_block_size=8192


db_cache_size=8388608


timed_statistics=TRUE


shared_pool_size=110M


large_pool_size=1M


compatible=11.2.0.0.0


Background_dump_dest=F:/TEST


Core_dump_dest=F:/TEST


User_dump_dest=F:/TEST


Control_files=F:/TEST/control01.ctl


db_create_file_dest=F:/TEST


log_file_name_convert=('D:/app/Administrator/oradata/bl','F:/TEST');


将该参数保存为initTEST.ora, 存放在F:/TEST/下。


(4) 启动辅助实例,并检查网络连通性


C:/Users/Administrator.DavidDai>set ORACLE_SID=TEST


C:/Users/Administrator.DavidDai>sqlplus /nolog


SQL*Plus: Release 11.2.0.1.0 Production on 星期四 7月 8 15:52:17 2010


Copyright (c) 1982, 2010, Oracle.  All rights reserved.


SQL> conn / as sysdba


已连接到空闲例程。


SQL> startup nomount pfile='f:/test/inittest.ora';


ORA-32006: BACKGROUND_DUMP_DEST initialization parameter has been deprecated


ORA-32006: USER_DUMP_DEST initialization parameter has been deprecated


ORACLE 例程已经启动。


Total System Global Area  163221504 bytes


Fixed Size                  1373236 bytes


Variable Size             146803660 bytes


Database Buffers            8388608 bytes


Redo Buffers                6656000 bytes


SQL>


(5) 执行带有手工辅助实例的TSPITR


用RMAN 连接目标数据库,辅助实例,和恢复目录(如果有)。


还原控制文件,打开辅助实例。


C:/Users/Administrator.DavidDai>set ORACLE_SID=TEST


C:/Users/Administrator.DavidDai>rman target sys/admin@bl auxiliary=/


恢复管理器: Release 11.2.0.1.0 - Production on 星期四 7月 8 16:05:56 2010


Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.


连接到目标数据库: BL (DBID=680066685)


已连接到辅助数据库: BL (未装载)


RMAN>    run


2>      {


3>      set until  time "to_date('2010-7-8 16:23:18','yyyy-mm-dd hh24:mi:ss')";


4>      restore clone controlfile ;


5>      sql clone 'alter database mount clone database';


6>      sql 'alter system archive log current';


7>      }


正在执行命令: SET until clause


启动 restore 于 08-7月 -10


使用通道 ORA_AUX_DISK_1


通道 ORA_AUX_DISK_1: 正在开始还原数据文件备份集


通道 ORA_AUX_DISK_1: 正在还原控制文件


通道 ORA_AUX_DISK_1: 正在读取备份片段 D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/B


L/AUTOBACKUP/2010_07_08/O1_MF_S_723831710_63C2O0HN_.BKP


通道 ORA_AUX_DISK_1: 段句柄 = D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/BL/AUTOBA


CKUP/2010_07_08/O1_MF_S_723831710_63C2O0HN_.BKP 标记 = TAG20100708T162150


通道 ORA_AUX_DISK_1: 已还原备份片段 1


通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:00:02


输出文件名=F:/TEST/CONTROL01.CTL


完成 restore 于 08-7月 -10


sql 语句: alter database mount clone database


sql 语句: alter system archive log current


RMAN>


说明:1. alter system archive log current,它确保用于副本数据库恢复的所有重做都可用。


     2. Sql colne 命令是在副本数据库上执行sql命令


确定并还原数据文件


我们需要还原system,sysaux, undo, temp 表空间,和我们将要还原的表空间,这里是BL 表空间。要注意的是,在我们开始创建辅助实例之前,要将待恢复的表空间设置为offline.


SQL> select file_id,tablespace_name from dba_data_files;


  FILE_ID TABLESPACE_NAME


---------- ------------------------------


        4 USERS


        3 UNDOTBS1


        2 SYSAUX


        1 SYSTEM


        5 BL


SQL> alter tablespace BL offline for recover;


表空间已更改。


RMAN> run


2> {


3> # set requested point in time


4> set until  time "to_date('2010-7-8 16:23:18','yyyy-mm-dd hh24:mi:ss')";


5> # set destinations for recovery set and auxiliary set datafiles


6> set newname for clone datafile  1 to new;


7> set newname for clone datafile  3 to new;


8> set newname for clone datafile  2 to new;


9> set newname for clone tempfile  1 to new;


10> set newname for datafile  5 to  "D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF";


11> # switch all tempfiles


12> switch clone tempfile all;


13> # restore the tablespaces in the recovery set and the auxiliary set


14> restore clone datafile  1, 3, 2, 5;


15> switch clone datafile all;


16> }


说明: set newname for clone 命令确保还原期间正确的命令这些文件。 对数据文件5进行set newname是为还原该数据文件做准备。


打开辅助实例,准备执行TSPITR:


run


{


# set requested point in time


set until  time "to_date('2010-7-8 16:23:18','yyyy-mm-dd hh24:mi:ss')";


# online the datafiles restored or switched


sql clone "alter database datafile  1 online";


sql clone "alter database datafile  3 online";


sql clone "alter database datafile  2 online";


sql clone "alter database datafile  5 online";


# recover and open resetlogs


recover clone database tablespace  "BL", "SYSTEM", "UNDOTBS1", "SYSAUX" delete archivelog;


alter clone database open resetlogs;


}


导出元数据,在导入数据


Exp user/pwd point_in_time_recover=y tablespaces=BL file=tspitr.dmp


Imp user/pwd point_in_time_recover=y file=tspitr.dmp


最后将BL表空间online


Alter tablespace BL online.


操作完成后,别忘了重新备份数据库,及删除辅助实例。


从上面的步骤来看,手工操作和自动步骤是一样的,只不过手工将这些步骤分开了。



三、TSPITR的限制


TSPITR 有许多的限制:


(1)不能还原包含SYS用户特有对象的表空间


(2)不能用TSPITR恢复含有复制主表的表空间


(3)不支持使用快照日志的表空间


(4)不能还原含有回滚段的表空间


(5)如果要恢复的表空间中的对象包含如下对象,则不支持:


Varray


嵌套表


外部文件


此外,TSPITR 不能用于恢复删除的表空间,我们也不能恢复旧的对象统计表。


如果使用不含恢复目录的RMAN,还会存在下面与TSPITR的限制:


(1)在要恢复的点和当前的点之间,目标数据库中撤销和回滚段的当前物理结构必须没有变化。 回滚段在恢复期间不能发生变化。


(2)完成指定表空间的TSPITR后,这个表空间以前的所有备份就不能在用于以后的TSPITR。 这就是TSPITR后的表空间备份操作非常重要的原因,只有再次备份表空间后才能执行下一个TSPITR.


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html