ORACLE TSPTIR 表空间时间点恢复过程

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638    QQ号:47079569    邮箱:[email protected]

 

目录

定义

术语

方法

用户管理的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在相同服务器上

  1. 查询辅助集文件和你主库需要恢复的表空间的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

 

  1. 恢复辅助集(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;

}

 

  1. 拷贝主库的ora到临时位置
  2. 编辑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

 

  1. 启动临时实例到clone模式
$ export ORACLE_SID=tspitr

SQL> startup nomount pfile=/u01/tspitr/inittspitr.ora

SQL> alter database mount CLONE database;

askmac.cn

 

  1. 更新(恢复)控制文件指明数据文件和日志文件的新位置/名字
重命名辅助集和需要的数据文件:

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’;

 

  1. 恢复数据库
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;

}

 

  1. 使用resetlogs打开数据库
SQL> alter database open resetlogs;

 

  1. 导出想要的对象从克隆的数据库,然后导入主库中
  2. 删除临时实例/数据库

 

 

用户执行TSPITR在不同的服务器上

  1. 从主库拷贝ora上传到目标服务器
scp inittspitr.ora sscnjlnx5:/home/oracle/ray/tspitr

 

  1. 编辑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

 

  1. 上传备份集到目标服务器并创建软链接
scp * sscnjlnx5:/home/oracle/ray/bkp

 

  1. 如果和源库位置不同,对新的备份集位置创建软链接
– 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

 

  1. 启动临时实例
export ORACLE_SID=tet10g

startup nomount pfile=/home/oracle/ray/tspitr/inittspitr.ora

 

  1. 使用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;

 

  1. 恢复辅助/临时数据库
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; }

 

  1. 从克隆的数据库导出想要的对象,然后导入到主库
  2. 删除临时实例/数据库。

 

 

使用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使用的辅助实例
  • 创建密码文件
  • 创建参数文件
  1. DB_NAM
  2. DB_UNIQUE_NAME
  • CONTROL_FILES
  1. DB_FILE_NAME_CONVERT
  2. LOG_FILE_CONVERT
  3. REMOTE_LOGIN_PASSWORDFILE
  • DB_BLOCK_SIZE

 

  1. 配置网络连接

 

  • 开启并连接辅助实例
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


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *