XTTS跨平台迁移

XTTS 跨平台迁移

——停机时间少,可跨平台进行数据迁移

 

-------------------------------------------------------------------------------------------------------------------

                          跨版本   跨平台停机时间           场景

数据泵            支持         支持  48小时          数据量较小,或者停机时间没有要求。

GoldenGate  支持         支持   1小时              没有特殊类型的对象,基本没有DDL操作,对rowid变化没

                                                                                        有要求。

XTTS                支持         支持  3-4小时          有一定停机时间,元数据数量可控的系统。

http://blog.itpub.net/31401161/viewspace-2144824/

 

XTTS两种迁移方式:dbms_file_transfer(版本11.2.0.4以上)rman方式(版本10.2.0.4以上)

XTTS目标端必须是linux,可通过per语言更改xtts脚本,-----------需验证

https://mp.weixin.qq.com/s?__biz=MjM5MDAxOTk2MQ==&mid=2650274770&idx=1&sn=e8670b4145f056b7b87ad9956ab24a7e&chksm=be4863c4893fead22c42c48f6b1cff8899aaee298deff52cda60ff002193d93d91372b692ee4&scene=21#wechat_redirect

1、使用前的检查项:

 

检查项

备注

版本

保持一致,源端版本高于10.2.0.4,目标端版本不能低于源端

安装补丁情况

目标端安装到最新的PSU

时区

保持一致

字符集

保持一致

安装组件情况

保持一致

索引组织表

如果有使用key compression的索引组织表,必须在目标端安装补丁,Bug 14835322

rman是否开启压缩特性

关闭压缩特性

检查源端是否有 Cluster 对象

迁移后可能需要分析并重建聚簇索引,或是打补丁,bug 17866999

sys,system用户是否有对象在业务表空间

sys.system拥有的对象不会被xtts迁移到目标端,需要重建

业务对象是否存在于system,sysaux表空间

需要SYSTEM,SYSAUX表空间不会被导出,需要手工导出或重建

*应用是否使用了oracle自带用户

oracle自带用户默认使用system,sysaux表空间,而这两个表空间不会被导出

临时表空间

是否有业务用户在里面创建了临时表,如果有需要在目标端手工重建

检查compatible参数

源端大于10.2.0.4,目标端不低于源端

表空间是否是自包含

如果存在不包含于导出表空间的对象,需要手工重建

外部表

无法导出外部表,需要手工重建

检查物化视图

除非组成物化视图的所有对象都在迁移的表空间中,否则无法导出物化视图

回收站

清空回收站

检查表空间和数据文件状态

必须是在线,可读写

Advanced Queues检查

业务用户是否使用stream或是AQ,不支持8.0-compatible advanced queues with

multiple recipients

基于XMLSchema的XMLType对象检查

可能存在bug,10gr2需要使用exp,imp,11gr2使用expdp,impdp

检查Opaque Types类型字段

这些类型对象可以被迁移,但是不会自动转换字节序,需要从程序上修改

SPATIAL空间组件对象检查

空间索引无法传输

是否存在应用户使用TSTZ字段

如果数据库版本低于11.2.0.2,目标端和源端的timezone文件版本必须一致

检查表空间是否加密

无法传输加密的表空间到不同字节序的平台

检查是否存在加密字段

有某一列加密的表也无法传输到不同字节序的平台

BLOCK CHANGE TRACKING 块跟踪是否开启

如果需要开启,需要在源端安装补丁,Bug 16850197

统计对象

各个用户下对象总数,失效对象

统计索引

各个用户下索引,是否有失效索引

统计约束

各个用户下约束,是否有失效约束

dblink

如果目标端ip不和源端配置一样,需要在迁移后修改

tnsname.ora

如果目标端ip不和源端配置一样,需要在迁移后修改

用户,用户密码,角色,权限,默认表空间,profile

在进行导入前需要在目标端创建所需用户

检查需要迁移的永久表空间

查询表空间大小,得到迁移表空间列表

 

2、XTTS基本步骤:

 

A、将源端数据文件传输到目标系统。

B、转换数据文件为目标系统的字节序。

C、在源端创建增量备份,并传输到目标端。

D、在目标端恢复增量备份。

E、重复多次操作C和D步骤。

F、将源端数据库表空间设置为READ ONLY模式。

G、最后一次执行C和D步骤。

H、在源端导出元数据,并在目标端导入。

I、将目标端的数据库表空间设置为READ WRITE。

 

3、迁移前准备

     1.在目标端安装数据库软件

      2.安装源端要求安装数据库(版本、字符集)

      3. 上传xtts工具,创建相关目录

         上传软件包到源端

 [oracle@xiaoai-20_43_13data01]$ mkdir -p /data01/oradata/xtts       --创建xtts源端导出目录

[oracle@xiaoai-20_43_13data01]$ mkdir -p /data01/oradata/xtts_back  --创建xtts源端导出增量备份目录

 

-bash-3.00$ mkdir-p /data3/oradata01/dxtts                                         --创建目标端存放从源端传来文件的目录

-bash-3.00$ chown-R oracle:dba /data3/oradata01/

-bash-3.00$ mkdir-p /data3/oradata01/targetdb                                    --创建最后转换完毕,数据库文件存放的位置

-bash-3.00$ mkdir-p /data3/oradata01/dxtts_back                                 --创建目标端转换增量备份的目录

      4.进行迁移前检查

检查是否需要安装补丁

需要修改的参数

确认有哪些对象无法迁移需要手工重建

需要提前在目标端创建所需用户

4、初始化迁移

      1.设置XTTS的配置文件

[oracle@xiaoai-20_43_13data01]$ vi xtt.properties

tablespaces=TEST0608,TEST0608_B       --要导出的表空间

platformid=13          --源端平台号,select* from v$transportable_platform order by platform_id; 查询

srcdir=SOURCEDIR1,SOURCEDIR2  --使用数据泵导入原数据,network_link方式,如果使用imp/exp方式,则不需要该参数)

dstdir=DESTDIR1,DESTDIR2   --使用数据泵导入原数据,network_link方式,如果使用imp/exp方式,则不需要该参数)

srclink=TTSLINK                               --perl xttdriver.pl -e命令生成impdp迁移脚本使用)

dfcopydir=/data01/oradata/xtts        --源端初始化导出目录

backupformat=/data01/oradata/xtts_back      --源端导出增量备份目录

stageondest=/data3/oradata01/dxtts                 --目标端存放从源端传来文件的目录

storageondest=/data3/oradata01/targetdb  --最后转换完毕,数据库文件放的位置

backupondest=/data3/oradata01/dxtts_back --目标端转换增量备份的目录

cnvinst_home=/data3/app/oracle/product/10.2.0/db_1  --中转实例和中转实例的家目录

cnvinst_sid=test

parallel=16                            --并发数

rollparallel=2                         --在目标端应用并发数

注:使用rman方式数据迁移srcdirdstdirsrclink三个参数不指定,注释

SQL> set linesize 10000;

SQL> col PLATFORM_NAME for a50;

SQL> select * from v$transportable_platform order by platform_id;

PLATFORM_ID PLATFORM_NAME                                     ENDIAN_FORMAT

----------- ----------------------------------------------------------------

          1 Solaris[tm] OE(32-bit)                            Big

          2 Solaris[tm] OE(64-bit)                            Big

          3 HP-UX(64-bit)                                    Big

          4 HP-UX IA(64-bit)                                 Big

          5 HP Tru64 UNIX                                      Little

          6 AIX-Based Systems(64-bit)                         Big

          7 Microsoft WindowsIA (32-bit)                      Little

          8 Microsoft WindowsIA (64-bit)                      Little

          9 IBM zSeries BasedLinux                            Big

         10 Linux IA(32-bit)                                 Little

         11 Linux IA(64-bit)                                 Little

         12 Microsoft Windowsx86 64-bit                       Little

         13 Linux x86 64-bit                                   Little

         15 HP Open VMS                                        Little

         16 Apple Mac OS                                       Big

         17 Solaris OperatingSystem (x86)                     Little

         18 IBM Power BasedLinux                              Big

         19 HP IA OpenVMS                                    Little

         20 Solaris OperatingSystem (x86-64)                  Little

 

     2.源端导出全部数据文件

源端开始导出数据前确认ORACLE_HOME,ORACLE_SID

echo $ORACLE_HOME

echo $ORACLE_SID

 

export $TMPDIR=/data01/xtts

export TMPDIR=/data01/xtt

export PERL5LIB=$ORACLE_HOME/perl/lib

cd /data3/

 

$ORACLE_HOME/perl/bin/perl xttdriver.pl -p

 

此脚本调用的是rman backupcopy功能,会在dfcopydir生成和原文件大小一样的备份文件。

[oracle@xiaoai-20_43_13xtts]$ ll /data01/oradata/xtts

总用量 512024

-rw-r----- 1oracle oinstall 209723392 6月  12 11:22 TEST0608_7.tf

-rw-r----- 1oracle oinstall 314580992 6月  12 11:22 TEST0608_B_8.tf

*** 在源端/data01/xtts目录下生成 rmanconvert.cmd xttplan.txt  xttnewdatafiles.txt三个文件 ***

 

     3.复制数据到目标端

 

要复制$TMPDIRrmanconvert.cmd和dfcopydir 下面所有文件

 

scp root@10.20.43.13:/data01/xtt/rmanconvert.cmd   /data3/xtt

scp root@10.20.43.13:/data01/oradata/xtts/*   /data3/oradata01/dxtts

 

注意:由于本次Oracle用户没有密码,故用root用户,若有Oracle密码或xtt目录建在Oracle家目录下则用Oracle用户

       4.目标端转换源端传来的数据文件(字节序转换)

 

--需要使用11g的rman转换文件

source ~/.bash_profile11g

export $TMPDIR= /data3/xtt

echo $ORACLE_HOME

echo $ORACLE_SID

export TMPDIR= /data3/xtt

export PERL5LIB=$ORACLE_HOME/perl/lib

 

$ORACLE_HOME/perl/bin/perl xttdriver.pl -c

 

转换完成后可在storageondest目录下看到所有源端的数据文件,由于缺少表空间元数据所以还无法在目标端数据库查询到这些表空间。

 

5、生成增量备份

        

     1.源端生成增量份

 

echo $ORACLE_HOME

echo $ORACLE_SID

 

export $TMPDIR=/data01/xtts

export TMPDIR=/data01/xtt

export PERL5LIB=$ORACLE_HOME/perl/lib

 

$ORACLE_HOME/perl/bin/perl xttdriver.pl -i

        

      2.复制产生的增量数据文件到目标端

 

         $TMPDIRxttplan.txt tsbkupmap.txt

backupformat 下面所有文件,或者查看incrbackups.txt

 

scp `cat $TMPDIR/incrbackups.txt`oracle@10.20.43.13:/data3/oradata01/dxtts

scp oracle@10.20.43.13:/data01/xtt/xttplan.txt  /data3/xtt

scp oracle@10.20.43.13:/data01/xtt/tsbkupmap.txt  /data3/xtt

      3.目标端应用增量备份

 

source ~/.bash_profile

echo $ORACLE_HOME

echo $ORACLE_SID

export TMPDIR=/data3/xtt

export PERL5LIB=$ORACLE_HOME/perl/lib

cd /data3/xtt

 

$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

 

     4.源端在下次增量备份前计算SCN

         如果还有下次增量备份,需要执行脚本求文件下次增量备份开始的scn

$ORACLE_HOME/perl/bin/perl xttdriver.pl -s

 

生成的xttplan.txt文件中会记录下次要从哪个scn开始增量备份

 

为了尽量缩短停机时间,可以多次执行增量备份并应用。

 

6、执行最后一次增量备份

 

1.停业务,监听,将表空间设置为只读模式

 

2.源端执行最后一次增量备份并在目标端应用

--在源端做增量备份

$ORACLE_HOME/perl/bin/perl xttdriver.pl -i

 

--传输备份文件到目标端

cd $TMPDIR

scp `cat incrbackups.txt`oracle@10.20.43.13:/data3/oradata01/dxtts

 

--目标端获取增量备份记录文件

scp oracle@10.20.40.13:/data01/xtt/xttplan.txt  /data3/xtt

scp oracle@10.20.40.13:/data01/xtt/tsbkupmap.txt   /data3/xtt

 

--目标端应用增量备份

source ~/.bash_profile

echo $ORACLE_HOME

echo $ORACLE_SID

export TMPDIR=/data3/xtt

export PERL5LIB=$ORACLE_HOME/perl/lib

cd /data3/xtt

pwd

 

$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

 

7、传输表空间

 

传输表空间的步骤可以和最后一次增量备份同时执行,可开并行

 

方法1:

--目标端执行,得到impdp脚本

$ORACLE_HOME/perl/bin/perl xttdriver.pl –e

 

impdp \'/ as sysdba\' directory=ddmp logfile=impdp_xtts_20180527.lognetwork_link=TEST \

transport_full_check=no \

transport_tablespaces=TEST,TEST_IND \

transport_datafiles='/data3/oradata/targetdb/TEST_5.dbf','/data3/oradata/targetdb/TEST_IND_6.dbf'

 

方法2:

--手工导出导入表空间

源端

expdp \'/ as sysdba\' directory=sdmp dumpfile=xtts.dmplogfile=expdp_xtts_20180527.log transport_tablespaces=TEST,TEST_INDtransport_full_check=no;

 

复制导出的文件到目标端

 

目标端

impdp \'/ as sysdba\' directory=ddmp dumpfile=xtts.dmplogfile=impdp_xtts_20180527.logtransport_datafiles='/app/oradata/targetdb/TEST_5.dbf,/app/oradata/targetdb/TEST_IND_6.dbf'

 

--验证,传输完成后应该能够看到所有表空间,并且能够查询其中的数据

set pagesize 2000

set linesize 200

col file_name for a40

col OBJECT_NAME for a30

select TABLESPACE_NAME from dba_tablespaces;

 

8、导入元数据

 

源端导出,如果不对数据字典做任何修改操作,可提前导出,可开并行

expdp system/oracle DIRECTORY=sdmp LOGFILE=dp_fullexp_meta.logDUMPFILE=dp_full.dmp FULL=y CONTENT=METADATA_ONLY

 

复制导出的文件到目标端

 

目标端导入

impdp system/oracle DIRECTORY=ddmp LOGFILE=dp_fullexp_meta.logDUMPFILE=dp_full.dmp FULL=y CONTENT=METADATA_ONLY

 

将目标端表空间设为可读写状态

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值