expdp和impdp数据的导入和导出

    先简单介绍一下data pump:
    Oracle 10g引入了DATA PUMP提供的是一种基于服务器的数据提取和恢复的实用程序,DATA PUMP在体系结构和功能上与传统的EXPORT和IMPORT实用程序相比有了显著的提升。DATA PUMP允许您停止和重启作业,查看运行的作业的状态,及对导入和导出的数据做限制。 
     注意:数据泵文件与传统的EXP/IMP数据转储文件是不兼容的
    以下是DATA PUMP的几个优点介绍:
    1.数据泵(Data Pump)的所有工作都有数据库实例来完成,数据库可以并行来处理这些工作,不仅可以通过建立多个数据泵工作进程来读/写正在被导出/导入的数据,也可以建立并行I/O服务器以更快地读取或插入数据,从而,单进程瓶颈被彻底解决。
    2.通过数据泵,以前通过EXP/IMP主要基于Client/Server的逻辑备份方式转换为服务器端的快速备份,数据泵主要工作在服务器端,可以通过并行方式快速装入或卸载数据,而且可以在运行过程中调整并行的程度,以加快或减少资源消耗。
    3.数据泵通过新的API来建立和管理,这些新的工作主要由DBMS_DATAPUMP来完成。新的导入/导出工具完全成为了一个客户端应用,通过IMPDP/EXPDP执行的命令实际上都是在调用Server端的API在执行操作,所以一旦一个任务被调度或执行,客户端就可以退出连接,任务会在server端继续执行,随后通过客户端实用程序从任何地方检查任务的状态和进行修改

我现在是要做的是将一个用户( PLATFORM) 下面的数据从oracle 11g导入到 oracle 12c的rac集群里面的

查看A服务器(导出服务器)的数据库版本信息

  1. SQL> select * from v$version;

  2. BANNER
  3. --------------------------------------------------------------------------------
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
  5. PL/SQL Release 11.2.0.1.0 - Production
  6. CORE    11.2.0.1.0    Production
  7. TNS for Linux: Version 11.2.0.1.0 - Production
  8. NLSRTL Version 11.2.0.1.0 - Production
查看RAC集群服务器的数据库版本信息

  1. SQL> SELECT * FROM V$VERSION;

  2. BANNER                                                                           CON_ID
  3. -------------------------------------------------------------------------------- ----------
  4. Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production     0
  5. PL/SQL Release 12.1.0.2.0 - Production                                           0
  6. CORE    12.1.0.2.0    Production                                                 0
  7. TNS for Linux: Version 12.1.0.2.0 - Production                                   0
  8. NLSRTL Version 12.1.0.2.0 - Production                                           0
用data pump导出数据之前,需要建立目录,由于数据泵主要在Server端工作,导出文件需要写出到Server端本地目录,这个DIRECTORY就是对应的Server端的目录。将要访问数据泵文件的用户必须要拥有该目录的读/写权限。

  1. --创建目录
  2. SQL> create directory test_expdp as '/data/software';

  3. Directory created.

  4. -- 用户对目录复权
  5. SQL> grant read,write on directory test_expdp to platform;

  6. Grant succeeded.
  1. -- 查询目录视图
  1. SQL> SELECT * FROM ALL_DIRECTORIES;
  2. SQL> SELECT * FROM DBA_DIRECTORIES;
将A服务器上的 platform 用户的数据从oracle 11g导出

  1. [oracle@localhost software]$ expdp platform/******** schemas=platform dumpfile =platform0303.dmp logfile=platform0303.log directory=test_expdp job_name=hs_hisjob;

  2. Export: Release 11.2.0.1.0 - Production on Tue Mar 3 22:41:29 2015

  3. Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

  4. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
  5. With the Partitioning, Oracle Label Security, OLAP, Data Mining,
  6. Oracle Database Vault and Real Application Testing options
  7. Starting \"PLATFORM\".\"HS_HISJOB\": platform/******** schemas=platform dumpfile=platform0303.dmp logfile=platform0303.log directory=test_expdp job_name=hs_hisjob
  8. Estimate in progress using BLOCKS method...
  9. Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
  10. Total estimation using BLOCKS method: 22.47 GB
  11. Processing object type SCHEMA_EXPORT/USER
  12. Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
  13. Processing object type SCHEMA_EXPORT/ROLE_GRANT
  14. Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
  15. Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
  16. Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC
  17. Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
  18. Processing object type SCHEMA_EXPORT/TABLE/TABLE
  19. Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
  20. Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
  21. Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
  22. Processing object type SCHEMA_EXPORT/TABLE/COMMENT
  23. Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
  24. Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION
  25. Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
  26. Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
  27. Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
  28. Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
  29. Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
  30. Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
  31. Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
  32. Processing object type SCHEMA_EXPORT/JOB
  33. . . exported "PLATFORM"."CRM_CMP_REPORT_LOG":"SYS_P21" 3.245 GB 12331067 rows
  34. . . exported "PLATFORM\"."CRM_CUSTOMERS_CONTACT" 2.028 GB 16874723 rows
  35. ......
  36. ......
  37. ......
  38. . . exported \"PLATFORM\".\"YM_WB_PF_IB\" 0 KB 0 rows
  39. . . exported \"PLATFORM\".\"YM_WB_PF_OB\" 0 KB 0 rows
  40. Master table \"PLATFORM\".\"HS_HISJOB\" successfully loaded/unloaded
  41. ******************************************************************************
  42. Dump file set for PLATFORM.HS_HISJOB is:
  43.   /data/software/platform0303.dmp
  44. Job \"PLATFORM\".\"HS_HISJOB\" successfully completed at 22:58:37
数据导出后,将导出文件拷贝到集群中的其中一个实例上面

  1. scp /data/software/platform0303.dmp oracle@192.168.3.230:/u01/exp
输入oracle用户的密码后,文件就开始传了。

查看A机器上 PLATFORM 用户使用的表空间及表空间对应数据文件相关信息,以便在RAC上创建相关的表空间及数据文件

  1. -- 在A机器上查看用户 PLATFORM 的默认表空间
  2. SQL> SELECT USERNAME,DEFAULT_TABLESPACE FROM DBA_USERS WHERE USERNAME ='PLATFORM';

  3. USERNAME         DEFAULT_TABLESPACE
  4. ------------------------------ ------------------------------
  5. PLATFORM         PLATFORM

  6. -- 查看用户 PLATFORM 使用的表空间
  7. SQL> SELECT DISTINCT OWNER,TABLESPACE_NAME FROM DBA_EXTENTS WHERE OWNER LIKE 'PLATFORM';

  8. OWNER             TABLESPACE_NAME
  9. ------------------------------ ------------------------------
  10. PLATFORM         PLATFORM

  11. --查看表空间 PLATFORM 对应的数据文件
  12. SQL> SELECT FILE_NAME,TABLESPACE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME IN ('PLATFORM');

  13. FILE_NAME TABLESPACE_NAME
  14. ---------------------------------------------- ------------------------------
  15. /data/ora11g/oradata/GDBNAME/platform01.dbf PLATFORM
  16. /data/ora11g/oradata/GDBNAME/platform02.dbf PLATFORM
下面是在RAC集群上创建表空间及数据文件

  1. CREATE SMALLFILE TABLESPACE TABLESPACE1
  2.     DATAFILE
  3.         '+RACDATA/EM12C/DATAFILE/platform01' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ,
  4.         '+RACDATA/EM12C/DATAFILE/platform02' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ;
创建用户,由于oracle 12c创建用户与oracle 11g,创建CDB用户

  1. CREATE USER C##PLATFORM IDENTIFIED BY ********
  2. DEFAULT TABLESPACE PLATFORM
  3. TEMPORARY TABLESPACE \"TEMP\"
  4. ACCOUNT UNLOCK ;

  5. -- 复权
  6. ALTER USER \"C##PLATFORM\" DEFAULT ROLE \"DBA\";
然后开始向RAC中导入数据(IMP_DIR目录就是对应的  / u01/exp,创建步骤上面已经有了)

  1. [oracle@12crac1 exp]$ impdp c##platform/****** fromuser=platform touser=c##platform dumpfile =platform0303.dmp logfile=platform0303.log directory=IMP_DIR job_name=hs_hisut;

  2. Import: Release 12.1.0.2.0 - Production on Wed Mar 4 14:35:35 2015

  3. Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.

  4. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
  5. With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
  6. Advanced Analytics and Real Application Testing options
  7. Legacy Mode Active due to the following parameters:
  8. ......
  9. ......
数据的导出和导入完成了。

以下是补充内容(摘抄):
    在执行导入导出过程中,可以按Ctrl+C组合键退出当前交互模式,退出之后,导出操作不会停止,这不同于Oracle以前的EXP。以前的EXP,如果退出交互式模式,就会出错终止导出任务。由于EXPDP是数据库内部定义的任务,已经与客户端无关,退出交互之后会进入export的命令行模式,此时支持status等查看命令:

  1. Export> status --查看当前JOB的状态及相关信息
  2. --DATA PUMP与传统的EXP/IMP相比它还可以对正在运行的JOB进行停止和启动:
  3. Export> stop_job --暂停JOB
  4. --此时通过status命令查看到这时JOB的状态值是UNDEFINED
  5. Export> start_job --重启暂停的JOB
  6. Export> kill_job --取消当前的JOB并释放相关客户会话
  7. Export> continue_client --通过此命令查看已连接JOB的日志
  8. Export> exit_client --通过此命令退出export模式

--已退出export模式后再次连接去查看JOB的状态用以下命令:

  1. [oracle@LinuxRedHat expdpdump]$ expdp platform/******** attach;
  2. [oracle@LinuxRedHat expdpdump]$ expdp platform/******** attach=system.HS_HISJOB
导出模式
按表模式导出
expdp system/mingyue@HS2008  tables=hs_his.hisholdsinfo,hs_his.hisfundjour dumpfile =expdp_test.dmp logfile=expdp_test.log directory=TEST_EXPDP job_name=hs_hisjob1;

按查询条件导出

expdp system/mingyue@HS2008  tables=hs_his.hisfuassettot dumpfile =expdp_test.dmp logfile=expdp_test.log directory=TEST_EXPDP job_name=hs_hisjob2 query='"where init_date between 20080501 and 20080701"';
注意:如果QUERY条件写得有问题那么下面总是会报以下的错误
ORA-39001: invalid argument value
ORA-39035: Data filter SUBQUERY has already been specified.
注意查询条件的引号,一对双引号一对单引号(单引号在内在外都可以)

多个表时
QUERY=emp:\"WHERE username in ('aaa','bb')\",taba:\"WHERE rownum<5\"

按表空间导出
Expdp system/mingyue@HS2008 dumpfile=tablespace_test.dmp tablespaces=HS_HIS_DATA,HS_HIS_IDX logfile=tablespace_test.log directory=TEST_EXPDP job_name=hs_hisjob6;

导出整个数据库
expdp system/mingyue@HS2008 dumpfile =full.dmp full=y logfile=full.log directory=TEST_EXPDP job_name=hs_hisjob6;

使用exclude,include导出数据 
Include导出用户中指定类型的指定对象
仅导出hs_his用户下以HISFU开头的所有表包含与表相关的索引,备注等不包含过程等其它对象类型:
expdp hs_his/handsome@HS2008 dumpfile=include_1.dmp logfile=include_1.log directory=TEST_EXPDP job_name=job_hisjob7 include=TABLE:\"LIKE \'HISFU%\'\";
导出hs_his用户下排除HISFU开头的所有表:
expdp system/mingyue@HS2008 schemas=hs_his dumpfile=include_1.dmp logfile=include_1.log directory=TEST_EXPDP job_name=job_hisjob7 include=TABLE:\"NOT LIKE \'HISFU%\'\";
仅导出hs_his用户下的所有存储过程:
expdp system/mingyue@HS2008 schemas=hs_his dumpfile=include_1.dmp logfile=include_1.log directory=TEST_EXPDP job_name=job_hisjob7 include=PROCEDURE;   
Exclude导出用户中指定类型的指定对象
导出hs_his用户下除出TABLE类型以外的所有对象,如果表不导出那么与表相关的索引,约束等与表有关联的对象类型也不会被导出:
expdp system/mingyue@HS2008 schemas=hs_his dumpfile=exclude_1.dmp logfile=exclude_1.log directory=TEST_EXPDP job_name=job_hisjob7 exclude=TABLE;
导出hs_his用户下排除HISFU开头的所有表:
expdp hs_his/handsome@HS2008 dumpfile=include_1.dmp logfile=include_1.log directory=TEST_EXPDP job_name=job_hisjob7 exclude=TABLE:\"LIKE\'HISFU%\'\";
导出hs_his用户下的所有对象,但是对于表类型只导出以HISFU开头的表:
expdp hs_his/handsome@HS2008 dumpfile=include_1.dmp logfile=include_1.log directory=TEST_EXPDP job_name=job_hisjob7 exclude=TABLE:\"NOT LIKE \'HISFU%\'\";
注意:
1. 如果content=data_only那么导出时就不能使用exclude,include
2. LINUX及UNIX对于特殊字符都要加一个转义字符如’ ( )等这些字符在EXPDP中都要加上一个”\”进行转义,否则会有如下错误出现:
[oracle@LinuxRedHat expdpdump]$ expdp hs_his/handsome@HS2008 dumpfile=include_1.dmp logfile=include_1.log directory=TEST_EXPDP job_name=job_hisjob7 include=table:"LIKE 'HISFU%'";
 
Export: Release 10.2.0.1.0 - Production on 星期六, 13 11月, 2010 17:54:42
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
 
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-31641: unable to create dump file "/u03/expdpdump/include_1.dmp"
ORA-27038: created file already exists
Additional information: 1

数据泵导入
按表导入
导入expdp_test.dmp文件中的指定表,此文件是以system用户按schemas=hs_his导出的:
impdp hs_his/handsome@HS2008  dumpfile =expdp_test.dmp logfile=expdp_test.log directory=TEST_EXPDP tables=hs_his.hisholdsinfo,hs_his.hisfundjour job_name=hs_histb1;
按用户导入
这种直接按用户导入的方法与EXP,IMP相比是用户可以不用存在可以直接导入因为EXPDP导出的时候会将用户相关的信息全部导出来,比如用户原来使用的密码,表空间,系统与操作权限等基本上保持用户与删除前的权限一致如下:
impdp system/mingyue@HS2008 schemas=hs_fund,hs_futures dumpfile =expdp_test.dmp logfile=expdp_test.log directory=TEST_EXPDP job_name=hs_hisut;


数据泵相 关视图

  1. SELECT * FROM V$SESSION_LONGOPS;
  2. SELECT * FROM DBA_DATAPUMP_JOBS;
  3. SELECT * FROM user_Datapump_Jobs;

参考网址:
http://blog.sina.com.cn/s/blog_5636c6710100zhft.html
http://blog.csdn.net/lwei_998/article/details/6256853
http://blog.itpub.net/22664653/viewspace-668806/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30150152/viewspace-1449890/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30150152/viewspace-1449890/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值