原 【DB宝52】Oracle异构平台迁移利器之XTTS(使用rman方式)
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、源端调用 xttdriver.pl -p做迁移准备
- 2.2.3、将源端的数据文件副本和rmanconvert.cmd传到目标端
- 2.2.4、在目标端对数据文件拷贝进行字节序的转换
二、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" |
结果:
源库执行第一次增量,报错
RMAN-03023: executing command: SET NOCFAU
RMAN-06009: using target database control file instead of recovery catalog
ts::APP_IDX
RMAN-06134: host command complete
RMAN-03090: Starting backup at 2022-06-30 16:29:14
RMAN-08030: allocated channel: ORA_DISK_1
RMAN-08500: channel ORA_DISK_1: SID=17307 device type=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 06/30/2022 16:29:14
RMAN-20202: Tablespace not found in the recovery catalog
RMAN-06019: could not translate tablespace name "APP_IDX"
nice
脚本下载位置:https://share.weiyun.com/57HUxNi , 路径:小麦苗分享的资料>数据库系列>Oracle数据库>Oracle工具。
很不错哈