Oracle数据库迁移:异构传输表空间TTS HP-UX迁移至Redhat Linux 7.7

墨墨导读:本文来自墨天轮用户“你好我是李白”的投稿,记录一个Oracle数据库迁移过程 :异构传输表空间TTS HP-UX迁移至Redhat Linux 7.7。墨天轮主页:https://www.modb.pro/u/3997

传输表空间

异构跨平台传输表空间分为两种

  1. 使用MOS提供rman_xttconvert工具包进行在线迁移,即通常所说xtts。

  2. 表空间置为Read only离线,通过RMAN进行convert结合exp/imp expdp/impdp导出导入元数据进行迁移。

  3. 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 提取需要转换的表空间

由于本次为整库迁移,所以除一些系统表空间外,其他均需要转换

  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表空间也需要一同转换

  1. 获取需要迁移表空间列表

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
);


'ALTERTABLESPACE'||TABLESPACE_NAME||'READONLY;'
----------------------------------------------------------
ALTER TABLESPACE XXX READ ONLY;
...

置为read only过程中,遇到部分表空间无法read only,kill掉所有会话,但是依然无法read only,查询等待事件为wait for another txn - txn abort,该等待一般为有状态处于dead状态事务,需要等待smon回滚结束,通过下面语句可以查询进度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值