如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
目录
定义
术语
方法
用户管理的TSPITR在相同服务器上
用户管理的TSPITR在不同的服务器上
使用RMAN
全自动TSPITR
自定义TSPITR使用自动辅助实例
用户管理辅助实例的TSPITR
定义
表空间时间点恢复(TSPITR)是恢复一个或多个表空间(除system表空间)到一个优先数据库其他部分的时间点.下面的场景说明了什么时候需要使用TSPITR:
- 恢复drop或truncate的表
- 恢复逻辑损坏的表
- 恢复drop 的表空间
- 恢复只影响部分数据库的不正确的批处理作业或DML语句
包括克隆一个新实例/数据库在相同或不同的服务器上使用最少的数据文件,恢复到指定的时间,导出对象,然后移动到主库中.
术语
术语 | 描述 |
TSPITR | 表空间时间点恢复 |
Auxiliary Database or Instance | 从备份中恢复出来的当前数据库的副本,通常在辅助主机上. |
Recovery Set | 主库(源库)上所有需要按时间点恢复的表空间也称作Transportable Tablspase Set (TTS) |
Auxiliary Set | 所有在辅助数据库执行恢复必需要恢复的文件(system,sysaux和undo表空间) |
方法
用户执行TSPITR在相同服务器上
- 查询辅助集文件和你主库需要恢复的表空间的id和名字.
SQL> col file_id head “FID” for 999
col TABLESPACE_NAME for a15 col FILE_NAME for a50 set linesize 100 break on tablespace_name
select TABLESPACE_NAME, FILE_ID,FILE_NAME from dba_data_files order by TABLESPACE_NAME;
askmac.cn |
- 恢复辅助集(system,sysaux,undo)到一个临时位置在同一个服务器上
$ rman target sys/oracle10g@test10g catalog rman/rman@rcvcat10
RMAN> run { set newname for datafile 1 to ‘/u01/tspitr/system.299.708546925’; set newname for datafile 2 to ‘/u01/tspitr/undotbs1.262.725629799’; set newname for datafile 3 to ‘/u01/tspitr/sysaux.298.708546925’; set newname for datafile 6 to ‘/u01/tspitr/t2.318.725626177’; restore controlfile to ‘/u01/tspitr/ctrl01.ctl’; restore datafile 1, 2, 3, 6; } |
- 拷贝主库的ora到临时位置
- 编辑ora然后修改新实例需要的参数
control_files=’/u01/tspitr/ctrl01.ctl’
db_unique_name=’tspitr’ *_dump_dest (optional) log_archive_dest_N (optional) Disable archive log shipment in case of standby |
- 启动临时实例到clone模式
$ export ORACLE_SID=tspitr
SQL> startup nomount pfile=/u01/tspitr/inittspitr.ora SQL> alter database mount CLONE database; askmac.cn |
- 更新(恢复)控制文件指明数据文件和日志文件的新位置/名字
重命名辅助集和需要的数据文件:
SQL> alter database rename file ‘+DATA/test10g/datafile/system.299.708546925’ to ‘/u01/tspitr/system.299.708546925’; SQL> alter database rename file ‘+DATA/test10g/datafile/undotbs1.262.725629799’ to ‘/u01/tspitr/undotbs1.262.725629799’; SQL> alter database rename file ‘+DATA/test10g/datafile/sysaux.298.708546925’ to ‘/u01/tspitr/sysaux.298.708546925’; SQL> alter database rename file ‘+DATA/test10g/datafile/t2.318.725626177’ to ‘/u01/tspitr/t2.318.725626177’;
Online新的数据文件: SQL> alter database datafile ‘/u01/tspitr/system.299.708546925’ online; SQL> alter database datafile ‘/u01/tspitr/undotbs1.262.725629799’ online; SQL> alter database datafile ‘/u01/tspitr/sysaux.298.708546925′ online; SQL> alter database datafile’/u01/tspitr/t2.318.725626177’ online;
Offline不需要的数据文件: SQL> ALTER DATABASE datafile ‘+DATA/test10g/datafile/users.296.708546925’ offline drop; SQL> ALTER DATABASE datafile ‘+DATA/test10g/datafile/t1.268.725626169’ offline drop;
重命名日志文件: SQL> ALTER DATABASE RENAME FILE ‘+DATA/test10g/onlinelog/group_1.294.708547123’ to ‘/u01/tspitr/group_1.294.708547123’; SQL> ALTER DATABASE RENAME FILE ‘+DATA/test10g/onlinelog/group_2.293.708547129’ to ‘/u01/tspitr/group_2.293.708547129’; SQL> ALTER DATABASE RENAME FILE ‘+DATA/test10g/onlinelog/group_3.292.708547133’ to ‘/u01/tspitr/group_3.292.708547133’; |
- 恢复数据库
SQL> recover database using backup controlfile until time ‘2009-04-30:10:03:00’;
或使用rman恢复 RMAN> run { set until time “to_date(‘2009-04-30:10:03:00′,’YYYY-MON-DD:HH24:MI:SS’)”; recover database; } |
- 使用resetlogs打开数据库
SQL> alter database open resetlogs; |
- 导出想要的对象从克隆的数据库,然后导入主库中
- 删除临时实例/数据库
用户执行TSPITR在不同的服务器上
- 从主库拷贝ora上传到目标服务器
scp inittspitr.ora sscnjlnx5:/home/oracle/ray/tspitr |
- 编辑ora然后为新实例修改需要的参数
control_files=’/u02/oradata/tspitr/ctrl01.ctl’
db_unique_name=’tspitr’ (Not Needed) *_dump_dest (optional) log_archive_dest_N (optional) Disable archive log shipment in case of standby |
- 上传备份集到目标服务器并创建软链接
scp * sscnjlnx5:/home/oracle/ray/bkp |
- 如果和源库位置不同,对新的备份集位置创建软链接
– Backup was exist at /u02/backup/test10g on the source host
– Backup was moved to /home/oracle/ray/bkp on the target host ln -s /home/oracle/ray/bkp /u02/backup/test10g |
- 启动临时实例
export ORACLE_SID=tet10g
startup nomount pfile=/home/oracle/ray/tspitr/inittspitr.ora |
- 使用rman nocatalog方式连接临时实例,恢复控制文件并挂载实例
$ rman target / nocatalog
RMAN> restore controlfile to ‘/u02/oradata/tspitr/ctrl01.ctl’ from’/home/oracle/ray/bkp/c-959778546-20100731-00′; RMAN> alter database mount; |
- 恢复辅助/临时数据库
run {
set until time “to_date(‘2008-04-30:10:03:00′,’YYYY-MON-DD:HH24:MI:SS’)”; set newname for datafile 1 to ‘/u02/oradata/tspitr/system.299.708546925’; set newname for datafile 2 to ‘/u02/oradata/tspitr/undotbs1.262.725629799’; set newname for datafile 3 to ‘/u02/oradata/tspitr/sysaux.298.708546925’; set newname for datafile 6 to ‘/u02/oradata/tspitr/t2.318.725626177’; restore datafile 1,2,3,6; # 重命名TSPITR需要的辅助集和数据文件 sql “alter database rename file ”+DATA/test10g/datafile/system.299.708546925” to ”/u02/oradata/tspitr/system.299.708546925””; sql “alter database rename file ”+DATA/test10g/datafile/undotbs1.262.725629799” to ”/u02/oradata/tspitr/undotbs1.262.725629799””; sql “alter database rename file ”+DATA/test10g/datafile/sysaux.298.708546925” to ”/u02/oradata/tspitr/sysaux.298.708546925””; sql “alter database rename file ”+DATA/test10g/datafile/t2.318.725626177” to ”/u02/oradata/tspitr/t2.318.725626177””; # online新的数据文件: sql “alter database datafile ”/u02/oradata/tspitr/system.299.708546925” online”; sql “alter database datafile ”/u02/oradata/tspitr/undotbs1.262.725629799” online”; sql “alter database datafile ”/u02/oradata/tspitr/sysaux.298.708546925” online”; sql “alter database datafile ”/u02/oradata/tspitr/t2.318.725626177” online”; # Offline 不需要的数据文件: sql “ALTER DATABASE datafile ”+DATA/test10g/datafile/users.296.708546925” offline drop”; sql “ALTER DATABASE datafile ”+DATA/test10g/datafile/t1.268.725626169” offline drop”; # 重命名在线日志文件: sql “ALTER DATABASE RENAME FILE ”/u01/tspitr/group_1.294.708547123” to ”/u02/oradata/tspitr/group_1.294.708547123””; sql “ALTER DATABASE RENAME FILE ”/u01/tspitr/group_2.293.708547129” to ”/u02/oradata/tspitr/group_2.293.708547129””; sql “ALTER DATABASE RENAME FILE ”/u01/tspitr/group_3.292.708547133” to ”/u02/oradata/tspitr/group_3.292.708547133””; #恢复辅助数据库直到指定时间跳过不需要的表空间,然后打开: recover database skip forever tablespace t1, users; alter database open resetlogs; } |
- 从克隆的数据库导出想要的对象,然后导入到主库
- 删除临时实例/数据库。
使用RMAN
Rman需要下面这些步骤去执行TSPITR
- RMAN自动创建辅助实例,启动(nomount状态)并连接它
- 离线目标数据库的TTS
- 恢复控制文件到辅助实例
- 恢复辅助实例的辅助集,并恢复TTS到原来的位置或指定的新位置
- 恢复辅助实例到指定的时间,使用resetlogs模式打开
- 从辅助实例导出TTS的字典元数据,然后关闭实例
- 转换目标库的控制文件去指出TTS
- 导入元数据
- 删除辅助实例和辅助集
全自动TSPITR(推荐)
RMAN管理并控制TTS进程的所有方面。然而这种方法保留了AUX。你的需求决定辅助集的位置。你可以控制数据文件的名字和位置。Recovery set (bug 4090065) 在这种方法中RMAN客户端使用下面的参数文件创建辅助实例
初始化参数用于自动实例:
db_name=TEST10G –同源库相同 compatible=10.2.0.3.0 –同源库相同 db_block_size=8192 –同源库相同 db_files=200 –同源库相同 db_unique_name=tspitr_TEST10G_pdts –基于源库的DB_NAME产生的 large_pool_size=1M shared_pool_size=110M #辅助参数文件没用过的 db_create_file_dest=/u02/auxdest –同辅助库数据文件相同 control_files=/u02/auxdest/cntrl_tspitr_TEST10G_pdts.f –基于源库的DB_NAME产生的 askmac.cn |
- 连接RMAN并恢复TTS
$ rman target sys/oracle10g@test10g catalog rman/rman@rcvcat10
注意: RMAN 使用目标库配置的通道去配置辅助实例 RMAN> run { recover tablespace t1, t2 until time “to_date(‘2008-04-30:10:03:00′,’YYYY-MON-DD:HH24:MI:SS’)” auxiliary destination ‘/u02/auxdest’; } 或者 RMAN> run { set newname for datafile 5 to ‘/tmp/t1.dbf’; set newname for datafile 6 to ‘/tmp/t2.dbf’; set newname for datafile 1 to ‘/tmp/system01.dbf’; recover tablespace t1, t2 until time “to_date(‘2008-04-30:10:03:00′,’YYYY-MON-DD:HH24:MI:SS’)” auxiliary destination ‘/u02/auxdest’; } |
- 备份所有的TTS并online
RMAN> backup tablespace t1,t2;
RMAN> sql “alter tablespace t1 online”; RMAN> sql “alter tablespace t2 online”; |
自定义TSPITR使用一个自动辅助实例(推荐)
使用这种方法,必须使用run{SET AUXILIARY INSTANCE PARAMETER FILE TO ‘/?/?..’}告诉RMAN客户端使用什么参数去创建辅助实例,而不是RMAN客户端自动寻找参数文件在$OH/rdbms/admin/params_auxint.ora(默认位置)。如果没发现RMAN使用内存初始化参数(默认值)。参考全自动 “TSPITR”
在这个方法中:
- 你可以使用辅助参数文件控制一些初始化参数
- 你可以使用下面命令去控制数据文件的名字和位置:
SET NEWNAME (1)
CONFIGURE AUXNAME (2)
CONFIGURE AUXNAME FOR DATAFILE ‘n’ TO auxname_’n’;
DB_FILE_NAME_CONVERT (3)
AUXILIARY DESTINATION (4)
例如
RMAN> run {
set auxiliary instance parameter file to ‘/tmp/auxinstparams.ora’; set newname for datafile 1 to ‘/tmp/system01.dbf’; recover tablespace t1, t2 until time “to_date(‘2008-04-30:10:03:00′,’YYYY-MON-DD:HH24:MI:SS’)” auxiliary destination ‘/u02/auxdest’; } |
用户管理辅助实例的TSPITR
在这种方法中,你完全控制辅助实例
- 准备RMAN使用的辅助实例
- 创建密码文件
- 创建参数文件
- DB_NAM
- DB_UNIQUE_NAME
- CONTROL_FILES
- DB_FILE_NAME_CONVERT
- LOG_FILE_CONVERT
- REMOTE_LOGIN_PASSWORDFILE
- DB_BLOCK_SIZE
- 配置网络连接
- 开启并连接辅助实例
SQL> startup nomount pfile=/tmp/inittspitr.ora |
- 执行TSPITR
$ rman target sys/oracle10g@test10g catalog rman/rman@rcvcat10
RMAN> run { # 指定恢复的数据文件的新名字(可选) set newname for datafile 5 to ‘/tmp/t1.dbf’; set newname for datafile 6 to ‘/tmp/t2.dbf’; # 指定辅助集的新名字(可选的) set newname for datafile 1 to ‘/tmp/system01.dbf’;. # 指定磁盘和通道(根据需要尽可能多的) allocate auxiliary channel c1 device type disk; recover tablespace t1, t2 until time “to_date(‘2008-04-30:10:03:00′,’YYYY-MON-DD:HH24:MI:SS’)”= } |
- 备份所有的TTS并online
RMAN> backup tablespace t1,t2;
RMAN> sql “alter tablespace t1 online”; RMAN> sql “alter tablespace t2 online”; |
脚本:
!rm up_new_ctrl.lst
set echo off
set feedback off
SET VERIFY OFF;
set heading off
set pagesize 10000
accept dest default ‘ /tmp’ prompt ‘ Enter the new or Aux datafile/Logfile distination? </tmp> :’
spool up_new_ctrl
select ‘ alter database rename file ‘
||’ ‘ ‘ ‘ ||name||’ ‘ ‘ to ‘ ||’ ‘ ‘ ‘
||’ &dest’ ||’ /’ ||substr(name,instr(name,’ /’ ,-1)+1,vsize(name)-vsize(substr(name,1,instr(name,’ /’ ,-
1)))+1)||’ ‘ ‘ ;’
fr
om v$datafile
where FILE# in (1,2,3,6);
select ‘ alter database datafile ‘ ||’ ‘ ‘ ‘ ||’ &dest’ ||’ /’ ||substr(name,instr(name,’ /’ ,-1)+1,vsize(name)-
vsize(substr(name,1,instr(name,’ /’ ,-1)))+1)||’ ‘ ‘ online ;’
fr
om v$datafile
where FILE# in (1,2,3,6);
select ‘ alter database datafile ‘ ||’ ‘ ‘ ‘ ||name||’ offline drop’ ‘ ;’
fr
om v$datafile
where FILE# not in (1,2,3,6);
select ‘ alter database rename file ‘
||’ ‘ ‘ ‘ ||member||’ ‘ ‘ to ‘ ||’ ‘ ‘ ‘
||’ &dest’ ||’ /’ ||substr(member,instr(member,’ /’ ,-1)+1,vsize(member)-
vsize(substr(member,1,instr(member,’ /’ ,-1)))+1)||’ ‘ ‘ ;’
fr
om v$logfile;
spool off
Comment