1. MongoDBの準備
今回はMongoDB Atlasのトライアル環境環境を使用して、MongoDBを準備しました。
こちらの手順に沿ってアカウントを取得し、クラスターをデプロイしました。
クラスター内にデータベースsample_databaseを作成し、sample_database内にコレクションsample_deptを作成しました。
また、sample_dept内に以下の4つのドキュメントを準備しました。
{
"_id":{"$oid":"63509a3c8b416188cff4055c"},
"deptno":"10",
"deptname":"ACCOUNTING",
"location":"NEW YORK",
"address":{"building":"Tower A","zipcode":"11111"}
}
{
"_id"{"$oid":"63509af78b416188cff4055d"},
"deptno":"20",
"deptname":"RESEARCH",
"location":"DALLAS",
"address":{"zipcode":"22222","building":"Tower B"}
}
{
"_id":{"$oid":"63509b5a8b416188cff4055e"},
"deptno":"30",
"deptname":"SALES",
"location":"CHICAGO",
"address":{"zipcode":"33333","building":"Tower C"}
}
{
"_id":{"$oid":"63509bb78b416188cff4055f"},
"deptno":"40",
"deptname":"OPERATIONS",
"location":"BOSTON",
"address":{"zipcode":"44444","building":"Tower D"}
}
MongoDB Atlasのコンソールでsample_deptの内容を再度確認してみます。

addressはオブジェクト型になっており、buildingとzipcodeの2つのフィールドが含まれています。、

2. Autonomous DatabaseのアウトバウンドIPアドレスの確認
MongoDB側でAutonomous Databaseからの接続を許可する設定を行うために、以下のSQLでAutonomous DatabaseのアウトバウンドIPアドレスを確認します。
SELECT json_value(cloud_identity, '$.OUTBOUND_IP_ADDRESS[0]') outbound_ip_address FROM v$pdbs;
では、実行して確認してみます。
SQL> SELECT json_value(cloud_identity, '$.OUTBOUND_IP_ADDRESS[0]') outbound_ip_address FROM v$pdbs;
OUTBOUND_IP_ADDRESS
--------------------------------------------------------------------------------
xxx.xxx.xxx.xxx
SQL>
出力されたIPアドレスをメモしておきます。
3. MongoDB Atlasのネットワークセキュリティの設定
先ほど確認したAutonomous DatabaseのアウトバウンドIPアドレスからの接続を許可する設定を行います。
MongoDBのコンソールから「Network Access」に移動します。

「ADD IP ADDRESS」をクリックします。

以下を入力して、「Confirm」をクリックします。
Acess List Entry:Autonomous DatabaseのアウトバウンドIPアドレス
Comment:Autonomous Database(任意)

Autonomous DatabaseのアウトバウンドIPアドレスからの接続を許可するルールが追加されました。

4. MongoDBにアクセスするためのクレデンシャルの作成
DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、クレデンシャルを作成します。
SQL> BEGIN
2 DBMS_CLOUD.CREATE_CREDENTIAL(
3 credential_name => 'MONGODB_LINK_CRED',
4 username => 'atlasuser',
5 password => 'Oracle1'
6 );
7 END;
8 /
PL/SQLプロシージャが正常に完了しました。
SQL>
5. MongoDBに対するデータベース・リンクの作成
DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINKを使用して、MongoDBのデータベースsample_databaeへのデータベースリンクを作成します。
SQL> BEGIN
2 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
3 db_link_name => 'MONGODB_LINK',
4 hostname => 'cluster0.xxxxxx.mongodb.net',
5 port => '27017',
6 service_name => 'sample_database',
7 credential_name => 'MONGODB_LINK_CRED',
8 gateway_params => JSON_OBJECT('db_type' value 'MONGODB'),
9 ssl_server_cert_dn => NULL);
10 END;
11 /
PL/SQLプロシージャが正常に完了しました。
SQL>
MongoDBのデータベースsample_database内のコレクションsample_deptが、Autonomous Database側でどのように見えるかを確認してみます。
SQL> desc sample_dept@MONGODB_LINK;
名前 NULL? 型
----------------------------------------- -------- ----------------------------
_ID NOT NULL NVARCHAR2(24)
DEPTNO NVARCHAR2(3)
DEPTNAME NVARCHAR2(15)
LOCATION NVARCHAR2(12)
ADDRESS_BUILDING NVARCHAR2(10)
ADDRESS_ZIPCODE NVARCHAR2(7)
SQL>
MongoDBにObjectとして保存されているaddress内のフィールドは、address_building、address_zipcodeとして展開されていることがわかりました。
MongoDBのデータベースsample_database内のコレクションsample_deptに対してSELECT文を実行してみます。
SQL> set pagesize 100
SQL> SELECT * FROM sample_dept@MONGODB_LINK;
_ID
--------------------------------------------------------------------------------
DEPTNO DEPTNAME
------------ ------------------------------------------------------------
LOCATION
------------------------------------------------
ADDRESS_BUILDING ADDRESS_ZIPCODE
---------------------------------------- ----------------------------
63509A3C8B416188CFF4055C
10 ACCOUNTING
NEW YORK
Tower A 11111
63509AF78B416188CFF4055D
20 RESEARCH
DALLAS
Tower B 22222
63509B5A8B416188CFF4055E
30 SALES
CHICAGO
Tower C 33333
63509BB78B416188CFF4055F
40 OPERATIONS
BOSTON
Tower D 44444
SQL>
作成したデータベース・リンク経由で、MongoDB Atlasのデータベースsample_database内のコレクションsample_deptの内容が参照できることが確認できました。
参考資料
Create Database Links to Non-Oracle Databases with Oracle-Managed Heterogeneous Connectivity