はじめに
Oracle Database@AzureのAutonomous DatabaseからAzure SQL Databaseに対して、プライベート・エンドポイント経由でデータベース・リンクを作成する手順を検証してみました。
注意
こちらの記事の内容はあくまで個人の実験メモ的な内容のため、こちらの内容を利用した場合のトラブルには一切責任を負いません。
また、こちらの記事の内容を元にしたOracleサポートへの問い合わせはご遠慮ください。
0. 環境情報
Autonomos Databaseのプライベート・エンドポイントがあるDelegated Subnetと同じVNetにあるSubnetにAzure SQL Databaseのプライベート・エンドポイントが配置されています。

Azure SQL Databaseのプライベート・エンドポイントは10.0.0.5です。

Azure SQL Databaseはパブリック・アクセスが無効になっています。

Azure SQL Databaseにはサンプルデータがロードされています。

Azure SQL Database内にあるSalesLT.Address表のレコード数は450件です。

1. OCI側のプライベートDNSの設定
OCIコンソールからAutonomous Databaseの詳細画面にアクセスします。

「ネットワーク」セクションにある仮想クラウド・ネットワークのリンクをクリックします。

ゾーン名にdatabase.windows.netを入力し、「作成」をクリックします。

名前にAzure SQL Databaseのホスト名を入力します。
(ここではmy-azure-sql-database)
レコードタイプとして「A - IPv4アドレス」を選択し、Address(アドレス)には、Azure SQL Databaseのプライベート・エンドポイントのIPアドレスを(ここでは10.0.0.5)入力します。
入力が完了したら、「変更の保存」をクリックします。

Azure SQL Databaseにアクセスするためのプライベート・ゾーンおよびDNSレコードが追加できました。
作成したDNSレコードのFQDNをメモしておきます。

2. ネットワークACLの設定
SQL*Plus等のクライアントから、adminユーザとしてAutonomous Databaseに接続します。
[opc@OracleClient ~]$ sqlplus admin@adbatazure
SQL*Plus: Release 23.0.0.0.0 - Production on Fri Oct 3 06:37:34 2025
Version 23.9.0.25.07
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Enter password:
Last Successful login time: Fri Oct 03 2025 06:36:52 -04:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.29.0.1.0
SQL>
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACEプロシージャを使用して、OCIのプライベートDNSに追加したDNSレコードのFQDNに対するネットワークアクセスを許可します。
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'my-azure-sql-database.database.windows.net',
ace => xs$ace_type(
privilege_list => xs$name_list('connect', 'resolve'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db
)
);
END;
/
SQL> BEGIN
2 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
3 host => 'my-azure-sql-database.database.windows.net',
4 ace => xs$ace_type(
5 privilege_list => xs$name_list('connect', 'resolve'),
6 principal_name => 'ADMIN',
7 principal_type => xs_acl.ptype_db
8 )
9 );
10 END;
11 /
PL/SQL procedure successfully completed.
SQL>
3. Azure SQL Databaseにアクセスするためのクレデンシャルの作成
DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、Azure SQL Databaseにアクセスするためのクレデンシャルを作成します。
usernameにはAzure SQL Databaseのデータベース・ユーザー名、passwordにはそのデータベース・ユーザーのパスワードを指定します。
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'AZURE_SQL_CRED',
username => 'azuresqladmin',
password => '************'
);
END;
/
SQL> BEGIN
2 DBMS_CLOUD.CREATE_CREDENTIAL(
3 credential_name => 'AZURE_SQL_CRED',
4 username => 'azuresqladmin',
5 password => '************'
6 );
7 END;
8 /
PL/SQL procedure successfully completed.
SQL>
4. Azure SQL Databaseに対するデータベース・リンクの作成
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINKプロシージャを使用して、Azure SQL Databaseに対するデータベース・リンクを作成します。
hostnameには、1.で追加したDNSレコードにFQDN、service_nameにはAzure SQL Databaseの名前を指定します。
credential_nameには、3.で作成したクレデンシャルの名前(ここではAZURE_SQL_CRED)を指定します。
※データベース・リンクの作成には少し時間がかかります。
BEGIN
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
db_link_name => 'AZURE_SQL_DBLINK',
hostname => 'my-azure-sql-database.database.windows.net',
port => '1433',
service_name => 'AzureSQLDatabase',
ssl_server_cert_dn => null,
credential_name => 'AZURE_SQL_CRED',
gateway_params => JSON_OBJECT( 'db_type' value 'azure' ),
private_target => TRUE
);
END;
/
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
3 db_link_name => 'AZURE_SQL_DBLINK',
4 hostname => 'my-azure-sql-database.database.windows.net',
5 port => '1433',
6 service_name => 'AzureSQLDatabase',
7 ssl_server_cert_dn => null,
8 credential_name => 'AZURE_SQL_CRED',
9 gateway_params => JSON_OBJECT( 'db_type' value 'azure' ),
10 private_target => TRUE
11 );
12 END;
13 /
PL/SQL procedure successfully completed.
SQL>
5. 動作確認
データベース・リンクが作成できたので、作成したデータベース・リンクを使用したクエリを実行してみます。
SQL> SELECT COUNT(*) FROM saleslt.address@AZURE_SQL_DBLINK;
COUNT(*)
----------
450
1 row selected.
SQL>
Azure SQL Databaseに対してプライベート・エンドポイント経由でデータベース・リンクを作成して、クエリを実行することができました。









