> 文档中心 > XTTS基于rman全量迁移Oracle

XTTS基于rman全量迁移Oracle


📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.XTTS简介
    • 📣 2.XTTS迁移
      • ✨ 2.1 迁移环境
      • ✨ 2.2 数据库检查
    • 📣 3.全量迁移
      • ✨ 3.1 源端和目标端配置XTTS脚本
      • ✨ 3.2 修改xtt.properties参数
      • ✨ 3.3 源端迁移准备
      • ✨ 3.4 源端转移到目标端
      • ✨ 3.5 目标端字节序转换
    • 📣 4 迁移元数据
      • ✨ 4.1 在目标库创建业务用户
      • ✨ 4.2 导入xtts的元数据
    • 📣 5 迁移后收尾工作
      • ✨ 5.1 数据一致性
      • ✨ 5.2 迁移后的对象
      • ✨ 5.3 收集统计信息

前言

最近客户应客户需求,基于rman实现XTTS基于rman全量迁移Oracle,分享给大家


📣 1.XTTS简介

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

“U2L”(Unix to Linux的简称),即企业用户将应用从“小型机+Unix”架构迁往“x86服务器+Linux”架构

XTTS基于rman全量迁移Oracle

📣 2.XTTS迁移

✨ 2.1 迁移环境

XTTS基于rman全量迁移Oracle

✨ 2.2 数据库检查

1、查询平台、字节序、字符集col PLATFORM_NAME format a30SELECT d.PLATFORM_ID,d.PLATFORM_NAME, tp.ENDIAN_FORMATFROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE dWHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;PLATFORM_ID PLATFORM_NAME    ENDIAN_FORMAT----------- ------------------------------ --------------  13 Linux x86 64-bit Little--字符集SQL> select userenv('language') from dual;USERENV('LANGUAGE')----------------------------------------------------AMERICAN_AMERICA.AL32UTF82.业务表空间和业务用户--源端排除系统表空间、默认表表空间,避免冲突select TABLESPACE_NAME,BLOCK_SIZE,CONTENTS,STATUSfrom dba_tablespaceswhere tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE','USERS');TABLESPACE_NAME  BLOCK_SIZE CONTENTS  STATUS------------------------------ ---------- --------- ---------MES_TBS  8192 PERMANENT ONLINEOGG_TBS  8192 PERMANENT ONLINE3、表空间自包含需要传输的表空间为MES_TBS、OGG_TBS,要确保这2个表空间为自包含的表空间表空间自包含的含义:自包含是指当前表空间集中的对象不依赖表空间集之外的对象-- 自包含检查(源库操作)SQL> exec dbms_tts.transport_set_check('MES_TBS,OGG_TBS',true);PL/SQL procedure successfully completed.4.迁移对象个数统计需要确认,非业务用户下是否有业务数据,例如SYS用户是否有业务数据,源库操作-- 需要迁移的对象和数量SQL> set pagesize 999select owner, object_type, count(*)from dba_objectswhere object_name not like 'BIN%'and owner in ('SCOTT','OGG')group by owner, object_typeorder by 1,2 desc;5. 无效对象select owner, object_type, count(*)from dba_objectswhere status  'VALID'and owner in ('SCOTT','OGG')group by owner, object_typeorder by 1, 2 desc;6、开启块改变跟踪功能SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING  FILE '/u01/app/oracle/changetracking.chg';SQL> select status, filename from v$block_change_tracking;

📣 3.全量迁移

✨ 3.1 源端和目标端配置XTTS脚本

rm -rf /u01/app/xtts/rm -rf /home/oracle/scriptsmkdir -p /u01/app/xtts/inc_bkmkdir -p /u01/app/xtts/df_bkmkdir -p /home/oracle/scriptscd /home/oracle/scripts[root@rhel64 ~]# cp rman_xttconvert_V3.zip /home/oracle[root@rhel64 ~]# chown oracle:oinstall /home/oracle/rman_xttconvert_V3.zip[oracle@rhel64 ~]$ cp ~/rman_xttconvert_V3.zip /home/oracle/scripts[oracle@rhel64 ~]$ cd scripts

✨ 3.2 修改xtt.properties参数

cat > /home/oracle/scripts/xtt.properties  <<"EOF"tablespaces=MES_TBS,OGG_TBSplatformid=13dfcopydir=/u01/app/xtts/df_bkbackupformat=/u01/app/xtts/inc_bkstageondest=/u01/app/xtts/df_bkstorageondest=/u01/app/oracle/oradata/MESbackupondest=/u01/app/xtts/inc_bk#srcdir=SOURCEDIR#dstdir=DESTDIR#srclink=ttslink#cnvinst_home=/oracle/app/oracle/product/11.2.0/dbhome_1#cnvinst_sid=targetdbEOF

✨ 3.3 源端迁移准备

cd /home/oracle/scriptsexport TMPDIR=/home/oracle/scripts$ORACLE_HOME/perl/bin/perl xttdriver.pl -p

XTTS基于rman全量迁移Oracle

✨ 3.4 源端转移到目标端

[oracle@rhel64 ~]$ scp /u01/app/xtts/df_bk/* 192.168.1.58:/u01/app/xtts/df_bk/[oracle@rhel64 ~]$ scp /home/oracle/scripts/rmanconvert.cmd 192.168.1.58:/home/oracle/scripts/

✨ 3.5 目标端字节序转换

cd /home/oracle/scriptsexport TMPDIR=/home/oracle/scripts$ORACLE_HOME/perl/bin/perl xttdriver.pl -c

XTTS基于rman全量迁移Oracle

📣 4 迁移元数据

✨ 4.1 在目标库创建业务用户

create user SCOTT identified by jem;create user OGG identified by jem;grant dba to SCOTT,OGG;

✨ 4.2 导入xtts的元数据

-- 利用dblink直接迁移元数据,这里只会迁移表、索引、约束等,因为其它对象存储在系统表空间中impdp system/oracle directory=DATA_PUMP_DIR logfile=tts_imp_mes.log \network_link=ttslink transport_full_check=no \EXCLUDE=STATISTICS  \transport_tablespaces=MES_TBS,OGG_TBS \transport_datafiles='/u01/app/oracle/oradata/MES/MES_TBS_5.dbf','/u01/app/oracle/oradata/MES/OGG_TBS_6.dbf'--导入存储过程、触发器、函数、包、视图、序列impdp system/oracle directory=DATA_PUMP_DIR \network_link=ttslink schemas=SCOTT,OGG content=metadata_only exclude=index,table,constraint parallel=8--导入公共同义词和dblink等其它对象源库查询共有同义词set long 9999select dbms_metadata.get_ddl('SYNONYM',SYNONYM_NAME,OWNER) FROM dba_synonyms where owner='PUBLIC' and table_owner in  ('SCOTT','OGG');源库查询dblinkset long 9999select dbms_metadata.get_ddl('DB_LINK',DB_LINK,OWNER) FROM DBA_DB_LINKS;

📣 5 迁移后收尾工作

✨ 5.1 数据一致性

SQL> select count(*) from scott.emp_test11;  COUNT(*)---------- 14SQL> select count(*) from scott.emp_test;  COUNT(*)---------- 14 确认后,源库和目标库信息一致

✨ 5.2 迁移后的对象

select owner, object_type, count(*)from dba_objectswhere object_name not like 'BIN%'and owner in ('SCOTT','OGG')group by owner, object_typeorder by 1,2 desc;OWNER     OBJECT_TYPE    COUNT(*)------------------------------ ------------------- ----------OGGVIEW   14OGGTYPE    2OGGTABLE  39OGGSEQUENCE3OGGRULE SET      10OGGRULE    8OGGQUEUE   6OGGPROCEDURE      2OGGLOB    15OGGJOB     2OGGINDEX  45OGGFUNCTION1OGGEVALUATION CONTEXT    3SCOTT     TABLE   3

✨ 5.3 收集统计信息

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