• EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
  • EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
  • IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。

使用expdp导出文件前的设置:

  1. 创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建(我登录的是root用户),选取linux上一个实际目录,或者新建一个目录,这里我选的是'/usr/local/tomcat'这个已经有的目录,并将tomcat文件夹权限设为最高777,

进入oracle模式:su - oracle

[oracle@iz2zehftd4ce4m2zqo3c6iz ~]$ sqlplus / as sysdba

SQL>create directory dmp_dir as '/usr/local/tomcat';
  1. 查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)

SQL>select * from dba_directories;

  1. 给用户赋予在指定目录的操作权限,最好以system等管理员赋予(我这里登录的是root用户,所以设置为public)。
SQL>grant read,write on directory dmp_dir to public;

SQL> show user;

SQL> host

-- 备注:删除目录语句:SQL> DROP DIRECTORY dmp_dir;

导出数据

  • 退出sql模式到oracle
  1. 按用户导出数据
[oracle@hzqq ~]$ expdp 用户名/密码@服务器IP地址/orcl schemas=用户名 DIRECTORY=dmp_dir DUMPFILE=20190603.dmp logfile=20190603dmp.log;
  1. 按表名导
[oracle@hzqq ~]$ expdp test_demo/test_demo@orcl TABLES=sys_log,dept dumpfile=sys_log.dmp DIRECTORY=dmp_dir;

按指定一类的表名进行导出,比如导出表名前缀为test_的所有表:

[oracle@hzqq ~]$ expdp test_demo/test_demo@orcl TABLES=test_% dumpfile=sys_log.dmp DIRECTORY=dmp_dir;
  1. 按查询条件导
[oracle@hzqq ~]$ expdp test_demo/test_demo@orcl directory=dmp_dir dumpfile=sys_log1.dmp Tables=sys_log query=\"WHERE id=\'5280e\'\";

导入数据

  1. 导到指定用户下

如果想导入的用户已经存在,并且导入用户名和导出的用户名不一致:

[oracle@hzqq ~]$ impdp user2/pass2 directory=dmp_dir dumpfile=TestDemo.dmp REMAP_SCHEMA=user1:user2  remap_tablespace=user1space:user2space  EXCLUDE=USER

如果想导入的用户不存在:

[oracle@hzqq ~]$impdp system/passsystem directory=dmp_dir dumpfile=user1.dmp REMAP_SCHEMA=user1:user2

user2会自动建立,其权限和使用的表空间与user1相同,但此时用user2无法登录,必须修改user2的密码

如果想导入的用户已经存在,并且导入用户名和导出的用户名一致:

[oracle@hzqq ~]$ impdp test_demo/test_demo DIRECTORY=dmp_dir DUMPFILE=expdp.dmp SCHEMAS=test_demo;

impdp username/password table_exists_action=truncate  directory=DATA_PUMP_DIR dumpfile=expdpfilename.dmp logfile=implog.log

如果需要覆盖或追加数据,则需要添加table_exists_action命令:

例如,导入到指定用户下,并覆盖原有表数据:

[oracle@hzqq ~]$ impdp user2/pass2 table_exists_action=replace directory=dmp_dir dumpfile=TestDemo.dmp REMAP_SCHEMA=user1:user2 EXCLUDE=USER

table_exists_action含义:

skip 是如果已存在表,则跳过并处理下一个对象;

append是为表增加数据;

truncate是截断表,然后为其增加新数据;

replace是删除已存在表,重新建表并追加数据;

  1. 改变表的owner
[oracle@hzqq ~]$ impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
  1. 导入表空间
[oracle@hzqq ~]$ impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
  1. 导入数据库
[oracle@hzqq ~]$ impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
  1. 追加数据
[oracle@hzqq ~]$ impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION

表导入完成后,登录plsql等工具,检查下function、view这些是否有报错,有报错的查找下代码原因,也可能是因为导入的原因需要重新编辑并运行下即可:

备注

  • 密码有特殊字符的加上引号:username/"psdf$@FS"

  • 如果要导入的数据库没有表空间,则在impdp语句后加上参数:TRANSFORM=segment_attributes:n

  • 例如: impdp test_demo/test_demo DIRECTORY=dmp_dir DUMPFILE=expdp.dmp SCHEMAS=test_demo TRANSFORM=segment_attributes:n

--导出
--查看导出目录
select * from dba_directories;
--expnc_dir 为导出库存放位置,没有需创建
--创建目录
create directory expnc_dir as 'D:\app\Administrator\admin\xactqc619\dpdump';
--授权
Grant read,write on directory expnc_dir to system;
--导出整个库
expdp system/cape@ORCL DIRECTORY=expnc_dir DUMPFILE=20181006jswj.EXPDB FULL=y;

--导入
--导入测试数据库
--connect sys/password as sysdba
--当首次导入时创建表空间 (运行脚本时会提示输入 &1 输入数据文件希望存放的物理地址 例如 D:\OracleData)
create tablespace apps datafile '&1\apps.dbf' size 100m autoextend on next 10m;
create tablespace appsys datafile '&1\appsys.dbf' size 100m autoextend on next 10m;
create tablespace hr datafile '&1\hr.dbf' size 100m autoextend on next 10m;
create tablespace appview datafile '&1\appview.dbf' size 100m autoextend on next 10m;
create tablespace workflow datafile '&1\workflow.dbf' size 100m autoextend on next 10m;
create tablespace fm datafile '&1\fm.dbf' size 100m autoextend on next 10m;
create tablespace bbp datafile '&1\bbp.dbf' size 100m autoextend on next 10m;
create tablespace oa datafile '&1\oa.dbf' size 100m autoextend on next 10m;
create tablespace km datafile '&1\km.dbf' size 100m autoextend on next 10m;
create tablespace v6fm datafile '&1\km.dbf' size 100m autoextend on next 10m;

--创建用户
create user apps identified by cape default tablespace apps;
create user appsys identified by cape default tablespace appsys;
create user hr identified by cape default tablespace hr;
create user workflow identified by cape default tablespace workflow;
create user fm identified by cape default tablespace fm;
create user bbp identified by cape default tablespace bbp;
create user oa identified by cape default tablespace oa;
create user km identified by cape default tablespace km;
create user v6fm identified by cape default tablespace v6fm;


--赋权限
grant dba to apps;
grant dba to appsys;
grant dba to hr;
grant dba to workflow;
grant dba to fm;
grant dba to bbp;
grant dba to oa;
grant dba to km;
grant dba to v6fm;

grant all on dual to appsys with grant option;
grant all on dual to apps with grant option;
grant all on dual to hr with grant option;
grant all on dual to workflow with grant option;
grant all on dual to fm with grant option;
grant all on dual to bbp with grant option;
grant all on dual to oa with grant option;
grant all on dual to km with grant option;
grant all on dual to v6fm with grant option;	

select * from dba_directories;
--expnc_dir 为导入库存放位置,没有需创建

--创建目录
create directory expncs as 'D:\app\Administrator\admin\xactqc619\dpdump';
--授权
Grant read,write on directory expncs to system;
--导入
impdp system/cape@orcl DIRECTORY=EXPNC_DIR DUMPFILE=20190730JSWJ.EXPDB FULL=y ignore=y;



create directory data_dir as 'D:/11'; 
impdp mms/cape@orcl REMAP_SCHEMA = bill:bill table_exists_action = replace directory=data_dir dumpfile=20190730JSWJ.EXPDB logfile=expdp.log







--表空间mms
create tablespace mms datafile 'D:\app\user\oradata\orcl\mms.dbf' size 100m autoextend on next 10m;
--用户mms
create user mms identified by cape default tablespace mms;
--开发库赋权
grant dba to mms;
grant all on dual to mms with grant option;




--导出脚本
expdp system/cape@sac182 dumpfile=mms.EXPDB schemas=(mms)




--导入脚本

impdp system/cape@SMS114 dumpfile=APS_V6_AEPCS63.EXPDB schemas=(aps) EXCLUDE=STATISTICS


impdp system/admin@SMS114 directory=DATA_PUMP_DIR dumpfile=APS_V6_AEPCS63.EXPDB REMAP_SCHEMA=aps:apsss  
remap_tablespace=EXAMPLE:apss



expdp/impdp命令解析

使用模板:expdp user/password@ip:1521/sid DIRECTORY=DATA_PUMP_DIR DUMPFILE=test.dump CONTENT=ALL schema=user

  • directory: 该参数可自定义,定义方法为:create directory dir_dp as '/opt/oracle/admin/XE/dpdump/'
  • 一般来说是使用数据库默认的数据泵导出路径,可以用SQ语句查看系统默认的导出路径: SELECT * FROM all_directories 该路径的默认名为DATA_PUMP_DIR。

  • DUMPFILE: 导出的数据泵文件名字,为自定义,一般用.dump后缀结尾。

  • CONTENT:

  • 该参数为导出模式,其有三个选项:{ALL | DATA_ONLY | METADATA_ONLY}
  • ALL为导出整个数据库

  • DATA_ONLY为仅导出数据

  • METADATA_ONLY为仅导出元数据

  • schema: 该参数指定用哪个用户来导出数据。如果是用非管理员 **(sys/system)**账户导数据,需要给你该用户授予访问directory目录的权限

  • Grant read,write on directory dir_dp to user

impdp,导入命令

使用模板: impdp user/password@sid DIRECTORY=DATA_PUMP_DIR DUMPFILE=test.dump CONTENT=ALL schema=user

参数和expdp命令是一样的。