使用 Oracle Data Pump 加载数据

Oracle Data Pump 在 Oracle 数据库和 Autonomous Database on Dedicated Exadata Infrastructure 之间提供非常快速的批量数据和元数据移动。

通过数据泵导入,您可以从位于 Oracle Cloud Infrastructure Object StorageOracle Cloud Infrastructure Object Storage Classic 上的数据泵文件导入数据。您可以将数据保存到 Cloud Object Store,并使用 Oracle Data Pump 将数据加载到 Autonomous Database

注意:

要使“试用”替代阅读以下主题,您可以参加 Oracle Autonomous Database Dedicated for Fleet Administrators Workshop 中的 Lab 9:Migrate with Data Pump

从现有 Oracle Database 中导出数据

首先使用 Oracle Data Pump Export 导出现有的 Oracle Database 方案。然后使用 Oracle Data Pump Import 将它们迁移到 Autonomous Database

Oracle 建议使用以下数据泵导出参数,以更快、更轻松地迁移到 Autonomous Database

exclude=cluster, db_link
parallel=n
schemas=schema name
dumpfile=export%l.dmp

Oracle Data Pump Export 提供了多种导出模式,Oracle 建议使用模式模式迁移到 Autonomous Database 。可以使用 schemas 参数列出要导出的方案。

为了加快迁移速度,请将方案导出到多个数据泵文件并使用并行操作。可以指定要与 dumpfile 参数一起使用的转储文件名格式。将 parallel 参数至少设置为 Autonomous Database 中的 CPU 数量。

excludedata_options 参数可确保不导出 Autonomous Database 中不可用的对象类型,并将表分区分组在一起,以便更快地将它们导入到 Autonomous Database

注意:

Oracle 建议您在执行 expdp 命令之前收集最新统计信息。dbms_stats 软件包提供了多个收集最新统计信息的过程。统计信息会自动添加到导出转储文件中,它们有助于确定对象的大小并在导入期间优化并行性。有关详细信息,请参阅 Oracle Database 19c PL/SQL Packages and Types ReferenceOracle Database 23ai PL/SQL Packages and Types References 中的 DBMS_STATS Operational Notes

以下示例将 SH 方案从源 Oracle Database 导出,以迁移到具有 16 个 CPU 的 Autonomous Database

expdp sh/sh@orcl \
exclude=cluster, db_link \
parallel=16 \
schemas=sh \
dumpfile=export%l.dmp \
encryption_pwd_prompt=yes
数据泵参数说明:
  • 如果在使用 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 结束。

    在 Oracle Database 12.2 版之前,使用旧版 %U%u 通配符导出数据。如果使用此选项并且需要 99 个以上的转储文件,则必须指定多个转储文件名称,每个名称都带有 %U%u 参数。

您可以使用其他数据泵导出参数,例如 compression,具体取决于您的要求。有关详细信息,请参阅 Oracle Database 19c UtilitiesOracle Database 23ai Utilities 中的 Oracle Data Pump Export

将导出文件上载到云对象存储

在导入从源 Oracle Database 导出的数据之前,需要将导出文件上载到云对象存储。

您可以将导出文件上载到 Oracle Cloud Infrastructure Object Storage 中的现有存储桶或 Oracle Cloud Infrastructure Object Storage Classic 中的现有存储容器。或者,使用以下过程创建新的存储存储桶并将导出文件上载到该存储桶。

  1. cloud.oracle.com 上登录到您的 Oracle Cloud 账户。

  2. 从 Oracle Cloud Infrastructure 的左侧导航列表中,选择“对象存储”,然后从子列表中选择“对象存储”。

  3. 选取要在其中创建存储桶的区间。

  4. 单击创建存储桶

  5. 在“创建存储桶”对话框中,为存储桶指定名称,然后单击创建存储桶

  6. 创建存储桶后,单击存储桶列表中的名称以显示其“存储桶详细信息”页。

  7. 在“对象”框中,单击上载对象

  8. 在 "Upload Objects"(上载对象)对话框中,单击 "Choose Files From Your Computer"(从计算机选择文件)框中的 select files(选择文件)链接。

  9. 在文件浏览器中,导航到并选择导出文件。然后单击打开

  10. 在“上载对象”对话框中,单击上载对象以开始上载选定的文件。

  11. 上载完成后,关闭“上载对象”对话框。

使用 Oracle Data Pump 导入数据

Oracle 建议使用最新 Oracle Data Pump 版本将数据从数据泵文件导入到 Autonomous Database 中,因为它包含增强功能和修复程序,以获得更好的体验。

Oracle Instant Client 下载下载适用于您的平台的最新版本的 Oracle Instant Client 基本程序包和工具程序包(包括 Oracle Data Pump)。有关下载 Oracle Instant Client 后所需的安装步骤,请参见平台安装下载页面上的安装说明。

在 Oracle Data Pump 版本 18.3 及更高版本中,credential 参数将向源文件使用的云对象存储服务验证数据泵。dumpfile 参数是数据泵文件的 URL 的逗号分隔列表。

数据泵导入版本 12.2.0.1 及更早版本没有 credential 参数。如果您使用旧版本的数据泵导入,则需要为 Autonomous Database 定义默认身份证明属性,并在 dumpfile 参数中使用 default_credential 关键字。

在 Oracle Data Pump 中,如果源文件位于 Oracle Cloud Infrastructure Object Storage 中,则可以使用 Oracle Cloud Infrastructure 本机 URI 或 Swift URI。有关这些 URI 格式的详细信息,请参见 Cloud Object Storage URI Formats

  1. 使用 DBMS_CLOUD.CREATE_CREDENTIAL 过程存储云对象存储身份证明。

    数据泵导入支持基于 Oracle Cloud Infrastructure Auth Token 的身份证明和基于 Oracle Cloud Infrastructure Signing Key 的身份证明。

    示例 1:要创建 Oracle Cloud Infrastructure 验证令牌身份证明,请执行以下操作:
    BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(
      credential_name => 'DEF_CRED_NAME',
      username => 'adb_user@oracle.com',
      password => 'password'
      );
    END;
    /
    示例 2:要创建基于 Oracle Cloud Infrastructure 签名密钥的身份证明,请执行以下操作:
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'DEF_CRED_NAME',
        user_ocid       => ‘ocid1.user.oc1..unique_ID’,
        tenancy_ocid    => ‘ocid1.tenancy.oc1..unique_ID’,
        private_key     => ‘MIIEogIBAAKCAQEAtUnxbmre.....wtnNpESQQQ0QLGPD8NM//JEBg=’,
        fingerprint     => ‘fingerprint value’
      );
    END;
    /

    有关 Oracle Cloud Infrastructure Cloud Object Storage 的身份证明类型的更多信息,请参见 CREATE_CREDENTIAL 过程

  2. 如果使用的是 Oracle Data Pump 版本 12.2.0.1 或更低版本,则必须将该身份证明设置为 Autonomous Database 的默认身份证明,作为 ADMIN 用户。例如:
    alter database property set default_credential = 'ADMIN.DEF_CRED_NAME'
  3. 在将 dumpfile 参数设置为云对象存储上的文件 URL 列表的情况下运行数据泵导入。
    • Oracle Data Pump 版本 18.3 或更高版本:credential 参数设置为在步骤 1 中创建的身份证明的名称。例如:

      impdp admin/password@ATPC1_high \
        credential=def_cred_name \
        dumpfile= https://namespace-string.objectstorage.us-ashburn-1.oci.customer-oci.com/n/namespace-string/b/bucketname/o/export%l.dmp \ 
        parallel=16 \
        transform=segment_attributes:n \
        exclude=cluster, db_link

      在此示例中,dumpfile 是 Oracle Cloud Infrastructure Swift URI,它指定名称与 us-phoenix-1 区域中 mybucket 存储桶中的 export<number>.dmp 匹配的所有文件。(idthydc0kinr 是存储桶所在的对象存储名称空间。)

    • Oracle Data Pump 版本 12.2.0.1 或更低版本:使用 default_credential 关键字和冒号启动 dumpfile 参数的值。例如:

      impdp admin/password@ATPC1_high \
        dumpfile=default_credential:https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/export%l.dmp \
        parallel=16 \      
        transform=segment_attributes:n \      
        exclude=cluster, db_link
    数据泵导入附注
    • If during the export with expdp you used the encryption_pwd_prompt=yes parameter then use encryption_pwd_prompt=yes and input the same password at the impdp prompt that you specified during the export.

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

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

      在 Oracle Database 12.2 版之前,使用旧版 %U%u 通配符导出数据。如果使用此选项并且需要 99 个以上的转储文件,则必须指定多个转储文件名称,每个名称都带有 %U%u 参数。

    • 为了获得最佳导入性能,请将 high 数据库服务用于导入连接,并将 parallel 参数设置为数据库的 CPU 数。

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

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

    有关 Autonomous Database 中不允许的对象的信息,请参见 Limitations on the Use of SQL Commands

    有关导入参数的详细信息,请参阅 Oracle Database 19c Utilities 中的 Oracle Data Pump ImportOracle Database 23ai Utilities

访问用于数据泵导入的日志文件

数据泵导入操作的日志文件存储在使用数据泵 impdp directory 参数指定的目录中。

要访问日志文件,您需要使用过程 DBMS_CLOUD.PUT_OBJECT 将日志文件移至云对象存储。例如,以下 PL/SQL 块将文件 import.log 移动到云对象存储:

BEGIN
  DBMS_CLOUD.PUT_OBJECT(
    credential_name => 'DEF_CRED_NAME',
    object_uri => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/bucketname/o/import.log',
    directory_name  => 'DATA_PUMP_DIR',
    file_name => 'import.log');
END;
/

在此示例中,namespace-string 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关更多信息,请参见 Understanding Object Storage Namespaces

有关更多信息,请参见DBMS_CLOUD for Objects and Files