本文档主要介绍通过XTTS 4 将Oracle11.2.0.4及以上版本 数据文件升级或迁移(rman_xttconvert_v4) —by firsouler
说明:V4版本有以下不同
- 命令简化,备份恢复可使用参数—backup/—restore
- 此过程仅需要在源端和目标端复制一个文件$TMPDIR(res.txt)
- 此过程将自动解析添加的数据文件,无需其他干预
- 此过程允许在不运行恢复的情况下从源端执行多个增量备份,在此之后,目标端恢复所有备份
注意:只有那些物理上位于要传输的表空间中的数据库对象才会被复制到目标系统。位于系统表空间中的其他对象(如用户、pl/sql对象、序列、视图等)将不会被传输。您需要预先创建用户并将这些对象复制到目标系统,可能需要使用数据泵。
可以参考: https://www.oracle.com/assets/full-transportable-wp-12c-1973971.pdf源系统可以是任何平台,前提是满足以下引用和列出的平台和数据库的先决条件。
如果您要从little endian平台迁移到Linux,那么应该首先考虑的迁移方法是Data Guard。有关当前little endian平台和Linux之间对DataGuard的异构平台支持的详细信息,请参见Note413484.1。
限制:先决条件
V4版本不在支持DBMS_FILE_TRANSFER方式,如果需要,请使用之前的版本,之前的一些限制仍然有效,具体参考《Oracle Database Administrator’s Guide》和《Oracle Database Utilities》
除了可传输表空间的限制和注意事项外,还必须满足以下条件:
- 当前版本不支持Windows,不管是源端还是目标端
- 源数据库兼容参数COMPATIBLE不能大于目标数据库
- 源端数据库必须归档模式
- RMAN 源端DISK类型不能配置压缩
- RMAN备份类型不能为TO COPY,源端必须为backup type to backupset
- RMAN 源端通道不能为SBT
- RMAN任意通道不能配置限制,例如MAXSETSIZE、MAXPIECESIZE
- 表空间数据文件必须online,不能包含offline,表空间必须读写
- 只读的表空间可以用普通的XTTS方法移动。不需要合并跨平台增量备份来移动始终为只读的表空间。
- 首选为Linux,如果是非Linux系统,目标和源端必须运行12.1.0.1或更高版本
- 源的Oracle版本必须低于或等于目标。因此,本程序可作为一种升级方法。将应用可传输表空间限制
- 源端和目标端最低版本11.2.0.4
- ASM只能用于目标端最终的数据文件位置,不能在ASM上放置备份
- 此过程不支持快照备用数据库
具体过程
1.初始化
1.1 检查迁移用户所有表空间
--dba_segments 包含了索引
select distinct tablespace_name from dba_segments where owner in ('','');
execute dbms_tts.transport_set_check ('','',true,true);
select * from TRANSPORT_SET_VIOLATIONS;
1.2 安装rman_xttconvert_VER4
[oracle@source]$ pwd
/home/oracle/xtt
[oracle@source]$ unzip rman_xttconvert_VER4.zip
Archive: rman_xttconvert_v3.zip
inflating: xtt.properties
inflating: xttcnvrtbkupdest.sql
inflating: xttdbopen.sql
inflating: xttdriver.pl
inflating: xttprep.tmpl
extracting: xttstartupnomount.sql
1.3 创建相关目录
源端,根据xtt.properties文件中参数src_scratch_location
目标端,备份定义dest_scratch_location ,数据文件位置dest_datafile_location
1.4 配置xtt.properties
tablespaces
platformid
src_scratch_location
dest_scratch_location
dest_datafile_location
(if using 12c) -- usermantransport=1
1.5 复制脚本到目标端
scp -r /home/oracle/xtt oracle@dest:/home/oracle/xtt
1.6 设置临时目录
[oracle@source]$ export TMPDIR=/home/oracle/xtt
[oracle@dest]$ export TMPDIR=/home/oracle/xtt
2.初始备份
2.1 运行备份
--配置好环境变量,ORACLE_SID,确认表空间都是online状态
[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup
2.2 拷贝相关文件
oracle@source]$ scp /src_scratch/* oracle@dest:/dest_scratch
[oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
2.3 恢复数据文件
--配置好相关环境变量,ORACLE_SID等,恢复到该位置dest_datafile_location
[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore
3.增量备份
3.1 创建增量备份
--根据xtt.properties中tablespaces创建增量备份,可在该文件中新增表空间
[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup
3.2 传输文件
[oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/dest_scratch_location
[oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
3.2 恢复增量
[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore
4.恢复最后增量
4.1 源端表空间设置为只读
--确认数据库及相关环境变量
alter tablespace TS1 read only;
4.2 创建增量备份
--设置为只读后,会出现警告,警告表空间为只读模式
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup
4.3 拷贝文件
[oracle@source]$ scp 'cat incrbackups.txt' oracle@dest:/dest_scratch_location
[oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
4.4 恢复最后的增量
$ORACLE_HOME/perl/bin/perl xttdriver.pl --restore
5.导入元数据
手动运行
源端
oracle@source]$ cat exp.par
dumpfile=xttdump.dmp
directory=DATA_PUMP_DIR
statistics=NONE
transport_tablespaces=TS1,TS2
transport_full_check=y
logfile=tts_export.log
[oracle@source]$ expdp system/manager parfile=exp.par
目标端
[oracle@dest]$ cat manual_imp.par
dumpfile= xttdump.dmp
directory=DATAPUMP
transport_datafiles='/dest_datafile_location/TS1.dbf','/dest_datafile_location/TS2.dbf'
[oracle@dest]$ impdp system/oracle parfile=manual_imp.par
通过dblink
1.目标端创建
create directory dpump_tts as '/home/oracle/destination/convert';
GRANT READ, WRITE ON DIRECTORY dpump_tts TO system;
2.生成样例
--xttplugin.txt
[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -e
3.目标库创建dblink
create public database link ttslink connect to system identified by using '';
select name from v$database@ttslink
4.修改命令并执行
--例如
[oracle@dest]$ impdp directory=DATA_PUMP_DIR logfile=tts_imp.log network_link=ttslink \
transport_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'
6.验证
验证表空间
validate tablespace TS1, TS2 check logical;
修改表空间为读写
alter tablespace TS1 read write;
7.清理
清理相关目录,备份文件等(建议保留一段时间)
附一: xttdriver.pl
| 属性 | 描述 |
|---|---|
| —backup | 创建所选表空间的0和1级备份,根据xtt.properties |
| —restore | 从复制到目标库目录下还原并转换数据文件,还原到dest_datafile_location指定目录 |
| -e | 创建临时的dump 导入命令,用network_link方法导入元数据 |
| —debug | 启用的调试模式xttdriver.pl文件它执行的命令。1-3级 |
附二: xtt.properties
| 参数 | 描述 | 参考 |
|---|---|---|
| tablespaces | 所需要复制的表空间 | tablespaces=ts1,ts2 |
| platformid | 源库platform id,v$database | platformid=13 |
| dest_datafile_location | 目标数据库定义的数据文件位置 | fs/asm |
| src_scratch_location | 源端备份位置 | fs(文件系统) |
| dest_scratch_location | 目标拷贝备份文件位置 | fs |
| asm_home | 目标科技asm位置 | /u01/app/12.2.0.1/grid |
| asm_sid | asm Oracle_sid | +asm1 |
| parallel | 定义拷贝并行度,rman有自己相关命令 | number |
| srcconnstr | cdb 指定连接的pdb | sys/passwd @source_pdb1 |
| destconnstr | cdb 指定连接的pdb | sys/passwd @dest_pdb1 |
| usermantransport | 如果12c,设置参数1 | 1 |
附三:出处
本文档主要翻译自MOS
V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1)