Oracl数据库expdp/impdp导入导出遇到的一系列问题解决:ORA-01110、ORA-31684、ORA-39151、、ORA-01940、ORA-00031

在将开发数据库的数据导入测试数据库时遇到的一些问题分享

报错信息

Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
ORA-01187: cannot read from file  because it failed verification tests
ORA-01110: data file 201: '/oracle/oradata/ora/temp01.dbf'
ORA-06512: at "SYS.DBMS_LOB", line 741
ORA-06512: at "SYS.DBMS_DATAPUMP", line 5412
ORA-06512: at line 1

解决方法
需要新建temp文件

删除原本的临时文件
alter database  tempfile '/oracle/oradata/ora/temp01.dbf' drop;
重新添加临时数据文件:
alter tablespace temp add tempfile '/oracle/oradata/ora/temp01.dbf' size 100M reuse;

报错信息

ORA-31684: Object type DB_LINK:"TEST"."PRD" already exists

ORA-31684: Object type DB_LINK:"TEST"."CABLE" already exists

ORA-31684: Object type DB_LINK:"TEST"."D31" already exists

ORA-31684: Object type DB_LINK:"TEST"."DEV" already exists
ORA-39151: Table "TEST"."TBLTO" exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table "TEST"."TOOLS" exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table "TEST"."STRANS" exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table "TEST"."TBLTP" exists. All dependent metadata and data will be skipped due to table_exists_action of skip


SQL> drop user demo cascade;
drop user demo cascade
*
ERROR at line 1:
ORA-01940: cannot drop a user that is currently connected 

如果只有ora-39151的报错那么在导入的命令后面加上一个参数就可以了table_exists_action=replace,这个根据情况,如果只需要导入的表信息就替换原有的表,如果想保留就将replace改为skip

在这还有其他对象的已存在的报错,那么就删除该用户这样就能把测试库的所有对象删掉

SQL> drop user demo cascade;
drop user demo cascade
*
ERROR at line 1:
ORA-01940: cannot drop a user that is currently connected

删除用户报错,显示正在连接,那就杀掉这个进程

先查出这个用户对应的sid和serial#执行下列命令
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username = 'DEMO';

SADDR                   SID    SERIAL# PADDR
---------------- ---------- ---------- ----------------
USERNAME
--------------------------------------------------------------------------------
STATUS
--------
000000007B655420       1717      57759 000000007D9F4580
DEMO
ACTIVE


SQL> alter system kill session '1717,57759';
alter system kill session '1717,57759'
*
ERROR at line 1:
ORA-00031: session marked for kill

执行报错,那就根据sid和serial#查出操作系统对应的进程号,直接在操作系统层面杀掉

SQL> select c.spid from v$process c where c.addr=(select b.paddr from v$session b where b.sid= '1717' and b.serial#= '57759');

SPID
------------------------
5418


kill -9 5418

然后再导入就不会报已存在的错误了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库提供了expdpimpdp命令用于备份和恢复数据库。这两个命令的使用方式如下: 1. expdp命令 expdp命令用于备份Oracle数据库,它能够将某个schema或整个数据库导出到一个二进制文件中。具体命令格式如下: ``` expdp username/password@connect_string DIRECTORY=directory_name DUMPFILE=dumpfile_name.dmp SCHEMAS=schema_name ``` 其中: - `username/password@connect_string`:指定连接Oracle数据库的用户名、密码和连接字符串。 - `DIRECTORY=directory_name`:指定备份文件的目录。 - `DUMPFILE=dumpfile_name.dmp`:指定备份文件的名称。 - `SCHEMAS=schema_name`:指定要备份的schema名称,多个schema可以用逗号分隔。 执行命令后,Oracle数据库会将指定的schema或整个数据库导出到一个二进制文件中。 2. impdp命令 impdp命令用于恢复Oracle数据库,它能够将之前导出的二进制文件导入数据库中。具体命令格式如下: ``` impdp username/password@connect_string DIRECTORY=directory_name DUMPFILE=dumpfile_name.dmp SCHEMAS=schema_name ``` 其中: - `username/password@connect_string`:指定连接Oracle数据库的用户名、密码和连接字符串。 - `DIRECTORY=directory_name`:指定备份文件所在的目录。 - `DUMPFILE=dumpfile_name.dmp`:指定备份文件的名称。 - `SCHEMAS=schema_name`:指定要恢复的schema名称,多个schema可以用逗号分隔。 执行命令后,Oracle数据库会将指定的schema或整个数据库从备份文件中恢复出来。 需要注意的是,expdpimpdp命令需要在Oracle数据库服务器上执行,而不是在客户端。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值