zoukankan      html  css  js  c++  java
  • Oracle 10g 及之后导出/导入(Datapump Export/Import)工具

    本文内容

    • 数据泵与传统的 IMP/EXP 工具的区别
    • 开始使用 datapump 导出
    • 创建数据库目录
    • 再次尝试导出
    • 导入另一个数据库
    • 网络导入
    • 从 PL/SQL 调用
    • Oracle 11g Release 1 (11.1) Data Pump 导出和导入概述
    • Oracle 11g Release 1 (11.1) Data Pump 导出和导入模式
    • 参考资料
    • 修改记录

    导出/导入是逻辑备份,用于数据迁移,不能跟冷备份和热备份相比。

    从 Oracle 10 g 开始,Oracle 引入了一个新的导入和导出工具数据泵(Oracle Data pump),是一个服务,基于大容量数据迁移的结构,用来取代传统的 IMP/EXP 工具。数据泵与传统的导入/导出工具完全不同。传统的 IMP/EXP 是 Oracle 最古老的两个命令行工具,但不支持所有的 Oracle 10g 和 11g 的功能。这个新的工具名为 expdp 和 impdp。

    数据泵与传统的 IMP/EXP 工具的区别


    • 传统的 IMP/EXP 工具,都作为客户端程序运行,如果在导出过程中发生网络中断或客户端程序异常,都会导致导出操作失败;而数据泵主要工作在服务器端,通过新的 API 来建立和管理,主要由 DBMS_DATAPUMP 来完成。数据泵完全成为一个客户端应用,IMPDP/EXPDP 执行的命令实际上都是在调用服务器端的 API 在执行操作,一旦一个任务被调度或执行,客户端就可以退出连接,任务会在服务端继续运行。
    • 传统的 IMP/EXP 工具,是单线程操作,这在很多情况下成为一个瓶颈;而数据泵多线程的,建立多个数据泵工作进程来读/写正在被导出/导入的数据,也可以建立并行IO服务器进行。
    • 此外,数据泵还有其他优势。其实,它们的差异都归于结构的差异。传统的 IMP/EXP 完成是在客户端进行,而数据泵是在调用服务端的 API。

     

    开始用 datapump 导出


    $ expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
     
    Export: Release 10.2.0.1.0 - 64bit Production on Friday, 31 March,  2006 11:36:07
    Copyright (c) 2003, 2005, Oracle.  All rights reserved.
     
    Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options
     
    ORA-39002: invalid operation
    ORA-39070: Unable to open the log file.
    ORA-39087: directory name DMPDIR is invalid

    说明:

    • "dmpdir" 为导出目录;
    • "scott.dmp" 为导出的 datadump 文件;
    • scott 用户下的表在默认表空间 USERS 和临时表空间 TEMP 下。所以这个命令将 scott 用户把自己的表(对象)导出来;
    • 因为,Oracle 已经有这两个表空间,所以,直接导入即可。但是,如果是自己创建的表空间,就先要创建这个表空间,然后再导入。

    导出失败了!因为,我们需要先创建目录!

    创建数据库目录


    执行如下命令,创建一个数据库导出目录。该目录必须指向一个同一个服务器的有效目录作为数据库:

    SQL> CREATE DIRECTORY dmpdir AS '/opt/oracle';
    Directory created.
     
    SQL> GRANT read, write ON DIRECTORY dmpdir TO scott;
    Grant succeeded.

    说明:

    • "dmpdir" 为导出目录,"/opt/oracle" 为数据库路径(也可以操作系统的绝对路径,如"d:\db_backup");
    • 导出目录授权。让 scott 用户对该目录可读写。这样,scott 用户才能正常访问该目录,将数据库内容和导出的日志文件放在这里。

    备注:Oracle 从 Oracle 10g R2 开始,引入了一个称为 "DATA_PUMP_DIR" 的默认目录,如下所示:

    SQL> SELECT directory_path FROM dba_directories WHERE directory_name = 'DATA_PUMP_DIR';
     
    DIRECTORY_PATH
    --------------------------------------------------------------------------------
    /app/oracle/product/10.2.0/rdbms/log/

    再次尝试导出


    $ expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
     
    Export: Release 10.2.0.1.0 - 64bit Production on Friday, 31 March, 2006 11:41:02
    Copyright (c) 2003, 2005, Oracle.  All rights reserved.
     
    Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options
    Starting "SCOTT"."SYS_EXPORT_SCHEMA_01":  scott/********  DIRECTORY=dmpdir DUMPFILE=scott.dmp
    Estimate in progress using BLOCKS method...
    Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
    Total estimation using BLOCKS method: 175.2 MB
    Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
    Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC
    Processing object type SCHEMA_EXPORT/TABLE/TABLE
    Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
    Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
    Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
    Processing object type SCHEMA_EXPORT/TABLE/COMMENT
    Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
    Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
    Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
    Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
    Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
    Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
    Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
    Processing object type SCHEMA_EXPORT/JOB
    . . exported "SCOTT"."BIGEMP"                            145.2 MB 3670016 rows
    . . exported "SCOTT"."DEPT"                              5.656 KB       4 rows
    . . exported "SCOTT"."EMP"                               7.820 KB      14 rows
    . . exported "SCOTT"."ORD_CHARGE_TAB"                    5.296 KB       2 rows
    . . exported "SCOTT"."SALGRADE"                          5.585 KB       5 rows
    . . exported "SCOTT"."BONUS"                                 0 KB       0 rows
    . . exported "SCOTT"."NEWOBJECT1_T"                          0 KB       0 rows
    . . exported "SCOTT"."T1"                                    0 KB       0 rows
    Master table "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
    ******************************************************************************
    Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is:
      /app/oracle/scott.dmp
    Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 11:44:50

    导入到另一个数据库


    $ impdp system/oracle DIRECTORY=dmpdir DUMPFILE=scott.dmp
     
    Import: Release 10.2.0.1.0 - 64bit Production on Friday, 31 March, 2006 12:00:59
    Copyright (c) 2003, 2005, Oracle.  All rights reserved.
     
    Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options
    Master table "SYSTEM"."SYS_IMPORT_FULL_02" successfully loaded/unloaded
    Starting "SYSTEM"."SYS_IMPORT_FULL_02":  system/******** DIRECTORY=dmpdir DUMPFILE=scott.dmp
    Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
    Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC
    Processing object type SCHEMA_EXPORT/TABLE/TABLE
    Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
    . . imported "SCOTT"."BIGEMP"                            145.2 MB 3670016 rows
    . . imported "SCOTT"."DEPT"                              5.656 KB       4 rows
    . . imported "SCOTT"."EMP"                               7.820 KB      14 rows
    . . imported "SCOTT"."ORD_CHARGE_TAB"                    5.296 KB       2 rows
    . . imported "SCOTT"."SALGRADE"                          5.585 KB       5 rows
    . . imported "SCOTT"."BONUS"                                 0 KB       0 rows
    . . imported "SCOTT"."NEWOBJECT1_T"                          0 KB       0 rows
    . . imported "SCOTT"."T1"                                    0 KB       0 rows
    Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
    Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
    Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
    Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
    Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
    Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
    Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
    Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
    Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
    Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
    Processing object type SCHEMA_EXPORT/JOB
    Job "SYSTEM"."SYS_IMPORT_FULL_02" successfully completed at 12:02:22

    备注:

    • expdp 和 impdp 命令都是操作系统下执行;
    • 而创建导出目录,并为其授权,都是 SQL PLUS 下执行。
    • 以上例子对于刚开始的你已经足够。更多信息,请参看 Oracle 工具指南。输入下面命令可以列出该命令的所有参数。
    $ expdp help=yes
    $ impdp help=yes

    网络导入


    通过网络模式导入,不需要任何中间的 dump 文件。数据,通过一个数据库链路(database link)导出,直接导入到目标数据库。例如:

    SQL> create user new_scott identified by tiger;
    User created.
     
    SQL> grant connect, resource to new_scott;
    Grant succeeded.
     
    SQL> grant read, write on directory dmpdir to new_scott;
    Grant succeeded.
     
    SQL> grant create database link to new_scott;
    Grant succeeded.
    SQL> conn new_Scott/tiger
    Connected.
     
    SQL> create database link old_scott connect to scott identified by tiger  using 'orcl.oracle.com';
    Database link created.
    $ impdp new_scott/tiger DIRECTORY=dmpdir NETWORK_LINK=old_scott remap_schema=scott:new_scott

    所有的工作在目标操作系统上完成。唯一一个到源操作系统的引用是通过数据库链路(database link)。

    从 PL/SQL 调用


    可以从 PL/SQL 调用 datapump。这对于每天或每周计划用 DBMS_SCHEDULER 导出很方便。

    DECLARE
      hand NUMBER;
    BEGIN
      hand := Dbms_DataPump.Open(operation => 'EXPORT',
                                  job_mode => 'FULL',
                                  job_name => 'FULLEXPJOB',
                                   version => 'COMPATIBLE');
      Dbms_DataPump.Add_File(handle => hand,
                           filename => 'expdp_plsql.log',
                          directory => 'DMPDIR',
                           filetype => 3);
      Dbms_DataPump.Add_File(handle => hand,
                           filename => 'expdp_plsql.dmp',
                          directory => 'DMPDIR',
                           filetype => 1);
      -- Dbms_DataPump.Set_Parameter(handle => hand,
      --                               name => 'ESTIMATE',
      --                              value => 'STATISTICS');
      Dbms_DataPump.Start_Job(hand);
    END;
    /

    说明

    一般情况下,导出/入不会遇到太多问题,只要注意一下几点就行:

    • 导出目录必须存在,否则导出工具无法写 export.log 导出文件日志,会报 Ora 错误;
    • 导出使用的用户必须对导出目录有读写权限。这个显而易见;
    • 导入时,相应的表空间和用户必须已存在。这个也显而易见。

    注意这三点,一般都会成功导出/导入。

    上面是 Datapump 导出/导入的步骤。下面概述一下该工具。

    Oracle 11g Release 1 (11.1) Data Pump 导出和导入概述


    Oracle Data Pump(数据泵)技术可以使数据和元数据高速地从一个数据库移动到另一个数据库。该技术是 Oracle数据库数据移动实用工具 Data Pump Export 和 Import 的基础。也就是说,导出/导入工具是基于 Oracle 数据泵技术。

    Data Pump 可以让你指定作业是否移动数据和元数据的一个子集。这是通过 Export 和 Import 参数,使用数据过滤和元数据过滤来完成。

    Data Pump 导出

    Data Pump 导出是一个把数据和元数据卸载到一个称为“转储文件集(dump file )”操作系统文件集的工具。转储文件集可以移动到另一个系统,并通过 Data Pump 导入工具加载。

    转储文件集是由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件组成。这些文件以专有的、二进制格式写入,只有 Data Pump 导入工具可以读取。导入期间,Data Pump Import 工具使用这些文件在转存文件集中定位每个数据库对象。

    Data Pump 导入

    Data Pump 导入是一个把导出的转存文件集加载到目标系统。转储文件集是由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件组成。这些文件以专有的、二进制格式写入。

    导入也可以用于直接从源数据库加载到目标数据库加载,而无需转储文件,使得导出和导入操作同时进行,最大限度地减少总时间。这称为“网络导入”。

    导入也可以让你看到导入作业正在执行的所有 SQL DDL,而不实际执行的 SQL。这是通过导入 SQLFILE 参数完成的。

    Data Pump API

    Data Pump API 提供一个高速的机制,把所有或部分数据和元数据从一个数据库移动到另一个数据库。若使用 Data Pump API,你可以使用 DBMS_DATAPUMP PL/SQL 包提供的存储过程。Data Pump Export 和 Data Pump Import 实用工具是基于 Data Pump API。

    Metadata API

    元数据用程序编程接口( Metadata API)为你提供一个途径完成以下工作:

    • 检索一个对象的 XML 元数据
    • 以多种不同的方式传输 XML,包括把它传输到 SQL DDL
    • 提交 XML 以通过检索重建提取的对象

    若使用元数据 API,您可以使用 DBMS_METADATA PL/SQL 包中提供的存储过程。元数据的目的,数据库中的每个实体都被模型化一个对象,它属于一个对象类型。例如,scott.emp 表是一个对象,它的对象的类型是 TABLE。当你获取一个对象的元数据时,必须指定对象类型。

    Oracle 11g Release 1 (11.1) Data Pump 导出和导入模式


    导出模式

    http://www.cnblogs.com/liuning8023/archive/2012/04/11/2441602.html

    导入模式

    http://www.cnblogs.com/liuning8023/archive/2012/04/11/2443178.html

    参考资料


    修改记录


    • 第一次 2012-04-09 [UPDATE][ADD]
    • 第二次 2012-04-11 [UPDATE][ADD]
    • 第三次 2013-03-09 [ADD]

  • 相关阅读:
    Fiddler 捕获HTTPS流量
    Fiddler 弱网测试
    Fiddler Composer设计器, Fitter过滤器,断点
    Fiddler Statistics统计,Inspector检查器,AutoResponder自动响应器
    Fiddler Session List会话列表、命令行与状态栏
    Fiddler菜单栏工具栏
    HTTP协议请求与响应详解
    Postman 运用Cookie
    Postman 文件上传请求
    Postman 头域操作
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2952404.html
Copyright © 2011-2022 走看看