概述:前天接应用厂商需求需要将一个用户的数据整体逻辑迁移至历史库并且由于服务器空间紧张最好能够做到dmp文件不落地的方法;根据需求我采用的是impdp NETWORK_LINK的参数进行数据迁移,在迁移过程中碰到主要碰到两个问题;
迁移过程:
[oracle@dm01dbadm03 ~]$ cat impszybls.sh
impdp \'/ as sysdba\' directory=xtts logfile=impfull.log parallel=8 NETWORK_LINK=xtts schemas=cube CLUSTER=N
由于数据量比较大,还有就是有分区表的存储,迁移过程中业务基本都处于不应有状态但是还是报错了:
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 466.1 GB
Processing object type SCHEMA_EXPORT/USER
ORA-39126: Worker unexpected fatal error in KUPW$WORKER.MOVE_DATA [TABLE_DATA:"SZYB"."KC22":"KC22_P2004"."KC22_P2004_AKB020_P4014"]
SELECT flags, NVL(target_xml_clob,xml_clob) FROM "SYS"."SYS_IMPORT_SCHEMA_04" WHERE process_order = :1
ORA-01555: snapshot too old: rollback segment number with name "" too small
ORA-22924: snapshot too old
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.KUPW$WORKER", line 9721
----- PL/SQL Call Stack -----
object line object
handle number name
0x11e66b6b0 21979 package body SYS.KUPW$WORKER
0x11e66b6b0 9742 package body SYS.KUPW$WORKER
0x11e66b6b0 16536 package body SYS.KUPW$WORKER
0x11e66b6b0 3230 package body SYS.KUPW$WORKER
0x11e66b6b0 10436 package body SYS.KUPW$WORKER
0x11e66b6b0 1824 package body SYS.KUPW$WORKER
0x677b3eb8 2 anonymous block
首先第一眼进入的快照过旧,速去查看各自的undo空间状态包括修改undo保留策略,以及相关表空间的自动扩展及空间问题;解决undo的问题后,再次使用脚本进行导入时同样报错;
使用mos查看ORA-39126 报错问题查到一篇文章(1628103.1):
https://support.oracle.com/epmos/faces/DocumentDisplay?id=1628103.1&_adf.ctrl-state=2qaetgsyf_4&_afrLoop=505330570825743
主要的建议就是:
1、安装相关补丁
2、将并行降低
3、Cluster=N,db link连接时尽量不要使用vip使用直接路径
这里只是将相关没有导入的表重新在导入一次:
impdp \'/ as sysdba\' directory=xtts logfile=impxttss.log NETWORK_LINK=xtts tables=CUBE.KC22 TABLE_EXISTS_ACTION=replace CLUSTER=N
调整完后没有再报错,但是导入的时间将会变的更长。