记录一次oracle expdp/impdpd错误

2024年 6月 7日 83.0k 0

写这篇文章的时候我还在加班做数据库备份~

事情是这样的,在做oracle数据库迁移达梦的时候,要求先从某个生产库导出一些生产数据表结构,导入另一台oracle做一个模拟库来进行迁移演练,对这个用户下的 表结构利用expdp estimate进行数据量大小预估后我就进行了expdp导出,只花了几分钟,错误不在这里,而是在新库导入的时候出现,当我在新库创建好directory映射目录和导入用户后,我就毛毛躁躁进行impdp导入操作,我第一次的命令是如下

impdp sjtbk/********** dumpfile=expdp.dmp logfile=impdp.log DIRECTORY=data schemas=sjtbk

然后悲剧出现了,在生产库的时候存在一些唯一约束,外键对象,复合索引等,没有进行相应对象导出,所以导入时报一堆错误,以下例举错误详情

先查看imp日志

记录一次oracle expdp/impdpd错误-1

第一个错误:

ORA-00959 表空间 'XXX'不存在,ORA-39111 ,ORA-39112

 原因是在源库(生产库)创建表,索引等内容时指定了表空间,而在目的库(演练库)没有这个表空间而报错,并且源库中的schema和别的用户相互授权了,但导出的dmp中没有包含所有的用户,并且目标库也没有这些用户。

记录一次oracle expdp/impdpd错误-2

解决方法:在impdp导入命令里添加transform 参数

transform=segment_attributes:n 

加上这个参数后,就会倒进用户默认的表空间,因为目的库新建的用户没有指定表空间,所以是默认USERS表空间。

完整impdp命令

impdp sjtbk/********* dumpfile=expdp.dmp logfile=impdp.log DIRECTORY=data schemas=sjtbk transform=segment_attributes:n ignore=y;

这个时候又出现了新的错误

第二个错误:

ORA-39171: 作业出现可恢复的等待。

ORA-01653: 表 SJTBK.E_SM_ALTERRECODER 无法通过 8192 (在表空间 USERS 中) 扩展,原因是USERS表空间不足了。

解决方法:对USERS表空间进行扩容

alter tablespace users add datafile '/path/path/users11.dbf' size 31G;

记录一次oracle expdp/impdpd错误-3

可以继续导入了

服了,又来新的错误。

第三个错误:

ORA-39083 ORA-00001

这个报错我想的解决方法是禁用约束,想一想就行了,不想解决~

记录一次oracle expdp/impdpd错误-4

第四个错误

ORA-01917

原因是源库中的schema和别的用户相互授权了,但导出的dmp中没有包含所有的用户,并且目标库也没有这些用户。所以就有用户或角色不存在。(这些不存在的用户或角色太多了~不知道这个库建表的人是怎么想的关联这么多用户)。这个错不想解决,狗才新建用户呢

记录一次oracle expdp/impdpd错误-5

第五个错误

字符集匹配错误

源库的字符集是AMERICAN_CHINA.ZHS16GBK,而目的库的字符集是SIMPLIFIED CHINESE_CHINA.AL32UTF8

记录一次oracle expdp/impdpd错误-6

虽然报了很多错,但是后面也导入了表结构。

记录一次oracle expdp/impdpd错误-7

最后面的结果是导入了346张表,源库表是多少来着,反正相差不大,就是不知道缺失约束,主键外键了没有,反正大概率不能用了

所以我就还是老老实实的做全库备份然后异机恢复吧,数据泵工具是真不好用。

加班备份全库数据,,重新选择rman来做备份恢复,对我来说相对不容易出现问题。。。

over

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论