expdp impdp oracle 空表不能导出

【数据库】进阶 专栏收录该内容
34 篇文章 0 订阅

测试数据库需要通过生产的数据库的数据导过来。但是用一般的导出命令:imp portal/portal file=/home/oracle/3-21.dmp full=y;

用上面的命令总是只能导出部分不为空的表,假如表为空的话,导不出来了,我查了一下,这是ORacle11G的一个bug,需要修改一点配置,才行。

   但是修改配置涉及到了生产数据库的修改,这在客户这边是不允许了。后来想了个其他的办法,就是用数据泵的方式也就是用expdp来导出数据,这样就全部导出了。

使用导出泵的方法为:
先明确要把导出的dmp文件放到哪个目录下面比如我们要放到'/home/oracle'底下,那么我们要先建立direction='/home/oracle'

建完之后再执行: 
然后再输入
expdp  用户名/密码@IP:端口/实例名 directory=portal_dir tablespaces=portal dumpfile=dp_3-31.dmp logfile=dp_log3-31.log;

即可。
步骤为:
sqlplus /nolog;
conn sys/sys as sysdba;
create or replace  directory portal_dir as '/home/oracle';
grant all on directory portal_dir to portal;
exit退出sqlplus
然后执行:

export ORACLE_SID=beeportal;
expdp directory=portal_dir  dumpfile=dp_3-31.dmp logfile=dp_log3-31.log;

上面的字符串是我经过了大量的测试之后得到了,第一句的意思是找到beeporal的实例,假如你不知道机器上的实例你可以用:

lsnrctl status  来看一下有没有 要导出的实例名。可能执行完了之后会出现错误:

错误 1、ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

显示字符串的链接出错了,解决方式为:

export ORACLE_SID=beeportal;
expdp directory=portal_dir  dumpfile=dp_3-31.dmp logfile=dp_log3-31.log;

把实例名和ip端口全部去掉。就可以了。

错误2、视图和序列倒不出来

开始的时候我在网上查的时候用的命令是:

 expdp   tablespace=portal 
 directory=test_dir  dumpfile=test_3-31.dmp logfile=test_log3-31.log;

我把tablespace定为:portal,这样只导出了tablespace=portal的数据,视图和序列都没有导出,于是我把tablespace=portal去掉,问题解决。

expdp directory=portal_dir  dumpfile=dp_3-31.dmp logfile=dp_log3-31.log;

======================================================================================================

 

上面写的是用数据泵导出数据,现在再看一下用数据泵导入数据。

为了保证导入数据的完整性。应为:先把表空间和portal用户删掉(假如你知道表空间使用的物理硬盘上的dbf文件,最好也删掉),在建立表空间和poral然后再导入表。

方法为:

sqlplus /nolog;
conn sys/sys as sysdba;

drop tablespace portal including contents cascade constraints;

找到物理的表空间的存储地址:dbf文件删掉,到不到也可不删除,不过这要造成浪费磁盘的空间)

drop user portal cascade;

create tablespace portal datafile '/u01/app/oracle/product/oracle/dbs/portal2012-3-31.dbf' size 500m autoextend on maxsize unlimited;
create user portal identified by portal default tablespace portal temporary tablespace temp;

 grant connect,resource,exp_full_database,imp_full_database to portal;

然后退出sqplus

执行导入命令:

impdp portal/portal directory=portal_dir dumpfile=dp_3-31..dmp;

我说一下命令:

drop tablespace portal including contents cascade constraints;(表示删除表空间。—)

drop user portal cascade;(删除用户)

create tablespace portal datafile '/u01/app/oracle/product/oracle/dbs/portal2012-3-31.dbf' size 500m autoextend on maxsize unlimited;(创建表空间)

create user portal identified by portal default tablespace portal temporary tablespace temp;(创建用户)

 grant connect,resource,exp_full_database,imp_full_database to portal;(给用户赋上导入导出数据的权限)。

当然,在执行这些命令的时候不可能一直顺利的,可能出现的问题:

问题1、应为先执行:drop tablespace portal including contents cascade constraints;再找到物理磁盘dbf文件删除。假如顺序乱了。先删了物理磁盘dbf文件,这时候再执行drop tablespace portal including contents cascade constraints时候会报错。

解决方法为:先查一下要删除的tablespace依赖的dbf文件,然后将文件挂起,然后再删除。

  select tablespace_name from sys.dba_tablespaces
  alter database datafile '/u01/app/oracle/product/oracle/dbs/portal.dbf' offline drop;
  drop tablespace portal including contents cascade constraints;

问题2、删除用户时显示:用户正在连接无法删除。

解决方式为:

进入sqlplus /nolog; conn sys/sys as sysdba;

       select name,user# from user$;
            找到要删除的portal 的ID=129
            UPDATE USER$ SET NAME='portaldelete' WHERE USER#=129;

commit;

改完之后在把数据库停一下在启动:

    ALTER SYSTEM FLUSH SHARED_POOL;

    shutdown immediate;
    startup;

这样就可以建立新的用户portal了。

文章出处:http://hi.baidu.com/yfqsdie/item/f123cfbecdfa86f463388e22

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值