expdp\impdp 数据库数据传输

借助 oracle提供的 expdp\impdp及exp\imp命令来实现导出\导入。由于exp\imp命令会自动忽略row_num=0的表,导致最后导出的表不完整。所以我们选择使用expdp\impdp命令。

我们要完成的任务:

1,从airtest用户导出.dmp的文件格式(也可以选择格式为.sql,但是sql表中不能有大字段(blob,clob,long),如果有,执行sql文件会报错。)

2,将导出的a.dmp文件再倒入airtest用户中,相当于备份。

3,将导出的a.dmp文件转存到dev用户中,相当于数据传输




sqlplus    /nolog

connect    / as sysdba


在plsql或者sqlplus中执行命令:

create directory dump_test as 'F:\dump'

提前在硬盘上创建'F:\dump'对应的文件件

--查看一下是否存在该目录

select * from dba_directories;

 

--授权给操作用户这个dump目录的权限         

grant read, write on directory dump_test to airtest;

grant read, write on directory dump_test to dev;

退出sql,到cmd下执行下列命令

任务1:使用本地用户airtest进行导出数据,导出到dump_test指定的目录中.即'F:\dump'

格式:Expdp 本地用户/用户的密码@oracle的sid  , directory参数指定导出到本地目录  dumpfile指定导出文件的文件名

expdp  airtest/airtest@orcl  directory=dump_test  dumpfile=a.dmp logfile=a.log


任务2:将数据导入到airtest 中

impdp airtest/airtest@orcl   directory=dump_test   dumpfile =a.dmp   logfile=b.log ;

任务3:将数据导入到dev

impdp dev/dev@orcl    directory=dump_test    dumpfile=a.dmp   logfile=b.log         remap_schema=airtest:dev  (结尾没有分号!!!)



参考资料:

http://blog.163.com/shexinyang@126/blog/static/1367393122013612105445369/

http://www.cnblogs.com/lanzi/archive/2011/01/06/1927731.html


在实际操作中当impdp 和expdp时有如下报错:

ORA-39002: invalid operation

  ORA-39070: Unable to open the log file.

  ORA-29283: invalid file operation

  ORA-06512: at "SYS.UTL_FILE", line 536

  ORA-29283: invalid file operation

  产生这个错误的原因通常有两个:

  1.对存放dmp文件或log文件的路径没有权限。

  2.对dmp文件没有权限。

反复排查还是没有找出原因。另辟蹊径:使用oracle自带的directory

select * from dba_directories;

选中一个directory,这里选的是DATA_PUMP_DIR,path:/opt/oracle/admin/orcl/dpdump/

并将shadow文件从root/Downloads中移动到这个directory;

mv SHADOW.DMP    /opt/oracle/admin/orcl/dpdump/

在bash下执行:

impdp  shadow/shadow@orcl directory=DATA_PUMP_DIR dumfile=SHADWO.DMP logfile=2.log  TABALE_EXISTS_ACTION=REPLACE;

TABALE_EXISTS_ACTION:当有表重复时,操作是替换。默认是skip。这里仅仅对重复的table执行替换操作,但是,sequence重复时还会报错:

QQ图片20150430220401.png

可以删掉sequence然后在impdp。 

drop sequence hibernate_sequence;









补充,如果新建一个数据库,从无到有的导入数据,如新建一个airback,然后执行impd时会出现如下错误:

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39006: 内部错误

ORA-39068: 在 PROCESS_ORDER=-4 的行中主表数据无效

ORA-01950: 对表空间 'USERS' 无权限

ORA-39097: 数据泵作业出现意外的错误 -1950

解决办法:

grant unlimited tablespace to  airback;

原因:

39068错误是由于表空间份额不足造成的连锁反应


remap_model 权限不足:

为数据库授予导入导出的权限

grant exp_full_database 

(grant imp_full_database to user /grant exp_full_database to user)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章