本文档主要介绍 Oracle XTTS 及操作参考( rman_xttconvert_v3) —by Firsouler
概述
xtts(Cross Platform Transportable Tablespaces)通过增量的方式来减少停机时间,支持跨平台不同字节序。
XTTS典型应用场景步骤如下:
- 使源数据库中的表空间为只读
- 将数据文件传输到目标系统
- 将数据文件转换为目标系统endian格式
- 使用数据泵从源数据库导出表空间中对象的元数据
- 使目标数据库中的表空间读写
使用XTTS 增量备份功能步骤如下:
1. 准备阶段(源数据文件保持在线)
- 将数据文件传输到目标系统
- 如有必要,将数据文件转换为目标系统的endian格式
2. 前滚阶段(根据需求多次重复,以捕获目标数据文件到源数据库的副本)
- 在源端创建增量备份
- 将增量备份传输到目标端
- 将增量备份转换为目标系统endian格式,并将备份应用到目标数据文件副本
如果新添加数据库或数据文件,需要添加到xtt.properties中。
3. 传输阶段(源数据库为只读)
- 确认源端数据库为只读
- 最后一次增量备份恢复(1.确认目标端与源端数据库文件 是否一致 2.在处理大数据量时,该方法更快,停机时间更短)
- 使用数据泵从源端导出表空间中的对象元数据
- 使用数据泵将元数据导入到目标数据库中
- 使目标数据库表空间读写
需求和推荐
先决条件
在开始之前,必须满足一下条件:
除了可传输表空间的限制和注意事项外,还必须满足以下条件
- 当前版本不支持Windows
- 源数据库必须运行10.2.0.3或更高版本
- 只支持企业版
- 源数据库的兼容参数必须设置为10.2.0或更高
- 源数据库的兼容参数不能大于目标数据库的兼容参数
- 源数据库必须处于归档模式
- 目标数据库必须运行11.2.0.4或更高版本
- 源数据库版本必须低于或等于目标版本,也可作为一个升级方法
- rman的默认设备类型应配置为磁盘
- 源系统的rman不能将设备类型磁盘配置为压缩,跨平台备份压缩不同
- 要移动的表空间集必须全部联机,并且不包含脱机文件。表空间必须读写,只读可以通过普通的XTTS方法移动。
其他请参考mos文档中Prerequisites
选择方法
有两种方法,推荐第一种:
- Using dbms_file_transfer (DFT) transfer (using xttdriver.pl -S and -G options)
- 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
| 属性 | 描述 |
|---|---|
| -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
| 参数 | 样例 |
|---|---|
| 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 |