原 【DB宝53】Oracle异构平台迁移利器之XTTS(使用dbms_file_transfer方式)
Tags: Oracle原创LinuxDocker小麦苗迁移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、创建相关directories和dblink
- 1、源端创建SOURCEDIR:
- 2、目标端创建DESTDIR:
- 3、目标端创建DBLINK
- 2.2.3、xttdriver.pl -S做迁移准备
- 2.2.4、将源端xttnewdatafiles.txt和getfile.sql传到目标端
- 2.2.5、在目标端执行数据文件的拷贝
二、XTTS迁移示例
环境情况如下:
源库 | 目标库 | |
---|---|---|
版本 | 11.2.0.3 | 11.2.0.4 |
ORACLE_SID | LHR11G | LHR11G |
用户表空间 | TS_LHR、TS_XXT、USERS | TS_LHR、TS_XXT、USERS |
业务用户 | lhr、xxt | lhr、xxt |
平台 | Linux x86 64-bit | Linux x86 64-bit |
字节序 | Little | Little |
IP地址 | 172.17.0.3 | 172.17.0.4 |
字符集 | AMERICAN_CHINA.AL32UTF8 | AMERICAN_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 2 3 4 5 6 7 8 | -- 查询平台和字节序 col PLATFORM_NAME format a30 SELECT d.PLATFORM_ID,d.PLATFORM_NAME, tp.ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME; -- 查询字符集 select userenv('language') from dual; |
2.1.2、获取需要迁移的业务表空间和业务用户
排除系统表空间,避免冲突:
1 2 3 4 5 6 7 8 9 10 | select TABLESPACE_NAME,BLOCK_SIZE,CONTENTS,STATUS from dba_tablespaces where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE'); select owner,tablespace_name,count(*) from dba_segments where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE') group by owner,tablespace_name order by tablespace_name; |
目标端需要删除已存在的和源库同名的表空间:
1 2 3 4 5 6 | drop tablespace users including contents and datafiles; drop tablespace ts_lhr including contents and datafiles; drop tablespace ts_xxt including contents and datafiles; select tablespace_name,status from dba_tablespaces; |
2.1.3、表空间自包含
需要传输的表空间为TS_LHR、TS_XXT、USERS,要确保这3个表空间为自包含的表空间。
1 2 3 4 5 6 7 | -- 自包含检查 exec dbms_tts.transport_set_check('TS_LHR,TS_XXT,USERS',true); -- 查看结果,结果为空,表示为自包含 col violations for a70 select * from transport_set_violations; |
在表空间传输的中,要求表空间集为自包含的,自包含表示用于传输的内部表空间集没有引用指向外部表空间集。
2.1.4、获取用户及其权限的SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | SET LONG 9999 SELECT DBMS_METADATA.GET_DDL('USER', USERNAME) DDL_SQL FROM DBA_USERS WHERE USERNAME IN (select owner from dba_segments where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE') group by owner,tablespace_name) AND USERNAME NOT IN ('SYS'); SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', USERNAME) DDL_SQL FROM DBA_USERS WHERE USERNAME IN (select owner from dba_segments where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE') group by owner,tablespace_name) AND USERNAME NOT IN ('SYS'); SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT', USERNAME) DDL_SQL FROM DBA_USERS WHERE USERNAME IN (select owner from dba_segments where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE') group by owner,tablespace_name) AND USERNAME NOT IN ('SYS'); SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', USERNAME) DDL_SQL FROM DBA_USERS WHERE USERNAME IN (select owner from dba_segments where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','EXAMPLE') group by owner,tablespace_name) AND USERNAME NOT IN ('SYS'); |
2.1.5、检查环境变量
确保环境变量配置正确:
1 | env | egrep "ORACLE_SID|ORACLE_HOME" |
结果:
1 2 3 | [oracle@lhrora11204 ~]$ env | egrep "ORACLE_SID|ORACLE_HOME" ORACLE_SID=LHR11G ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1 |
2.1.6、开启块改变跟踪功能
Block change tracking 进程记录自从上一次0级备份以来数据块的变化,并把这些信息记录在跟踪文件中。RMAN 使用这个文件判断增量备份中需要备份的变更数据。这极大的提高了备份性能和速度,RMAN 可以不再扫描整个文件以查找变更数据。
1 2 3 4 | ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/app/oracle/changetracking.chg'; col filename format a100 select status, filename from v$block_change_tracking; |
2.1.7、时区需要一致
1 | select dbtimezone from dual; |
2.1.8、目标端补丁情况
建议目标端打最新的PSU补丁。
1 | SELECT * FROM dba_registry_history; |
2.1.9、组件检查
目标端需要包含源端的所有组件。
1 | select comp_id,comp_name,version,status from dba_registry; |
2.1.10、目标端的db_files参数不能小于源端
1 | show parameter db_files |
2.1.11、迁移对象个数统计
需要确认,非业务用户下是否有业务数据,例如SYS用户是否有业务数据:
历害
软件下载地址:https://share.weiyun.com/57HUxNi
路径:小麦苗分享的资料 > 数据库系列 > Oracle数据库 > Oracle工具。
牛逼 ?