今天使用imp导入dmp格式的数据库备份的时候,出现以下错误

IMP-00019: 由于 ORACLE 错误 1 而拒绝行
IMP-00003: 遇到 ORACLE 错误 1
ORA-00001: 违反唯一约束条件 (DBUSER.PK_CFG_COMMONQUERY)

出现了冲突,尽管imp时使用ignore参数,可以忽略已经存在的对象,但是依旧报错…
搜索了以下并没有什么好办法,只好手动删除所有表。
不过找了一下可以使用以下语句来查询所有表和生成批量删除的语句:

select 'drop table '||table_name||';' as sqlscript from user_tables;
回复如下:
SQLSCRIPT
--------------------------------------------
drop table LO_CASEINFO;
drop table LO_HARMONIZECASE;
drop table LO_LAWCHECK;
drop table LO_LEGISLATIONITEM;
drop table LO_TRAINBATCH;
drop table OA_IMPRESS;
drop table OA_SYSGROUP;
......
已选择428行。

接着就可以复制所有表的drop语句了,一次批量执行完。
参数说明:

Oracle在恢复数据的过程中,当恢复某个表时,该表已经存在,就要根据ignore参数的设置来决定如何操作。

若ignore=y,Oracle不执行CREATE TABLE语句,直接将数据插入到表中,假如插入的记录违反了约束条件,比如主键约束,则出错的记录不会插入,但合法的记录会添加到表中。

若ignore=n,Oracle不执行CREATE TABLE语句,同时也不会将数据插入到表中,而是忽略该表的错误,继续恢复下一个表。

声明:本文经本人实测后发布。参考“删除Oracle某数据库下的所有表,有删改!”


发表评论