Oracle数据库管理每周一例(12.2,18c,19c) 2020-07-17
第七期 记一次HPUX到Exadata的xtts数据迁移——xtts篇
1.XTTS是个啥?
XTTS是啥其实就是TTS——表空间传输的增强版,也就是增强版表空间传输,传统的TTS是不支持增量传输表空间数据文件的,因此使用TTS进行数据库迁移,迁移时间与数据量直接相关。而XTTS支持增量,也支持跨平台迁移,因此在正式迁移前可以通过一次全量表空间数据文件迁移加多次增量迁移的方式缩短最终迁移的停机时间。本次介绍的XTTS版本是V3,当前最新版本是V4的,本期主要还是对XTTS本身进行讲解,下期将通过复盘上周(7月9日)操作的方式来展示XTTS中遇到的各种问题及解决方法。
2.XTTS的迁移方式
XTTS的迁移方式主要有两种,一种是基于RMAN的,另一种是使用dbms_file_transfer(DFT)包实现的,这里我们主要讨论的是基于RMAN的迁移方式。
3.XTTS的基本迁移流程
1.数据库、数据检查,包含源端与目标端(这一步是重中之重)
2.xtts及目标数据库配置
3.源端全量备份需要备份需要迁移的表空间(数据文件)
4.目标端convert并应用对应表空间的数据文件到指定位置
5.源端对指定表空间数据文件进行增量备份
6.目标端convert并应用增量备份到表空间数据文件
7.重复5、6步骤减少最终迁移的数据差量
8.正式迁移,源端对应表空间设置为只读,并进行最后一次增量备份
9.目标端convert并应用最后一次增量备份到表空间数据文件
10.源端用户元数据导出,目标端导入用户元数据
11.源端表空间元数据导出,目标端导入表空间元数据
12.数据校验
13.后续操作,如统计信息收集、SGA缓存加载、失效目标处理等
4.数据库检查
1.源端数据库COMPATIBLE参数不能低于10.2.0
2.目标端数据库COMPATIBLE参数不能低于源端,建议目标端运行在Linux系统上,非Linux目标数据库必须为11.2.0.4,鉴于目前11g已经停止标准支持进入延长支持,所以建议目标数据库还是使用Linux系统
3.源端数据库版本必须低于或等于目标端数据库版本
4.RMAN中default device type必须配置为DISK
5.RMAN中不支持default device type DISK配置compressed(压缩)
6.源端数据库在迁移前,需要迁移的表空间必须为oline状态,且不包含offline的数据文件。表空间需要为READ WRITE状态,RMAN最终迁移前设置为READ ONLY状态
7.传输表空间名称不能存在于目标端数据库(注意USERS)
8.源端数据库需要开启快追踪
5.数据检查
1.检查数据库字符集,源端和目标端需要一直
select parameter,value
from nls_database_parameters where parameter in
('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
源端和目标端数据库NLS_CHARACTERSET需要一直,如未使用NATIONAL CHARACTERSET相关数据类型,NLS_NCHAR_CHARACTERSET可以不一致
2.源端检查支持平台
select * from v$transportable_platform order by platform_id;
3.检查endian format
select tp.endian_format
from v$transportable_platform tp,v$database d where tp.platform_name = d.platform_name;
4.检查平台ID和名称
select platform_id,platform_name from v$database;
5.检查自包含,即迁移表空间中不存在非生产用户数据(比如系统用户数据)
execute dbms_tts.transport_set_check('ts1,ts2,ts3....',true);
select * from transport_set_violations;
6.检查外部表(外部表不支持迁移)
set serveroutput on; declare x boolean; begin
x := dbms_tdb.check_external;
end;
/
7.检查索引组织表,从非Linux平台迁移可能出现数据损坏,需要手动迁移
select owner,table_name,iot_type from dba_tables where iot_type like '%IOT%';
8.检查XML type,对于11.1以后版本需要使用数据泵迁移
select distinct p.tablespace_name from dba_tablespaces p,
dba_xml_tables x, dba_users u, all_all_tables t where
t.table_name=x.table_name and t.tablespace_name=p.tablespace_name and x.owner=u.username;
select distinct p.tablespace_name from dba_tablespaces p, dba_xml_tab_cols x, dba_users u,
all_all_tables t
where t.table_name=x.table_name
and t.tablespace_name=p.tablespace_name and x.owner=u.username;
9.检查spatial indexes
Document 579136.1 IMPDP TRANSPORTABLE TABLESPACE FAILS for SPATIAL INDEX
Document 2031174.1 TRANSPORTABLE TABLESPACE IMPORT FAILS WITH ORA-39083 ORA-942 ON MDRS TABLES
10.检查物化视图和分区表,目前测试与实际操作物化视图需要重建,分区表不受影响
11.检查时区,无TIMESTAMP WITH TIMEZONE (TSTZ)的列可以忽略
SELECT VERSION FROM V$TIMEZONE_FILE;
查询包含TSTZ的列
select c.owner || '.' || c.table_name || '(' || c.column_name || ') -'
|| c.data_type || ' ' col
from dba_tab_cols c, dba_objects o
where c.data_type like '%WITH TIME ZONE' and c.owner=o.owner
and c.table_name = o.object_name and o.object_type = 'TABLE'
And o.owner not in ('SYS', 'SYSTEM') order by col
/
如果存在TSTZ列并且时区不一致,需要重建目标库,dbca前需要:
export ORA_TZFILE=$ORACLE_HOME/oracore/zoneinfo/xxx.dat
12.检查参数
select parameter,value from v$option order by 2;
13.加密表空间无法传输
14.检查Exadata,主要通过exachk
15.源端数据库回收站中不能存在任何内容,由于业务方会删表且没有添加cascade,修改量巨大,所以直接关闭了回收站功能。
6.配置XTTS
本次迁移是在一体机使用的ACFS从ASM中划出一块作为文件系统目录,并使用NFS挂载到源端HP小机服务器,目录名称为/acfs01,需要建立以下一些目录,由于两端用户配置不同因此该目录下所有文件权限还要设置为777:
/acfs01/xtts #存放xtts配置文件及脚本,xtts迁移中产生的日志、记录文件等也将存放于这个目录
/acfs01/data #存放xtts迁移中产生的表空间数据文件全量备份及增量备份产生的文件
/acfs01/dpump #存放用户元数据、表空间元数据导出的dmp文件
需要在MOS下载对应的XTTS包,由于源端数据库为11.2.0.2,无法使用V3第二版和V4,因此这里使用的是V3的第一个版本(下面简称V3.1),文件包名称为rman_xttconvert_v3.zip,解压后会产生以下文件:
xttcnvrtbkupdest.sql
xttdbopen.sql
xttprep.tmpl
xttstartupnomount.sql
xtt.properties #XTTS配置文件
xttdriver.pl #XTTS脚本,用于全量备份、增量备份生产,数据文件convert及引用等操作
在进行迁移前需要对xtt.properties进行配置,根据本次迁移的环境检查,具体配置如下:
#指定迁移表空间
tablespaces=TS1,TS2,TS3.....
#指定源端数据库平台ID
platformid=4
#指定源端数据库生产表空间数据文件全量备份的目录
dfcopydir=/acfs01/data
#指定源端数据库生产表空间数据文件增量备份的目录
backupformat=/acfs01/data
#目标数据库获取生产表空间备份的目录
stageondest=/acfs01/data
#指定目标数据库表空间数据文件同步应用目录(本次迁移到PDB,设置到PDB目录)
storageondest=+DATAC1/SID/PDB字符串/DATAFILE/
#指定目标数据库获取表空间数据文件增量备份的目录
backupondest=/acfs01/data
#指定源端数据库备份并行度
parallel=2
#指定目标数据库前滚并行度
rollparallel=6
下期预告:
记一次HPUX到Exadata的xtts数据迁移——实战篇。