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

您可以创建数据库链接,从 Autonomous Database 到位于专用端点上的目标 Oracle Database。

注意:

只有商业区域和美国政府区域支持从 Autonomous Database 到专用端点上的目标 Oracle 数据库的数据库链接。

此功能在所有商业区域中默认处于启用状态。

在美国政府区域中,默认情况下会为新预配的数据库启用此功能。

对于专用端点上的现有美国政府数据库,如果要创建从 Autonomous Database 到美国政府区域中的目标的数据库链接,可以在 Oracle Cloud Support 上提交服务请求,并请求启用政府区域数据库链接功能中的专用端点。

美国政府区域包括以下内容:

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

数据库链接(从 Autonomous Database 到专用端点上的 Oracle 数据库)的先决条件

列出创建从 Autonomous Database 到位于专用端点上的目标 Oracle 数据库的数据库链接的先决条件。

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

  • 目标数据库必须可从源数据库的 Oracle Cloud Infrastructure VCN 访问。例如,可以在以下情况下连接到目标数据库:

    • 目标数据库位于专用端点上。

    • 源数据库和目标数据库都位于同一 Oracle Cloud Infrastructure VCN 中。

    • 源数据库和目标数据库位于不同的配对 Oracle Cloud Infrastructure VCN 中。

    • 目标数据库是使用 FastConnect 或 VPN 连接到源数据库的 Oracle Cloud Infrastructure VCN 的内部部署数据库。

  • 有两个选项可用于指定目标数据库,使用 hostname 参数或 rac_hostnames 参数:

    • 对于专用端点上的目标,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 的高可用性功能。不支持使用 rac_hostnames 值中的 IP 地址、SCAN IP 或 SCAN 主机名。

      rac_hostnames 参数中指定主机名列表时,CREATE_DATABASE_LINK 将所有指定的主机名用作连接字符串中的地址。如果某个指定的主机在目标 Oracle RAC 数据库上不可用,Autonomous Database 将自动尝试使用列表中的其他主机名进行连接。
  • 必须为专用端点定义以下入站和出站规则:

    • 在源数据库的子网安全列表或网络安全组中定义出站规则,以便允许通过 TCP 传输到目标数据库的 IP 地址和端口号的流量。

    • 在目标数据库的子网安全列表或网络安全组中定义入站规则,以便允许通过 TCP 的流量从源数据库 IP 地址传输到目标端口。

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

使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 创建从 Autonomous Database 到目标 Oracle 数据库的数据库链接,该数据库链接位于专用端点上并且不使用 wallet (TCP) 进行连接。

注意:

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

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

要使用没有 wallet 的安全 TCP 连接创建到专用端点上目标数据库的数据库链接,请执行以下操作:

  1. Autonomous Database 上创建身份证明以访问目标数据库。使用 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 的高可用性功能。不支持使用 rac_hostnames 值中的 IP 地址、SCAN IP 或 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 过程

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

您可以创建数据库链接,从 Autonomous Database 到位于专用端点上的目标 Oracle 数据库。

注意:

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

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

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

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

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

    注意:

    通过 Wallet 文件以及数据库用户 ID 和密码,可以访问目标 Oracle 数据库中的数据。将 wallet 文件存储在安全位置。仅与授权用户共享 wallet 文件。
  2. 创建身份证明以访问存储 cwallet.sso 的对象存储。有关不同对象存储服务的用户名和密码参数的信息,请参见CREATE_CREDENTIAL Procedure
  3. Autonomous Database 上为 wallet 文件 cwallet.sso 创建目录。

    例如:

    CREATE DIRECTORY wallet_dir AS 'directory_path_of_your_choice';
                  

    有关创建目录的信息,请参见 Create Directory in Autonomous 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 是存储桶名称。有关更多信息,请参见 Understanding Object Storage Namespaces

    注意:

    在此步骤中使用的 credential_name 是对象存储的身份证明。在下一步中,您将创建用于访问目标数据库的身份证明。
  5. Autonomous Database 上创建身份证明以访问目标数据库。使用 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 的高可用性功能。不支持使用 rac_hostnames 值中的 IP 地址、SCAN IP 或 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;
                  

注意:

对于在步骤 5 中创建的身份证明,Oracle Database 身份证明,如果目标用户的口令发生更改,则可以更新包含目标用户身份证明的身份证明,如下所示:
BEGIN
    DBMS_CLOUD.UPDATE_CREDENTIAL (
        credential_name => 'DB_LINK_CRED',
        attribute => 'PASSWORD',
        value => 'password');
END;
/

其中,password 是新密码。

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

有关详情,请参阅CREATE_DATABASE_LINK 过程

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

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

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

  • 每个目录只有一个 Wallet 文件可用于数据库链接。一次只能将一个 cwallet.sso 上载到为 wallet 文件选择的目录(例如 DBLINK_WALLET_DIR )。这意味着使用 DBLINK_WALLET_DIR 中的 cwallet.sso,您只能创建指向该目录中 Wallet 对其有效的数据库的数据库链接。要将多个 cwallet.sso 文件与数据库链接一起使用,需要创建其他目录并将每个 cwallet.sso 放在不同的目录中。使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 创建数据库链接时,使用 directory_name 参数指定包含 wallet 的目录。

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

  • 对于指向其他 Oracle Database 的数据库链接,支持的目标 Oracle 数据库版本为:19c、12.2.0 和 12.1.0。

  • Autonomous DatabaseSEC_CASE_SENSITIVE_LOGON 参数设置为 true,无法更改此值。如果目标数据库不是 Autonomous Database ,则必须将目标数据库上的 SEC_CASE_SENSITIVE_LOGON 参数设置为 true。如果在目标数据库上将 SEC_CASE_SENSITIVE_LOGON 设置为 false,则会引发错误 ORA-28040: No matching authentication protocol

  • 要列出数据库链接,请使用 ALL_DB_LINKS 视图。有关详细信息,请参阅 Oracle Database 19c Database Reference 中的 ALL_DB_LINKSOracle Database 23ai Database Reference

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

  • Autonomous Database 实例位于专用端点上时,有两个选项可用于指定目标数据库:使用 hostname 参数或 rac_hostnames 参数:

    • 对于专用端点上的目标,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 的高可用性功能。不支持使用 rac_hostnames 值中的 IP 地址、SCAN IP 或 SCAN 主机名。

      rac_hostnames 参数中指定主机名列表时,CREATE_DATABASE_LINK 将所有指定的主机名用作连接字符串中的地址。如果某个指定的主机在目标 Oracle RAC 数据库上不可用,Autonomous Database 将自动尝试使用列表中的其他主机名进行连接。
    • DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 不支持 hostnamerac_hostnames 参数中的值 localhost