在专用端点上创建从自治 AI 数据库到 Oracle Database 的数据库链接
您可以创建从自治 AI 数据库到专用端点上的目标 Oracle Database 的数据库链接。
注:商业区域和美国政府区域仅支持从专用端点上的目标 Oracle 数据库到目标数据库的数据库链接。默认情况下,此功能在所有商业区域中都处于启用状态。对于新预配的数据库,默认情况下在美国政府区域启用此功能。对于专用端点上的现有美国政府数据库,如果要创建从自治 AI 数据库到美国政府区域中的目标的数据库链接,可以在 Oracle Cloud Support 上提交服务请求,并请求启用政府区域数据库链接功能中的专用端点。美国政府区域包括:
根据目标 Oracle 数据库的类型和配置:
-
为 SSL (TCPS) 配置的专用端点上的另一个 Oracle Database(例如本地部署或 Database Cloud Service 数据库):在这种情况下,您可以使用 wallet 创建数据库链接,并且数据库链接与 TCPS 通信。有关详细信息,请参阅使用 Wallet 在专用端点上创建从自治 AI 数据库到 Oracle 数据库的数据库链接 (mTLS) 。
-
为 TCP 配置的专用端点上的 Oracle Database(例如内部部署数据库或 Database Cloud Service 数据库):在这种情况下,无需使用 wallet 创建数据库链接,并且数据库链接与 TCP 进行通信。有关详细信息,请参阅在没有 Wallet 的专用端点上创建指向 Oracle 数据库的数据库链接。
从自治 AI 数据库到专用端点上的 Oracle 数据库的数据库链接先决条件
列出从自治 AI 数据库到专用端点上的目标 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 的高可用性功能。不支持使用 IP 地址、SCAN IP 或rac_hostnames值中的 SCAN 主机名。在
rac_hostnames参数中指定主机名列表时,CREATE_DATABASE_LINK将所有指定的主机名用作连接字符串中的地址。如果指定的主机之一在目标 Oracle RAC 数据库上不可用,则 Autonomous Database 会自动尝试使用列表中的其他主机名进行连接。
-
-
必须为专用端点定义以下入站和出站规则:
-
在源数据库的子网安全列表或网络安全组中定义出站规则,以便允许通过 TCP 的通信传输到目标数据库的 IP 地址和端口号。
-
在目标数据库的子网安全列表或网络安全组中定义入站规则,以便允许通过 TCP 的通信从源数据库 IP 地址传输到目标端口。
-
在没有 Wallet 的专用端点上创建指向 Oracle 数据库的数据库链接
使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 创建从自治 AI 数据库到专用端点上的目标 Oracle 数据库的数据库链接,并在没有 wallet (TCP) 的情况下进行连接。
注:此选项适用于位于专用端点上且未配置 SSL/TCPS 的目标 Oracle 数据库。
根据需要执行先决条件步骤。有关详细信息,请参阅从自治 AI 数据库到专用端点上的 Oracle 数据库的数据库链接的先决条件。
要使用不带 wallet 的安全 TCP 连接在专用端点上创建指向目标数据库的数据库链接,请执行以下操作:
-
在自治 AI 数据库上创建身份证明以访问目标数据库。使用
DBMS_CLOUD.CREATE_CREDENTIAL指定的username和password是数据库链接中使用的目标数据库的身份证明(通过 VCN 访问目标数据库)。例如:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'PRIVATE_ENDPOINT_CRED', username => 'NICK', password => '*password*' ); END; /username参数中的字符必须全部为大写字母。此操作以加密格式将身份证明存储在数据库中。可以将任何名称用于身份证明名称。
-
使用
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不支持hostname或rac_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。
-
-
使用创建的数据库链接访问目标数据库中的数据。
例如:
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,则有两个选项:
-
可以将目标 Oracle 数据库配置为将 TCP/IP 与 SSL (TCPS) 验证结合使用。有关配置 SSL/TCPS 的信息,请参见 Configuring Transport Layer Security Authentication in Oracle Database 19c Security Guide 或 Oracle Database 26ai Security Guide 。
-
您可以使用 TCP 连接到目标 Oracle 数据库。有关详细信息,请参阅在没有 Wallet 的专用端点上创建指向 Oracle 数据库的数据库链接。
根据需要执行先决条件步骤。有关详细信息,请参阅从自治 AI 数据库到专用端点上的 Oracle 数据库的数据库链接的先决条件。
要使用 TCP/IP 和 SSL (TCPS) 验证在专用端点上创建指向目标 Oracle 数据库的数据库链接,请执行以下操作:
-
将目标数据库 wallet
cwallet.sso(包含目标数据库的证书)复制到对象存储。注:通过 wallet 文件以及数据库用户 ID 和密码,可以访问目标 Oracle 数据库中的数据。将 Wallet 文件存储在安全位置。仅与授权用户共享 wallet 文件。
-
创建身份证明以访问您存储
cwallet.sso的对象存储。有关不同对象存储服务的用户名和口令参数的信息,请参见 CREATE_CREDENTIAL Procedure 。 -
在自治 AI 数据库上为 wallet 文件
cwallet.sso创建目录。例如:
CREATE DIRECTORY *wallet_dir* AS '*directory_path_of_your_choice*';有关创建目录的信息,请参见 Create Directory in Autonomous AI Database 。
-
使用
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是对象存储的身份证明。在下一步中,创建用于访问目标数据库的身份证明。 -
在自治 AI 数据库上,创建身份证明以访问目标数据库。使用
DBMS_CLOUD.CREATE_CREDENTIAL指定的username和password是数据库链接中使用的目标数据库的身份证明(通过 VCN 访问目标数据库)。注:需要提供
credential_name参数。例如:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'DB_LINK_CRED', username => 'NICK', password => '*password*'); END; /username参数中的字符必须全部为大写字母。此操作以加密格式将身份证明存储在数据库中。可以将任何名称用于身份证明名称。
-
使用
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不支持hostname或rac_hostnames参数的值为localhost。ADMIN 以外的用户需要运行
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK的权限。 -
使用创建的数据库链接访问目标数据库中的数据。
例如:
``sql SELECT * FROM 雇员 @PEDBLINK1;
对于您在步骤 5 中创建的身份证明,即 Oracle Database 身份证明,如果目标用户的口令发生更改,则可以更新包含目标用户身份证明的身份证明,如下所示:
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 数据库的数据库链接的说明:
-
每个目录只有一个 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 AI Database 。
-
指向其他 Oracle Database 的数据库链接支持的目标 Oracle 数据库版本包括:19c、12.2.0 和 12.1.0。
注:有关受支持版本的完整信息,请参见 Client Server Interoperability Support Matrix for Different Oracle Versions (Doc ID 207303.1)
-
自治 AI 数据库将
SEC_CASE_SENSITIVE_LOGON参数设置为true,并且此值无法更改。如果您的目标数据库不是自治 AI 数据库,则必须设置 `SEC_CASE_SENSITIVE_LOGONparameter totrueon the target database. IfSEC_CASE_SENSITIVE_LOGONis set tofalseon the target database, then errorORA-28040:没有引发匹配的验证协议 `。 -
要列出数据库链接,请使用
ALL_DB_LINKS视图。有关详细信息,请参阅 Oracle Database 19c Database Reference 中的 ALL_DB_LINKS 或 Oracle Database 26ai Database Reference 。 -
通过 wallet 文件以及数据库用户 ID 和密码,可以访问目标 Oracle 数据库中的数据。将 Wallet 文件存储在安全位置。仅与授权用户共享 wallet 文件。
-
当自治 AI 数据库实例位于专用端点上时,有两种选项可以指定目标数据库:使用
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 的高可用性功能。不支持使用 IP 地址、SCAN IP 或rac_hostnames值中的 SCAN 主机名。在
rac_hostnames参数中指定主机名列表时,CREATE_DATABASE_LINK将所有指定的主机名用作连接字符串中的地址。如果指定的主机之一在目标 Oracle RAC 数据库上不可用,则 Autonomous Database 会自动尝试使用列表中的其他主机名进行连接。 -
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK不支持hostname或rac_hostnames参数的值为localhost。
-