Oct 30, 2019 No Comments expdp/impdp 数据泵导入导出 # 业务场景: 在工作中,涉及到oracle数据库迁移,使用navicat等其他工具 容易报错,一系列问题很麻烦,今天记录一下操作流程及个人理解(文章参考了很多文档和博客); # EXPDP数据导出 请自行修改目录路径和自定义的表名,否则出现错误很难查找~ **一般expdp流程:** ![](https://img-blog.csdnimg.cn/20190109164450688.png) ## ******一、新建逻辑目录****** 最好以system等管理员创建逻辑目录,Oracle不会自动创建实际的物理目录“D:\oracleData”(务必手动创建此目录),仅仅是进行定义逻辑路径dump_dir; 忘记sys用户密码的可以去下如何修改sys用户密码; 建议使用pl、navicat等oracle操作工具来操作; 登陆后sql执行: ``` create directory mydata as '逻辑目录路径'; ``` 例如: ``` create directory mydata as '/data/oracle/oradata/mydata'; ``` ## ******二、查看逻辑目录是否创建成功****** 执行sql: ``` select * from dba_directories ``` ![](https://img-blog.csdnimg.cn/20190109165730896.png) ## 三、用expdp导出数据 **用法及解释:** ``` expdp 用户名/密码@ip地址/实例 [属性] ip地址不写默认就是本地 userid=test/test --导出的用户,本地用户!! directory=dmpfile --导出的逻辑目录,一定要在oracle中创建完成的,并且给用户授权读写权限 dumpfile=xx.dmp --导出的数据文件的名称,如果想在指定的位置的话可以写成dumpfile=/home/oracle/userxx.dmp logfile=xx.log --日志文件,如果不写这个参数的话默认名称就是export.log,可以在本地的文件夹中找到 schemas=userxx --使用dblink导出的用户不是本地的用户,需要加上schema来确定导出的用户,类似于exp中的owner,但还有一定的区别 EXCLUDE=TABLE:"IN('T1','T2','T3')" --exclude 可以指定不导出的东西,table,index等,后面加上不想导出的表名 network_link=db_local --这个参数是使用的dblink来远程导出,需要指定dblink的名称 ``` **列出一些场景:** ``` ****1)导出用户及其对象**** expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp directory=dump_dir logfile=expdp.log; ****2)导出指定表**** expdp scott/tiger@orcl tables=emp,dept dumpfile=expdp.dmp directory=dump_dir logfile=expdp.log; ****3)按查询条件导**** expdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp tables=empquery='where deptno=20' logfile=expdp.log; ****4)按表空间导**** expdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=temp,example logfile=expdp.log; ****5)导整个数据库**** expdp scott/123@127.0.0.1/orcl directory=dump_dir dumpfile=ly.dmp full=y logfile=expdp.log; ``` 一般用的都是导出整个数据库,本人使用的代码: ``` //包含所有用户的表、视图、索引等 expdp JCPT/123@127.0.0.1/orcl directory=mydata dumpfile=ly.dmp full=y logfile=expdp.log; //指定用户的表、视图、索引等 expdp JCPT/123@127.0.0.1/orcl directory=mydata schemas=jcpt dumpfile=ly.dmp logfile=expdp.log; ``` 导出完成后:逻辑目录生成了一个 dmp文件; ![](https://img-blog.csdnimg.cn/20190109175012669.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d0eTkzMTAwOA==,size_16,color_FFFFFF,t_70) ## IMPDP数据导入 在正式导入数据前,要先确保要导入的用户已存在,如果没有存在,请先用下述命令进行新建用户 **流程:** ![](https://img-blog.csdnimg.cn/20190109181151511.png) ### 一、创建表空间 使用system登录oracle,执行sql 格式: create tablespace 表间名 datafile '数据文件名' size 表空间大小 ``` create tablespace data_test datafile 'e:\oracle\oradata\test\test.dbf' size 2000M; ``` ### 二、创建用户并授权 格式: create user 用户名 identified by 密码 default tablespace 表空间表; ``` create user study identified by study default tablespace data_test; ``` (*我们创建一个用户名为 study,密码为 study, 表空间为 madate-这是在上一步建好的.) 授权给 用户 study ,执行sql ``` #给用户逻辑目录读写权限 sql>grant read,write on directory mydata to study; #给用户表空间权限 sql>grant dba,resource,unlimited tablespace to study; ``` ### 三、impdp导入 命令在cmd或者控制台输入,不是sql语句 写法: impdp 用户名/密码@ip地址/实例 [属性] ip地址不写默认就是本地 注释: ``` ****1)导入用户(从用户scott导入到用户scott)**** impdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp schemas=scott logfile=impdp.log; ****2)导入表(从scott用户中把表dept和emp导入到system用户中)**** impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp remap_schema=scott:system logfile=impdp.log table_exists_action=replace (表空间已存在则替换); ****3)导入表空间**** impdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=example logfile=impdp.log; ****4)导入整个数据库**** impdb system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y logfile=impdp.log; 把用户jcpt中所有的表导入到lyxt用户下 impdp lyxt/lyxt123@127.0.0.1/orcl directory=mydata dumpfile=LY.DMP remap_schema=jcpt:lyxt logfile=ims20171122.log table_exists_action=replace ****5)追加数据**** impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp schemas=systemtable_exists_action logfile=impdp.log; ``` 以上是日常工作中实际工作中用到的,希望能够给你得到帮助。 最后更新于 2019-10-30 09:08:30 并被添加「」标签,已有 3759 位童鞋阅读过。 本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭