使用 Oracle Data Pump 导出数据

Oracle Data Pump 可在 Autonomous AI Database 和其他 Oracle 数据库之间快速批量移动数据和元数据。

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

要使用 Oracle Data Pump 将数据从自治 AI 数据库移至其他 Oracle 数据库,请使用以下选项之一:

使用自治 AI 数据库上的目录导出数据

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

使用数据泵在自治 AI 数据库上创建转储文件集

  1. 创建用于存储包含导出数据的转储文件的目录。例如:

     CREATE DIRECTORY data_export_dir as 'data_export';
    
  2. 在设置了 dumpfile 参数、将 filesize 参数设置为小于 50G 以及设置了 directory 参数的情况下运行数据泵导出。例如,以下内容显示了如何在具有 64 个 ECPU 的名为 ATPC1 的自治 AI 数据库中导出名为 SALES 的方案:

     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 数。有关要连接哪个数据库服务名称以运行数据泵导出的信息,请参阅自治 AI 数据库的预定义数据库服务名称

    导出完成后,您可以通过运行如下查询来查看生成的转储文件:

     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...
    

注:

将自治 AI 数据集移至云对象存储

  1. 连接到自治 AI 数据库。

  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 Storage:username 是 Oracle Cloud Infrastructure 用户名,password 是 Oracle Cloud Infrastructure 验证令牌。请参见 Working with Auth Tokens

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

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

  3. 通过调用 DBMS_CLOUD.PUT_OBJECT 将转储文件从自治 AI 数据库移至云对象存储。

    例如:

     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

将数据从自治 AI 数据库直接导出到对象存储

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

  1. 连接到自治 AI 数据库。

  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 Object Storage:username 是 Oracle Cloud Infrastructure 用户名,password 是 Oracle Cloud Infrastructure 验证令牌。请参见 Working with Auth Tokens

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

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

  3. 作为 ADMIN 用户,将您在上一步中定义的身份证明设置为自治 AI 数据库的默认身份证明。

    例如:

     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 UtilitiesOracle Database 26ai Utilities 中的 COMPRESSION

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

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

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

    • 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 AI Database. 有关要连接哪个数据库服务名称以运行数据泵导出的信息,请参阅自治 AI 数据库的预定义数据库服务名称

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

    有关自治 AI 数据库中不允许的对象的信息,请参见 Limitations on the Use of SQL Commands

  5. 验证结果。

    Oracle Data Pump 将每个转储文件部分划分为较小的块以加快上载速度。Oracle Cloud Infrastructure Object Storage 控制台为您导出的每个转储文件部分显示多个文件。实际转储文件的大小将显示为零 (0),其相关文件块显示为 10MB 或更小。例如:

     exp01.dmp
     exp01.dmp_aaaaaa
     exp02.dmp
     exp02.dmp_aaaaaa
    

    注:

    从控制台或使用 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 Import 将转储文件集导入到目标数据库。然后执行任何所需的清理。

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

    注:如果要将数据导入其他自治 AI 数据库,则不需要执行此步骤

    如果使用 Oracle Data Pump 直接导出到对象存储,如将数据从自治 AI 数据库直接导出到对象存储中所示,则对象存储上的转储文件显示大小为 0。Oracle Data Pump 将每个转储文件部分划分为较小的块以加快上载速度。Oracle Cloud Infrastructure Object Storage 控制台为您导出的每个转储文件部分显示多个文件。实际转储文件的大小将显示为零 (0),其相关文件块显示为 10MB 或更小。例如:

    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 命令从对象存储下载转储文件集。或者,可以使用支持替代字符的脚本,在单个命令中从对象存储下载所有转储文件。

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

    注:如果要将数据导入其他自治 AI 数据库,请参见 Load Data Using Oracle Data Pump

    如果使用 Oracle Data Pump 直接导出到对象存储的文件(如将数据从自治 AI 数据库导出到对象存储中所示),则如果导入文件时包含支持 format 参数 type 且值为 'datapump'DBMS_CLOUD 过程,则只需提供主文件名。支持 'datapump' 格式类型的过程会自动搜索和下载块。

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

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