亲爱的小伙伴们,大家好。
日常数据库维护过程中我们经常会进行两库间数据迁移工作,本次我将分享一下ORACLE12C通过数据泵从高版本12.2迁移数据到低版本12.1过程中遇到的问题,分析思路及处理方法。
某运营商一个业务系统因存储空间不足导致业务无法扩展,为满足后续业务增长需求与相应业务部门开会商讨,将其数据库迁移到另一套新购设备存储上。
介绍问题之前先介绍下数据迁移大致流程:
a)权限及配置检查
在迁移之前需要检查源端数据库用户权限、DBLINK、连接数及字符集等配置。
b)表空间使用情况检查
统计源端数据库表空间使用量,在目标端进行创建,并适当扩大UNDO表空间和TEMP表空间,防止在迁移过程中出现快照过旧和临时空间不能扩展的问题。
c)按用户实施数据对象迁移
使用ORACLE工具EXPDB和IMPDP相结合,来进行数据迁移。
d)数据一致性校验
数据迁移完成后需要重点进行源端与目标端对象数量是否一致。
万事俱备只欠东风,与应用维护人员约定好时间和地点,准备搞起来。
登录数据库主机大胆地搞起
expdptest_link/Test_link@c5xx1ora1_pdbxxxx
cluster=n dumpfile=pdbxxxx_table_%u.dmp
schemas=AXXX,BXXX
directory=DP_DIR
logfile=exp_PDBXXX-20201112.logversion='12.1.0.2.0' compression=all parallel=6
备注:在高版本导入低版本数据库,在高版本数据库数据导出时,要加上version参数(目标端数据库版本),来解决兼容性问题。
咦,怎么报错了呢
报错如下“
ORA-39373:cannot export TABLE_DATA:"AXXXX"."JL_RD_ST_AUDITRESULT_634_201909"to version 12.1.0.2.0 due to long identifiers”
问题分析及解决办法:
查询相关Mos资料
12.2DataPump Export (EXPDP) Using a Lower Export Client Fails Due ToORA-39373 (Doc ID 2369249.1)
说明:12.1.0.2.0版本的数据库所支持的对象名长度为30字符,而在12.2.0.1.0及其以后的数据库已经解决了字符长度(最大长度128)限制的问题。
例如:在12.1.0.2.0低版本数据库创建一个长度为30和31的表,长度为31的表创建不成功。
为了解决这一问题,找出源端数据库中所有对象名超过30的对象,共计3千多个长度超过30个字节的对象。
通知业务人员对长度超过限制的对象进行删除或者重命名。重新导出恢复正常,无报错信息。
在12CR2版本导入12CR1版本的过程中,由于高版数据库对象名长度限制是128个字符,而低版本对象名长度限制是30个字符,所以要找出高版本库中所有对象名长度超过30的对象,对他们进行删除或者重命名,否则会出现类似“ORA-39373”报错,希望这次分享能够给大家带来帮助。