• Oracle-使用XTTS方式迁移11G到PDB数据库


    前言:

    Oracle11G迁移到12c之后的PDB升级方式主要有expdp/impdp,TTS以及XTTS,其中,expdp/impdp的迁移方式适用于小数据量的迁移,停机窗口较长,TTS的迁移方式使用于中小数据量的迁移,停机窗口长,而XTTS由于支持增量同步,跨平台迁移,所以适用于大数据量的迁移,并且停机窗口相对较短。

    本文接下来将演示的迁移案例是通过XTTS方式将Oracle11g迁移到Oracle12.2上的pdb数据库。

    环境信息:

    源端目标端
    架构RAC-NON-CDBRAC-CDB
    操作系统LinuxLinux
    版本11.2.0.4.19011512.2.0.1.220118
    db_namedbocscdbocs
    pdb_namepdbocs

    迁移案例:

    将Oracle11G上的数据迁移到Oracle12.2上的pdb,主要的涉及用户为ocs,bss,采用xtts的方式进行,使用 rman_xttconvert_VER4脚本

    源端安装xtts工具

    1. [oracle@source xtts]$ unzip /tmp/rman_xttconvert_VER4.3.zip
    2. Archive: /tmp/rman_xttconvert_VER4.3.zip
    3. inflating: xtt.newproperties
    4. inflating: xtt.properties
    5. inflating: xttcnvrtbkupdest.sql
    6. inflating: xttdbopen.sql
    7. inflating: xttdriver.pl
    8. inflating: xttprep.tmpl
    9. extracting: xttstartupnomount.sql

    源端确认需要迁移用户涉及的表空间

    1. select DEFAULT_TABLESPACE
    2. from dba_users
    3. where username in ('OCS','BSS')
    4. union
    5. select distinct tablespace_name
    6. from dba_segments
    7. where owner in ('OCS','BSS')
    8. union
    9. select distinct tablespace_name
    10. from dba_tables
    11. where owner in ('OCS','BSS')
    12. union
    13. select distinct tablespace_name
    14. from dba_indexes
    15. where owner in ('OCS','BSS')
    16. union
    17. select distinct tablespace_name
    18. from dba_lobs
    19. where owner in ('OCS','BSS');
    20. ---涉及的表空间
    21. DEFAULT_TABLESPACE
    22. ------------------------------
    23. TICKET_DATA1
    24. TICKET_DATA2
    25. TICKET_INDEX1
    26. TICKET_INDEX2

    查询表空间里面是否涉及其他用户对象

    1. select owner,table_name,tablespace_name
    2. from dba_tables
    3. where tablespace_name in ('TICKET_DATA1','TICKET_DATA2','TICKET_INDEX1','TICKET_INDEX2') and owner not in ('OCS','BSS');
    4. select owner,table_name,tablespace_name
    5. from dba_indexes
    6. where tablespace_name in ('TICKET_DATA1','TICKET_DATA2','TICKET_INDEX1','TICKET_INDEX2') and owner not in ('OCS','BSS');
    7. select owner,segment_name,tablespace_name
    8. from dba_segments
    9. where tablespace_name in ('TICKET_DATA1','TICKET_DATA2','TICKET_INDEX1','TICKET_INDEX2') and owner not in ('OCS','BSS');
    10. select owner,table_name,tablespace_name
    11. from dba_lobs
    12. where tablespace_name in ('TICKET_DATA1','TICKET_DATA2','TICKET_INDEX1','TICKET_INDEX2') and owner not in ('OCS','BSS');

    表空间自包含检查

    1. --严格检查:full_check=true
    2. --要去表关联的约束,索引,lob字段等对象都需要包含在整个传输表空间集里面
    3. --执行自包含检查
    4. exec dbms_tts.transport_set_check('TICKET_DATA1,TICKET_DATA2,TICKET_INDEX1,TICKET_INDEX2',TRUE,TRUE);
    5. --查询是否有自包含对象,对于出现的对象,都需要进行处理,迁移到这些表空间里面
    6. select * from transport_set_violations;

    目标端创建配置空PDBOCS

    通过dbca或者create pluggable database命令行创建

    源端配置xtt.properties文件

    1. #tablespace要迁移的表空间名称
    2. #平台的ID,LINUX为13 通过可以V$TRANSPORTABLE_PLATFORM查询确认
    3. #src_scratch_location源端备份存放路径
    4. #dest_scratch_location目标端备份存放的路径
    5. #目标端数据文件恢复路径
    6. #usermantransport=1 - It is recommended this be set if the source database is running 12c or higher. This causes new 12c (and higher) functionality to be used when this parameter is set
    7. cat /tmp/xtts/xtt.properties
    8. tablespaces=TICKET_DATA1,TICKET_DATA2,TICKET_INDEX1,TICKET_INDEX2
    9. platformid=13
    10. src_scratch_location=/tmp/backup
    11. dest_scratch_location=/tmp/backup
    12. dest_datafile_location=+mgmt/cdbocs/pdbocs
    13. parallel=8

    将源端的脚本以及配置文件复制到目标端

    scp -rp /tmp/xtts/ oracle@dest:/tmp

    数据初始化:xtts源端执行表空间全量备份

    1. --设置xtts的输出文件路径,跟xtts安装目录在相同的路径下
    2. export TMPDIR=/tmp/xtts
    3. $ORACLE_HOME/perl/bin/perl /tmp/xtts/xttdriver.pl --backup --debug 3

    将xtts备份文件以及res.txt文件拷贝到目标端

    1. #res.txt为表空间的数据文件信息,备份的scn号
    2. scp -rp /tmp/backup/ oracle@dest:/tmp/
    3. scp -rp /tmp/xtts/res.txt oracle@dest:/tmp/xtts/

    目标端执行xtts恢复

    1. export TMPDIR=/tmp/xtts
    2. $ORACLE_HOME/perl/bin/perl /tmp/xtts/xttdriver.pl --restore --debug 3
    3. #会将文件转化成指定的平台,并恢复到数据文件目录里面
    4. RMAN> convert from platform 'Linux x86 64-bit' datafile '/tmp/backup/TICKET_INDEX2_10.tf' format '+mgmt/TICKET_INDEX2_10.dbf' ;
    5. 2>

    源端备份增量数据

    1. --备份之前,我们创建测试数据,验证增量备份有效
    2. alter tablespace TICKET_DATA1 add datafile size 100M autoextend on next 100M;
    3. create table ocs.test2022 as select * from dba_objects;
    4. create table bss.test2022 as select * from dba_objects;
    5. --备份增量数据
    6. export TMPDIR=/tmp/xtts
    7. $ORACLE_HOME/perl/bin/perl /tmp/xtts/xttdriver.pl --backup --debug 3
    8. --会备份新添加的数据文件
    9. ============================================================
    10. 1 new datafiles added
    11. =============================================================
    12. TICKET_DATA1,/tmp/backup/TICKET_DATA1_17.tf
    13. ============================================================
    14. --增量备份
    15. / as sysdba
    16. size of tablespace 8
    17. No. of tablespaces per batch 1
    18. TABLESPACE STRING :'TICKET_DATA1'
    19. Prepare newscn for Tablespaces: 'TICKET_DATA1'
    20. TABLESPACE STRING :'TICKET_DATA2'
    21. Prepare newscn for Tablespaces: 'TICKET_DATA2'
    22. TABLESPACE STRING :'TICKET_INDEX1'
    23. Prepare newscn for Tablespaces: 'TICKET_INDEX1'
    24. TABLESPACE STRING :'TICKET_INDEX2'
    25. Prepare newscn for Tablespaces: 'TICKET_INDEX2'
    26. TABLESPACE STRING :''''''''
    27. Prepare newscn for Tablespaces: ''''''''
    28. New /tmp/xtts/xttplan.txt with FROM SCN's generated

    将xtts增量备份文件以及res.txt文件拷贝到目标端

    1. --增加的数据文件
    2. scp TICKET_DATA1_17.tf oracle@dest:/tmp/backup/
    3. --增量备份(incrbackups.txt存放增量备份的路径)
    4. scp 'cat incrbackups.txt' oracle@dest:/tmp/backup/
    5. --res文件
    6. scp -rp /tmp/xtts/res.txt oracle@dest:/tmp/xtts/

    目标端执行xtts增量恢复

    1. 注意:增量恢复会重启实例,如果上面有跑生产,可以通过指定中间实例进行增量恢复cnvinst_sid
    2. ################################################
    3. --------------------------------------------------------------------
    4. Start rollforward
    5. --------------------------------------------------------------------
    6. ROLLFORWARD: Starting DB in nomount mode
    7. ORACLE instance started.
    8. Total System Global Area 1845493760 bytes
    9. Fixed Size 8793976 bytes
    10. Variable Size 620757128 bytes
    11. Database Buffers 1207959552 bytes
    12. Redo Buffers 7983104 bytes
    13. rdfno 6,11,17
    14. #################################################
    15. --执行增量恢复
    16. export TMPDIR=/tmp/xtts
    17. $ORACLE_HOME/perl/bin/perl /tmp/xtts/xttdriver.pl --restore --debug 3
    18. #################################################执行完成
    19. CONVERTED BACKUP PIECE/tmp/backup/xib_0u1ckvan_1_1_9_14_10
    20. PL/SQL procedure successfully completed.
    21. Entering RollForwardAfter applySetDataFile
    22. Done: applyDataFileTo
    23. Done: applyDataFileTo
    24. Done: RestoreSetPiece
    25. Done: RestoreBackupPiece
    26. PL/SQL procedure successfully completed.

    源端最后一次增量备份(应用停止写入,正式迁移)

    源端将表空间设置为只读

    1. alter tablespace TICKET_DATA1 read only;
    2. alter tablespace TICKET_DATA2 read only;
    3. alter tablespace TICKET_INDEX1 read only;
    4. alter tablespace TICKET_INDEX2 read only;

    源端备份增量数据

    1. --备份增量数据
    2. export TMPDIR=/tmp/xtts
    3. $ORACLE_HOME/perl/bin/perl /tmp/xtts/xttdriver.pl --backup --debug 3
    4. ##############################在只读表空间以下报错可以忽略
    5. Warning:
    6. ------
    7. Warnings found in executing /tmp/xtts/backup_Nov12_Sat_12_49_09_957//xttpreparenextiter.sql
    8. ####################################################################
    9. DECLARE*
    10. ERROR at line 1:
    11. ORA-20001: TABLESPACE(S) IS READONLY OR,
    12. OFFLINE JUST CONVERT, COPY
    13. ORA-06512: at line 284
    14. TABLESPACE STRING :'TICKET_INDEX2'
    15. Prepare newscn for Tablespaces: 'TICKET_INDEX2'
    16. DECLARE*
    17. ERROR at line 1:
    18. ORA-20001: TABLESPACE(S) IS READONLY OR,
    19. OFFLINE JUST CONVERT, COPY
    20. ORA-06512: at line 284

    将xtts最后一次增量备份文件以及res.txt文件拷贝到目标端

    1. --增量备份(incrbackups.txt存放增量备份的路径)
    2. scp 'cat incrbackups.txt' oracle@dest:/tmp/backup/
    3. --res文件
    4. scp -rp /tmp/xtts/res.txt oracle@dest:/tmp/xtts/

    目标端执行xtts最后一次增量恢复

    1. --执行增量恢复
    2. export TMPDIR=/tmp/xtts
    3. $ORACLE_HOME/perl/bin/perl /tmp/xtts/xttdriver.pl --restore --debug 3
    4. #################################################执行完成
    5. CONVERTED BACKUP PIECE/tmp/backup/xib_121cl0ku_1_1_9_14_10
    6. PL/SQL procedure successfully completed.
    7. Entering RollForwardAfter applySetDataFile
    8. Done: applyDataFileTo
    9. Done: applyDataFileTo
    10. Done: RestoreSetPiece
    11. Done: RestoreBackupPiece
    12. PL/SQL procedure successfully completed.
    13. --------------------------------------------------------------------
    14. End of rollforward phase

    源端获取bss,ocs用户创建语句

    1. set linesize 400
    2. set pagesize 400
    3. set long 9999
    4. set longc 9999
    5. select dbms_metadata.get_ddl('USER','OCS') from dual;
    6. --------------------------------------------------------------------------------
    7. CREATE USER "OCS" IDENTIFIED BY VALUES 'S:867CF33A6FD469A1EFCF4CECBF8432EBBF7
    8. 864F7E10A34751A89E46CFD69;0EEF32CD09805F9A'
    9. DEFAULT TABLESPACE "TICKET_DATA1"
    10. TEMPORARY TABLESPACE "TEMP"
    11. select dbms_metadata.get_ddl('USER','BSS') from dual;
    12. --------------------------------------------------------------------------------
    13. CREATE USER "BSS" IDENTIFIED BY VALUES 'S:794E754CCFE417133AAD13503F559006229
    14. 1F950862CDF6D4CC2346BA772;92CE18C581740B8C'
    15. DEFAULT TABLESPACE "TICKET_DATA1"
    16. TEMPORARY TABLESPACE "TEMP"

    目标端pdbocs创建用户bss,ocs

    1. --要进入pdb里面创建
    2. sqlplus / as sysdba
    3. alter session set container=pdbocs;
    4. --创建ocs,由于表空间还未导入,所以先不设置用户默认表空间
    5. CREATE USER "OCS" IDENTIFIED BY VALUES 'S:867CF33A6FD469A1EFCF4CECBF8432EBBF7
    6. 864F7E10A34751A89E46CFD69;0EEF32CD09805F9A'
    7. TEMPORARY TABLESPACE "TEMP" ;
    8. --创建bss
    9. CREATE USER "BSS" IDENTIFIED BY VALUES 'S:794E754CCFE417133AAD13503F559006229
    10. 1F950862CDF6D4CC2346BA772;92CE18C581740B8C'
    11. TEMPORARY TABLESPACE "TEMP";

    源端导出表空间元数据

    1. --创建导出目录
    2. create directory xttsdir as '/tmp/backup';
    3. --执行导出
    4. cat exp.par
    5. dumpfile=xttdump.dmp
    6. directory=xttsdir
    7. exclude=statistics
    8. transport_tablespaces=TICKET_DATA1,TICKET_DATA2,TICKET_INDEX1,TICKET_INDEX2
    9. transport_full_check=yes
    10. logfile=xtts_export.log
    11. expdp system/oracle parfile=exp.par
    12. ################################################
    13. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    14. With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
    15. Data Mining and Real Application Testing options
    16. Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/******** parfile=exp.par
    17. Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
    18. Processing object type TRANSPORTABLE_EXPORT/TABLE
    19. Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX
    20. Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
    21. Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
    22. Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
    23. ******************************************************************************
    24. Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
    25. /tmp/backup/xttdump.dmp
    26. ******************************************************************************
    27. Datafiles required for transportable tablespace TICKET_DATA1:
    28. +DATA/dbocs/datafile/ticket_data1.273.1120566217
    29. +DATA/dbocs/datafile/ticket_data1.294.1036076261
    30. +DATA/dbocs/datafile/ticket_data1.303.1036340585
    31. Datafiles required for transportable tablespace TICKET_DATA2:
    32. +DATA/dbocs/datafile/ticket_data2.258.1036349799
    33. +DATA/dbocs/datafile/ticket_data2.260.1036340629
    34. +DATA/dbocs/datafile/ticket_data2.295.1036076315
    35. Datafiles required for transportable tablespace TICKET_INDEX1:
    36. +DATA/dbocs/datafile/ticket_index1.297.1036076349
    37. Datafiles required for transportable tablespace TICKET_INDEX2:
    38. +DATA/dbocs/datafile/ticket_index2.270.1036350007
    39. +DATA/dbocs/datafile/ticket_index2.300.1036076367
    40. +DATA/dbocs/datafile/ticket_index2.302.1036337527
    41. Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Sat Nov 12 13:28:40 2022 elapsed 0 00:00:59

    目标端pdbocs导入表空间元数据

    1. --​dmp拷贝到目标端
    2. scp /tmp/backup/xttdump.dmp oracle@dest:/tmp/backup/
    3. --创建导入目录
    4. sqlplus / as sysdba
    5. alter session set container=pdbocs;
    6. create directory xttsdir as '/tmp/backup';
    7. --获取transport_datafiles路径,从dfcopy.txt
    8. [oracle@rac1 xtts]$ cat /tmp/xtts/dfcopy.txt|awk -F ':' '{a=a$4"," } END {print a}'
    9. +mgmt/cdbocs/pdbocs/TICKET_INDEX1_8.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA1_11.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA2_7.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA2_13.dbf,+mgmt/cdbocs/pdbocs/TICKET_INDEX2_9.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA1_6.dbf,+mgmt/cdbocs/pdbocs/TICKET_INDEX2_14.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA2_12.dbf,+mgmt/cdbocs/pdbocs/TICKET_INDEX2_10.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA1_17.dbf,
    10. --执行导入
    11. cat imp.par
    12. dumpfile=xttdump.dmp
    13. directory=xttsdir
    14. transport_datafiles=+mgmt/cdbocs/pdbocs/TICKET_INDEX1_8.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA1_11.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA2_7.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA2_13.dbf,+mgmt/cdbocs/pdbocs/TICKET_INDEX2_9.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA1_6.dbf,+mgmt/cdbocs/pdbocs/TICKET_INDEX2_14.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA2_12.dbf,+mgmt/cdbocs/pdbocs/TICKET_INDEX2_10.dbf,+mgmt/cdbocs/pdbocs/TICKET_DATA1_17.dbf
    15. logfile=tts_import.log
    16. --要连入pdb里面导入
    17. impdp system/oracle@dest:1521/pdbocs parfile=imp.par
    18. --导入完成
    19. Import: Release 12.2.0.1.0 - Production on Sat Dec 3 22:15:47 2022
    20. Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
    21. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
    22. Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
    23. Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/********@192.168.1.200:1521/pdbocs parfile=imp.par
    24. Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
    25. Processing object type TRANSPORTABLE_EXPORT/TABLE
    26. Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX
    27. Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
    28. Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
    29. Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Sat Dec 3 22:16:07 2022 elapsed 0 00:00:17

    验证表空间是否正常

    validate tablespace PDBOCS:TICKET_DATA1,PDBOCS:TICKET_DATA2,PDBOCS:TICKET_INDEX1,PDBOCS:TICKET_INDEX2  check logical;

    表空间设置为读写

    1. alter tablespace TICKET_DATA1 read write;
    2. alter tablespace TICKET_DATA2 read write;
    3. alter tablespace TICKET_INDEX1 read write;
    4. alter tablespace TICKET_INDEX2 read write;

    验证抽查数据

    1. SQL> select count(*) from bss.TEST2022;
    2. COUNT(*)
    3. ----------
    4. 86496
    5. SQL> select count(*) from ocs.test2022;
    6. COUNT(*)
    7. ----------
    8. 86496

    其他对象导入

    1. --第二次元数据导入,将第一次没有导入的过程,视图,包,触发器,权限导入。
    2. expdp system/oracle directory=xttsdir dumpfile=metadump.dmp schemas=OCS,BSS content=metadata_only exclude=index,table,constraint,statistics
    3. impdp system/oracle@dest:1521/pdbocs directory=xttsdir dumpfile=metadump schemas=OCS,BSS

    目标端用户统计信息收集

    1. exec DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'OCS',ESTIMATE_PERCENT=>20,method_opt=>'forall columns size skewonly',cascade=>true,force=>true,degree=>8);
    2. exec DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'BSS',ESTIMATE_PERCENT=>20,method_opt=>'forall columns size skewonly',cascade=>true,force=>true,degree=>8);

    总结:

    整个迁移的过程步骤相对是比较复杂的,但通过xtts增量同步的方式,可以大大降低停机的窗口,特别是在大数据量,跨平台的情况下,xtts方式的升级还是非常有价值的。

  • 相关阅读:
    docker高效搭建本地开发环境
    合肥工业大学网络安全实验IP-Table
    前端新特性:Compute Pressure API!!!
    Jenkins nginx自动化构建前端vue项目
    项目成本管理的重要性:为了削减成本,马斯克裁员50%
    【Linux】:Linux环境与版本
    Linux 基金会年度报告——没有人能离开 Linux 支持环境;树莓派翻新版将创建“新的”分支系统;AWS 发生中断,导致业务交付出现问题 | 开源日报
    Pandas如何对DataFrame排序和统计
    Java设计模式之外观模式
    关于SRE在金融行业落地的探讨
  • 原文地址:https://blog.csdn.net/sinat_36757755/article/details/128168273