通过客户管理的异构连接与公共可访问的非 Oracle 数据库创建数据库链接

使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 创建从位于公共端点上的专用 Exadata 基础结构上的自治 AI 数据库到 Oracle Database Gateway 的数据库链接,以访问非 Oracle 数据库。

Oracle Database Gateway 是用于访问特定非 Oracle 系统的网关。使用 Oracle Database Gateway,您可以访问分布式数据库系统中的任意位置的数据,而无需知道数据的位置或存储方式。将 Autonomous AI Database 上的数据库链接与 Oracle Database Gateway 结合使用,支持异构环境,无需自定义应用即可从非 Oracle 系统访问数据。

注:只有 19c 版本 19.25 及更高版本以及 23ai 版本 23.6 及更高版本支持创建与客户管理的与可公开访问的非 Oracle 数据库的异构连接的数据库链接。

Prerequisites

要在公共端点上使用来自自治 AI 数据库实例的数据库链接,请执行以下操作:

  1. 配置 Oracle Database Gateway 以访问非 Oracle 数据库。有关详细信息,请参阅 Oracle Database 19c Database Heterogeneous Connectivity User’s Guide 中的 Oracle Database GatewaysOracle Database 26ai Database Heterogeneous Connectivity User’s Guide

    根据要连接到的数据库,您可以参考相应的安装和配置指南和网关用户指南。

    例如,对于 Oracle Database Gateway for SQL Server,请参见:

  2. 配置 Oracle Net Listener 以处理 Oracle Database Gateway 上的传入请求。

  3. 在 Oracle Database Gateway 上创建自签名 wallet。

  4. 将目标网关配置为将 TCP/IP 与 SSL (TCPS) 验证结合使用。有关详细信息,请参阅 Oracle Database 19c Security Guide 中的 Configuring Transport Layer Security AuthenticationOracle Database 26ai Security Guide

过程

使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 创建从公共端点上的自治 AI 数据库实例到 Oracle Database Gateway 的数据库链接,以访问非 Oracle 数据库。

要从公共端点上的自治 AI 数据库实例到目标网关创建数据库链接,请执行以下操作:

  1. 将目标网关自签名 wallet,例如 cwallet.sso,其中包含 Oracle Database Gateway 的证书到对象存储。

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

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

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

    例如:

     CREATE DIRECTORY dblink_wallet_dir AS 'directory_path_of_your_choice';
    

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

  4. 使用 DBMS_CLOUD.GET_OBJECT 将目标网关自签名 wallet 上载到在上一步中创建的目录 DBLINK_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 => 'DBLINK_WALLET_DIR'
         );
      END;
    

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

    在此步骤中使用的 credential_name 是对象存储的身份证明。在下一步中,您将创建用于访问目标网关的身份证明。

    有关更多详细信息,请参见 GET_OBJECT Procedure and Function

  5. 在自治 AI 数据库上,创建身份证明以访问目标数据库。使用 DBMS_CLOUD.CREATE_CREDENTIAL 指定的用户名和口令是数据库链接中使用的目标数据库的身份证明(通过 Oracle Database Gateway 访问目标数据库)。

    例如:

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

    必须提供 credential_name 参数。

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

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

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

    例如:

     BEGIN
         DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
             db_link_name =>       'SALESLINK',
             hostname =>           'example.com',
             port =>               '1522',
             service_name =>       'example_service_name',
             ssl_server_cert_dn => 'ssl_server_cert_dn',
             credential_name =>    'DB_LINK_CRED',
             directory_name =>     'DBLINK_WALLET_DIR',
             gateway_link =>        TRUE
         );
     END;/
    

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

    有关更多信息,请参见 CREATE_DATABASE_LINK Procedure

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

    例如:

     SELECT * FROM employees@SALESLINK;
    

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

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

密码是新密码。

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

有关更多详细信息,请参见 UPDATE_CREDENTIAL Procedure

有关创建指向 Oracle Database Gateway 的数据库链接以访问 Microsoft SQL Server 数据库的示例,请参阅如何使用 Oracle Database Gateway 从自治 AI 数据库访问非 Oracle 数据库

注:虽然上述博客在 Autonomous AI Database Serverless 的上下文中进行了讨论,但该博客中的所有内容也适用于基于专用 Exadata 基础结构的 Autonomous AI Database。

相关内容

DBMS_CLOUD_ADMIN 程序包