RMAN使用备份传输表空间

在Oracle数据库管理手册中创建传输表空间集的方法要求在执行表空间传输期间被传输的表空间要以只读模式打开。相比之下,当RMAN使用备份创建传输表空间集时,不需要访问被传输表空间的联机数据文件。这就消除了要将传输表空间设置为只读模式的操作。结果就是提高了源数据库的可用性,特别是对于很大的表空间更是如此,因为表空间在传输时仍然操作读写状态,而且将表空间设置为只读模式依赖于数据库的负载,可能需要花费很长时间。

使用RMAN创建传输表空间集能让你指定一个目标时间点,SCN或者你恢复窗口中的还原点并且传输数据的时间并不是transport tablespace的时间。例如,如果你的备份保留策略是保证一周的恢复窗口并且想创建传输表空间来报告数据库在每个月最后一天时间的内容,可以使用RMAN在下个月的第一周内的任何时间来完成这个任务。

RMAN的transport tablespace命令被用来从RMAN备份中创建传输表空间集。注意,即使用没有使用RMAN对数据库进行备份,RMAN的transport tablespace命令也仍然能被用来创建传输表空间集。然而,对于传输表空间集所期待的SCN之前必须有传输表空间集所有的数据文件副本,并且为了执行transport tablespace命令使用RMAN的catalog命令将数据文件副本和归档重做日志登记到RMAN的档案库中。当RMAN记录了所有需要的备份和日志后,就可以执行传输表空间。

何时使用RMAN来创建传输表空间集
 在任何需要传输表空间的情况下,只要你有将表空间恢复到指定SCN所需要的数据库备份,都可以使用RMAN的transport tablespace命令来创建它们。

然而在以下两种特殊情况下更好有用:
.使用表空间档案库来创建传输表空间集。例如,数据库中有些表空间用来做季报。使用transport
 tablespace命令来为这些存储在表空间档案库中的生成季报的表空间创建传输表空间集。之后从档案库中被请求的表空间版本被附加到一些其它数据库中来生成报表。

.当准备使用流来使用源数据库同步目标数据库时,必须安装流,为了使用目标数据库及时更新到指定的SCN,两个数据库必须被同步。

--------------------------------------推荐阅读 --------------------------------------

--------------------------------------分割线 --------------------------------------

使用RMAN生成传输表空间集要有以下实例:
1.RMAN客户端
2.源数据库,包含了被传输的表空间
3.源数据库的归档重做日志备份,将用来恢复被传输的表空间
4.辅助实例,由RMAN在源数据库所在主机上创建的实例,用来执行表空间的还原和恢复,如果处成功会清除它
5.辅助集,包含了执行传输表空间所要求的数据文件和其它文件但它们不是恢复集的一部分。辅助集包括:system和sysaux表空间的副本,undo表空间和源数据库中包含 undo段或回滚段的数据文件。辅助实例还有其它相关的文件,比如,控制文件,参数文件和联机重做日志文件,但这些都是辅助集的一部分
6.辅助目录,当执行RMAN的transport tablespace命令时,磁盘上用来存储辅助集文件的目录,比如参数文件,数据文件(除了传输表空间的数据文件之外的数据文件),控制文件和辅助实例的联机重做日志文件。如果传输表空间执行成功,这些文件都会被删除。
 注意:设置辅助目录是可选项,然而,如果没有设置辅助目录,必须确保对所有辅助实例文件,包括所有数据文件,联机重做日志文件都使用辅助实例参数来指定存储目录,Oracle建议使用辅助目录来简化transport tablespace命令。
7.表空间目录,存储数据文件副本和表空间传输命令完成后的输出文件的磁盘目录。
8.传输集,包含了被传输表空间的数据文件和用于在目标数据库附加表空间的导出dump文件(通常是使用Data Pump导出)。
9.用于在目标数据库附加表空间的示例导入脚本(由RMAN生成)和Data Pump导出的日志文件。

RMAN使用备份执行传输表空间的操作步骤
1.在启动阶段,RMAN会构建一个辅助实例。首先RMAN会为辅助实例自动创建参数文件,并将辅助实例启、动到nomount状态。然后,RMAN使用源数据库的控制文件备份还原辅助实例控制文件并加载控制文件。

2.当辅助实例控制文件被加载后,RMAN就会使用源数据库备份,辅助目录中的辅助数据文件和表空间目录中的传输集文件来还原辅助实例和传输集数据文件。RMAN然后在辅助实例中执行switch操作,因此辅助实例使用还原的数据文件作为辅助实例的数据文件。

RMAN对辅助实例执行数据库按时间点还原。这将辅助集和传输集数据文件中的内容更新到transport tablespace命令所指定目标时间点。(如果没有指定目录时间就是执行完全恢复)。执行transport tablespace命令时间会使用备份将需要的归档重做日志文件还原到辅助目录中(或其它目录中)并在应用给辅助实例之后将其删除。

一旦恢复完成,RMAN会对辅助实例执行open resetlogs操作。这时数据文件反映了表空间在传输表空间操作所指定的目标时间点的内容。

3.辅助实例的恢复集表空间将会被设置为只读模式,并且调用Data Pump来为恢复集表空间生成dump文件缺省情况下,生成的dump文件存储在表空间目录中,也可以指定dump文件目录。

在这时RMAN也生成了用于在目标数据库中附加传输表空间的Data Pump导入的示例脚本。脚本内容将被写入到一个名叫impscript.sql的文件中,并且存储在表空间目录中。这个脚本的命令也被包含在RMAN的transport tablespace命令的输出信息中。

如果所有操作都执行成功,RMAN会关闭辅助实例并删除除了传输集文件之外的,transport tablespace命令生成的所有文件,Data Pump导出日志和示例导入脚本。

注意:transport tablespace失踪不会自动地对恢复集数据文件进行字节序的转换。如果需要,在创建传输集后将数据文件转换为目标数据库的字节序。导入的示例脚本是假设要被附加到目标数据库的传输表空间的数据文件的存储目录与transport tablespace操作创建这些文件的目录相同。如果这些文件在表空间被附加之前移动到新的磁盘目录中,必须修改示例脚本指向新的目录。

RMAN transport tablespace命令的限制
 使用RMAN创建传输表空间有以下限制:
1.必须对transport tablespace操作将数据库恢复到指定目标时间点所有需要的表空间(包括辅助集中的表空间)和归档重做日志进行备份。

2.因为RMAN在使用备份创建传输表空间的过程中会使用到Data Pump导出和导入工具,如果被传输的表空间使用XMLTypes就不能使用RMAN进行操作。在这种情况下必须使用Oracle管理手册中介绍的方法

3.因为RMAN会在与源实例相同的主机上自动创建辅助实例来还原和恢复,在执行transport tablespace命令时会有些性能开销。

4.如果删除了一个表空间,即使transport tablespace命令指定的SCN早于表空间被删除时的SCN,也不能将被删除的表空间包含在transport tablepsace命令的传输表空间集中。

5.如果对表空间重命名后,不能使用transport tablespace命令来创建表空间集的目标时间不能早于表空间被删除的时间(RMAN有关于表空间之前的名字)。

6.不能传输传表没有相关约束的表或者没有相关表的约束

7.传输集和辅助集数据文件可以包含以下任何对象:
--复制主表
--部分表
-有varray列,嵌套表或外部文件的表
--快照日志和快照表
--包含undo或回滚段的表空间
--包含属于SYS用户对象加,回滚段的表空间

如果不使用恢复目录执行transport tablespace还有以下两个限制:
1.如果使用过去某个时间点的表空间内容来创建传输集,那么执行transport tablespace命令时表空间集所使用的undo段与传输时所选择的表空间所使用的undo段必须相同。包含transport tablespace命令所指定目标SCN所需要的undo段的表空间是辅助集的一部分。不像恢复目录,控制文件中的RMAN档案库只包含在当时包含undo段的表空间记录。如果表空间要使用的undo段与指定的目标时间要使用的不同,那么transport tablespace命令将会失败。

2.如果数据库已经重用了RMAN档案库中包含transport tablespace操作所需要的备份记录信息,那么因为RMAN不能定位需要的备份而造成操作失败。如果备份仍然可用,可以使用catalog命令将需要的备份登记到RMAN档案库中,但如果数据库已经覆盖了控制文件中的备份记录那么可能要丢失需要的备份记录信息。

使用RMAN创建传输表空间集的操作过程

使用RMAN传输表空间的基本操作
1.确认源数据库与目标数据库所在平台是不是传输表空间所支持的操作系统平台。
 确认源数据库操作系统平台:
SQL> select d.platform_name,endian_format from v$transportable_platform tp,v$database d
  2  where tp.platform_name=d.platform_name ;

PLATFORM_NAME                                                                                        ENDIAN_FORMAT
----------------------------------------------------------------------------------------------------- --------------
Linux IA (32-bit)                                                                                    Little


确认目数据库操作系统平台:
SQL> select d.platform_name,endian_format from v$transportable_platform tp,v$database d
  2  where tp.platform_name=d.platform_name ;

PLATFORM_NAME                                                                                        ENDIAN_FORMAT
----------------------------------------------------------------------------------------------------- --------------
Linux IA (32-bit)                                                                                    Little


这里操作系统平台都是Linux

2.确认要被传输的表空间是否是自包含表空间(TSPITR,TEST):
SQL> exec sys.dbms_tts.transport_set_check('TSPITR',true);

PL/SQL procedure successfully completed.


SQL> exec sys.dbms_tts.transport_set_check('TEST',true);

PL/SQL procedure successfully completed.

SQL> select * from sys.transport_set_violations;

no rows selected

 

如果没有行选择,表示该表空间只包含表数据,可以传输。

记录表空间传输前表tspitr与test中的记录:
SQL> conn tspitr/tspitr
Connected.
SQL> select count(*) from tspitr;

  COUNT(*)
----------
    50641

SQL> conn test/test
Connected.
SQL> select count(*) from test;

  COUNT(*)
----------
    50680


3.对源数据库执行备份,在执行备份时一定要加上include current controlfile否则执行transport tablespace命令时会出现以下错误信息:
Automatic instance removed
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of tranport tablespace command at 03/26/2015 20:24:22
RMAN-03015: error occurred in stored script Memory Script
RMAN-06026: some targets not found - aborting restore
RMAN-06024: no backup or copy of the control file found to restore

[oracle@oracle11g admin]$ export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
[oracle@oracle11g admin]$ rman target sys/zzh_2046@test  catalog rman/rman@jy

Recovery Manager: Release 10.2.0.5.0 - Production on Thu Mar 26 20:01:33 2015

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

connected to target database: TEST (DBID=2168949517)
connected to recovery catalog database

RMAN> backup as backupset database include current controlfile plus archivelog;


Starting backup at 2015-03-26 20:32:19
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=68 recid=75 stamp=875286167
input archive log thread=1 sequence=69 recid=76 stamp=875291999
input archive log thread=1 sequence=70 recid=77 stamp=875302397
input archive log thread=1 sequence=71 recid=78 stamp=875308491
input archive log thread=1 sequence=72 recid=79 stamp=875350203
input archive log thread=1 sequence=73 recid=80 stamp=875351397
input archive log thread=1 sequence=74 recid=81 stamp=875390545
input archive log thread=1 sequence=75 recid=82 stamp=875390643
input archive log thread=1 sequence=76 recid=83 stamp=875391627
input archive log thread=1 sequence=77 recid=84 stamp=875391661
input archive log thread=1 sequence=78 recid=85 stamp=875391764
input archive log thread=1 sequence=79 recid=86 stamp=875392340
channel ORA_DISK_1: starting piece 1 at 2015-03-26 20:32:22
channel ORA_DISK_1: finished piece 1 at 2015-03-26 20:32:29
piece handle=/u02/ora_test875392341_991 tag=TAG20150326T203220 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:08
Finished backup at 2015-03-26 20:32:29

Starting backup at 2015-03-26 20:32:29
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=/u01/app/oracle/oradata/test/system01.dbf
input datafile fno=00003 name=/u01/app/oracle/oradata/test/sysaux01.dbf
input datafile fno=00005 name=/u01/app/oracle/oradata/test/example01.dbf
input datafile fno=00006 name=/u01/app/oracle/oradata/test/tspitr01.dbf
input datafile fno=00002 name=/u01/app/oracle/oradata/test/undotbs01.dbf
input datafile fno=00004 name=/u01/app/oracle/oradata/test/users01.dbf
input datafile fno=00007 name=/u01/app/oracle/oradata/test/test01.dbf
channel ORA_DISK_1: starting piece 1 at 2015-03-26 20:32:30
channel ORA_DISK_1: finished piece 1 at 2015-03-26 20:33:45
piece handle=/u02/ora_test875392350_1001 tag=TAG20150326T203229 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:15
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
channel ORA_DISK_1: starting piece 1 at 2015-03-26 20:33:46
channel ORA_DISK_1: finished piece 1 at 2015-03-26 20:33:47
piece handle=/u02/ora_test875392425_1011 tag=TAG20150326T203229 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 2015-03-26 20:33:47

Starting backup at 2015-03-26 20:33:47
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=80 recid=87 stamp=875392427
channel ORA_DISK_1: starting piece 1 at 2015-03-26 20:33:49
channel ORA_DISK_1: finished piece 1 at 2015-03-26 20:33:50
piece handle=/u02/ora_test875392428_1021 tag=TAG20150326T203348 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 2015-03-26 20:33:50

Starting Control File and SPFILE Autobackup at 2015-03-26 20:33:50
piece handle=/u02/c-2168949517-20150326-07 comment=NONE
Finished Control File and SPFILE Autobackup at 2015-03-26 20:33:54

相关推荐