作者:袁清坤,新炬网络高级技术专家。
但是对于传统的TTS来说,数据量越大,需要的停机时间越长。因此,Oracle提供了一个加强版的XTTS,XTTS可以提供跨平台的增量备份,两者结合可以大大缩减迁移时所需要的停机时间。
一般情况下XTTS有以下几个主要步骤:
A、将源端数据库表空间设置为READ ONLY模式。
B、传输数据文件到目标系统。
C、转换数据文件为目标系统的字节序。
D、在源端导出元数据,并在目标端导入。
E、将目标端的数据库表空间设置为READ WRITE。
从上面的步骤可以看出,数据文件在传输过程中,数据库表空间是处于READ ONLY模式的,那么对于大多数业务来说,是不能使用的。因此业务的停机时间将和数据量的大小成正比。数据量越大,转换的时间就越长,停机的时间也就越长。
增强版的XTTS提供了跨平台增量备份,使用这个增量备份,可以将前期的数据文件传输、数据文件转换等操作在READ WRITE模式下操作。然后通过多次增量备份恢复,使源端和目标端的数据差异降到最小,最后只需要申请增量备份和恢复的时间即可。因此该方案业务的停机时间将和源端数据块的变化量成正比。
因此增强版XTTS的主要步骤将变成如下:
A、将源端数据文件传输到目标系统。
B、转换数据文件为目标系统的字节序。
C、在源端创建增量备份,并传输到目标端。
D、在目标端恢复增量备份。
E、重复多次操作C和D步骤。
F、将源端数据库表空间设置为READ ONLY模式。
G、最后一次执行C和D步骤。
H、在源端导出元数据,并在目标端导入。
I、将目标端的数据库表空间设置为READ WRITE。
源端系统不能是Windows,数据库COMPATIBLE参数必须是10.2.0以上,且不能高于目标端。
增量方式,Oracle提供了以下2种方式,本案例采用的是RMAN backup:
dbms_file_transfer (DFT) transfer (using xttdriver.pl -S and -G options)
Recovery Manager (RMAN) RMAN backup(using xttdriver.pl -p and -c options)
xtt.properties 参数文件配置,该文件非常重要,定义了迁移过程中需要的所有参数。
platformid=17 |
源端平台号,select * from v$transportable_platform order by platform_id 语句查询得到) |
srcdir=SOURCEDIR |
使用数据泵导入原数据,network_link方式,如果使用imp/exp方式,则不需要该参数) |
dstdir=DESTDIR |
使用数据泵导入原数据,network_link方式,如果使用imp/exp方式,则不需要该参数) |
srclink=TTSLINK |
perl xttdriver.pl -e命令生成impdp迁移脚本使用) |
dfcopydir=/export/home/oracle/dfcopydir |
源端datafile convert保存路径) |
backupformat=/export/home/oracle/backup |
源端增量备份保存路径) |
stageondest=/home/oracle/backup |
目标端备份文件存放路径 |
backupondest=/home/oracle/backup |
目标端增量备份集存放路径 |
storageondest=+DATADG/orcldb11g |
目标端恢复到数据库的数据文件保存位置,如果是diskgroup则需要注意还需要对应的数据库名) |
cnvinst_home=/u01/oracle/app/11.2.4/db |
新环境$ORACLE_HOME) |
cnvinst_sid=orcldb11g |
新环境ORACLE_SID) |
asm_home=/home/grid/app/11.2.0/grid |
如果是直接恢复到diskgroup,则需要指定对应的grid_home和ASM实例) |
asm_sid=+ASM |
如果是直接恢复到diskgroup,则需要指定对应的grid_home和ASM实例) |
parallel=3 |
设置并行,建议设置为6或者8,根据CPU情况设置) |
rollparallel=2 |
roll forward 并行,如果数据库大的话建议设置为8) |
getfileparallel=4 |
getfile 并行度,建议设置为6或者8,根据CPU情况设置) |
desttmpdir=/home/oracle/xtts |
设置目标端tempdir目录,建议指向xtts目录) |
本案例迁移数据总量约4T,客户要求数据库侧停机时间为1小时。以下是使用增强版XTTS迁移的主要步骤:
3.1 【源库端】迁移准备阶段
在源端配置好xtt.properties参数文件后,测试对应的工具(可选择小型的表空间,仅测试工具的运行功能)
源端运行perl脚本,准备Prepare操作命令
perl xttdriver.pl -p
该操作将在dfcopydir路径下生成需要传输的数据文件的副本,和xttplan.txt、rmanconvert.cmd两个文件。
其中xttplan.txt记录了当前数据库的SCN,如果后面再次运行脚本进行增量操作(perl xttdriver.pl -s)时,该值会发现改变。
$ more xttplan.txt
SCHEDTS::::14115033957395
49
rmanconvert.cmd文件则是rman convert脚本,用来转换数据文件的字节序,该脚本需要传输到目标端使用。需要注意的是,在2.0版本工具中,对convert操作增加了并行参数parallelism,一般设置为6或者8,根据CPU或者IO压力负载而定。
$ cat rmanconvert.cmd
host 'echo ts::IRM_DATA';
convert from platform 'Solaris[tm] OE (64-bit)'
datafile
'/datadump01/xtts/convert/sdh/IRM_DATA_21.tf'
,'/datadump01/xtts/convert/sdh/IRM_DATA_22.tf'
将生产的数据文件副本和这两个文件传输到目标主机上。
3.2 【目标端】进行数据文件的转换
目标端执行rman convent脚本
perl xttdriver.pl –c
这个步骤将按照rmanconvert.cmd里面记录的信息对数据文件进行转换,以满足目标主机的格式。同时会将这些文件存放到storageondest参数指定的目录,转换完成后,到相应的目录检查数据文件是否完整。
需要注意的是,如果此处报错,那么会在rmanxtts的路径下产生一个FAIL*文件,再次运行前需要删除这个文件,否则无法运行。
3.3 【原库端】进行第1次增量备份
命令:perl xttdriver.pl –i
该命令将对xtt.properties参数文件中指定的表空间,使用RMAN命令进行一个增量备份,同时会生成tsbkupmap.txt、incrbackups.txt、xttplan.txt三个文件,此处就是一个增量备份,没什么好说的,建议打开块跟踪功能(block change tracking),大大缩减增量备份的时间。
备份的数据是从做xttdriver.pl -p时在xttplan.txt文件中记录的SCN开始的。备份完成后需要将这3个文件连同增量备份集一起传输到目标端。
但这个步骤仍然有需要注意的地方,在2.0的版本中xtt.properties参数文件有以下几个路径相关的参数:
dfcopydir参数:是用来存放源端数据文件副本的,当执行xttdriver.pl –p时产生的数据文件副本就存放在这个位置。
backupformat参数:该参数是用来存放源端增量备份产生的备份集的。
stageondest参数:该参数是目标端参数,标志将源端数据文件副本存放在目标端的什么位置。目标端在进行convent时会从这个位置找数据文件。
backupondest参数:该参数看官方文档的描述是增量备份集存放的路径,但是原厂建议这个参数值要和stageondest参数保持一致。
但是实际在操作的时候,还是建议将backupondest和backupformat保持一致,因为在做xttdriver.pl –i时产生的增量备份集将存放在backupformat目录,并且在incrbackups.txt文件中也会记录备份集的位置。incrbackups.txt后期需要传输到目标端进行增量恢复,如果backupondest和backupformat路径不一致,那么就需要修改incrbackups.txt文件中备份集的位置。
$ cat incrbackups.txt
/trans/xtts/incrback/sdh/e1q54s3q_1_1
/trans/xtts/incrback/sdh/e2q54s3t_1_1
/trans/xtts/incrback/sdh/e3q54s3v_1_1
3.4 【目标端】进行第1次增量recover
命令:perl xttdriver.pl –r
该步骤就是对增量数据进行恢复,和备份一样没什么好说的。
但是如果一套库上有多个实例的话,在执行该步骤之前,需要对环境变量进行确认,如检查当前ORACLE_SID是否是需要执行的SID,否则可能会恢复到其他实例上。(并非是真实的恢复,因为其他实例跟这个备份集没有任何关系,但恢复的过程会在其他实例上进行一遍,如关闭/启动数据库,包括增量恢复的日志都会在另一个数据库上显示。)如果发生了这种事情,不用紧张,调整好环境变量,再执行一次perl xttdriver.pl –r即可。误操作的实例不受影响。
3.5 【原库端】进行SCN推进
命令:perl xttdriver.pl –s
该命令将修改FROM_SCN,用于确定下一次增量备份的起点。建议在【目标端】每次做完recover动作后,【源端】就执行一次该命令,以免遗忘。
3.6 【原库端】进行第2-N次增量备份
命令:重复3.3、3.4和3.5步骤。
3.7 进行最后一次增量备份和恢复
【原库端】表空间设置为READ ONLY
alter tablespace XXXX read only;
【原库端】做最后一次增量备份
perl xttdriver.pl –i
【目标端】做最后一次增量恢复
perl xttdriver.pl –r
在执行完恢复操作后,脚本会自动将目标库重启,不需要人工干预,如果出现到mount状态出现异常,根据情况手工执行后续命令。
3.8 元数据同步
expdp/impdp导出导入元数据
此步骤也没什么好说的,注意在导出时,TRANSPORT_TABLESPACES参数需要的表空间要写全,别遗漏。如果数据量大,建议去掉统计信息。另外在目标端进行IMPDP时,transport_datafiles需要将所有的数据文件添加进去。如果数据文件很多,人为添加容易出错,可以使用perl xttdriver.pl –e获取全部数据文件列表。
3.9 原库和目标库表空间设置为READ WRITE
命令:alter tablespace XXXXX read write。
到此整个迁移的主要步骤就完成了,剩下的就是要对数据库进行各种检查校验工作了。
上一篇:简述MySQL Replication(复制)基本原理
下一篇:最后一页