ITPub博客

首页 > 数据库 > Oracle > 【数据迁移】XTTS跨平台传输表空间v4

【数据迁移】XTTS跨平台传输表空间v4

原创 Oracle 作者:恩强Boy 时间:2020-07-29 10:30:44 0 删除 编辑

一、  XTTS 概述

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

本文采用xtts v4 版本,并且使用 RMAN 增量备份的方式进行两库之间迁移表空间,以实现最少的停机时间。

二、 规划

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

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

三、  传输限制

ü  主库操作系统不支持windows

ü  xtts v4 版本仅支持 oracle 11.2.0.4 或以上

ü  源库的compatible 参数必须不能比目标库大(向下兼容),因此, XTTS 可以用于升级操作;

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

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

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

ü  源库RMAN 配置不能设置为 BACKUP TYPE TO COPY, 必须配置为 BACKUP TYPE TO BAKCUPSET

ü  源库RMAN 配置不能配置默认通道配置为 SBT

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

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

ü  ASM 只能被用于目标端最终存放路径,这个版本 xtts 不能将备份放在 ASM 上;

ü  目标存放备份的位置,oracle 用户必须有读写权限。

四、  思路清晰

1. 准备阶段

1)  创建表空间0 级备份;

2)  源端传输备份文件到目标端;

3)  以目标端字节格式,还原数据文件到目标端;

2. 前滚阶段

1)  源库创建增量备份;

2)  传输增量备份和必要文件到目标端;

3)  目标端转换增量备份,并应用备份为目标库数据文件;

4)  重复上述操作,直到准备进行最后的表空间传输。

3. 传输阶段

1)  源库中表空间设置为read only

2)  最后一次执行前滚阶段;

3)  目标端使用DataPump 导入元数据对象;

4)  目标库设置表空间为read write

五、  操作步骤

1.  初始化设置阶段

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

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

源库检查用户信息

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 '));

目标库根据上述查询结果进行创建。

3)  解压 rman_xttconvert_VER4.zip /home/oracle/xtts 目录

$ cd /home/oracle/xtts

$ unzip rman_xttconvert_VER4.zip

4)  配置xtt.properties 文件

tablespaces=tbs1,tbs2

platformid=13

src_scratch_location=/home/oracle/xtts/bak

dest_datafile_location=+DATA/ORCL/datafile

dest_scratch_location=/home/oracle/xtts/bak

asm_home=/u01/app/11.2.0/grid

asm_sid=+ASM1

parallel=2

参数说明:

源库、目标库创建目录:

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

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

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

6)  源端和目标端设置TMPDIR

oracle 用户环境变量)

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

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

2.  准备阶段

在这个阶段,源端表空间数据文件会备份,备份会传输到目标端

1)  源端创建备份

执行以下命令

$ perl xttdriver.pl --backup

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

 - 创建备份,并放置在 src_scratch_location 目录中

  - 创建 res.txt 文件,放置在 TMPDIR

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

$ scp res.txt 172.16.70.170:/home/oracle/xtts/

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

注:数据文件要传在目标端 dest_scratch_location 目录中,res.txt 要传在目标端 TMPDIR 中。

3)  目标端还原数据文件

执行以下命令

$ perl xttdriver.pl --restore

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

3. 前滚阶段

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

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

源库执行以下命令

$ perl xttdriver.pl --backup

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

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

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

将上一步骤产生的增量备份集传输到目标端 dest_scratch_location 目录,res.txt 要传在目标端 TMPDIR 中。

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

$ scp res.txt 172.16.70.170:/home/oracle/xtts/

3)  目标端执行以下命令

$ perl xttdriver.pl --restore

目标端给表空间数据文件应用增量备份。

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

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

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 - -backup

注;由于表空间设置为read only ,执行备份会警告:

####################################################################

Warning:

------

Warnings found in executing /home/oracle/xtts/backup_Jul28_Tue_14_33_57_440//xttpreparenextiter.sql

####################################################################

Prepare newscn for Tablespaces: 'TBS2'

DECLARE*

ERROR at line 1:

ORA-20001: TABLESPACE(S) IS READONLY OR,

OFFLINE JUST CONVERT, COPY

ORA-06512: at line 284

3)  传输至目标端

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

$ scp res.txt 172.16.70.170:/home/oracle/xtts/

4)  目标端最后一次应用

$ perl xttdriver.pl --restore

5)  源库导出元数据

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

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

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

7)  目标库导入元数据

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 ;

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

SQL> select tablespace_name,file_name from dba_data_files;

SQL> alter tablespace tbs1 read write;

SQL> alter tablespace tbs2 read write;

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

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

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

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

RMAN> validate tablespace tbs1,tbs2 check logical;

验证数据略

 

 

 

 

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


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

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

注册时间:2018-04-03

  • 博文量
    77
  • 访问量
    143611