语言
<< 返回文章列表

举一反三:跨平台版本迁移之 XTTS 方案操作指南(1)

2018年4月23日
罗贵林
4289

本文由恩墨大讲堂155期线上分享整理而成。

1、跨平台跨版本迁移方案对比

针对跨平台跨版本的迁移,主要有以下三种方式:数据泵、GoldenGate / DSG、XTTS,针对停机时间、复杂度、实施准备时间,做了以下列表比对:

IMG_6953.png

客户的需求都是最短停机时间,最少数据丢失。对于 GoldenGate / DSG 来说它的停机时间是最短的,但实施准备时间最长,复杂度最高;数据泵是停机时间最长,实施准备时间最短;XTTS 是介于这两者之间的,同时满足客户提出的短停机时间、低实施成本需求。


数据泵比较适用的场景就是数据量比较小、数据大概在 5T 以下,使用数据泵会方便很多。


GoldenGate / DSG 比较适用大数据量的数据分发,灾备库建设。


XTTS 是单次数据库跨平台、跨版本迁移利器,相同平台,相同版本迁移首选 rman。


在 Oracle11g 中的 RMAN 支持不同操作系统和不同 DB 版本之间的使用,关于 RMAN 的兼容性。如下图示:  


IMG_6954.png

注意以下操作系统的组合,这里假设 DB version 相同:


(1)For Oracle Database 10g Release 2 and above releases:

--在 Oracle 10gR2 之后的版本,支持如下操作系统之间的 RMAN 操作:

Solaris x86-64 <-> Linux x86-64

HP-PA <-> HP-IA

Windows IA (64-bit) / Windows (64-bitItanium) <-> Windows 64-bit for AMD / Windows (x86-64)

(2)For Oracle Database 11g Release 1 and above releases (requires minimum 11.1 compatible setting):

--在 Oracle 11gR1 之后的版本,支持如下操作系统之间的 RMAN 操作,当然这里也包含第一条里提到的 10gR2 后的组合。

Linux <-> Windows

(3)For Oracle Database 11g Release 2(11.2.0.2) and above releases:

Solaris SPARC (64-bit) <-> AIX(64-bit) - Note: this platform combination is currently not supported due to Bug 12702521

--在 11gR2 中,因为 Bug 12702521 的存在,Solaris SPARC (64-bit) <-> AIX (64-bit) 这2个版本之间不能进行 RMAN 操作。


XTTS 同样须遵循 Oracle 升级路线:


Oracle 9i/10g/11g 数据库升级路线图(upgrade roadmap)

 

IMG_6955.png


2XTTS 各版本功能对比



XTTS (Cross Platform Transportable Tablespaces) 跨平台迁移表空间,是 Oracle 自10g 推出的一个用来移动单个表空间数据以及创建一个完整的数据库从一个平台移动到另一个平台的迁移备份方法。它是 Oracle 8i 开始就引入的一种基于表空间传输的物理迁移方法,命名为 TTS,不过 8i 的表空间迁移仅支持相同平台、相同块大小之间的表空间传输,从 Oracle 9i 开始,TTS 开始支持同平台中,不同块大小的表空间传输,这个时候很多数据库管理员就注意到了 TTS 在实际工作中的应用,不过由于每次移动表空间都需要停机、停业务,而 9i 的 TTS 只能在相同平台之间进行数据移动,相比 Oracle RMAN 本身的快捷方便,更多人更愿意选择使用 RMAN 进行数据备份、数据移动,基于 TTS 的这些缺点,Oracle 10g 时代引入了跨平台的表空间传输方案 XTTS,标志着第一代 XTTS 的诞生。


可以理解为 TTS 就是传输表空间,把表空间传输出去,数据从一个库传输到另外一个库,不支持增量备份,而 XTTS 是在 TTS 基础上做了一些更新,支持了跨平台,支持增量备份。


XTTS 各版本的功能比对如下,表一:XTTS 各版本功能比对表


IMG_6956.png

在 Oracle11gR2(推荐使用 11.2.0.4 及之后版本)以后,Oracle 推出了通过前滚数据文件,拷贝数据后再进行多次增量备份的 XTTS 来完成迁移过程,在这个过程中通过开启块跟踪特性,根据 SCN 号来执行一系列的增量备份,并且通过对块跟踪文件的扫描,来完成增量数据的增量备份应用,最后在通过一定的停机时间,在源库 read only 的状态下进行最后一次增量备份转换应用,使得整个迁移过程的停机时间同源库数据块的变化率成正比。这样大大的缩短了停机时间。


3XTTS 前置条件检查


使用 XTTS 进行数据迁移需要具备的哪些前置条件?


IMG_6957.png

可列出如下表格进行详细对比:


IMG_6958.png

说明:

  • 如果源端空间不够可以采用 NFS 磁盘挂载的方式,即将 Linux 的 NFS 文件系统挂载到中间环境(AIX 小机)的方式。

  • XTTS 基于 RMAN 备份的方法,对于空间需求要求较高。

  • 目标端新环境,提前安装并部署好 Oracle+ASM 环境,同时创建与现有生产库字符集一致的数据库。


4XTTS 三种迁移方式


采用 XTTS 迁移方式,具备跨平台字序转换和全量初始化加增量 merge 的功能,非常适用于异构 OS 跨平台迁移,成为数据库实施人员中公认的大数据量跨平台迁移的最佳选择。


传统的 TTS 传输表空间要求数据由源端到目标端传输的整个过程中,表空间必须置于 read only 模式,严重影响业务可用性。XTTS 方式可以在业务正常运行的情况下,进行物理全量初始化,增量 block 备份,数据高低字节序转码,增量 block 应用,保持目标端与源端数据的同步,整个过程不影响源端数据库使用。在最后的增量 block 应用完毕后,利用停机窗口进行数据库切换,显著地减少了停机时间。


XTTS 技术主要通过 DBMS_FILE_TRANSFER、RMAN 备份、手工 XTTS 迁移三种方式来进行数据库迁移:


4.1 方式一:dbms_file_transfer


DBMS_FILE_TRANSFER 包是 Oracle 提供的一个用于复制二进制数据库文件或在数据库之间传输二进制文件的程序包,在 XTTS 迁移中,利用不同的参数进行数据文件传输转换完成迁移。


DBMS_FILE_TRANSFER 方式主要使用了 xttdriver.pl 脚本的以下几个参数:


IMG_6959.png

4.2 方式二:RMAN Backup


RMAN Backup 方式是基于 RMAN 备份原理,通过使用 rman-xttconvert_2.0 包提供的参数,对数据库进行基于表空间的备份,将备份生产的备份集写到本地或者 NFS 盘上,然后在通过 rman-xttconvert_2.0 包中包含的不同平台之间数据文件格式转换的包对进行数据文件格式转换,最后通过记录的表空间 的FILE_ID 号与生产元数据的导入来完成。


RMAN Backup 方式主要使用了 xttdriver.pl 脚本的以下几个参数:


IMG_6960.png

4.3 方式三:手工 XTTS 迁移


Oracle 提供的封装 perl 脚本仅支持目标系统 LINUX,而通过手工 XTTS 迁移的方式可以支持目标系统是 AIX、HP、SOLARIS 等 UNIX 系统,主要有如下几个阶段:


1)rman copy

rman target / <<eof

run{

allocate channel c1 type disk;

allocate channel c2 type disk;

backup as copy datafile 18,19,20,21,22........ format  '/dump1/enmo/copy/enmo_%U';

release channel c1;

release channel c2;

}

EOF

</eof


2) 数据文件格式转换

convert  from platform 'HP-UX IA (64-bit)' datafile '/dump1/ccm/vvstart_tabs.dbf'  format '+FLASHDATA/ORCL/DATAFILE/vvstart_new_01.dbf';


3) 增量备份

set until scn=1850

backup incremental from scn 1000 datafile  18,19,20,21,22...... format '/dump1/enmo/incr/copy_%d_%T_%U';3;


4) 增量转换和应用

增量转换:

sys.dbms_backup_restore.backupBackupPiece(bpname  => '/dump1/enmo/incr/copy_ORCL_20160707_78ra40o7_1_1',

fname =>  '/dump1/enmo/incr/copy_ORCL_20160707_78ra40o7_1_1_conv',handle =>  handle,media=> media,

comment=>  comment, concur=> concur,recid=> recid,stamp => stamp, check_logical  => FALSE,copyno=> 1,

deffmt=> 0,  copy_recid=> 0,copy_stamp => 0,npieces=> 1,dest=> 0,pltfrmfr=>  4);

增量应用:

sys.dbms_backup_restore.restoreBackupPiece(done  => done, params => null, outhandle => outhandle,outtag => outtag,  failover => failover);


三种方式的目标端数据库版本均需要为 11.2.0.4 版本或者以上,如果在使用过程中,目标库的版本是 11.2.0.3 或者更低,那么需要创建一个单独的 11.2.0.4 版本数据库作为中间库来在目标端进行数据文件的格式转换,而使用 DBMS_FILE_TRANSFER 包目标端的数据库版本必须是 11.2.0.4。