在专用端点上创建从自治 AI 数据库到 Oracle Database 的数据库链接

您可以创建从自治 AI 数据库到专用端点上的目标 Oracle Database 的数据库链接。

注:商业区域和美国政府区域仅支持从专用端点上的目标 Oracle 数据库到目标数据库的数据库链接。默认情况下,此功能在所有商业区域中都处于启用状态。对于新预配的数据库,默认情况下在美国政府区域启用此功能。对于专用端点上的现有美国政府数据库,如果要创建从自治 AI 数据库到美国政府区域中的目标的数据库链接,可以在 Oracle Cloud Support 上提交服务请求,并请求启用政府区域数据库链接功能中的专用端点。美国政府区域包括:

根据目标 Oracle 数据库的类型和配置:

从自治 AI 数据库到专用端点上的 Oracle 数据库的数据库链接先决条件

列出从自治 AI 数据库到专用端点上的目标 Oracle 数据库创建数据库链接的先决条件。

要在专用端点上创建指向目标 Oracle 数据库的数据库链接,请执行以下操作:

在没有 Wallet 的专用端点上创建指向 Oracle 数据库的数据库链接

使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 创建从自治 AI 数据库到专用端点上的目标 Oracle 数据库的数据库链接,并在没有 wallet (TCP) 的情况下进行连接。

注:此选项适用于位于专用端点上且未配置 SSL/TCPS 的目标 Oracle 数据库。

根据需要执行先决条件步骤。有关详细信息,请参阅从自治 AI 数据库到专用端点上的 Oracle 数据库的数据库链接的先决条件。

要使用不带 wallet 的安全 TCP 连接在专用端点上创建指向目标数据库的数据库链接,请执行以下操作:

  1. 在自治 AI 数据库上创建身份证明以访问目标数据库。使用 DBMS_CLOUD.CREATE_CREDENTIAL 指定的 usernamepassword 是数据库链接中使用的目标数据库的身份证明(通过 VCN 访问目标数据库)。

    例如:

    BEGIN
         DBMS_CLOUD.CREATE_CREDENTIAL(
             credential_name => 'PRIVATE_ENDPOINT_CRED',
             username => 'NICK',
             password => '*password*'
             );
    END;
    /

    username 参数中的字符必须全部为大写字母。

    此操作以加密格式将身份证明存储在数据库中。可以将任何名称用于身份证明名称。

  2. 使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 创建指向目标数据库的数据库链接。

    例如:

    BEGIN
         DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
             db_link_name => 'PRIVATE_ENDPOINT_LINK',
             hostname => 'exampleHostname',
             port => '1522',
             service_name => '*exampleServiceName*',
             ssl_server_cert_dn => NULL,
             credential_name => 'PRIVATE_ENDPOINT_CRED',
             directory_name => NULL,
             private_target => TRUE);
    END;
    /

    对于专用端点上的目标,DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 支持使用 hostname 参数指定单个主机名。在专用端点上,不支持使用 IP 地址、SCAN IP 或 SCAN 主机名(当目标位于公共端点上时,CREATE_DATABASE_LINK 支持使用 IP 地址、SCAN IP 或 SCAN 主机名)。

    当目标为 Oracle RAC 数据库时,使用 rac_hostnames 参数指定具有 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的一个或多个主机名。这使您可以利用 Oracle RAC 的高可用性功能。不支持使用 IP 地址、SCAN IP 或 rac_hostnames 值中的 SCAN 主机名。

    例如,对于目标 Oracle RAC 数据库,请使用 rac_hostnames 参数:

    BEGIN
         DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
             db_link_name => 'PRIVATE_ENDPOINT_LINK',
             rac_hostnames => '["sales1-svr1.*example*.adb.us-ashburn-1.oraclecloud.com",
                                "sales1-svr2.*example*.adb.us-ashburn-1.oraclecloud.com",
                                "sales1-svr3.*example*.adb.us-ashburn-1.oraclecloud.com"]',
             port => '1522',
             service_name => '*exampleServiceName*',
             ssl_server_cert_dn => NULL,
             credential_name => 'PRIVATE_ENDPOINT_CRED',
             directory_name => NULL,
             private_target => TRUE);
    END;
    /

    DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 不支持 hostnamerac_hostnames 参数的值为 localhost

    ADMIN 以外的用户需要运行 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的权限。

    如示例中所示,要使用不带 Wallet 的安全 TCP 连接创建与 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的数据库链接到专用端点上的目标数据库,需要满足以下所有条件:

    • directory_name 参数必须为 NULL

    • ssl_server_cert_dn 参数必须为 NULL

    • private_target 参数必须为 TRUE

  3. 使用创建的数据库链接访问目标数据库中的数据。

    例如:

    SELECT * FROM employees@PRIVATE_ENDPOINT_LINK;

对于您在步骤 1 中创建的身份证明,即 Oracle Database 身份证明,如果目标用户的口令发生更改,则可以更新包含目标用户身份证明的身份证明,如下所示:

BEGIN
  DBMS_CLOUD.UPDATE_CREDENTIAL (
    credential_name => 'DB_LINK_CRED',
    attribute => 'PASSWORD',
    value => '*password*');
END;
/

其中 password 是新密码。

执行此操作后,使用此身份证明的现有数据库链接将继续工作,而无需删除和重新创建数据库链接。

有关其他信息,请参见 CREATE_DATABASE_LINK Procedure

使用 Wallet (mTLS) 在专用端点上创建从自治 AI 数据库到 Oracle 数据库的数据库链接

您可以创建从自治 AI 数据库到专用端点上的目标 Oracle 数据库的数据库链接。

注:此选项适用于配置了 SSL/TCPS 且位于专用端点上的目标 Oracle 数据库。

如果目标 Oracle 数据库未配置 SSL/TCPS,则有两个选项:

根据需要执行先决条件步骤。有关详细信息,请参阅从自治 AI 数据库到专用端点上的 Oracle 数据库的数据库链接的先决条件。

要使用 TCP/IP 和 SSL (TCPS) 验证在专用端点上创建指向目标 Oracle 数据库的数据库链接,请执行以下操作:

  1. 将目标数据库 wallet cwallet.sso(包含目标数据库的证书)复制到对象存储。

    注:通过 wallet 文件以及数据库用户 ID 和密码,可以访问目标 Oracle 数据库中的数据。将 Wallet 文件存储在安全位置。仅与授权用户共享 wallet 文件。

  2. 创建身份证明以访问您存储 cwallet.sso 的对象存储。有关不同对象存储服务的用户名和口令参数的信息,请参见 CREATE_CREDENTIAL Procedure

  3. 在自治 AI 数据库上为 wallet 文件 cwallet.sso 创建目录。

    例如:

    CREATE DIRECTORY *wallet_dir* AS '*directory_path_of_your_choice*';

    有关创建目录的信息,请参见 Create Directory in Autonomous AI Database

  4. 使用 DBMS_CLOUD.GET_OBJECT 将目标数据库 wallet 上载到在上一步中创建的目录 WALLET_DIR

    例如:

    BEGIN
    DBMS_CLOUD.GET_OBJECT(
        credential_name => 'DEF_CRED_NAME',
        object_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/*namespace-string*/b/*bucketname*/o/cwallet.sso',
        directory_name => '*WALLET_DIR*');
    END;
    /

    在此示例中,*namespace-string* 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关详细信息,请参阅了解对象存储名称空间

    注:在此步骤中使用的 credential_name 是对象存储的身份证明。在下一步中,创建用于访问目标数据库的身份证明。

  5. 在自治 AI 数据库上,创建身份证明以访问目标数据库。使用 DBMS_CLOUD.CREATE_CREDENTIAL 指定的 usernamepassword 是数据库链接中使用的目标数据库的身份证明(通过 VCN 访问目标数据库)。

    注:需要提供 credential_name 参数。

    例如:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DB_LINK_CRED',
        username => 'NICK',
        password => '*password*');
    END;
    /

    username 参数中的字符必须全部为大写字母。

    此操作以加密格式将身份证明存储在数据库中。可以将任何名称用于身份证明名称。

  6. 使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 创建指向目标数据库的数据库链接。

    例如:

    BEGIN
      DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
        db_link_name => 'PEDBLINK1',
        hostname => 'example1.adb.ap-osaka-1.oraclecloud.com',
        port => '1522',
        service_name => '*example_high.adb.oraclecloud.com*',
        ssl_server_cert_dn => '*ssl_server_cert_dn*',
        credential_name => 'DB_LINK_CRED',
        directory_name => '*WALLET_DIR*',
        private_target => TRUE);
    END;
    /

    对于专用端点上的目标,DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 支持使用 hostname 参数指定单个主机名。在专用端点上,不支持使用 IP 地址、SCAN IP 或 SCAN 主机名(当目标位于公共端点上时,CREATE_DATABASE_LINK 支持使用 IP 地址、SCAN IP 或 SCAN 主机名)。

    当目标为 Oracle RAC 数据库时,使用 rac_hostnames 参数指定具有 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的一个或多个主机名。这使您可以利用 Oracle RAC 的高可用性功能。不支持使用 IP 地址、SCAN IP 或 rac_hostnames 值中的 SCAN 主机名。

    例如,对于目标 Oracle RAC 数据库,请使用 rac_hostnames 参数:

    BEGIN
      DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
        db_link_name => 'PEDBLINK1',
        rac_hostnames => '["sales1-svr1.*example*.adb.us-ashburn-1.oraclecloud.com",
                           "sales1-svr2.*example*.adb.us-ashburn-1.oraclecloud.com",
                           "sales1-svr3.*example*.adb.us-ashburn-1.oraclecloud.com"]',
        port => '1522',
        service_name => '*example_high.adb.oraclecloud.com*',
        ssl_server_cert_dn => '*ssl_server_cert_dn*',
        credential_name => 'DB_LINK_CRED',
        directory_name => '*WALLET_DIR*',
        private_target => TRUE);
    END;
    /

    DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 不支持 hostnamerac_hostnames 参数的值为 localhost

    ADMIN 以外的用户需要运行 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的权限。

  7. 使用创建的数据库链接访问目标数据库中的数据。

    例如:

    SELECT * FROM employees@PEDBLINK1;
    
    For the credentials you create in Step 5, the Oracle Database credentials, if the password of the target user changes you can update the credential that contains the target user's credentials as follows:

    sql BEGIN DBMS_CLOUD.UPDATE_CREDENTIAL( credential_name => ‘ DB_LINK_CRED ’,attribute => ‘ PASSWORD ’,value => ‘ PASSWORD ’);END;/ ```

其中 password 是新密码。

执行此操作后,使用此身份证明的现有数据库链接将继续工作,而无需删除和重新创建数据库链接。

有关其他信息,请参见 CREATE_DATABASE_LINK Procedure

数据库链接附注与目标 Oracle Database

提供有关创建指向目标 Oracle 数据库的数据库链接的备注(当目标不是自治 AI 数据库时)

有关指向其他 Oracle 数据库的数据库链接的说明:

DBMS_CLOUD_ADMIN 程序包