暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle异构平台迁移利器之XTTS(使用dbms_file_transfer方式)

DB宝 2022-10-09
1039

 

姊妹篇文章:【DB宝52】Oracle异构平台迁移利器之XTTS(使用rman方式)


目录

    一、XTTS简介
    1.1、简介
    1.2、全量迁移方式
    1.3、脚本rman_xttconvert_v3.zip
    1.3.1xttdriver.pl的选项
    1.3.2xtt.properties参数
    1.3.3、文件介绍
    1.4、参考文档
    1.5、迁移过程导图
    二、XTTS迁移示例
    2.1、数据库检查
    2.1.1、查询平台字节序和字符集
    2.1.2、获取需要迁移的业务表空间和业务用户
    2.1.3、表空间自包含
    2.1.4、获取用户及其权限的SQL
    2.1.5、检查环境变量
    2.1.6、开启块改变跟踪功能
    2.1.7、时区需要一致
    2.1.8、目标端补丁情况
    2.1.9、组件检查
    2.1.10、目标端的db_files参数不能小于源端
    2.1.11、迁移对象个数统计
    2.2、全量迁移
    2.2.1、源端和目标端都需要配置XTTS脚本
    2.2.2、创建相关directoriesdblink
    1、源端创建SOURCEDIR
    2、目标端创建DESTDIR
    3、目标端创建DBLINK
    2.2.3xttdriver.pl -S做迁移准备
    2.2.4、将源端xttnewdatafiles.txtgetfile.sql传到目标端
    2.2.5、在目标端执行数据文件的拷贝
    2.3XTTS 第1~n次增量前滚
    2.3.1、产生增量数据
    2.3.2、源端做增量备份
    2.3.3、将源端的增量数据传到目标端
    2.3.4、目标端进行增量转换和数据写入同步
    2.3.5、源端确定下一个增量备份的FROM_SCN
    2.4XTTS 最后一次增量前滚
    2.4.1、将表空间置为RO状态
    2.4.2、源端做增量备份
    2.4.3、将源端的增量数据传到目标端
    2.4.4、目标端进行增量转换和数据写入同步
    2.5、迁移元数据
    2.5.1、在目标库创建业务用户
    2.5.2、导入xtts的元数据
    2.5.3、导入存储过程、触发器、函数、包、视图、序列
    2.5.4、导入公共同义词和dblink等其它对象
    2.6、迁移完成后的收尾工作
    2.6.1、查看源端、目标端的数据一致性
    2.6.2、更改用户默认表空间
    2.6.3、目标库的表空间修改为读写模式
    2.6.4、校验数据文件完整性
    2.6.5、收集统计信息
    2.7、总结

    一、XTTS简介

    1.1、简介

    XTTS(Cross Platform Transportable Tablespaces)属于跨平台迁移表空间,它是从Oracle 8i开始就引入的一种基于表空间传输的物理迁移方法,命名为TTS,经历各个版本的不断演进,从11gR2开始,在相对停机时间要求日益减少的情况,为了应对越来越大的数据量跨平台迁移,Oracle推出了新的解决方案—加强版TTS(以下简称XTTS),XTTS使用增量备份的方式实现跨平台的数据迁移,从真正意义上大大缩短停机时间。在U2L如火如荼的今天,通过XTTS快捷、高效、平稳、安全的将Oracle数据库“小型机+集中式存储”环境迁移至“X86架构平台+分布式存储”已然成为一大神技。

    XTTS的发展历史:

    • 从8i,tts技术的诞生,引入了相同平台相同块大小之间的表空间传输。到了9i,tts开始支持同平台中,不同块大小的表空间传输。

    • 10g时代,不仅引入了跨平台的表空间传输方案,也就是我们说的xtts;10gR2开始支持传输整个数据库。

    • 11gR1开始,可以传输表空间中的某个特定分区。

    • 在11.2.0.4开始,为了应对越来越大的数据量,而停机时间甚至还在减少的情况,出现了新的解决方案—使用增量备份方式的xtts。

    XTTS 各版本的功能比对如下:

    在 Oracle11gR2(推荐使用 11.2.0.4 及之后版本)以后,Oracle 推出了通过前滚数据文件,拷贝数据后再进行多次增量备份的 XTTS 来完成迁移过程,在这个过程中通过开启块跟踪特性,根据 SCN 号来执行一系列的增量备份,并且通过对块跟踪文件的扫描,来完成增量数据的增量备份应用,最后在通过一定的停机时间,在源库 read only 的状态下进行最后一次增量备份转换应用,使得整个迁移过程的停机时间同源库数据块的变化率成正比。这样大大的缩短了停机时间。

    为了减少正式的停机时间,oracle在xtts中引入了rman的增量备份前滚功能。通过一次又一次的增量备份,使停应用的时间主要包含四个方面:将表空间置为只读,最后进行一次增量前滚,元数据导入,数据文件校验。和传统的表空间传输相比,通过减少数据文件的传输时间,而大大减少了整体停机时间。

    1.2、全量迁移方式

    对于XTTS的全量操作,Oracle提供了2种方式来进行,分别如下:
    1)dbms_file_transfer(DFT) -- (using xttdriver.pl -S and -G options)

    DBMS_FILE_TRANSFER 包是 Oracle 提供的一个用于复制二进制数据库文件或在数据库之间传输二进制文件的程序包,在 XTTS 迁移中,利用不同的参数进行数据文件传输转换完成迁移。

    要求:目标端数据库版本必须是11.2.0.4以及更新的版本。如果数据库版本低于11.2.0.4(大于Oracle10R1),那么目标端环境,仍然需要安装11.2.0.4以及更新版本的临时环境,因为XTTS增量的核心脚本功能必须是基于11.2.0.4(+)版本。

    如果准备使用DDBMS_FILE_TRANSFER 作为全量迁移方法,那么必须创建三个数据库对象:

    1. 源数据库中的数据库目录对象。

    2. 目标数据库中的数据库目录对象,放置数据文件的位置。

    3. 在目标数据库中创建指向源库的数据库链接。

    2)RMAN(Recovery Manager )备份  -- (using xttdriver.pl -p and -c options)

    通过使用 rman-xttconvert 包提供的参数,对数据库进行基于表空间的备份,将备份产生的备份集写到本地或者 NFS 盘上,然后再通过 rman-xttconvert 包中包含的不同平台之间数据文件格式转换的包对进行数据文件格式转换,最后通过记录的表空间 FILE_ID 号生产元数据的导入脚本,通过 db_link 执行完成。

    1.3、脚本rman_xttconvert_v3.zip

    XTTS基于一组 rman-xttconvert_3.0 的脚本文件包(Mos 1389592.1)来实现跨平台的数据迁移,主要包含 Perl脚本xttdriver 脚本。xttdriver.pl 是备份、转换和增量应用的执行脚本,xtt.properties 是属性文件,其中包含 XTTS 配置的路径、参数等。

    脚本下载地址:11G - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 1389592.1),内容参考:http://blog.itpub.net/26736162/viewspace-2767429/

    脚本rman_xttconvert_v3.zip在小麦苗的微云下载:https://share.weiyun.com/57HUxNi,路径:小麦苗分享的资料>数据库系列>Oracle数据库>Oracle工具。

    1.3.1、xttdriver.pl的选项

    1.3.2、xtt.properties参数

    1.3.3、文件介绍

    • xttplan.txt - containing the tablespace names, their current SCNs and their datafile numbers

    • xttnewdatafiles.txt - containing the tablespace names, datafile numbers, the destination directory object name and the source filenames

    • getfile.sql - The PL/SQL script(formatting ours) that will be used at the destination to get the datafilesfrom the source

    • xttpreparesrc.sql - the PL/SQL scriptused to create the files in this step

    • xttprepareNaNd - the command

    • tsbkupmap.txt - containing the tablespace names, datafile numbers and the incremental backup pieces

    • incrbackups.txt - containing the actual location of the incremental backup pieces

    • rmanincrNaNd - containing the RMAN scripts used to create the incremental backups.

    • xttdetnewfromscnsrc.sql - the PL/SQLscript used to create the files in this step

    • xttplan.txt.new- after the first run of'xttdriver.pl -i' this is just a copy of the xttplan.txt

    1.4、参考文档

    • 11G - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (文档 ID 1389592.1)

    • 12c – 使用跨平台增量备份来减少传输表空间的停机时间 (文档 ID 2102859.1)

    • 12C - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (文档 ID 2005729.1)

    http://blog.itpub.net/26736162/viewspace-2767646/

    http://blog.itpub.net/26736162/viewspace-2767429/

    1.5、迁移过程导图

    二、XTTS迁移示例

    环境情况如下:


    源库目标库
    版本11.2.0.311.2.0.4
    ORACLE_SIDLHR11GLHR11G
    用户表空间TS_LHR、TS_XXT、USERSTS_LHR、TS_XXT、USERS
    业务用户lhr、xxtlhr、xxt
    平台Linux x86 64-bitLinux x86 64-bit
    字节序LittleLittle
    IP地址172.17.0.3172.17.0.4
    字符集AMERICAN_CHINA.AL32UTF8AMERICAN_CHINA.AL32UTF8
    归档模式归档模式归档模式

    注:虽然我这里使用的同构平台,但是异构平台下的步骤是一样的,例如从Aix到Linux,该过程完全适用。

    2.1、数据库检查

    • 源库必须为归档模式

    • 源端和目标的字符集需要一致

    • 源库的操作系统不是Windows

    • 源库的compatible参数最低为11.1.0.0.0

    • 源库的RMAN 配置里DEVICE TYPE DISK不能设置为COMPRESSED

    • 源端和目标端必须支持可传输平台

    • 源端需要迁移的表空间需要自包含

    • 源库开启块改变跟踪功能,加快增量备份的速度

    • 源端和目标端时区需要保持一致

    • 目标端建议打最新的PSU补丁

    • 目标端的db_files参数不能小于源端

    • 要迁移的表空间的数据文件必须都是online或者不包含offline的数据文件

    • 检查源数据库和目标库具有重名的表空间

    • 检查是否存在应用用户建在system,sysaux,users上的情况

    • 基于XMLSchema的XMLType对象检查

    • 失效对象检查

    • 迁移对象统计

    • 无论是源还是目标,GLOGIN.sql的存在都可能导致语法错误

    • 源库的版本不能大于目标库的版本

    2.1.1、查询平台字节序和字符集

    1-- 查询平台和字节序
    2col PLATFORM_NAME format a30
    3SELECT d.PLATFORM_ID,d.PLATFORM_NAME, tp.ENDIAN_FORMAT
    4     FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
    5     WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
    6
    7-- 查询字符集
    8select userenv('language'from dual;

    2.1.2、获取需要迁移的业务表空间和业务用户

    排除系统表空间,避免冲突:

    1select TABLESPACE_NAME,BLOCK_SIZE,CONTENTS,STATUS
    2from dba_tablespaces
    3where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE');
    4
    5
    6select owner,tablespace_name,count(*)
    7from dba_segments 
    8where  tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE')
    9group by owner,tablespace_name order by tablespace_name;

    目标端需要删除已存在的和源库同名的表空间:

    1drop tablespace users including contents and datafiles;
    2drop tablespace ts_lhr including contents and datafiles;
    3drop tablespace ts_xxt including contents and datafiles;
    4
    5select tablespace_name,status from dba_tablespaces;

    2.1.3、表空间自包含

    需要传输的表空间为TS_LHR、TS_XXT、USERS,要确保这3个表空间为自包含的表空间。

    1-- 自包含检查
    2exec dbms_tts.transport_set_check('TS_LHR,TS_XXT,USERS',true);
    3
    4-- 查看结果,结果为空,表示为自包含
    5col violations for a70
    6select * from transport_set_violations;

    在表空间传输的中,要求表空间集为自包含的,自包含表示用于传输的内部表空间集没有引用指向外部表空间集。

    2.1.4、获取用户及其权限的SQL

     1SET LONG 9999
    2SELECT DBMS_METADATA.GET_DDL('USER', USERNAME) DDL_SQL FROM DBA_USERS 
    3WHERE USERNAME IN (select owner  from dba_segments 
    4where  tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE'
    5group by owner,tablespace_name) AND USERNAME NOT IN ('SYS');
    6
    7
    8SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', USERNAME) DDL_SQL FROM DBA_USERS 
    9WHERE USERNAME IN (select owner  from dba_segments 
    10where  tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE'
    11group by owner,tablespace_name) AND USERNAME NOT IN ('SYS');
    12
    13
    14SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT', USERNAME) DDL_SQL FROM DBA_USERS 
    15WHERE USERNAME IN (select owner  from dba_segments 
    16where  tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE'
    17group by owner,tablespace_name) AND USERNAME NOT IN ('SYS');
    18
    19
    20
    21SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', USERNAME) DDL_SQL FROM DBA_USERS 
    22WHERE USERNAME IN (select owner  from dba_segments 
    23where  tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE'
    24group by owner,tablespace_name) AND USERNAME NOT IN ('SYS');

    2.1.5、检查环境变量

    确保环境变量配置正确:

    1env | egrep "ORACLE_SID|ORACLE_HOME"

    结果:

    1[oracle@lhrora11204 ~]$ env | egrep "ORACLE_SID|ORACLE_HOME"
    2ORACLE_SID=LHR11G
    3ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1

    2.1.6、开启块改变跟踪功能

    Block change tracking 进程记录自从上一次0级备份以来数据块的变化,并把这些信息记录在跟踪文件中。RMAN 使用这个文件判断增量备份中需要备份的变更数据。这极大的提高了备份性能和速度,RMAN 可以不再扫描整个文件以查找变更数据。

    1ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING  FILE '/u01/app/oracle/changetracking.chg';
    2
    3col filename format a100
    4select status, filename from v$block_change_tracking;

    2.1.7、时区需要一致

    1select dbtimezone from dual;

    2.1.8、目标端补丁情况

    建议目标端打最新的PSU补丁。

    1SELECT * FROM dba_registry_history;

    2.1.9、组件检查

    目标端需要包含源端的所有组件。

    1select comp_id,comp_name,version,status from dba_registry;

    2.1.10、目标端的db_files参数不能小于源端

    1show parameter db_files

    2.1.11、迁移对象个数统计

    需要确认,非业务用户下是否有业务数据,例如SYS用户是否有业务数据:

     1-- 需要迁移的对象和数量
    2select owner, object_type, count(*)
    3 from dba_objects
    4where object_name not like 'BIN%'
    5 and owner in ('LHR','XXT')
    6group by owner, object_type
    7order by 1,2 desc;
    8
    9-- 无效对象
    10select owner, object_type, count(*)
    11 from dba_objects
    12where status <> 'VALID'
    13 and owner in ('LHR','XXT')
    14group by owner, object_type
    15order by 12 desc;
    16
    17
    18
    19
    20-- 非业务用户下是否有业务数据
    21SELECT *
    22  FROM dba_objects d
    23 where d.created >= sysdate - 10
    24   and d.object_name not like 'WR%' 
    25     and d.owner IN ('SYS','SYSTEM')
    26 order by d.created desc;

    执行过程:

     1SYS@LHR11G> select owner, object_type, count(*)
    2  2   from dba_objects
    3  3  where object_name not like 'BIN%'
    4 and owner in ('LHR','XXT')
    5group by owner, object_type
    6  6  order by 1,2 desc;
    7
    8OWNER                                                        OBJECT_TYPE                              COUNT(*)
    9------------------------------------------------------------ -------------------------------------- ----------
    10LHR                                                          VIEW                                            1
    11LHR                                                          TABLE                                           9
    12LHR                                                          SYNONYM                                         1
    13LHR                                                          SEQUENCE                                        1
    14LHR                                                          PROCEDURE                                       2
    15XXT                                                          TABLE                                           2
    16
    176 rows selected.
    18
    19SYS@LHR11G> 
    20SYS@LHR11G> select owner, object_type, count(*)
    21  2   from dba_objects
    22where status <> 'VALID'
    23 and owner in ('LHR','XXT')
    24group by owner, object_type
    25  6  order by 12 desc;
    26
    27OWNER                                                        OBJECT_TYPE                              COUNT(*)
    28------------------------------------------------------------ -------------------------------------- ----------
    29LHR                                                          PROCEDURE                                       1

    2.2、全量迁移

    在此步骤中,表空间的数据文件将从源端数据库传输到目标端数据库,本步骤只需要执行一次,数据文件传输过程中不影响源端数据库正常访问。

    此处有2种方法:dbms_file_transfer和rman方法。对于数据文件很多的情况下来说,dbms_file_transfer是推荐的方法。

    此处使用dbms_file_transfer方式。

    2.2.1、源端和目标端都需要配置XTTS脚本

     1rm -rf /u01/app/xtts/
    2rm -rf /home/oracle/scripts
    3
    4mkdir -p /u01/app/xtts/inc_bk*
    5mkdir -p /u01/app/xtts/df_bk
    6
    7mkdir -p /home/oracle/scripts
    8cd /home/oracle/scripts
    9
    10cp ~/rman_xttconvert_v3.zip /home/oracle/scripts
    11unzip rman_xttconvert_v3.zip
    12
    13
    14-- 注意修改相应参数
    15cat > /home/oracle/scripts/xtt.properties  <<"EOF"
    16tablespaces=TS_LHR,TS_XXT,USERS
    17platformid=13
    18srcdir=SOURCEDIR
    19dstdir=DESTDIR
    20srclink=ttslink
    21#dfcopydir=/u01/app/xtts/df_bk
    22backupformat=/u01/app/xtts/inc_bk
    23stageondest=/u01/app/xtts/df_bk
    24storageondest=/u01/app/oracle/oradata/LHR11G
    25backupondest=/u01/app/xtts/inc_bk
    26#cnvinst_home=/oracle/app/oracle/product/11.2.0/dbhome_1
    27#cnvinst_sid=targetdb
    28EOF

    2.2.2、创建相关directories和dblink

    1、源端创建SOURCEDIR:

    1create directory sourcedir as '/u01/app/oracle/oradata/LHR11G/';
    2grant all on directory sourcedir to public;

    2、目标端创建DESTDIR:

    1create directory DESTDIR as '/u01/app/oracle/oradata/LHR11G/';
    2grant all on directory DESTDIR to public;

    3、目标端创建DBLINK

    在目标端创建指向源端的dblink:

    1create public database link ttslink connect to system identified by lhr using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.0.3 )(PORT = 1521))  ) (CONNECT_DATA = (SERVICE_NAME = LHR11G) ) )';

    2.2.3、xttdriver.pl -S做迁移准备

    首先,确保源库处于OPEN阶段,所有表空间都处于online状态:

    1select 'ALTER TABLESPACE '||name||' READ WRITE;' exec_sql
    2from v$tablespace 
    3where NAME not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP');
    4
    5
    6select tablespace_name,status from dba_tablespaces;

    在源端执行 xttdriver.pl  -p做迁移准备:

    1cd /home/oracle/scripts
    2export TMPDIR=/home/oracle/scripts
    3$ORACLE_HOME/perl/bin/perl xttdriver.pl -S

    此过程会产生2个脚本,xttnewdatafiles.txt和getfile.sql

     1[oracle@lhrora11203 scripts]$ cat getfile.sql
    20,SOURCEDIR,ts_lhr01.dbf,DESTDIR,ts_lhr01.dbf
    31,SOURCEDIR,ts_xxt01.dbf,DESTDIR,ts_xxt01.dbf
    42,SOURCEDIR,users01.dbf,DESTDIR,users01.dbf
    5[oracle@lhrora11203 scripts]$ cat xttnewdatafiles.txt
    6::TS_LHR
    76,DESTDIR:/ts_lhr01.dbf
    8::TS_XXT
    97,DESTDIR:/ts_xxt01.dbf
    10::USERS
    114,DESTDIR:/users01.dbf

    2.2.4、将源端xttnewdatafiles.txt和getfile.sql传到目标端

    1scp /home/oracle/scripts/getfile.sql 172.17.0.4:/home/oracle/scripts/
    2
    3scp /home/oracle/scripts/xttnewdatafiles.txt 172.17.0.4:/home/oracle/scripts/

    2.2.5、在目标端执行数据文件的拷贝

    1cd /home/oracle/scripts
    2export TMPDIR=/home/oracle/scripts
    3$ORACLE_HOME/perl/bin/perl xttdriver.pl -G

    本步骤将花费数据库迁移的大部分时间,因为本步骤会传输源端的数据文件到目标端。

    本步骤执行完成,可以在目标端数据库数据文件存储目录发现从源端传输过来的数据文件。

    若字节序格式不同,也会在该步骤自动隐式进行转换。

    执行过程:

     1[oracle@lhrora11204 scripts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -G
    2============================================================
    3trace file is /home/oracle/scripts/getfile_Apr13_Tue_15_47_59_738//Apr13_Tue_15_47_59_738_.log
    4=============================================================
    5
    6--------------------------------------------------------------------
    7Parsing properties
    8--------------------------------------------------------------------
    9
    10
    11--------------------------------------------------------------------
    12Done parsing properties
    13--------------------------------------------------------------------
    14
    15
    16--------------------------------------------------------------------
    17Checking properties
    18--------------------------------------------------------------------
    19
    20
    21--------------------------------------------------------------------
    22Done checking properties
    23--------------------------------------------------------------------
    24
    25
    26--------------------------------------------------------------------
    27Getting datafiles from source
    28--------------------------------------------------------------------
    29
    30
    31--------------------------------------------------------------------
    32Executing getfile for /home/oracle/scripts/getfile_Apr13_Tue_15_47_59_738//getfile_sourcedir_ts_lhr01.dbf_0.sql
    33--------------------------------------------------------------------
    34
    35
    36--------------------------------------------------------------------
    37Executing getfile for /home/oracle/scripts/getfile_Apr13_Tue_15_47_59_738//getfile_sourcedir_ts_xxt01.dbf_1.sql
    38--------------------------------------------------------------------
    39
    40
    41--------------------------------------------------------------------
    42Executing getfile for /home/oracle/scripts/getfile_Apr13_Tue_15_47_59_738//getfile_sourcedir_users01.dbf_2.sql
    43--------------------------------------------------------------------
    44
    45
    46--------------------------------------------------------------------
    47Completed getting datafiles from source
    48--------------------------------------------------------------------
    49
    50[oracle@lhrora11204 scripts]$ ll /u01/app/oracle/oradata/LHR11G/*
    51-rw-r----- 1 oracle oinstall   9781248 Apr 13 15:48 /u01/app/oracle/oradata/LHR11G/control01.ctl
    52-rw-r----- 1 oracle oinstall 362422272 Apr 13 15:44 /u01/app/oracle/oradata/LHR11G/example01.dbf
    53-rw-r----- 1 oracle oinstall  52429312 Apr 13 15:40 /u01/app/oracle/oradata/LHR11G/redo01.log
    54-rw-r----- 1 oracle oinstall  52429312 Apr 13 15:48 /u01/app/oracle/oradata/LHR11G/redo02.log
    55-rw-r----- 1 oracle oinstall  52429312 Apr 13 15:00 /u01/app/oracle/oradata/LHR11G/redo03.log
    56-rw-r----- 1 oracle oinstall 671096832 Apr 13 15:47 /u01/app/oracle/oradata/LHR11G/sysaux01.dbf
    57-rw-r----- 1 oracle oinstall 817897472 Apr 13 15:48 /u01/app/oracle/oradata/LHR11G/system01.dbf
    58-rw-r----- 1 oracle oinstall  30416896 Apr 13 15:39 /u01/app/oracle/oradata/LHR11G/temp01.dbf
    59-rw-r----- 1 oracle oinstall  10493952 Apr 13 15:47 /u01/app/oracle/oradata/LHR11G/ts_lhr01.dbf
    60-rw-r----- 1 oracle oinstall  31465472 Apr 13 15:47 /u01/app/oracle/oradata/LHR11G/ts_xxt01.dbf
    61-rw-r----- 1 oracle oinstall 382738432 Apr 13 15:48 /u01/app/oracle/oradata/LHR11G/undotbs01.dbf
    62-rw-r----- 1 oracle oinstall   5251072 Apr 13 15:48 /u01/app/oracle/oradata/LHR11G/users01.dbf
    63[oracle@lhrora11204 scripts]$ 
    64


    2.3、XTTS  第1~n次增量前滚

    在此阶段,在源端做增量数据,从源数据库创建增量备份(内部其实是仍然使用rman增量备份),将其传输到目标端,在目标端转换为目标系统Endian格式,然后应用于转换后的目标数据文件副本,将其前滚。此阶段可以多次重复运行。每次连续的增量备份都应该比以前的增量备份花费更少的时间,并且将使目标数据文件副本与源数据库更加一致。这样对于目标库上的数据文件拷贝,通过一次次应用增量数据就可以逐渐追上源库的生产数据。

    这个阶段中的步骤可以运行多次,以使目标中的datafiles更接近源文件的时间/ SCN。在此阶段,源数据库完全可访问。

    2.3.1、产生增量数据

    1-- 产生增量数据
    2create table lhr.testxtts7 tablespace users as select * from dual;

    2.3.2、源端做增量备份

    开始做增量备份:

    1cd /home/oracle/scripts
    2export TMPDIR=/home/oracle/scripts
    3$ORACLE_HOME/perl/bin/perl xttdriver.pl -i

    上面的操作还会在 TMPDIR 目录下产生xttplan.txt.new、tsbkupmap.txt和incrbackups.txt文件:

      1[oracle@lhrora11203 scripts]$ cd /home/oracle/scripts
    2[oracle@lhrora11203 scripts]$ export TMPDIR=/home/oracle/scripts
    3[oracle@lhrora11203 scripts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -i
    4============================================================
    5trace file is /home/oracle/scripts/incremental_Apr13_Tue_15_49_28_987//Apr13_Tue_15_49_28_987_.log
    6=============================================================
    7
    8--------------------------------------------------------------------
    9Parsing properties
    10--------------------------------------------------------------------
    11
    12
    13--------------------------------------------------------------------
    14Done parsing properties
    15--------------------------------------------------------------------
    16
    17
    18--------------------------------------------------------------------
    19Checking properties
    20--------------------------------------------------------------------
    21
    22
    23--------------------------------------------------------------------
    24Done checking properties
    25--------------------------------------------------------------------
    26
    27
    28--------------------------------------------------------------------
    29Backup incremental
    30--------------------------------------------------------------------
    31
    32Prepare source for Tablespaces:
    33                  'TS_LHR'  /u01/app/xtts/df_bk
    34xttpreparesrc.sql for 'TS_LHR' started at Tue Apr 13 15:49:28 2021
    35xttpreparesrc.sql for  ended at Tue Apr 13 15:49:28 2021
    36Prepare source for Tablespaces:
    37                  'TS_XXT'  /u01/app/xtts/df_bk
    38xttpreparesrc.sql for 'TS_XXT' started at Tue Apr 13 15:49:28 2021
    39xttpreparesrc.sql for  ended at Tue Apr 13 15:49:28 2021
    40Prepare source for Tablespaces:
    41                  'USERS'  /u01/app/xtts/df_bk
    42xttpreparesrc.sql for 'USERS' started at Tue Apr 13 15:49:28 2021
    43xttpreparesrc.sql for  ended at Tue Apr 13 15:49:28 2021
    44Prepare source for Tablespaces:
    45                  ''''  /u01/app/xtts/df_bk
    46xttpreparesrc.sql for '''' started at Tue Apr 13 15:49:28 2021
    47xttpreparesrc.sql for  ended at Tue Apr 13 15:49:28 2021
    48Prepare source for Tablespaces:
    49                  ''''  /u01/app/xtts/df_bk
    50xttpreparesrc.sql for '''' started at Tue Apr 13 15:49:28 2021
    51xttpreparesrc.sql for  ended at Tue Apr 13 15:49:28 2021
    52============================================================
    53No new datafiles added
    54=============================================================
    55Prepare newscn for Tablespaces: 'TS_LHR'
    56Prepare newscn for Tablespaces: 'TS_XXT'
    57Prepare newscn for Tablespaces: 'USERS'
    58Prepare newscn for Tablespaces: ''''''''''
    59
    60--------------------------------------------------------------------
    61Starting incremental backup
    62--------------------------------------------------------------------
    63
    64
    65--------------------------------------------------------------------
    66Done backing up incrementals
    67--------------------------------------------------------------------
    68
    69[oracle@lhrora11203 scripts]$ more xttplan.txt.new
    70 TS_LHR::::3164052
    71 6
    72 TS_XXT::::3164066
    73 7
    74 USERS::::3164038
    75 4
    76[oracle@lhrora11203 scripts]$ more tsbkupmap.txt
    77USERS::4:::1=3evs6ugk_1_1
    78TS_XXT::7:::1=3cvs6ugg_1_1
    79TS_LHR::6:::1=3avs6ugc_1_1
    80[oracle@lhrora11203 scripts]$ more incrbackups.txt
    81/u01/app/xtts/inc_bk/3evs6ugk_1_1
    82/u01/app/xtts/inc_bk/3cvs6ugg_1_1
    83/u01/app/xtts/inc_bk/3avs6ugc_1_1
    84[oracle@lhrora11203 scripts]$ ll /u01/app/xtts/inc_bk/ -h
    85total 29M
    86-rw-r----- 1 oracle oinstall  40K Apr 13 15:49 3avs6ugc_1_1
    87-rw-r----- 1 oracle oinstall 9.5M Apr 13 15:49 3bvs6ugd_1_1
    88-rw-r----- 1 oracle oinstall  40K Apr 13 15:49 3cvs6ugg_1_1
    89-rw-r----- 1 oracle oinstall 9.5M Apr 13 15:49 3dvs6ugi_1_1
    90-rw-r----- 1 oracle oinstall  88K Apr 13 15:49 3evs6ugk_1_1
    91-rw-r----- 1 oracle oinstall 9.5M Apr 13 15:49 3fvs6ugl_1_1
    92[oracle@lhrora11203 scripts]$ rman target /
    93
    94Recovery Manager: Release 11.2.0.3.0 - Production on Tue Apr 13 15:50:26 2021
    95
    96Copyright (c) 19822011Oracle and/or its affiliates.  All rights reserved.
    97
    98connected to target database: LHR11G (DBID=2006729750)
    99
    100RMAN>  list backupset;
    101
    102using target database control file instead of recovery catalog
    103
    104List of Backup Sets
    105===================
    106
    107BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
    108------- ---- -- ---------- ----------- ------------ -------------------
    10978      Incr    32.00K     DISK        00:00:00     2021-04-13 15:49:32
    110        BP Key78   Status: AVAILABLE  Compressed: NO  Tag: TTS_INCR_UPDATE
    111        Piece Name: /u01/app/xtts/inc_bk/3avs6ugc_1_1
    112        Keep: NOLOGS             Until2021-04-20 15:49:32
    113  List of Datafiles in backup set 78
    114  File LV Type Ckp SCN    Ckp Time            Name
    115  ---- -- ---- ---------- ------------------- ----
    116  6       Incr 3165390    2021-04-13 15:49:32 /u01/app/oracle/oradata/LHR11G/ts_lhr01.dbf
    117
    118BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
    119------- ---- -- ---------- ----------- ------------ -------------------
    12079      Incr    9.39M      DISK        00:00:01     2021-04-13 15:49:34
    121        BP Key79   Status: AVAILABLE  Compressed: NO  Tag: TTS_INCR_UPDATE
    122        Piece Name: /u01/app/xtts/inc_bk/3bvs6ugd_1_1
    123        Keep: NOLOGS             Until2021-04-20 15:49:33
    124  Control File Included: Ckp SCN3165393      Ckp time2021-04-13 15:49:33
    125
    126BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
    127------- ---- -- ---------- ----------- ------------ -------------------
    12880      Incr    32.00K     DISK        00:00:00     2021-04-13 15:49:36
    129        BP Key80   Status: AVAILABLE  Compressed: NO  Tag: TTS_INCR_UPDATE
    130        Piece Name: /u01/app/xtts/inc_bk/3cvs6ugg_1_1
    131        Keep: NOLOGS             Until2021-04-20 15:49:36
    132  List of Datafiles in backup set 80
    133  File LV Type Ckp SCN    Ckp Time            Name
    134  ---- -- ---- ---------- ------------------- ----
    135  7       Incr 3165418    2021-04-13 15:49:36 /u01/app/oracle/oradata/LHR11G/ts_xxt01.dbf
    136
    137BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
    138------- ---- -- ---------- ----------- ------------ -------------------
    13981      Incr    9.39M      DISK        00:00:01     2021-04-13 15:49:39
    140        BP Key81   Status: AVAILABLE  Compressed: NO  Tag: TTS_INCR_UPDATE
    141        Piece Name: /u01/app/xtts/inc_bk/3dvs6ugi_1_1
    142        Keep: NOLOGS             Until2021-04-20 15:49:37
    143  Control File Included: Ckp SCN3165422      Ckp time2021-04-13 15:49:38
    144
    145BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
    146------- ---- -- ---------- ----------- ------------ -------------------
    14782      Incr    80.00K     DISK        00:00:00     2021-04-13 15:49:40
    148        BP Key82   Status: AVAILABLE  Compressed: NO  Tag: TTS_INCR_UPDATE
    149        Piece Name: /u01/app/xtts/inc_bk/3evs6ugk_1_1
    150        Keep: NOLOGS             Until2021-04-20 15:49:40
    151  List of Datafiles in backup set 82
    152  File LV Type Ckp SCN    Ckp Time            Name
    153  ---- -- ---- ---------- ------------------- ----
    154  4       Incr 3165446    2021-04-13 15:49:40 /u01/app/oracle/oradata/LHR11G/users01.dbf
    155
    156BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
    157------- ---- -- ---------- ----------- ------------ -------------------
    15883      Incr    9.39M      DISK        00:00:01     2021-04-13 15:49:42
    159        BP Key83   Status: AVAILABLE  Compressed: NO  Tag: TTS_INCR_UPDATE
    160        Piece Name: /u01/app/xtts/inc_bk/3fvs6ugl_1_1
    161        Keep: NOLOGS             Until2021-04-20 15:49:41
    162  Control File Included: Ckp SCN3165450      Ckp time2021-04-13 15:49:41
    163
    164RMAN> 

    2.3.3、将源端的增量数据传到目标端

    这里传递增量数据的时候,还需要将源端/home/oracle/scripts/目录下的 xttplan.txt、 tsbkupmap.txt和incrbackups.txt文件都传输到目标端。每当你进行一次增量的备份操作,这 3个文件的内容都会发现变化 。

    每一次增量操作之后,都需要将这 3个文件传到目标端数据库的 home/oracle/scripts/目录中。

    1-- 注意:增量内容应该拷贝到目标端的全量备份路径下
    2scp /u01/app/xtts/inc_bk/* 172.17.0.4:/u01/app/xtts/df_bk/
    3
    4
    5scp /home/oracle/scripts/xttplan.txt 172.17.0.4:/home/oracle/scripts/
    6scp /home/oracle/scripts/tsbkupmap.txt 172.17.0.4:/home/oracle/scripts/
    7scp /home/oracle/scripts/incrbackups.txt 172.17.0.4:/home/oracle/scripts/
    8


    2.3.4、目标端进行增量转换和数据写入同步

    1export XTTDEBUG=1
    2cd /home/oracle/scripts
    3export TMPDIR=/home/oracle/scripts
    4$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

    如果一套库上有多个实例的话,在执行该步骤之前,需要对环境变量进行确认,如检查当前ORACLE_SID是否是需要执行的SID,否则可能会恢复到其他实例上。(并非是真实的恢复,因为其他实例跟这个备份集没有任何关系,但恢复的过程会在其他实例上进行一遍,如关闭/启动数据库,包括增量恢复的日志都会在另一个数据库上显示。)如果发生了这种事情,不用紧张,调整好环境变量,再执行一次perl xttdriver.pl –r即可。误操作的实例不受影响。

    注:
    1.每次增量时都必须复制xttplan.txt、tsbkupmap.txt和incrbackups.txt,因为它们的内容在每次增量时都是不同的。
    2.不修改、不复制文件incrbackups.txt.new。
    3.该过程每次执行都会重启目标数据库。
    4.如果重新开始,那么需要删除/home/oracle/scripts/FAILED
    5.XTTDEBUG=1为打开debug模式,进行调试。Debug 模式可以打印更多的屏幕输出,并且开启 RMAN 的 debug 模式。要启用 debug 模式,或者以 -d 参数运行 xttdriver.pl 或者在运行 xttdriver.pl 前设置环境变量 XTTDEBUG=1。这个参数接受3种级别,-d[1/2/3]级别3会显示最多的信息。

    执行过程:

     1[oracle@lhrora11204 scripts]$ cd /home/oracle/scripts
    2[oracle@lhrora11204 scripts]$ export TMPDIR=/home/oracle/scripts
    3[oracle@lhrora11204 scripts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -r
    4============================================================
    5trace file is /home/oracle/scripts/rollforward_Apr13_Tue_15_52_56_869//Apr13_Tue_15_52_56_869_.log
    6=============================================================
    7
    8--------------------------------------------------------------------
    9Parsing properties
    10--------------------------------------------------------------------
    11
    12
    13--------------------------------------------------------------------
    14Done parsing properties
    15--------------------------------------------------------------------
    16
    17
    18--------------------------------------------------------------------
    19Checking properties
    20--------------------------------------------------------------------
    21
    22
    23--------------------------------------------------------------------
    24Done checking properties
    25--------------------------------------------------------------------
    26
    27
    28--------------------------------------------------------------------
    29Start rollforward
    30--------------------------------------------------------------------
    31
    32
    33--------------------------------------------------------------------
    34End of rollforward phase
    35--------------------------------------------------------------------

    2.3.5、源端确定下一个增量备份的FROM_SCN

    1cd /home/oracle/scripts
    2export TMPDIR=/home/oracle/scripts
    3$ORACLE_HOME/perl/bin/perl xttdriver.pl -s

    该步骤会计算下一个FROM_SCN,将其记录在xttplan.txt文件中,然后在创建下一个增量备份时使用该SCN。

    该步骤会将-i时生成的xttplan.txt.new改名为xttplan.txt,并将原来的xttplan.txt备份。

    建议在目标端每次做完recover动作后,源端就执行一次该命令,以免遗忘。

    执行过程:

     1[oracle@lhrora11203 scripts]$ cd /home/oracle/scripts
    2[oracle@lhrora11203 scripts]$ export TMPDIR=/home/oracle/scripts
    3[oracle@lhrora11203 scripts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -s
    4============================================================
    5trace file is /home/oracle/scripts/determinescn_Apr13_Tue_15_53_08_940//Apr13_Tue_15_53_08_940_.log
    6=============================================================
    7
    8--------------------------------------------------------------------
    9Parsing properties
    10--------------------------------------------------------------------
    11
    12
    13--------------------------------------------------------------------
    14Done parsing properties
    15--------------------------------------------------------------------
    16
    17
    18--------------------------------------------------------------------
    19Checking properties
    20--------------------------------------------------------------------
    21
    22
    23--------------------------------------------------------------------
    24Done checking properties
    25--------------------------------------------------------------------
    26
    27Prepare newscn for Tablespaces: 'TS_LHR'
    28Prepare newscn for Tablespaces: 'TS_XXT'
    29Prepare newscn for Tablespaces: 'USERS'
    30Prepare newscn for Tablespaces: ''''
    31Prepare newscn for Tablespaces: ''''
    32New /home/oracle/scripts/xttplan.txt with FROM SCN's generated
    33


    2.4、XTTS  最后一次增量前滚

    2.4.1、将表空间置为RO状态

    假设我们进行了多次增量操作之后,在停机时间的时候,再将源端数据库中需要传输的表空间设置为只读模式 :

     1-- 产生增量数据
    2create table lhr.testxtts66 tablespace users as select * from dual;
    3
    4select 'ALTER TABLESPACE '||name||' READ ONLY;' exec_sql
    5from v$tablespace 
    6where NAME not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP');
    7
    8
    9SYS@LHR11G> select tablespace_name,status from dba_tablespaces;
    10
    11TABLESPACE_NAME                                              STATUS
    12------------------------------------------------------------ ------------------
    13SYSTEM                                                       ONLINE
    14SYSAUX                                                       ONLINE
    15UNDOTBS1                                                     ONLINE
    16TEMP                                                         ONLINE
    17USERS                                                        READ ONLY
    18EXAMPLE                                                      ONLINE
    19TS_LHR                                                       READ ONLY
    20TS_XXT                                                       READ ONLY

    2.4.2、源端做增量备份

    首先对上一次的增量备份目录做迁移:

    1mv /u01/app/xtts/inc_bk /u01/app/xtts/inc_bk1
    2mkdir -p /u01/app/xtts/inc_bk

    开始做增量备份:

    1cd /home/oracle/scripts
    2export TMPDIR=/home/oracle/scripts
    3$ORACLE_HOME/perl/bin/perl xttdriver.pl -i

    2.4.3、将源端的增量数据传到目标端

    这里传递增量数据的时候,还需要将源端/home/oracle/scripts/目录下的 xttplan.txt、 tsbkupmap.txt和incrbackups.txt文件都传输到目标端。每当你进行一次增量的备份操作,这 3个文件的内容都会发现变化 。

    每一次增量操作之后,都需要将这 3个文件传到目标端数据库的 home/oracle/scripts/目录中。

    1-- 注意:增量内容应该拷贝到目标端的全量备份路径下
    2scp /u01/app/xtts/inc_bk/* 172.17.0.4:/u01/app/xtts/df_bk/
    3
    4
    5scp /home/oracle/scripts/xttplan.txt 172.17.0.4:/home/oracle/scripts/
    6scp /home/oracle/scripts/tsbkupmap.txt 172.17.0.4:/home/oracle/scripts/
    7scp /home/oracle/scripts/incrbackups.txt 172.17.0.4:/home/oracle/scripts/
    8


    2.4.4、目标端进行增量转换和数据写入同步

    1cd /home/oracle/scripts
    2export TMPDIR=/home/oracle/scripts
    3$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

    2.5、迁移元数据

    注意在导出时,TRANSPORT_TABLESPACES参数需要的表空间要写全,别遗漏。
    在目标端进行IMPDP时,transport_datafiles需要将所有的数据文件添加进去。
    如果数据文件很多,人为添加容易出错,可以使用perl xttdriver.pl –e获取全部数据文件列表。

    2.5.1、在目标库创建业务用户

    相关脚本在前边的准备阶段已经准备好了:

    1create user xxt identified by lhr;
    2create user lhr identified by lhr;
    3grant dba to xxt,lhr;

    可以使用导出和导入分开来执行,也可以直接通过network_link来做远程导入,而不需要做导出操作:

    2.5.2、导入xtts的元数据

    生成导入脚本:

     1-- 在目标端可以执行如下命令生成impdp,命令在xttplugin.txt文件
    2[oracle@lhrora11204 scripts]$ cd /home/oracle/scripts
    3[oracle@lhrora11204 scripts]$ export TMPDIR=/home/oracle/scripts
    4[oracle@lhrora11204 scripts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -e
    5============================================================
    6trace file is /home/oracle/scripts/generate_Apr13_Tue_15_58_53_193//Apr13_Tue_15_58_53_193_.log
    7=============================================================
    8
    9--------------------------------------------------------------------
    10Parsing properties
    11--------------------------------------------------------------------
    12
    13
    14--------------------------------------------------------------------
    15Done parsing properties
    16--------------------------------------------------------------------
    17
    18
    19--------------------------------------------------------------------
    20Checking properties
    21--------------------------------------------------------------------
    22
    23
    24--------------------------------------------------------------------
    25Done checking properties
    26--------------------------------------------------------------------
    27
    28
    29--------------------------------------------------------------------
    30Generating plugin
    31--------------------------------------------------------------------
    32
    33
    34--------------------------------------------------------------------
    35Done generating plugin file /home/oracle/scripts/xttplugin.txt
    36--------------------------------------------------------------------
    37
    38
    39[oracle@lhrora11204 scripts]$ more /home/oracle/scripts/xttplugin.txt
    40impdp directory=<DATA_PUMP_DIR> logfile=<tts_imp.log> \
    41network_link=<ttslink> transport_full_check=no \
    42transport_tablespaces=TS_LHR,TS_XXT,USERS \
    43transport_datafiles='/u01/app/oracle/oradata/LHR11G/ts_lhr01.dbf','/u01/app/oracle/oradata/LHR11G/ts_xxt01.dbf','/u01/app/oracle/oradata/LHR11G/users01.dbf'

    在目标端开始导入:

     1-- 目标端创建dblink
    2create public database link ttslink connect to system identified by lhr using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.0.3 )(PORT = 1521))  ) (CONNECT_DATA = (SERVICE_NAME = LHR11G) ) )';
    3
    4
    5-- 利用dblink直接迁移元数据,这里只会迁移表、索引、约束等,因为其它对象存储在系统表空间中
    6impdp system/lhr directory=DATA_PUMP_DIR logfile=tts_imp_lhr.log \
    7network_link=ttslink transport_full_check=no \
    8EXCLUDE=STATISTICS  \
    9transport_tablespaces=TS_LHR,TS_XXT,USERS \
    10transport_datafiles='/u01/app/oracle/oradata/LHR11G/ts_lhr01.dbf','/u01/app/oracle/oradata/LHR11G/ts_xxt01.dbf','/u01/app/oracle/oradata/LHR11G/users01.dbf'

    执行过程:

     1[oracle@lhrora11204 scripts]$ impdp system/lhr directory=DATA_PUMP_DIR   \
    2> network_link=ttslink transport_full_check=no \
    3> EXCLUDE=STATISTICS  \
    4> transport_tablespaces=TS_LHR,TS_XXT,USERS \
    5> transport_datafiles='/u01/app/oracle/oradata/LHR11G/ts_lhr01.dbf','/u01/app/oracle/oradata/LHR11G/ts_xxt01.dbf','/u01/app/oracle/oradata/LHR11G/users01.dbf'
    6
    7Import: Release 11.2.0.4.0 - Production on Tue Apr 13 16:04:45 2021
    8
    9Copyright (c) 19822011Oracle and/or its affiliates.  All rights reserved.
    10
    11
    12Connected toOracle Database 11Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    13With the Partitioning, OLAP, Data Mining and Real Application Testing options
    14Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/******** directory=DATA_PUMP_DIR network_link=ttslink transport_full_check=no EXCLUDE=STATISTICS transport_tablespaces=TS_LHR,TS_XXT,USERS transport_datafiles=/u01/app/oracle/oradata/LHR11G/ts_lhr01.dbf,/u01/app/oracle/oradata/LHR11G/ts_xxt01.dbf,/u01/app/oracle/oradata/LHR11G/users01.dbf 
    15Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
    16Processing object type TRANSPORTABLE_EXPORT/TABLE
    17Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX
    18Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT
    19Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
    20Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/REF_CONSTRAINT
    21Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
    22Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
    23Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Tue Apr 13 16:06:19 2021 elapsed 0 00:01:27
    24


    2.5.3、导入存储过程、触发器、函数、包、视图、序列

    1-- 导入存储过程、触发器、函数、包、视图、序列
    2impdp system/lhr directory=DATA_PUMP_DIR \
    3network_link=ttslink schemas=LHR,XXT content=metadata_only exclude=index,table,constraint parallel=8

    执行过程:

     1[oracle@lhrora11204 scripts]$ impdp system/lhr directory=DATA_PUMP_DIR \
    2> network_link=ttslink schemas=LHR,XXT content=metadata_only exclude=index,table,constraint parallel=8
    3
    4Import: Release 11.2.0.4.0 - Production on Tue Apr 13 16:07:08 2021
    5
    6Copyright (c) 19822011Oracle and/or its affiliates.  All rights reserved.
    7
    8Connected toOracle Database 11Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    9With the Partitioning, OLAP, Data Mining and Real Application Testing options
    10Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01":  system/******** directory=DATA_PUMP_DIR network_link=ttslink schemas=LHR,XXT content=metadata_only exclude=index,table,constraint parallel=8 
    11Processing object type SCHEMA_EXPORT/USER
    12Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
    13Processing object type SCHEMA_EXPORT/ROLE_GRANT
    14Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
    15Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
    16Processing object type SCHEMA_EXPORT/SYNONYM/SYNONYM
    17Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
    18Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
    19Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
    20Processing object type SCHEMA_EXPORT/VIEW/VIEW
    21Job "SYSTEM"."SYS_IMPORT_SCHEMA_01"  successfully completed at Tue Apr 13 16:07:31 2021 elapsed 0 00:00:20
    22


    2.5.4、导入公共同义词和dblink等其它对象

     1-- 导入其它对象
    2impdp system/lhr directory=DATA_PUMP_DIR \
    3network_link=ttslink full=y include=JOB,PROCOBJ,USER,DB_LINK,DIRECTORY,SYNONYM,PROFILE,ROLE parallel=8
    4
    5impdp system/lhr directory=DATA_PUMP_DIR \
    6network_link=ttslink full=y content=metadata_only exclude=index,table,constraint parallel=8
    7
    8
    9-- 导入公共同义词
    10set long 9999
    11select dbms_metadata.get_ddl('SYNONYM',SYNONYM_NAME,OWNER) 
    12FROM dba_synonyms 
    13where owner='PUBLIC' and table_owner in  ('LHR','XXT');
    14
    15
    16-- 导入dblink
    17set long 9999
    18select dbms_metadata.get_ddl('DB_LINK',DB_LINK,OWNER) 
    19FROM DBA_DB_LINKS;

    2.6、迁移完成后的收尾工作

    2.6.1、查看源端、目标端的数据一致性

     1select count(*) from lhr.testxtts7;
    2select count(*) from lhr.testxtts77;
    3
    4select owner, object_type, count(*)
    5 from dba_objects
    6where object_name not like 'BIN%'
    7 and owner in ('LHR','XXT')
    8group by owner, object_type
    9order by 1,2 desc;
    10
    11select owner, object_type, count(*)
    12 from dba_objects
    13where status <> 'VALID'
    14 and owner in ('LHR','XXT')
    15group by owner, object_type
    16order by 12 desc;

    执行过程:

     1SYS@LHR11G> select owner, object_type, count(*)
    2  2   from dba_objects
    3where object_name not like 'BIN%'
    4group by owner, object_type
    5 and owner in ('LHR','XXT')
    6  5  group by owner, object_type
    7  6  order by 1,2 desc;
    8
    9OWNER                                                        OBJECT_TYPE                              COUNT(*)
    10------------------------------------------------------------ -------------------------------------- ----------
    11LHR                                                          VIEW                                            1
    12LHR                                                          TABLE                                          11
    13LHR                                                          SYNONYM                                         1
    14LHR                                                          SEQUENCE                                        1
    15LHR                                                          PROCEDURE                                       2
    16XXT                                                          TABLE                                           2
    17
    186 rows selected.
    19
    20SYS@LHR11G> 
    21SYS@LHR11G> select owner, object_type, count(*)
    22  2   from dba_objects
    23where status <> 'VALID'
    24 and owner in ('LHR','XXT')
    25  5  group by owner, object_type
    26  6  order by 12 desc;
    27
    28OWNER                                                        OBJECT_TYPE                              COUNT(*)
    29------------------------------------------------------------ -------------------------------------- ----------
    30LHR                                                          PROCEDURE                                       1

    迁移后的对象个数和之前一致。

    2.6.2、更改用户默认表空间

    1alter user xxt default tablespace USERS;

    2.6.3、目标库的表空间修改为读写模式

    1select 'ALTER TABLESPACE '||name||' READ WRITE;' exec_sql
    2from v$tablespace 
    3where NAME not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP');
    4
    5
    6select tablespace_name,status from dba_tablespaces;

    执行过程:

     1SYS@LHR11G> select 'ALTER TABLESPACE '||name||' READ WRITE;' exec_sql
    2  2  from v$tablespace 
    3  3  where NAME not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP');
    4
    5EXEC_SQL
    6----------------------------------------------------------------------------------------------------------------------
    7ALTER TABLESPACE TS_LHR READ WRITE;
    8ALTER TABLESPACE TS_XXT READ WRITE;
    9ALTER TABLESPACE USERS READ WRITE;
    10
    11
    12SYS@LHR11G> 
    13SYS@LHR11G> select tablespace_name,status from dba_tablespaces;
    14
    15TABLESPACE_NAME                                              STATUS
    16------------------------------------------------------------ ------------------
    17SYSTEM                                                       ONLINE
    18SYSAUX                                                       ONLINE
    19UNDOTBS1                                                     ONLINE
    20TEMP                                                         ONLINE
    21USERS                                                        READ ONLY
    22TS_LHR                                                       READ ONLY
    23TS_XXT                                                       READ ONLY
    24
    257 rows selected.
    26
    27SYS@LHR11G> ALTER TABLESPACE TS_LHR READ WRITE;
    28Tablespace altered.
    29
    30SYS@LHR11G> ALTER TABLESPACE TS_XXT READ WRITE;
    31Tablespace altered.
    32
    33SYS@LHR11G> ALTER TABLESPACE USERS READ WRITE;
    34Tablespace altered.
    35
    36SYS@LHR11G> select tablespace_name,status from dba_tablespaces;
    37
    38TABLESPACE_NAME                                              STATUS
    39------------------------------------------------------------ ------------------
    40SYSTEM                                                       ONLINE
    41SYSAUX                                                       ONLINE
    42UNDOTBS1                                                     ONLINE
    43TEMP                                                         ONLINE
    44USERS                                                        ONLINE
    45TS_LHR                                                       ONLINE
    46TS_XXT                                                       ONLINE
    47
    487 rows selected.

    2.6.4、校验数据文件完整性

    运行RMAN,通过运行VALIDATE TABLESPACE检查物理和逻辑块损坏情况,如下所示:

     1RMAN> validate tablespace TS_LHR,TS_XXT,USERS check logical;
    2
    3Starting validate at 2021-04-13 16:09:23
    4using target database control file instead of recovery catalog
    5allocated channel: ORA_DISK_1
    6channel ORA_DISK_1: SID=192 device type=DISK
    7channel ORA_DISK_1: starting validation of datafile
    8channel ORA_DISK_1: specifying datafile(s) for validation
    9input datafile file number=00006 name=/u01/app/oracle/oradata/LHR11G/ts_xxt01.dbf
    10input datafile file number=00004 name=/u01/app/oracle/oradata/LHR11G/ts_lhr01.dbf
    11input datafile file number=00007 name=/u01/app/oracle/oradata/LHR11G/users01.dbf
    12channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
    13List of Datafiles
    14=================
    15File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    16---- ------ -------------- ------------ --------------- ----------
    174    OK     0              53           1280            2315665   
    18  File Name: /u01/app/oracle/oradata/LHR11G/ts_lhr01.dbf
    19  Block Type Blocks Failing Blocks Processed
    20  ---------- -------------- ----------------
    21  Data       0              1065            
    22  Index      0              0               
    23  Other      0              162             
    24
    25File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    26---- ------ -------------- ------------ --------------- ----------
    276    OK     0              3705         3840            2315459   
    28  File Name: /u01/app/oracle/oradata/LHR11G/ts_xxt01.dbf
    29  Block Type Blocks Failing Blocks Processed
    30  ---------- -------------- ----------------
    31  Data       0              2               
    32  Index      0              0               
    33  Other      0              133             
    34
    35File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    36---- ------ -------------- ------------ --------------- ----------
    377    OK     0              17           672             3165644   
    38  File Name: /u01/app/oracle/oradata/LHR11G/users01.dbf
    39  Block Type Blocks Failing Blocks Processed
    40  ---------- -------------- ----------------
    41  Data       0              100             
    42  Index      0              37              
    43  Other      0              486             
    44
    45Finished validate at 2021-04-13 16:09:25

    2.6.5、收集统计信息

    1exec dbms_stats.gather_database_stats(degree => 8);
    2exec dbms_stats.gather_dictionary_stats(degree => 8);
    3exec dbms_stats.gather_fixed_objects_stats();

    7、总结

    1、若使用rman方式,则源端和目标端的文件系统需要留有足够的空间
    2、本文所有操作,均在oracle用户下执行。
    3、如果使用dbms_file_Transfer,那么dbms_file_Transfer准备阶段方法要求目标数据库为11.2.0.4。如果目标端是11.2.0.3或更早的版本,那么需要配置一个增量转换实例。
    4、若执行xttdriver.pl脚本报错,要想重新执行,那么需要删除文件FAILED
    5、每次执行增量恢复xttdriver.pl -r时,都会重启目标端数据库。如果目标端是一个在用的生产库,那么需要创建一个临时实例,这样就不会影响生产库。
    1[oracle@dest]$ export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/xtt_home
    2[oracle@dest]$ export ORACLE_SID=xtt
    3[oracle@dest]$ cat  > $ORACLE_HOME/dbs/init$ORACLE_SID.ora << "EOF"
    4db_name=xtt
    5compatible=11.2.0.4.0
    6EOF
    7
    8[oracle@dest]$ sqlplus / as sysdba
    9SQL> startup nomount
    6、XTTS停机的关键的时间点是增量的备份和恢复的时间,以及元数据的导入时间。所以,可以通过如下手段减少XTTS的停机时间:
    • 在源库开启块改变跟踪功能BCT
    • 开启并行备份,例如:RMAN> configure device type disk parallelism 8;
    • 提升impdp导入元数据库的速度,例如排除统计信息,开启并行等
    • 临时提高源库到目标库的带宽网络
    7、迁移时尽量减少增量的批次,因为操作批次越多越容易出错
    8、导入元数据时,需要分2次导入,第1次导入表、索引等,第2次导入存储过程、触发器、函数、包、同义词、dblink、序列等。
    9、只有被迁移表空间里物理存储的数据库对象才会被拷贝至目标系统;如果要迁移存储在其它表空间的其它类型的对象(比如存储在 SYSTEM 表空间内的 pl/sql 对象,sequences 等),你可以使用数据泵来拷贝这些对象至目标系统。

       

    注意:本文所使用的的测试环境皆为docker环境,可以参考:
    所有版本的Oracle环境:https://mp.weixin.qq.com/s/XJxgyCPcVTdhlPq7VcTMDg
    11.2.0.4的Oracle环境: https://mp.weixin.qq.com/s/1Z630TbilkQ3aAyOcosl4w
    11.2.0.3的Oracle环境:https://mp.weixin.qq.com/s/jb0hnhsCwyGWjOmP2biGJA

     

    姊妹篇文章:【DB宝52】Oracle异构平台迁移利器之XTTS(使用rman方式)


    本文结束。


    • 微信公众号:DB宝,作者:小麦苗
    • 作者博客地址:http://blog.itpub.net/26736162/
    • 作者微信:db_bao

    • 作者QQ:646634621,QQ群:230161599、618766405
    • 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL DBA培训
    • 版权所有,欢迎分享本文,转载请保留出处

    • 若有侵权请联系小麦苗删除

      ★DB宝分享的IT资料:https://mp.weixin.qq.com/s/Iwsy-zkzwgs8nYkcMz29ag
      ★DB宝笔试面试详解:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

      长按下图识别二维码,关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。


      文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论