为什么80%的码农都做不了架构师?>>>   

Oracle Datapump API 是基于PL/SQL实现的,是命令行方式下的补充。使用Datapump API可以将其逻辑备份特性将其集成到应用程序当中,
基于界面来实现有利于简化其管理。本文主要描述的使用Datapump API描述各种不同情形的数据导出。

一、演示使用datapump api实现数据导出

--1、导出schema(schema模式)DECLAREl_dp_handle        NUMBER;l_last_job_state   VARCHAR2 (30) := 'UNDEFINED';l_job_state        VARCHAR2 (30) := 'UNDEFINED';l_sts              KU$STATUS;BEGIN--sepcified operation,job model_dp_handle :=DBMS_DATAPUMP.open (operation     => 'EXPORT', job_mode      => 'SCHEMA'     , remote_link   => NULL, job_name      => 'JOB_EXP1', version       => 'LATEST');--specified dumpfile and dump directoryDBMS_DATAPUMP.add_file (handle      => l_dp_handle, filename    => 'scott_schema.dmp', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$FILE_TYPE_DUMP_FILE);--specified log file and dump directoryDBMS_DATAPUMP.add_file (handle      => l_dp_handle, filename    => 'scott_schema.log', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$FILE_TYPE_LOG_FILE);--specified fliter for schemaDBMS_DATAPUMP.metadata_filter (handle   => l_dp_handle, name     => 'SCHEMA_EXPR', VALUE    => 'IN (''SCOTT'')');DBMS_DATAPUMP.start_job (l_dp_handle);DBMS_DATAPUMP.detach (l_dp_handle);END;/--2、导出特定表table(表模式)DECLAREl_dp_handle        NUMBER;l_last_job_state   VARCHAR2 (30) := 'UNDEFINED';l_job_state        VARCHAR2 (30) := 'UNDEFINED';l_sts              KU$STATUS;BEGINl_dp_handle :=DBMS_DATAPUMP.open (operation     => 'EXPORT', job_mode      => 'TABLE', remote_link   => NULL, job_name      => 'JOB_EXP2', version       => 'LATEST');DBMS_DATAPUMP.add_file (handle      => l_dp_handle, filename    => 'emp_tbl.dmp', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$FILE_TYPE_DUMP_FILE);DBMS_DATAPUMP.add_file (handle      => l_dp_handle, filename    => 'emp_tbl.log', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$FILE_TYPE_LOG_FILE);-->如果非当前帐户,使用下面的过滤条件,即特定schema下的特定表,如为当前帐户,此过滤条件可省略DBMS_DATAPUMP.metadata_filter (handle   => l_dp_handle, name     => 'SCHEMA_EXPR', VALUE    => 'IN(''SCOTT'')');DBMS_DATAPUMP.metadata_filter (handle   => l_dp_handle, name     => 'NAME_EXPR', VALUE    => 'IN(''EMP'')');DBMS_DATAPUMP.start_job (l_dp_handle);DBMS_DATAPUMP.detach (l_dp_handle);END;/--3、导出schema并过滤掉特定表(使用非当前帐户导出时应过滤schema)DECLAREl_dp_handle   NUMBER;BEGINl_dp_handle :=DBMS_DATAPUMP.open (operation => 'EXPORT', job_mode => 'SCHEMA');DBMS_DATAPUMP.add_file (handle      => l_dp_handle, filename    => 'scott_filter.dmp', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$FILE_TYPE_DUMP_FILE);DBMS_DATAPUMP.add_file (handle      => l_dp_handle, filename    => 'scott_filter.log', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$FILE_TYPE_LOG_FILE);DBMS_DATAPUMP.metadata_filter (handle   => l_dp_handle, name     => 'SCHEMA_LIST', VALUE    => ' ''SCOTT'' ');DBMS_DATAPUMP.metadata_filter (handle        => l_dp_handle, name          => 'NAME_EXPR', VALUE         => ' !=''EMP'' ', object_type   => 'TABLE');DBMS_DATAPUMP.start_job (l_dp_handle);END;/--4、导出当前schema下的所有表并过滤特定表DECLAREl_dp_handle   NUMBER;BEGINl_dp_handle :=DBMS_DATAPUMP.open (operation => 'EXPORT', job_mode => 'TABLE');DBMS_DATAPUMP.add_file (handle      => l_dp_handle, filename    => 'scott_filter_2.dmp', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$FILE_TYPE_DUMP_FILE);DBMS_DATAPUMP.add_file (handle      => l_dp_handle, filename    => 'scott_filter_2.log', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$FILE_TYPE_LOG_FILE);DBMS_DATAPUMP.metadata_filter (handle        => l_dp_handle, name          => 'NAME_EXPR', VALUE         => ' !=''EMP'' ');DBMS_DATAPUMP.metadata_filter (handle        => l_dp_handle, name          => 'NAME_EXPR', VALUE         => ' !=''DEPT'' ');DBMS_DATAPUMP.start_job (l_dp_handle);DBMS_DATAPUMP.detach (l_dp_handle);END;/--5、批量过滤当前用户下的特定表DECLAREl_dp_handle   NUMBER;BEGINl_dp_handle :=DBMS_DATAPUMP.open (operation => 'EXPORT', job_mode => 'TABLE');DBMS_DATAPUMP.add_file (handle      => l_dp_handle, filename    => 'scott_filter_3.dmp', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$FILE_TYPE_DUMP_FILE);DBMS_DATAPUMP.add_file (handle      => l_dp_handle, filename    => 'scott_filter_3.log', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$FILE_TYPE_LOG_FILE);DBMS_DATAPUMP.metadata_filter (handle        => l_dp_handle, name          => 'NAME_EXPR', VALUE         => ' NOT LIKE ''T%'' ');DBMS_DATAPUMP.start_job (l_dp_handle);DBMS_DATAPUMP.detach (l_dp_handle);END;//**************************************************//* Author: Robinson Cheng                         *//* Blog:   http://blog.csdn.net/robinson_0612     *//* MSN:    robinson_0612@hotmail.com              *//* QQ:     645746311                              *//**************************************************/
--6、过滤特定表上的特定行
--现在表tb_emp上HIREDATE为日期型,需要按日期进行过滤scott@CNMMBO> desc tb_empName                                      Null?    Type----------------------------------------- -------- ----------------------------EMPNO                                              NUMBER(4)ENAME                                              VARCHAR2(10)JOB                                                VARCHAR2(9)MGR                                                NUMBER(4)HIREDATE                                           VARCHAR2(10)SAL                                                NUMBER(7,2)COMM                                               NUMBER(7,2)DEPTNO                                             NUMBER(2)scott@CNMMBO> select empno,ename,hiredate from tb_emp;EMPNO ENAME      HIREDATE---------- ---------- ----------9999 Ro.Ch7369 SMITH      198012177499 ALLEN      198102207521 WARD       198102227566 JONES      198104027654 MARTIN     198109287698 BLAKE      198105017782 CLARK      198106097788 SCOTT      198704197839 KING       198111177844 TURNER     198109087876 ADAMS      198705237900 JAMES      198112037902 FORD       198112037934 MILLER     1982012315 rows selected.scott@CNMMBO> select count(*) from tb_emp where hiredate>='19810311';COUNT(*)----------11DECLAREl_dp_handle   NUMBER;BEGINl_dp_handle :=DBMS_DATAPUMP.open (operation => 'EXPORT', job_mode => 'TABLE');dbms_datapump.add_file (handle      => l_dp_handle, filename    => 'scott_tb_emp.dmp', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$file_type_dump_file);dbms_datapump.add_file (handle      => l_dp_handle, filename    => 'scott_tb_emp.log', directory   => 'DB_DUMP_DIR', filetype    => DBMS_DATAPUMP.KU$file_type_log_file);DBMS_DATAPUMP.metadata_filter (handle        => l_dp_handle, name          => 'NAME_EXPR', VALUE         => ' =''TB_EMP'' ', object_type   => 'TABLE');DBMS_DATAPUMP.data_filter( handle       => l_dp_handle, name         => 'SUBQUERY', VALUE        => 'WHERE HIREDATE >=''19810311''', table_name   => 'TB_EMP' );                                DBMS_DATAPUMP.start_job (l_dp_handle);DBMS_DATAPUMP.detach (l_dp_handle);END;//*oracle@SZDB:/u02/database/CNMMBO/BNR/dump> more scott_tb_emp.logStarting "SCOTT"."SYS_EXPORT_TABLE_01":  Estimate in progress using BLOCKS method...Processing object type TABLE_EXPORT/TABLE/TABLE_DATATotal estimation using BLOCKS method: 64 KBProcessing object type TABLE_EXPORT/TABLE/TABLEProcessing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS. . exported "SCOTT"."TB_EMP"                            7.695 KB      11 rowsMaster table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded******************************************************************************Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is:/u02/database/CNMMBO/BNR/dump/scott_tb_emp.dmpJob "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 17:33:23 */--7、批量过滤特定表上的特定行
--将下面的代码包含在PL/SQL块中,使用游标循环来传递需要过滤的表的名字从而生成多个过滤条件
--下面的PL/SQL块中所有包含ARC字符的表上的特定日期v_split_date的记录才能被导出FOR tab_cur IN (SELECT table_name, num_rowsFROM dba_tablesWHERE table_name LIKE '%ARC%' AND owner='GOEX_ADMIN')LOOPdbms_datapump.data_filter (handle       => hand,name         => 'SUBQUERY',VALUE        => 'WHERE BUSINESS_DATE >= ''' || v_split_date || '''',table_name   => '' || tab_cur.table_name || '');END LOOP;--8、错误处理
--如果定义了job_name则经常会碰到下列错误,如果未指定job_name则有系统自动生成job_name,并由系统自动管理job_nameDECLARE*ERROR at line 1:ORA-31634: job already existsORA-06512: at "SYS.DBMS_SYS_ERROR", line 79ORA-06512: at "SYS.DBMS_DATAPUMP", line 911ORA-06512: at "SYS.DBMS_DATAPUMP", line 4354ORA-06512: at line 7scott@CNMMBO> ho oerr ora 31634/*31634, 00000, "job already exists"// *Cause:  Job creation or restart failed because a job having the selected  //          name is currently executing.  This also generally indicates that//          a Master Table with that job name exists in the user schema.  Refer//          to any following error messages for clarification.// *Action: Select a different job name, or stop the currently executing job  //          and re-try the operation (may require a DROP on the Master Table).  */scott@CNMMBO> select table_name from user_tables where table_name like 'JOB%';TABLE_NAME------------------------------JOB_EXPscott@CNMMBO> drop table job_exp;drop table job_exp*ERROR at line 1:ORA-00054: resource busy and acquire with NOWAIT specifiedscott@CNMMBO> SELECT DISTINCT    object_name2                  || '   '3                  || locked_mode4                  || '   '5                  || ctime6                  || '   '7                  || c.SID8                  || '  '9                  || serial#10             FROM v$locked_object a, dba_objects b, v$lock c, v$session d11            WHERE a.object_id = b.object_id12              AND c.SID = a.session_id13              AND c.SID = d.SID;OBJECT_NAME||''||LOCKED_MODE||''||CTIME||''||C.SID||''||SERIAL# -----------------------------------------------------------------------JOB_EXP   3   552   1075  799scott@CNMMBO> alter system kill session '1075,799';System altered.scott@CNMMBO> drop table job_exp purge;   -->删除表之后再次进行导出Table dropped.  9、使用视图监控datapump状态scott@CNMMBO> col owner_name format a15scott@CNMMBO> col operation format a15scott@CNMMBO> col state format a20scott@CNMMBO> select owner_name,job_name,operation,job_mode,state,degree from dba_datapump_jobs;OWNER_NAME      JOB_NAME        OPERATION       JOB_MODE   STATE                    DEGREE--------------- --------------- --------------- ---------- -------------------- ----------SCOTT           JOB_EXP1        EXPORT          SCHEMA     EXECUTING                     110、使用下面的过程设定并行度DBMS_DATAPUMP.set_parallel (hand, 1);11、上述操作所在的演示环境scott@CNMMBO> select * from v$version where rownum<2;BANNER----------------------------------------------------------------Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

二、几点注意事项
1、使用schema模式导出时,如果导出的schema为当前schema,则不需要指定schema过滤条件,否则需要对schema进行过滤
2、使用table表模式导出时,如果导出的表为当前schema,则不需要指定schema过滤条件,否则需要对schema进行过滤
3、对于过滤表上的特定记录可以使用多种SQL表达式,如 LIKE, NOT LIKE,IN, NOT IN, = , != 符号等
4、需要注意单引号的使用,尤其是在字符型的数据类型时,两个单引号代表一个引号
5、如果在导出时存在同样的dump文件和日志文件时PL/SQL块将执行失败,删除或通过写PL/SQL来判断文件是否存在,如存在是否覆盖等
6、如果指定了job_name,则当前drop失败之后,再次执行时会碰到job已经存在的提示,建议让系统自动生成job_name简化管理

三、更多参考

数据泵 EXPDP 导出工具的使用

数据泵 IMPDP 导入工具的使用

expdp impdp中 exclude/include 的使用

http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_datpmp.htm
https://forums.oracle.com/forums/thread.jspa?threadID=837324
http://psoug.org/reference/dbms_datapump.html

原文链接: http://blog.csdn.net/robinson_0612/article/details/7195849

转载于:https://my.oschina.net/dtec/blog/47319

使用 Oracle Datapump API 实现数据导出相关推荐

  1. oracle点勾算提交吗,oracle表结构和数据导出时的一些勾选项说明

    使用pl/sql developer导出oracle数据库的表结构和表数据时,有一些勾选项供用户选择,需要用户根据实际情况进行勾选或取消. 导出方法如下: 一.只导出表结构 1.使用pl/sql de ...

  2. java导出oracle到excel_java实现将oracle表中的数据导出到excel表里

    1.数据库连接类:Dbutil package sql2excel; import java.sql.Connection; import java.sql.DriverManager; import ...

  3. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据

    最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...

  4. oracle两个表数据比较,oracle数据库两表数据比较

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...

  5. oracle 数据导出

    oracle 数据导出 分类: oracle 2011-10-23 16:22 25人阅读 评论(0) 收藏 举报 方案一:使用SQLPlus的Spool命令.Spool是SQLPlus的命令,不是S ...

  6. Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(上)

    <Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(上)> <Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(下)> 目的:指导项 ...

  7. oracle 导出数据 utl,【原创】利用utl_file包进行表数据导出

    利用utl_file包进行表数据导出 2013/11/12 一.概述 工作中需要将许多表的数据导出到一份excel中,虽然PL/SQL自带有导出的功能,但是导出后需要进行手动的汇总到一张excel中, ...

  8. Pl/sql 如何将oracle的表数据导出成excel文件?

    oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件--select MID,CODE,NAME from Dxc_Goods_Cate where ...

  9. 在pl/sql中使用exp/imp工具实现oracle数据导出/导入

    在pl/sql中使用exp/imp工具实现oracle数据导出/导入 2006年11月19日 星期日 10:59 Oracle 数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令 ...

最新文章

  1. vPower系列- 前言
  2. Web Control 开发系列(三) 解析IPostBackEventHandler和WebForm的事件机制
  3. mstsc局域网远程 要预先做的设置
  4. MapReduce-Reduce端join操作-步骤分析
  5. sql参数化还是被注入了_SQL注入是什么?
  6. element UI中的select选择器的change方法需要传递多个值
  7. java键盘输入到文件中_在Linux中使用java和javac命令编译运行java文件
  8. cart算法_机器学习十大算法之一——决策树CART算法
  9. 课程设计之第二次冲刺----第一天
  10. 泰克吉时利Keithley数据采集器自动计量校准软件NSAT-3070
  11. 如何通过抖音来进行广告宣传
  12. 矩阵知识:线性变换、相似矩阵、对角矩阵、逆矩阵
  13. 学会 Python 到底能干嘛?我们整理了 7 大工作方向 + 170 个项目课程给你
  14. oracle查询成绩属于什么等级,oracle认证考试成绩查询方法是什么?
  15. android手机禁止休眠_Android的屏幕禁止休眠和锁屏的方法
  16. 利用4G CAT1开发板制作短信网关(一)
  17. Scrum立会报告+燃尽图(Beta阶段第七次)
  18. 思科模拟器PacketTracer7--利用一台交换机和2台pc互连构成小型局域网
  19. 细读《深入理解 Android 内核设计思想》(四)Binder 机制 [中]
  20. 单片机c语言电梯程序设计,基于51单片机的模拟电梯控制系统设计.doc

热门文章

  1. Spring 数据访问那些事儿(一)spring + jdbc
  2. 计算机视觉与深度学习 | 激光雷达(Lidar)发展史及其应用
  3. 使用GDI+实现圆形进度条控件的平滑效果
  4. sqlite3 表里插入系统时间(时间戳)
  5. python程序的基本框架_Python PyQt学习随笔:PyQt主程序的基本框架
  6. oracle数据库恢复aul_RMAN备份与恢复 —— 完全恢复与不完全恢复
  7. java list set map的区别_Java集合类List/Set/Map的区别和联系
  8. 目标检测(R-CNN、Fast R-CNN、Fater R-CNN)
  9. 第四范式天枢入选毕马威首届“领先消费科技50”榜单
  10. 【Python】Pandas profiling 生成报告并部署的一站式解决方案