ITPub博客

首页 > 数据库 > Oracle > 【数据迁移】XTTS跨平台传输表空间v3(2.RMAN增量)

【数据迁移】XTTS跨平台传输表空间v3(2.RMAN增量)

原创 Oracle 作者:恩强Boy 时间:2020-07-26 17:53:57 0 删除 编辑

 

一、  XTTS 概述

XTTS Cross-Platform transport tablespace )意为跨平台传输表空间。 XTTS 实际上是 TTS 的增强功能。 TTS 意为传输表空间,原理是将业务表空间从一个库传到另一个库,以达到数据迁移的目的。 XTTS 则可以支持跨平台字节格式、增量进行传输。(跨平台传输表空间仅支持 oracle 11g 或以上)

XTTS 有三种方式:传统方式、 RMAN 增量方式、 DFT 方式( DBMS_FILE_TRANSFER )。本文演示为 RMAN 增量方式。

二、  规划

源库使用RMAN 增量 xtts 迁移表空间 tbs1 & tbs2 到目标库。整个操作步骤分为准备阶段、前滚阶段、传输阶段。

1.  准备阶段

在准备阶段中,表空间的数据文件副本最终要传输到目标系统(如果跨字节格式需要自动convert )。

在准备阶段中,需要准备一个软件包:rman_xttconvert_v3.zip 。将这个 zip 包解压后,里面会有一个 xttdriver.pl 脚本。脚本功能及参数如下:

2.  前滚阶段

在上一步准备阶段中,数据文件副本已经传输到目标端。在前滚阶段中,将使用增量备份来进行前滚。可以执行多次此步骤,并且每次的增量备份会变得越来越小,目标端应用也会越来越快,直到目标库数据与源库数据同步。

3.  传输阶段

在传输阶段中,被传输的表空间需要被设置为read only 模式,然后在源库做最后一次增量备份,应用到目标库中,让目标库的数据与源库保持一致。然后从源库中使用 Datapump 导出元数据,并导入到目标库中。最后,传输到目标库的表空间需要设置为 read write

三、  传输限制

ü  主库操作系统不支持windows

ü  源库必须在10.2.0.3 版本或以上;

ü  源库的compatible 参数在 10.2.0 或以上;

ü  源库的compatible 参数必须不能比目标库大(向下兼容);

ü  源库必须处于归档模式;

ü  目标库必须在11.2.0.4 或以上;

ü  RMAN 默认设备类型需要配置为 DISK ,且 RMAN 的配置不能设置 COMPRESSED ,如果设置了,可能会报以下错误:

ORA-19994 cross-platform backup of compressed backups different endianess

ü  被传输的表空间必须是online ,并且不存在 offline 数据文件。该表空间必须是 read write

ü  如果表空间是read only 模式,那就没必要使用 RMAN 增量和 DFT 方式迁移了,可以直接用传统 XTTS 方式进行迁移。

四、  思路清晰

1.  初始化设置阶段

- 目标端安装数据库软件并创建数据库

- 源库表空间自包含检查

- 目标库创建用户,赋予权限

- 源端上传 zip 软件包,修改 xtt.properties 配置文件

2.  准备阶段

- 源端创建数据文件副本

- 将数据文件副本传输到目标端

- 目标端转换数据文件副本

3.  前滚阶段

- 源端创建表空间增量备份集

- 将增量备份集传输到目标端

- 转换增量备份集并应用到目标库

- 确定下次增量备份的 SCN

- 重复前滚阶段(可选)

4.  传输阶段

- 源库将表空间设置为 read only

- 源库创建最后一次增量备份集

- 将增量备份集传到目标端,并应用到目标库

- 源库导出元数据

- 目标库导入元数据

- 将表空间设置为 read write

- 坏块验证,数据验证

五、  操作步骤

1.  初始化设置阶段

1)  目标端安装数据库软件并创建数据库,要求字符集和国家集与源库保持一致,并且数据库软件版本不小于源库。

2)  源库表空间自包含检查

SQL> execute dbms_tts.transport_set_check('tbs1,tbs2',true);

SQL> select * from transport_set_violations;

如果上述没结果,那么说明该表空间不存在自包含。

3)  确认目标库创建相应的用户,并赋予权限

源库检查用户信息

SQL> select 'create user '||username||' identified by '||''''||password||''''||';' from dba_users where default_tablespace in(' TBS1 ' , ' TBS2 ');

源库检查角色权限

SQL> select 'grant '||GRANTED_ROLE||' to '||grantee||';' from dba_role_privs where grantee in(select username from dba_users where default_tablespace in(' TBS1 ' , ' TBS2 '));

4)  备库按照上述结果,创建用户及分配权限,示例如下:

SQL> create user TBS1 identified by oracle;

SQL> grant RESOURCE to TBS1;

SQL> grant CONNECT to TBS1;

5)  源端新建目录/home/oracle/xtt 。上传 rman_xttconvert_v3.zip 文件到 xtt 目录下,并赋予权限。

# mkdir /home/oracle/xtt s

# chown -R oracle:dba /home/oracle/xtt s /

oracle 用户解压 zip

$ cd /home/oracle/xtt s /

$ unzip rman_xttconvert_v3.zip

6)  编辑xtt.properties 文件(重要!)

按照下面内容进行修改:

tablespaces= TBS1,TBS2

platformid=13

dfcopydir=/home/oracle/xtts/bak

backupformat=/home/oracle/xtts/bakincr

stageondest=/home/oracle/xtts/bak

storageondest=+DATA/ ORCL /datafile

backupondest=+DATA/ ORCL /datafile

asm_home=/u01/app/ 11.2.0/grid

asm_sid=+ASM 1

parallel= 8

rollparallel= 4

getfileparallel= 4

desttmpdir=/home/oracle/xtts

参数说明:

源端创建目录:

$ mkdir -p /home/oracle/xtts/bakincr

$ mkdir -p /home/oracle/xtts/bak

目标端创建目录

$ mkdir -p /home/oracle/xtts/bak

7)  源端和目标端设置TMPDIR

oracle 用户环境变量)

源库:$export TMPDIR=/home/oracle/xtts

目标库:$export TMPDIR=/home/oracle/xtts

8)  源端将/home/oracle/xtts 下所有文件传给目标端

$ scp /home/oracle/xtts/*  172.16.70.170:/home/oracle/xtts/

2.  准备阶段

在这个阶段,源端传输的表空间数据文件副本会被创建和转换字节格式。并且这些文件会被传输到目标数据库。这个阶段只运行一次即可。

1)  源端运行下面命令

$ perl xttdriver.pl -p

这个命令会产生以下结果:

(注:下述目录都写在xtt.properties 配置文件中)

创建表空间数据文件副本到 dfcopydir 目录下;

确认表空间处于online 模式, read write ;并且不包含离线数据文件;

新建以下两个文件:xttplan.txt,rmanconvert.cmd

2)  传输数据文件副本到目标端

将上一步生成的数据文件副本传输到目标端,数据文件副本位于 dfcopydir 目录下。在目标端数据文件必须存放在 stageondest 目录下。

$ scp * 172.16.70.170:/home/oracle/xtts/bak/

3)  目标端转换数据文件副本

将源端产生的rmanconvert.cmd 传输到目标端 xtts 目录下

$ scp rmanconvert.cmd 172.16.70.170:/home/oracle/xtts/

目标端执行以下命令

$ perl xttdriver.pl -c

这个命令会将 stageondest 目录下的数据文件转换成目标端字节格式。这些文件转换后会被写在 storageondest 目录下。这个命令执行完毕后, stageondest 这里面的数据文件就没用了,可以选择删除。

3.  前滚阶段

在这个阶段中,源库会创建一个增量备份,传输到备库。并且会转换为目标库字节格式,并应用于目标库。这个阶段可以运行多次,每一个成功的增量备份所花的时间应该比之前的要少,并且使目标库的数据与源库更接近。

1)  源库创建表空间的增量备份集

源库执行以下命令

$ perl xttdriver.pl -i

这个命令会对传输的表空间产生一个增量备份集。备份集位于 backupformat 目录下。

并且会产生两个文件:tsbkupmap.txt,incrbackups.txt

2)  传输增量备份集到目标端

将上一步骤产生的增量备份集传输到目标端 stageondest 目录

$ scp `cat incrbackups.txt`  172.16.70.170:/home/oracle/xtts/bak/

3)  转换增量备份集并应用到目标库

源端复制xttplan.txt,tsbkupmap.txt 到目标端。

$ scp xttplan.txt tsbkupmap.txt 172.16.70.170:/home/oracle/xtts/

目标端执行以下命令

$ perl xttdriver.pl -r

如果命令报以下错误,请到 backupondest 去查看是否有备份文件,如果有,忽视这个错误。

Error:

------

No tablepsace entries found

注:

ü  每次做增量的时候,都要复制xttplan.txt tsbkupmap.txt 这两个文件到目标端。

ü  源端xttplan.txt.new 不要做任何复制或改动

ü  目标实例会被关闭和重启

4)  确定下次增量备份的scn

源库运行下面脚本

$ perl xttdriver.pl -s

确定一个新的scn, 记录在 xttplan.txt 文件中。

5)  重复前滚阶段(可选)

如果你需要使目标库更接近源库,则需要重复进行3.1 步骤;如果目标库已经足够接近源库,那就直接进行传输阶段。

4.  传输阶段

在传输阶段,源库需要被设置为read only 模式,目标库会被应用最后一次增量备份。在目标数据文件一致后,将执行一次普通的传输表空间的步骤,从源库导出元数据对象并导入目标库。在此阶段结束之前,源库只能通过 read only 方式访问数据。

1)  源库将表空间设置read only

SQL> alter tablespace tbs1 read only;

SQL> al t er tablespace tbs2 read only;

2)  源库创建最后一次增量备份集,传输、转换、应用到目标库

$ perl xttdriver.pl -i

$ scp `cat incrbackups.txt` 172.16.70.170:/home/oracle/xtts/bak/

$ scp xttplan.txt tsbkupmap.txt 172.16.70.170:/home/oracle/xtts/

3)  目标端最后一次应用

$ perl xttdriver.pl -r

4)  源库导出元数据

SQL> create directory xtts _dir  as '/home/oracle/xtts /bak ';

$ expdp system/oracle dumpfile= x tts.dmp directory=xtts _dir  logfile=expdp_xtts.log transport_tablespaces=tbs1,tbs2 exclude=statistics;

导出其他对象

$ expdp system/oracle directory=xtts _dir  dumpfile=expdp_other_mets.dmp logfile=expdp_other_meta.log content=metadata_only schemas=tbs1,tbs2

5)  将导出的dmp 文件传输到目标端同目录

$ scp * .dmp  172.16.70.170:/home/oracle/xtts/ bak/

6)  目标库导入元数据

SQL> create directory xtts _dir  as '/home/oracle/xtts /bak ';

$ impdp system/oracle dumpfile= x tts.dmp directory=xtts _dir  transport_tablespace=y datafiles='+DATA/orcl/datafile/tbs1_5.dbf','+DATA/orcl/datafile/tbs2_6.dbf';

导入其他对象元数据

$ impdp system/oracle dumpfile=expdp_other_mets.dmp directory=xtts _dir ;

7)  目标库设置表空间read write

SQL> select tablespace_name,file_name from dba_data_files;

SQL> alter tablespace tbs1 read write;

SQL> alter tablespace tbs2 read write;

8)  目标库统计信息手工收集

SQL> exec dbms_stats.gather_schema_stats(ownname => ' tbs1 ',options => 'GATHER AUTO');

SQL> exec dbms_stats.gather_schema_stats(ownname => ' tbs2 ',options => 'GATHER AUTO');

9)  检查物理和逻辑块损坏,并验证数据

RMAN> validate tablespace tbs1,tbs2 check logical;

验证数据略

 

 

 

--------- end ---------

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31529886/viewspace-2707042/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
勤奋,专注和练习

注册时间:2018-04-03

  • 博文量
    76
  • 访问量
    152217