oracle asm 缩减,XTTS,减少数据库迁移时业务停机时间的利器

作者:袁清坤,新炬网络高级技术专家。

通常我们要进行数据库迁移,可以使用的方案有很多,比如数据泵、RMAN、GoldenGate,甚至是第三方同步软件DSG、DDS等。但这些都要求源端和目标端字节顺序一致,如果字节序不同(Solaris SPARC、AIX、HP-UX迁移至Linux),那只能使用TTS(传输表空间)来操作。

但是对于传统的TTS来说,数据量越大,需要的停机时间越长。因此,Oracle提供了一个加强版的XTTS,XTTS可以提供跨平台的增量备份,两者结合可以大大缩减迁移时所需要的停机时间。

1传统的跨平台TTS和增强版的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。

2增强版XTTS注意事项

源端系统不能是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目录)

3迁移过程(案例)

本案例迁移数据总量约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。

到此整个迁移的主要步骤就完成了,剩下的就是要对数据库进行各种检查校验工作了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值