使用 Oracle Data Pump 导出数据

Oracle Data Pump 在 Autonomous Database 和其他 Oracle 数据库之间提供了非常快的批量数据和元数据移动。

Oracle 建议使用最新 Oracle Data Pump 版本将数据从 Autonomous Database 导出到其他 Oracle 数据库,因为它包含增强功能和修复程序,以获得更好的体验。从 Oracle Instant Client 下载,下载适用于您平台的工具包(包括 Oracle Data Pump)。有关下载 Oracle Instant Client 和工具包后所需的安装步骤,请参见平台安装下载页面上的安装说明。

要使用 Oracle Data Pump 将数据从 Autonomous Database 移动到其他 Oracle 数据库,请使用以下选项之一:
  • 选项 1:将数据与数据泵导出一起移动到 Autonomous Database 目录

    使用 Oracle Data Pump 将数据导出到数据库上的某个目录,然后将数据从该目录移动到 Cloud Object Store。当希望将数据从 Autonomous Database 移动到多个目标数据库时,此方法非常有用。您可以创建一次转储文件集并将其用于多个目标数据库,而不是将数据导出到多个云对象存储。

    通过将数据导出到数据库上的目录,执行以下步骤从 Autonomous Database 移动数据:
    1. 将数据导出到 Autonomous Database 上的目录,并将转储文件集从该目录移动到云对象存储。请参阅使用 Autonomous Database 上的目录导出数据
    2. 从云对象存储下载转储文件,将数据导入目标数据库,然后清除云对象存储。请参见 Download Dump Files,Run Data Pump Import,and Clean Up Object Store
  • 选项 2:将数据泵导出到对象存储

    使用此导出方法,可以使用 Oracle Data Pump 将数据直接导出到对象存储。Oracle Cloud Infrastructure 对象存储和 Oracle Cloud Infrastructure 经典对象存储支持此导出方法。这样可以避免在 Autonomous Database 的目录中创建转储文件集,然后将转储文件集移动到云对象存储的开销。当您计划将数据移动到单个目标数据库时,此方法可以节省工作量并加快导出过程。

    通过将数据直接导出到对象存储,执行以下步骤从 Autonomous Database 移动数据:
    1. 直接将数据从 Autonomous Database 导出到云对象存储。请参阅将数据从 Autonomous Database 直接导出到对象存储
    2. 从云对象存储下载转储文件,将数据导入目标数据库,然后清除云对象存储。请参见 Download Dump Files,Run Data Pump Import,and Clean Up Object Store

使用 Autonomous Database 上的目录导出数据

要使用 Autonomous Database 上的目录导出数据,必须先使用数据库中某个目录上的导出数据创建转储文件集,然后将这些文件从数据库目录上载到云对象存储。

使用数据泵在 Autonomous Database 上创建转储文件集

  1. 创建一个目录,用于存储包含导出数据的转储文件。例如:
    CREATE DIRECTORY data_export_dir as 'data_export';
  2. 在设置了 dumpfile 参数、将 filesize 参数设置为小于 50G 以及设置了 directory 参数的情况下运行数据泵导出。例如,下面显示了如何在名为 ATPC1Autonomous Database 中导出名为 SALES 的方案,该方案具有 64 个 ECPU:
    expdp sales/password@ATPC1_high 
    directory=data_export_dir 
    dumpfile=exp%L.dmp 
    parallel=16
    encryption_pwd_prompt=yes
    filesize=1G
    logfile=export.log
    数据泵参数说明:
    • 对于 ECPU,parallel 必须设置为 ECPU 计数的 0.25 倍。因此,在具有 64 个 ECPU 的以上示例中,parallel 设置为 0.25 x 64,即具有 expdp 的 16。

    • 对于 OCPU,parallel 必须设置为与 OCPU 计数相同的值。在具有 16 个 OCPU 的以上示例中,parallel 将设置为 16,expdp

    • 如果在使用 expdp 导出期间使用 encryption_pwd_prompt=yes 参数,则必须将 encryption_pwd_prompt=yes 与导入一起使用,并在 impdp 提示符下输入相同的密码来解密转储文件(请记住通过导出提供的密码)。加密密码的最大长度为 128 字节。

    • 除了传统 %U%u 通配符之外,dumpfile 参数还支持 %L%l 通配符。例如,dumpfile=export%L.dmp

      使用 %L%l 通配符从 Oracle Database 发行版 12.2 及更高版本导出。此通配符将转储文件文件名扩展为 3 位至 10 位可变宽度增量整数,从 100 开始,以 2147483646 结束。

    为了获得最佳导出性能,请将 HIGH 数据库服务用于导出连接,并将 PARALLEL 参数设置为数据库中的 CPU 数。有关连接哪个数据库服务名以运行数据泵导出的信息,请参阅自治数据库的预定义数据库服务名

    导出完成后,您可以通过运行如下查询来查看生成的转储文件:
    SELECT * FROM DBMS_CLOUD.LIST_FILES('DATA_EXPORT_DIR');
    例如,此查询的输出显示生成的转储文件和导出日志文件:
    
    OBJECT_NAME                 BYTES  CHECKSUM                   CREATED          LAST_MODIFIED  
    ---------------------- ---------- ----–---- –------------------------–----- --------------------
    exp01.dmp                   12288               12-NOV-19 06.10.47.0 PM GMT       12-NOV-19...
    exp02.dmp                    8192               12-NOV-19 06.10.48.0 PM GMT       12-NOV-19...
    exp03.dmp                 1171456               12-NOV-19 06.10.48.0 PM GMT       12-NOV-19...
    exp04.dmp                  348160               12-NOV-19 06.10.48.0 PM GMT       12-NOV-19...
    export.log                   1663               12-NOV-19 06.10.50.0 PM GMT       12-NOV-19...
    

注意:

  • 要执行完全导出或导出其他用户拥有的对象,您需要具有 DATAPUMP_CLOUD_EXP 角色。

  • 用于将转储文件移动到对象存储的 API 支持的文件大小上限为 50GB,因此请确保指定的大小不大于 filesize 参数中的大小。

  • 有关详细信息,请参阅 Oracle Database 19c UtilitiesOracle Database 23ai Utilities 中的 Oracle Data Pump Export

将转储文件集从 Autonomous Database 移至云对象存储

  1. 连接到 Autonomous Database

  2. 使用 DBMS_CREDENTIAL.CREATE_CREDENTIAL 过程存储云对象存储身份证明。例如:
    BEGIN
      DBMS_CREDENTIAL.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@oracle.com',
        password => 'password'
      );
    END;
    /
    usernamepassword 提供的值取决于您使用的云对象存储服务:
    • Oracle Cloud Infrastructure Object Storageusername 是您的 Oracle Cloud Infrastructure 用户名,password 是您的 Oracle Cloud Infrastructure 验证令牌。请参见 Working with Auth Tokens

    • Oracle Cloud Infrastructure Object Storage Classicusername 是您的 Oracle Cloud Infrastructure Classic 用户名,password 是您的 Oracle Cloud Infrastructure Classic 密码。

      此操作以加密格式将身份证明存储在数据库中。您可以使用身份证明名称的任何名称。请注意,除非对象存储身份证明发生更改,否则此步骤仅需要一次。存储身份证明后,可以对所有数据加载使用相同的身份证明名称。

  3. 通过调用 DBMS_CLOUD.PUT_OBJECT 将转储文件从 Autonomous Database 移动到云对象存储。

    例如:
    BEGIN
       DBMS_CLOUD.PUT_OBJECT(credential_name => 'DEF_CRED_NAME',
         object_uri => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/exp01.dmp',
         directory_name => 'DATA_EXPORT_DIR',
         file_name => 'exp01.dmp');
       DBMS_CLOUD.PUT_OBJECT(credential_name => 'DEF_CRED_NAME',
         object_uri => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/exp02.dmp',
         directory_name => 'DATA_EXPORT_DIR',
         file_name => 'exp02.dmp');
       DBMS_CLOUD.PUT_OBJECT(credential_name => 'DEF_CRED_NAME',
         object_uri => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/exp03.dmp',
         directory_name => 'DATA_EXPORT_DIR',
         file_name => 'exp03.dmp');
       DBMS_CLOUD.PUT_OBJECT(credential_name => 'DEF_CRED_NAME',
         object_uri => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/exp04.dmp',
         directory_name => 'DATA_EXPORT_DIR',
         file_name => 'exp04.dmp');
    END;
    /

    有关 PUT_OBJECT 的信息,请参见 PUT_OBJECT Procedure

直接将数据从 Autonomous Database 导出到对象存储

显示如何使用 Oracle Data Pump 将数据从 Autonomous Database 直接导出到 Cloud Object Store。

  1. 连接到 Autonomous Database
  2. 使用 DBMS_CREDENTIAL.CREATE_CREDENTIAL 过程存储云对象存储身份证明。例如:
    BEGIN
      DBMS_CREDENTIAL.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
               username => 'adb_user@oracle.com',
        password => 'password'
        );
    END;
    /
    为用户名和密码提供的值取决于您使用的云对象存储服务:
    • Oracle Cloud Infrastructure 对象存储:username 是您的 Oracle Cloud Infrastructure 用户名,password 是您的 Oracle Cloud Infrastructure 验证令牌。请参见 Working with Auth Tokens
    • Oracle Cloud Infrastructure 经典对象存储:username 是您的 Oracle Cloud Infrastructure 经典用户名,password 是您的 Oracle Cloud Infrastructure 经典密码。

    此操作以加密格式将身份证明存储在数据库中。您可以使用身份证明名称的任何名称。请注意,除非对象存储身份证明发生更改,否则此步骤仅需要一次。存储身份证明后,可以对所有数据加载使用相同的身份证明名称。

  3. 作为 ADMIN 用户,将上一步中定义的身份证明设置为 Autonomous Database 的默认身份证明。
    例如:
    ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'DEF_CRED_NAME';
  4. 运行数据泵导出,并将 dumpfile 参数设置为云对象存储上现有存储桶的 URL(以文件名或具有替代变量(例如 exp%U.dmp)的文件名结尾)。
    • Oracle Data Pump 版本 19.9 或更高版本:
      credential 参数设置为在步骤 2 中创建的身份证明的名称。例如:
      expdp admin/password@ADBD_high \
      SCHEMAS=SOE3 \
      filesize=5GB \
      credential=DEF_CRED_NAME \
      dumpfile=https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/adbdpreview1/mybucket/export%L.dmp \
      parallel=16 \
      encryption_pwd_prompt=yes \
      logfile=export.log \
      directory=data_pump_dir \
      EXCLUDE=statistics,index
      在此示例中,dumpfile 是 Oracle Cloud Infrastructure Swift URI,它指定名称与 us-ashburn-1 区域中 mybucket 存储桶中的 export<number>.dmp 匹配的所有文件。(adbdpreview1 是存储桶所在的对象存储名称空间。)
    • 早于 19.9 的 Oracle Data Pump 版本:
      使用 default_credential 关键字和冒号启动 dumpfile 参数的值。例如:
      expdp admin/password@ADBD_high \
      SCHEMAS=SOE3 \
      filesize=5GB \
      dumpfile=DEF_CRED_NAME:https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/adbdpreview1/mybucket/export%L.dmp \ 
      parallel=16 \
      encryption_pwd_prompt=yes \
      logfile=export.log \
      directory=data_pump_dir \
      EXCLUDE=statistics,index 
      在此示例中,dumpfile 参数中的 default_credential 关键字是必需的。
    Oracle Data Pump 参数说明:
    • 默认情况下,Oracle Data Pump Export 仅压缩元数据,然后再写入转储文件集。在写入转储文件集之前,可以将 compression 参数设置为 ALL 以压缩元数据和数据。有关详细信息,请参阅 Oracle Database 19c Utilities 中的 COMPRESSIONOracle Database 23ai Utilities

    • 除了传统 %U%u 通配符之外,dumpfile 参数还支持 %L%l 通配符。例如,dumpfile=export%L.dmp

      使用 %L%l 通配符从 Oracle Database 发行版 12.2 及更高版本导出。此通配符将转储文件文件名扩展为 3 位至 10 位可变宽度增量整数,从 100 开始,以 2147483646 结束。

      有关更多信息,请参见 Parameters Available in Data Pump Export Command-Line Mode in Oracle Data Base 19c Utilities or Oracle Data Base 23ai Utilities

    • For the best export performance use the high database service for your export connection and set the parallel parameter to 0.25 times the number of ECPUs or same as the number of OCPUs in your Autonomous Database.有关要连接哪个数据库服务名称以运行数据泵导出的信息,请参阅自治数据库的预定义数据库服务名称

    • 有关不同云对象存储服务的转储文件 URL 格式,请参见云对象存储 URI 格式

    有关 Autonomous Database 中不允许的对象的信息,请参阅使用 SQL 命令的限制

  5. 验证结果。
    Oracle Data Pump 将每个转储文件部分划分为较小的块,从而加快上载速度。Oracle Cloud Infrastructure 对象存储控制台为您导出的每个转储文件部分显示多个文件。实际转储文件的大小将显示为零 (0),其相关文件块显示为 10 MB 或更小。例如:
    exp01.dmp
    exp01.dmp_aaaaaa
    exp02.dmp
    exp02.dmp_aaaaaa

    注意:

    Oracle Cloud Infrastructure 控制台下载零字节转储文件或使用 Oracle Cloud Infrastructure CLI 不会提供完整的转储文件。要从对象存储下载完整转储文件,请使用支持 Swift(如 curl)的工具,并提供您的用户登录和 Swift 验证令牌。例如:
    curl -O -v -X GET -u 'user1@example.com:auth_token' \
       https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/namespace-string/bucketname/export01.dmp

下载转储文件、运行数据泵导入和清理对象存储

如果需要,请从云对象存储下载转储文件,并使用 Oracle Data Pump 导入将转储文件集导入到目标数据库。然后执行任何所需的清理。

  1. 从云对象存储下载转储文件。

    注意:

    如果要将数据导入到其他 Autonomous Database ,则不需要执行此步骤。
    如果使用 Oracle Data Pump 直接导出到对象存储,如 Export Data From Autonomous Database to Object Store Directly 中所示,则对象存储上的转储文件显示大小为 0。Oracle Data Pump 将每个转储文件部分划分为较小的块,从而加快上载速度。Oracle Cloud Infrastructure 对象存储控制台为您导出的每个转储文件部分显示多个文件。实际转储文件的大小将显示为零 (0),其相关文件块显示为 10 MB 或更小。例如:
    exp01.dmp
    exp01.dmp_aaaaaa
    exp02.dmp
    exp02.dmp_aaaaaa
    Oracle Cloud Infrastructure 控制台下载零字节转储文件或使用 Oracle Cloud Infrastructure CLI 不会提供完整的转储文件。要从对象存储下载完整转储文件,请使用支持 Swift(如 curl)的工具,并提供您的用户登录和 Swift 验证令牌。例如:
    curl -O -v -X GET -u 'user1@example.com:auth_token' \
       https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/namespace-string/bucketname/exp01.dmp

    cURL 命令在其 URL 中不支持通配符或替代字符。您需要使用多个 cURL 命令从对象存储下载转储文件集。或者,您也可以使用支持替代字符的脚本,通过单个命令从对象存储下载所有转储文件。有关示例,请参见 How To:Download all files from an export to object store job in Autonomous Database using cURL

  2. 运行数据泵导入以将转储文件集导入到目标数据库。

    注意:

    如果要将数据导入到其他 Autonomous Database ,请参阅使用 Oracle Data Pump 加载数据

    如果文件使用 Oracle Data Pump 直接导出到对象存储,如 Export Data From Autonomous Database to Object Store Directly 中所示,如果使用支持 format 参数 type 且值为 'datapump'DBMS_CLOUD 过程导入文件,则只需提供主文件名。支持 'datapump' 格式类型的过程会自动搜索和下载块。

  3. 执行导入后清除任务。如果已完成将转储文件导入到目标数据库,请删除包含数据的存储桶,或者从云对象存储存储桶中删除转储文件,并从下载转储文件以运行数据泵导入的位置删除转储文件。

有关详细信息,请参阅 Oracle Database 19c UtilitiesOracle Database 23ai Utilities 中的 Parameters Available in Oracle Data Pump Import Command-Line Mode