使用 Oracle Data Pump 加载数据

Oracle Data Pump 可在 Oracle 数据库与基于专用 Exadata 基础结构的 Autonomous AI Database 之间快速批量移动数据和元数据。

通过数据泵导入,您可以从位于 Oracle Cloud Infrastructure Object Storage 和 Oracle Cloud Infrastructure Object Storage Classic 上的 Data Pump 文件导入数据。您可以将数据保存到云对象存储,并使用 Oracle Data Pump 将数据加载到自治 AI 数据库。

注:对于阅读以下主题的“试用”替代方案,您可以浏览 Oracle Autonomous AI 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 AI Database。

Oracle 建议使用以下数据泵导出参数,以便更快、更轻松地迁移到自治 AI 数据库:

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

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

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

exclude 和 data_options 参数可确保不会导出自治 AI 数据库中不可用的对象类型,并将表分区组合在一起,以便更快地将它们导入自治 AI 数据库。

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

以下示例将 SH 方案从源 Oracle Database 导出以迁移到具有 16 个 CPU 的自治 AI 数据库:

expdp sh/sh@orcl \
exclude=cluster, db_link \
parallel=16 \
schemas=sh \
dumpfile=export%l.dmp \
encryption_pwd_prompt=yes

有关数据泵参数的说明:

可以根据您的要求使用其他数据泵导出参数,例如 compression。有关详细信息,请参阅 Oracle Database 19c Utilities 或 Oracle Database 26ai 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 左侧导航列表中,选择“Object Storage(对象存储)”,然后从子列表中选择“Object Storage(对象存储)”。

  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 版本将数据从数据泵文件导入自治 AI 数据库,因为它包含增强功能和修复,以获得更好的体验。

从 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 参数。如果您使用的是旧版本的数据泵导入,则需要为自治 AI 数据库定义默认身份证明属性,并在 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 验证令牌的身份证明和基于 Oracle Cloud Infrastructure 签名密钥的身份证明。

    示例 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 对象存储的身份证明类型的更多信息,请参见 CREATE_CREDENTIAL Procedure 。

  2. 如果您使用的是 Oracle Data Pump 版本 12.2.0.1 或更早版本,则必须将身份证明设置为自治 AI 数据库的默认身份证明,并将其设置为 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

    数据泵导入附注

    • 如果在使用 expdp 导出期间使用 encryption_pwd_prompt=yes 参数,则使用 encryption_pwd_prompt=yes,并在导出期间指定的 impdp 提示符下输入相同的密码。

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

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

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

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

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

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

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

    有关导入参数的详细信息,请参阅 Oracle Database 19c Utilities 或 Oracle Database 26ai Utilities 中的 Oracle Data Pump Import 。

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

数据泵导入操作的日志文件存储在您使用数据泵 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 是存储桶名称。有关详细信息,请参阅了解对象存储名称空间。

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