expdpimpdp⽤法详解
⼀、注意事项:
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';
2、查看管理理员⽬录(同时查看操作系统是否存在,因为Oracle并不关⼼该⽬录是否存在,如果不存在,则出错)
SQL>select * from dba_directories;
3、给⽤户赋予在指定⽬录的操作权限,最好以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@iZm5e5f4jmz3fgd9f0qhikZ ~]$ expdp ⽤户名/密码@服务器IP地址/orcl schemas=⽤户名 DIRECTORY=dmp_dir DUMPFILE=20190603.dmp logfile=20190603dmp.log;
2、按表名导
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ expdp test_demo/test_demo@orcl TABLES=sys_log,dept dumpfile=sys_log.dmp DIRECTORY=dmp_dir;
按指定⼀类的表名进⾏导出,⽐如导出表名前缀为test_的所有表:
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ expdp test_demo/test_demo@orcl TABLES=test_% dumpfile=sys_log.dmp DIRECTORY=dmp_dir;
3、按查询条件导
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ expdp test_demo/test_demo@orcl directory=dmp_dir dumpfile=sys_log1.dmp Tables=sys_log query=\"WHERE id=\'5280e\'\";
五、导⼊数据
1、导到指定⽤户下
如果想导⼊的⽤户已经存在,并且导⼊⽤户名和导出的⽤户名不⼀致:
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdp user2/pass2 directory=dmp_dir dumpfile=TestDemo.dmp
REMAP_SCHEMA=user1:user2 remap_tablespace=user1space:user2space EXCLUDE=USER
如果想导⼊的⽤户不存在:
exists的用法
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$impdp system/passsystem directory=dmp_dir dumpfile=user1.dmp
REMAP_SCHEMA=user1:user2
user2会⾃动建⽴,其权限和使⽤的表空间与user1相同,但此时⽤user2⽆法登录,必须修改user2的密码
如果想导⼊的⽤户已经存在,并且导⼊⽤户名和导出的⽤户名⼀致:
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ 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@iZm5e5f4jmz3fgd9f0qhikZ ~]$ 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是删除已存在表,重新建表并追加数据;
2、改变表的owner
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp
TABLES=scott.dept REMAP_SCHEMA=scott:system;
3、导⼊表空间
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4、导⼊数据库
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5、追加数据
[oracle@iZm5e5f4jmz3fgd9f0qhikZ ~]$ 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
有上述错误时,检查⽬录⽂件是否是777权限
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论