【XTTS】Oracle11g 使用XTTS增量跨平台传输减少停机时间

本文档主要介绍 Oracle XTTS 及操作参考( rman_xttconvert_v3) —by Firsouler

概述

xtts(Cross Platform Transportable Tablespaces)通过增量的方式来减少停机时间,支持跨平台不同字节序。

XTTS典型应用场景步骤如下:
  1. 使源数据库中的表空间为只读
  2. 将数据文件传输到目标系统
  3. 将数据文件转换为目标系统endian格式
  4. 使用数据泵从源数据库导出表空间中对象的元数据
  5. 使目标数据库中的表空间读写
使用XTTS 增量备份功能步骤如下:
1. 准备阶段(源数据文件保持在线)
  1. 将数据文件传输到目标系统
  2. 如有必要,将数据文件转换为目标系统的endian格式
2. 前滚阶段(根据需求多次重复,以捕获目标数据文件到源数据库的副本)
  1. 在源端创建增量备份
  2. 将增量备份传输到目标端
  3. 将增量备份转换为目标系统endian格式,并将备份应用到目标数据文件副本

如果新添加数据库或数据文件,需要添加到xtt.properties中。

3. 传输阶段(源数据库为只读)
  1. 确认源端数据库为只读
  2. 最后一次增量备份恢复(1.确认目标端与源端数据库文件 是否一致 2.在处理大数据量时,该方法更快,停机时间更短)
  3. 使用数据泵从源端导出表空间中的对象元数据
  4. 使用数据泵将元数据导入到目标数据库中
  5. 使目标数据库表空间读写

需求和推荐

先决条件

在开始之前,必须满足一下条件:

除了可传输表空间的限制和注意事项外,还必须满足以下条件
  • 当前版本不支持Windows
  • 源数据库必须运行10.2.0.3或更高版本
  • 只支持企业版
  • 源数据库的兼容参数必须设置为10.2.0或更高
  • 源数据库的兼容参数不能大于目标数据库的兼容参数
  • 源数据库必须处于归档模式
  • 目标数据库必须运行11.2.0.4或更高版本
  • 源数据库版本必须低于或等于目标版本,也可作为一个升级方法
  • rman的默认设备类型应配置为磁盘
  • 源系统的rman不能将设备类型磁盘配置为压缩,跨平台备份压缩不同
  • 要移动的表空间集必须全部联机,并且不包含脱机文件。表空间必须读写,只读可以通过普通的XTTS方法移动。

其他请参考mos文档中Prerequisites

选择方法

有两种方法,推荐第一种:

  1. Using dbms_file_transfer (DFT) transfer (using xttdriver.pl -S and -G options)
  2. Using Recovery Manager (RMAN) RMAN backup (using xttdriver.pl -p and -c options)
目标数据库11.2.0.3或更早版本需要单独的增量转换主和实例

跨平台增量备份核心功能(即增量备份转换)在Oracle Database 11.2.0.4及更高版本中提供。如果目标数据库版本为11.2.0.4或更高版本,则目标数据库可以执行此功能。但是,如果目标数据库版本为11.2.0.3或更低版本,则为了执行增量备份转换,必须安装一个单独的11.2.0.4软件主目录,称为增量转换主目录,并且必须使用该主目录在NOMOUNT状态下启动一个名为增量转换实例的实例。incremental convert home和incremental convert实例是临时的,仅在迁移期间使用。

注意,因为dbms_file_transfer准备阶段方法需要目标数据库11.2.0.4,该数据库可用于执行增量备份转换功能(如上所述),所以增量convert home和增量convert实例通常仅在准备阶段方法为RMAN backup时才适用。

有关增量实例设置的详细信息,请参见第1阶段中的“转换临时实例”。


具体操作过程

1.初始化设置

安装目标数据库,推荐11.2.0.4

如果目标库低于11.2.0.4,需要创建增量转换实例,创建增量转换目录
oracle@dest]$ export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/xtt_home
[oracle@dest]$ export ORACLE_SID=xtt
[oracle@dest]$ cat << EOF > $ORACLE_HOME/dbs/init$ORACLE_SID.ora
db_name=xtt
compatible=11.2.0.4.0
EOF
[oracle@dest]$ sqlplus / as sysdba
SQL> startup nomount
自包含检查,确认需要传输的表空间
--注意是否有系统表空间、USERS表空间
select distinct tablespace_name from dba_segments where owner='TESTUSER';
execute dbms_tts.transport_set_check ('TESTUSER_DAT_4,TESTUSER_DAT_1,TESTUSER_DAT_2,TESTUSER_IDX_2,TESTUSER_DAT_3,TESTUSER_IDX_3,TESTUSER_ALL,TESTUSER_IDX_1,TESTUSER_IDX_4' ,true,true);
select * from TRANSPORT_SET_VIOLATIONS;

使用dbms_file_transfer方法

--source db
create directory sourcedir as '+data/mydb/datafile';
--destination db
create directory destdir as '+data/mydb/datafile';
create public database link ttslink connect to system identified by oracle using 'tns_to_source';
select sysdate from dual@ttslink;

创建临时区域

在源端和目标端定义下面的参数xtt.properties:backupformat,backupondest

如果使用rman 备份,需要定义xtt.properties:dfcopydir,stageondest

初始化xttconvert脚本

mkdir -p /home/oracle/xtt
unzip rman_xttconvert_v3.zip

编辑xtt.properties文件

编辑后将所有文件 拷贝到目标端

设置临时目录

--source and destination
export TMPDIR=/home/oracle/xtt

2.准备阶段

A.dbms_file_transfer 方法

源端运行脚本
--source db oracle用户,确认表空间online,读写,不包含offline文件
$ORACLE_HOME/perl/bin/perl xttdriver.pl -S
拷贝生成的文件至目标端
scp oracle@source:/home/oracle/xtt/xttnewdatafiles.txt /home/oracle/xtt
scp oracle@source:/home/oracle/xtt/getfile.sql /home/oracle/xtt
--MUST set environment to destination database
--开始传输,如果需要转换字节序,会自动转换
[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -G

B.RMAN备份方法

源端运行脚本
--确认表空间online,读写,不包含offline文件.需要配置参数dfcopydir
$ORACLE_HOME/perl/bin/perl xttdriver.pl -p
传输数据文件
--如果 源端目标端访问同一个目录nfs,可以不设置stageondest
scp oracle@source:/stage_source/* /stage_dest
转换数据文件
scp oracle@source:/home/oracle/xtt/rmanconvert.cmd /home/oracle/xtt
--转换开始,最终存储位置为storageondest,转换完成后,可以移除stageondest
$ORACLE_HOME/perl/bin/perl xttdriver.pl -c

3.增量阶段

--源端执行以下命令
$ORACLE_HOME/perl/bin/perl xttdriver.pl -i
--拷贝相关文件
scp `cat incrbackups.txt` oracle@dest:/stage_dest
--目标端,转换增量备份
scp oracle@source:/home/oracle/xtt/xttplan.txt /home/oracle/xtt
scp oracle@source:/home/oracle/xtt/tsbkupmap.txt /home/oracle/xtt
$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

每次增量都需要拷贝xttplan.txt 和 tsbkupmap.txt ,不要任意更改这个文件xttplan.txt.new 执行该命令会重启目标实例

创建下次增量备份的时间
--源端,会记录到xttplan.txt
$ORACLE_HOME/perl/bin/perl xttdriver.pl -s
注意

如果需要更接近生产系统的数据,可反复执行增量
如果准备收尾,可执行收尾阶段相关命令

如果有新增表空间或者数据文件,请执行下面命令
--1.拷贝fixnewdf.txt 到目标temp dir
--2.拷贝备份
--3.目标端运行
$ORACLE_HOME/perl/bin/perl xttdriver.pl --fixnewdf
--4.源端重新执行增量备份
$ORACLE_HOME/perl/bin/perl xttdriver.pl --bkpincr
--在运行执行,请在源端临时目录删除失败的或者运行下面命令
$ORACLE_HOME/perl/bin/perl xttdriver.pl -L --bkpincr

4.收尾阶段

源端表空间只读

 alter tablespace TS1 read only;

最后增量备份

--source db
$ORACLE_HOME/perl/bin/perl xttdriver.pl -i
scp `cat incrbackups.txt` oracle@dest:/stage_dest
scp xttplan.txt oracle@dest:/home/oracle/xtt
scp tsbkupmap.txt oracle@dest:/home/oracle/xtt
--dest db
$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

导入元数据

--目标端,生成impdp命令
 $ORACLE_HOME/perl/bin/perl xttdriver.pl -e
 --样例
impdp directory=DATA_PUMP_DIR logfile=tts_imp.log network_link=ttslinktransport_full_check=no \ 
transport_tablespaces=TS1,TS2 \ 
transport_datafiles='+DATA/prod/datafile/ts1.285.771686721', \ 
'+DATA/prod/datafile/ts2.286.771686723', \ 
'+DATA/prod/datafile/ts2.287.771686743'

完成导入,改为读写模式

alter tablespace TS2 read write;

验证表空间

validate tablespace TS1, TS2 check logical;

参考

  • 11G - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 1389592.1)
  • V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1)
  • 12C - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Note 2005729.1)
  • https://www.xbdba.com/2019/04/04/xtts-migrate-11g-to-12c/

命令属性

xttdriver.pl

详细参考: http://blog.itpub.net/29487349/viewspace-2747594/

属性 描述
-S prepare source for transfer -S option is used only when Prepare phase method is dbms_file_transfer.
-G get datafiles from source -G option is used only when Prepare phase method is dbms_file_transfer.
-p prepare source for backup -p option is used only when Prepare phase method is RMAN backup
-c convert datafiles -c option is used only when Prepare phase method is RMAN backup
-i create incremental Create incremental step is run one or more times
-r rollforward datafiles Rollforward datafiles step is run once for every
-s determine new FROM_SCN Determine new FROM_SCN step is run one or more times
-e generate Data Pump TTS command Generate Data Pump TTS command step is run once on the destination system
-d debug d option enables debug mode for xttdriver.pl and RMAN commands it executes. Debug mode can also be enabled by setting environment variable XTTDEBUG=1

xtt.properties

详细可参考: http://blog.itpub.net/29487349/viewspace-2747587/

参数 样例
tablespaces tablespaces=TS1,TS2
platformid platformid=2
dstdir dstdir=DESTDIR / dstdir=DST1,DST2
srclink srclink=TTSLINK
dfcopydir dfcopydir=/stage_source
backupformat backupformat=/stage_source
stageondest stageondest=/stage_dest
storageondest storageondest=+DATA or storageondest=/oradata/prod/%U
backupondest backupondest=+RECO
cnvinst_home cnvinst_home=/u01/app/oracle/product/11.2.0.4/xtt_home
cnvinst_sid cnvinst_sid=xtt
asm_home asm_home=/u01/app/11.2.0.4/grid
asm_sid parallel=3
parallel parallel=3
rollparallel rollparallel=2
getfileparallel getfileparallel=4
请使用浏览器的分享功能分享到微信等