传输表空间
异构跨平台传输表空间分为两种
- 使用MOS提供rman_xttconvert工具包进行在线迁移,即通常所说xtts。
- 表空间置为Read only离线,通过RMAN进行convert结合exp/imp expdp/impdp导出导入元数据进行迁移。
- 12c 引入了使用备份进行跨平台传输表空间,与上述第二种方法大部分步骤相同,RMAN备份方式可以充分利用RMAN压缩等降低文件大小,减少read only时间。
- 可以参考文章:https://www.cndba.cn/dave/article/4404
由于一般数据库都需要在迁移过程中对外提供服务,所以表空间置为只读在大部分情况下不可接受,所以一般使用第一种xtts工具包进行在线迁移,本文则使用第二种方式迁移。
1. 环境介绍
1.1 版本介绍
- 源 端:HP-UX Oracle 11.2.0.3 ASM存储 数据量30TB
- 目标端:RHEL 7.7 Oracle 11.2.0.3 NAS存储
1.2 迁移方式
由于本次迁移为历史库迁移,且数据库未开启归档模式,所以选择较为便捷第二种方式进行迁移。
2. 环境准备
2.1 挂载NFS
源库30TB,HP-UX与Linux通过NFS挂载目标库NAS存储磁盘,直接convert转换数据文件至最终NAS存储,省去拷贝时间。
HP-UX
mount -F nfs hard,bg,proto=tcp,rsize=32768,wsize=32768,nointr,noac,forcedirectio,llock xx.xx.xx.xx:/data/nfs /tts
Linux:
mount -t nfs -o hard,bg,nolock xx.xx.xx.xx:/data/nfs /data
2.2 查询源端平台与目标平台是否可转换
select * from v$transportable_platform;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
------------ ------------------------------------ --------------
...
4 HP-UX IA (64-bit) Big
...
13 Linux x86 64-bit Little
...
--可以看到可以转换,但是由于字节序不同,所以需要转换。
select platform_id,platform_name from v$database;
PLATFORM_ID PLATFORM_NAME
------------ --------------------
4 HP-UX IA (64-bit)
3.迁移准备
3.1 提取需要转换的表空间
由于本次为整库迁移,所以除一些系统表空间外,其他均需要转换
- 查看system users sysaux是否有非sys以及一些组件对象
select owner
,table_name
,tablespace_name
from dba_tables
where owner not in ('SYS','SYSTEM','OUTLN','SCOTT')
and tablespace_name in ('SYSTEM','SYSAUX','USERS');
根据查询出来对象,决定是否需要额外处理这几个表空间,users表空间如果包含非sys对象,则需要在目标端删除users表空间,将源库users一起转换,本次查询users表空间也需要一同转换
- 获取需要迁移表空间列表
select distinct tablespace_name from dba_tablespaces where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','UNDOTBS2')
minus
select distinct tablespace_name from dba_temp_files;
3.2 验证要传输表空间是否自包含
SYS > EXEC SYS.DBMS_TTS.TRANSPORT_SET_CHECK(ts_list => '<TABLESPACE_NAME>', incl_constraints => TRUE);
SYS > SELECT * FROM TRANSPORT_SET_VIOLATIONS;
VIOLATIONS
--------------------------------------------------------------------
ORA-39921: Default Partition (Table) Tablespace xxx(表空间名) for xxx(表名) not contained in transportable set.
# 可以根据下满Mos文档进行相应处理
# 我的环境中,违反表空间不存在,也无相应segment在该表空间,根据表空间名称,创建之后,一起转换解决报错问题。
Using Dbms_tts.transport_set_check Results in Entry in Transport_set_violations (Doc ID 114915.1)
3.3 表空间置为read only
select 'ALTER TABLESPACE '||TABLESPACE_NAME||' READ ONLY;'
FROM (
SELECT DISTINCT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE TABLESPACE_NAME NOT IN ('SYSTEM','SYSAUX','UNDOTBS1','UNDOTBS2')
MINUS
SELECT DISTINCT TABLESPACE_NAME FROM DBA_TEMP_FILES