ITPub博客

首页 > 数据库 > Oracle > 【数据迁移】XTTS跨平台传输表空间v3(3.DFT方式)

【数据迁移】XTTS跨平台传输表空间v3(3.DFT方式)

原创 Oracle 作者:恩强Boy 时间:2020-07-26 22:00:56 0 删除 编辑

一、  XTTS 概述

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

XTTS 有三种方式:传统方式、 RMAN 增量方式、 DFT 方式( DBMS_FILE_TRANSFER

本文采用DFT 方式进行迁移、 DFT 方式和 RMAN 增量方式思路相同。 DFT 方式会用到 dblink, 并且 xtt.properties 参数会有所不同。

二、 规划

源库使用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. 

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

- 源库表空间自包含检查

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

- 创建目录和 dblink

- 源端上传 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 directory source_dir as '/oradata/ORCL';

目标端创建存放数据库对象的目录(参考目标库最终数据文件存放位置)

SQL> create directory dest_dir as '+DATA/ORCL/datafile';

5)  目标端创建dblink ,参考源端

目标端tnsnames.ora 添加以下内容

XTTS_SOURCE =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.70.178)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = ORCL)

    )

  )

目标端创建dblink ,参考源端

SQL> create public database link xtts_link connect to system identified by oracle using 'XTTS_SOURCE';

6)  源端新建目录/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

7)  编辑xtt.properties 文件

tablespaces= TBS1,TBS2

platformid=13

srcdir = SOURCE_DIR

dstdir=DEST_DIR

srclink=XTTS_LINK

backupformat=/home/oracle/xtts/bakincr

stageondest=/home/oracle/xtts/bak

dstdir =+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

参数说明:

源端创建目录:

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

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

目标端创建目录

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

8)  源端和目标端设置TMPDIR

oracle 用户环境变量)

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

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

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

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

2.  准备阶段

在这个阶段,表空间数据文件会从源库传输到目标库,并且会做一个自动的字节格式的转换。这个步骤只需要做一次。在此阶段,源端数据库可以正常进行访问。

1)  执行以下命令

$ perl xttdriver.pl -S

这个命令会执行以下动作:

 - 确认表空间是 online read write 模式,不包含 offline 数据文件

 - 创建两个文件: xttnewdatafiles.txt,getfile.sql

2)  将第一步产生的两个文件传到目标端

$ scp xttnewdatafiles.txt getfile.sql 172.16.70.170:/home/oracle/xtts/

3)  目标端执行以下命令

$ perl xttdriver.pl -G

当这一步完成,数据文件将会被传输到目标端最终位置,并且被目标库使用。

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)  导入对象数据到目标库

目标端执行一下命令

$ perl xttdriver.pl -e

这个命令会产生一个DataPump 导入模板文件 xttplugin.txt 。根据模板编写导入脚本

impdp system/oracle directory=XTTS_DIR logfile=xtts_imp.log network_link=XTTS_LINK transport_full_check=no transport_tablespaces=TBS1,TBS2 transport_datafiles='+DATA/ORCL/datafile/tbs1.dbf','+DATA/ORCL/datafile/tbs2.dbf'

注:这里的directory 不必指向数据文件目录

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

SQL> select tablespace_name,file_name from dba_data_files;

SQL> alter tablespace tbs1 read write;

SQL> alter tablespace tbs2 read write;

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

RMAN> validate tablespace tbs1,tbs2 check logical;

验证数据略

 

 

 

 

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


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

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

注册时间:2018-04-03

  • 博文量
    76
  • 访问量
    152386