ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
MongoDB Atlasまたはオンプレミスで実行されているMongoDBデータベースをOracle Autonomous JSON Databaseに移行します
イントロダクション
MongoDBは、柔軟なJSON形式のドキュメントでデータを作成および格納するために使用される一般的なオープンソース・データベースの1つです。つまり、フィールドはドキュメントごとに異なり、データ構造は時間の経過とともに変更できます。
世界有数のリレーショナル・マルチモデル・データベースであるOracleは、コンバージド・データベースと呼ばれ、JSONを処理する優れた機能を備えています。Oracleでは、v12cからのJSONのサポートが導入され、varchar2またはラージ・オブジェクト(LOB)として格納されたJSONデータ(キャラクタ・ラージ・オブジェクト(CLOB)/バイナリ・ラージ・オブジェクト(BLOB))。
MongoDBの課題:
-
MongoDBは、すぐに開始できますが、エンタープライズ・デプロイメントの主な機能がありません。
-
トランザクションのサポートが限られていると、データの一貫性の課題につながります。
-
困難で非効率的な分析問合せ(およびパラレル問合せなし)。
-
未熟なセキュリティ機能
-
American National Standards Institute Structured Query Language (ANSI SQL)の機能
OracleでJSONデータ型を使用する利点:
-
Oracleバージョン21cから、ネイティブ形式で格納されたJSONを使用すると、ユーザーは標準SQLを使用してJSONドキュメントを問い合せることができます。これにより、レプリケーション、パーティション化、Oracle Databaseが可能なすべての機能による索引付けなど、Oracle Databaseのすべての機能を備えたスキーマレス設計モデルの柔軟性を備えたアプリケーションを構築できます。
-
JSONはSQL問合せを介して操作できます。
-
OSON (JSONの最適化されたネイティブ・バイナリ表現)として格納されます。
ノート: Oracle Cloud Infrastructure (OCI) GoldenGate Big Dataデプロイメント、ソース・データベースおよびターゲット・データベース間で接続が確立されていることを確認します。
目的
- OCI GoldenGateビッグ・データ・デプロイメントを使用して、MongoDBおよびOracle Autonomous JSON Databaseを設定します。
前提条件
-
次のリソースをプロビジョニングします:
-
(コンパートメント、仮想クラウド・ネットワーク(VCN)、サブネットなど)などのOCI環境。
-
Oracle Autonomous JSON Database
-
MongoDBレプリカ・セットのOCI Compute VM。
-
OCI GoldenGateビッグ・データ・デプロイメント。
-
タスク1: MongoDBバイナリのインストールおよびMongoDBサービスの起動
-
レプリケーション設定用に3つのOCIコンピュート・インスタンスを作成し、データ・ディレクトリにブロック・ボリュームをアタッチします。
-
次のコマンドを使用して、
yum
リポジトリを更新し、MongoDBバイナリをダウンロードします。vi /etc/yum.repos.d/mongodb-enterprise-8.0.repo [mongodb-enterprise-8.0] name=MongoDB Enterprise Repository baseurl=https://repo.mongodb.com/yum/redhat/8/mongodb-enterprise/8.0/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://pgp.mongodb.com/server-8.0.asc sudo yum install -y mongodb-enterprise
-
次のコマンドを使用して、データ・ディレクトリを作成し、必要な権限を付与します。
cd /data ls chmod 755 mongo cd chmod 755 -R /data/mongo chown mongod:mongod -R /data/mongo chmod 400 /etc/mongod.Keyfile chown mongod:mongod -R /etc/mongod.Keyfile
ノート:セキュアな認証には、キーファイルが必要です。テストのために、
open-ssl
コマンドを使用してキーファイルを生成できます。 -
次のコマンドを使用して、構成ファイルを作成します。
cat /etc/mongod.conf
-
次のコマンドを使用して、
selinux
を無効にし、mongod
サービスを起動します。setenforce 0 getenforce systemctl start mongod systemctl status mongod
-
セカンダリ・ノードとして機能する残りの2つのノードで、同じ操作を実行します。
タスク2: MongoDBレプリカ・セットの作成
-
最初のノードに接続し、管理データベースに接続します。
-
次のコマンドを実行してレプリケーションを開始し、最初の管理ユーザーを作成します。このレプリケーション・ユーザーは、レプリケーションの構成および管理に使用されます。
mongosh use admin
rs.initiate() db.createUser({ ... user: "admin", ... pwd: "password", ... roles: [ ... { role: "root", db: "admin" } ... ] ... })
db.auth("admin","password") rs.conf()
-
次のコマンドを使用して、残りの2つのノードを追加します。これらはセカンダリ・ノードとして追加されます。
rs.add("10.0.1.163;27017")
rs.add("10.0.1.51:27017")
-
次のコマンドを使用して、レプリカ・セットの構成およびステータスを確認します。
db.auth("admin","password") rs.conf()
rs.status()
rs.printReplicationInfo()
タスク3: MongoDBレプリカ・セットへのデータのロード
-
mongorestore
コマンドを使用して、ダンプをMongoDBレプリカ・セットにリストアします。mongorestore --username admin --password password dump/
ノート:前述のダンプは、そのレプリカ・セットで実行されているすべてのデータベースに対して
mongodump
コマンドを使用して、別のMongoDBレプリカ・セットから取得されました。 -
次のコマンドを実行して、すべてのデータベースおよびそれぞれのコレクションがMongoDBレプリカ・セットにリストアされているかどうかを確認します。
mongosh use admin db.auth("admin","password") show dbs
タスク4: OCIでのOracle Autonomous JSON Databaseの構成
-
OCIコンソールにログインし、Oracle Database、Autonomous Databaseに移動し、イメージに示すように次の情報を入力して自律型データベースを作成します。
ノート: MongoDB互換性のため、ネットワーク・アクセスは、許可されたIPおよびVCNsのみからのセキュア・アクセスまたはプライベート・エンドポイント・アクセスのみに設定する必要があります。
-
「ツール構成の編集」をクリックし、MongoDB APIを有効にしてURLをコピーします。
ノート:前述の接続文字列でユーザー名とパスワードを変更する必要があります。
タスク5: Oracle Autonomous JSON Databaseにアクセスし、必要なMongoDBツールをインストールするためのDatabase Client Machineの作成
-
次のコマンドを使用して、ウォレット・ファイルをダウンロードし、Oracle Autonomous JSON Databaseの接続を構成します。
cat tnsnames.Oracle
cat sqlnet.Ora
-
次のコマンドを使用して、接続用のMongoDBツールをダウンロードします。
wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.5.2.tgz
tar -xvf mongodb-database-toosl-rhel70-x86_64-100.5.2.tgz
wget https://downloads.mongodb.com/compass/mongosh-1.3.1-linux-x64.tgz
tar -xvf mongosh-1.3.1-linux-x64.tgz
-
次のコマンドを使用して、環境変数としてパスおよびURI (Oracle Autonomous Transaction Processing (ATP)エンドポイント)を設定します。
cd export PATH=/home/oracle/mongosh-1.3.1-linux-x64/bin/:$PATH export PATH=$PATH:/home/oracle/mongodb-database-tools-rhel70-x86_64-100.5.2/bin echo $path
-
次のコマンドを使用してOracle Autonomous JSON Databaseに接続できるかどうかを確認します。
export URI='mongodb://admin:xxxx@xxxxxx-ADBJ.adb.us-ashburn-1.oraclecloudapps.com:27017/admin?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true' mongosh $URI
タスク6: OCIオブジェクト・ストレージ・バケットへのダンプのアップロードおよびATPへのインポート
-
mongoexport
コマンドを使用して、コレクションのダンプを取得します。mongoexport --host=mrep1 --port 27017 --username=admin --authicationDatabase=admin --collection=data --db=sample_weatherdata --out=wheather_data.Json
-
「アップロード」をクリックして、MongoDBレプリカ・セットで
mongoexport
コマンドを使用して取得されたデータベースの単一コレクションのダンプをアップロードします。 -
「オブジェクト詳細の表示」をクリックして、オブジェクト・エンドポイントの詳細を取得します。
-
curl
コマンドを実行して、そのオブジェクトからデータを読み取り、mongoimport
コマンドをエンドポイントを使用してATPに読み取ります。curl -X GET https://objectstorage.us-ashburn-1.oraclecloud.com/p/ujXv8Pmhxt9EyLlA9ogm_X524pDRGEymJwbDVyUExAACra1VpAql32U0XaRnaxLt/n/orasenatdoracledigital01/b/jsonbucket/o/wheather_data.json | mongoimport --collection data --uri $URI
-
収集がATPデータベースにインポートされているかどうかを確認します。
-
文書の数がソースと同じかどうかクロスチェックします。
テストは正常に完了しました。現在は、ソースMongoDBレプリカ・セット内の複数のデータベースで実行されているすべてのデータをターゲットOracle Autonomous JSON Databaseに移動し、ダウンタイムがほぼゼロの移行のためにOCI GoldenGateサービスをデプロイすることをお薦めします。
-
データ移動の場合は、
mongodump
コマンドを使用して、1回かぎりのロードとしてソースからターゲット・データベースにデータをコピーできます。export URI="mongodb://mrep1:27017 --username admin --authenticationDatabase admin" mongodump --uri=$URI
-
mongorestore
コマンドを実行できるターゲット・システムにこのダンプをコピーします(タスク3で説明されており、ターゲットOracle Autonomous JSON Databaseにロードしています)。ノート:移行するデータベース・コレクションに対して、Oracle Autonomous JSON Databaseで同じスキーマ名を作成してください。
create user sample_airbnb identified by <password>; grant connect, resource to sample_airbnb; grant unlimited tablespace to sample_airbnb; BEGIN ORDS_ADMIN.ENABLE_SCHEMA(p_schema => 'SAMPLE_AIRBNB'); commit; END; /
タスク7: OCIのデプロイ GoldenGate
-
OCIコンソールに移動し、「Oracle Database」、GoldenGate、「デプロイメント」に移動して、「デプロイメントの作成」をクリックします。
MongoDBからOracle Autonomous JSON Databaseの場合は、「テクノロジ」を「ビッグ・データ」として、「デプロイメント・タイプ」を「データ・レプリケーション」として選択する必要があります。
-
管理ユーザーのログインおよび管理のために、OCIコンソールから事前にシークレットを作成します。
タスク8: MongoDBとOracle Autonomous JSON Databaseの両方に対する接続の作成
-
OCIコンソールに移動し、「Oracle Database」、GoldenGate、「接続」に移動して、「接続の作成」をクリックします。
-
次の情報を入力して、ソース・データベース接続を作成します。
-
ステップ1を繰り返し、イメージに示すように次の情報を入力してターゲット・データベース接続を作成します。
タスク9: OCI GoldenGateデプロイメントへの接続の割当ておよびテスト
-
OCIコンソールに移動し、Oracle Database、GoldenGate、接続に移動して、タスク8で作成した接続をクリックします。
-
「割当て済デプロイメント」および「デプロイメントの割当て」をクリックします。
-
デプロイメントを選択し、「デプロイメントの割当て」をクリックします。
-
3つのドットと「接続のテスト」をクリックして、成功したことを確認します。
タスク10: ExtractおよびReplicatプロセスの作成
-
OCIコンソールに移動し、「Oracle Database」、GoldenGate、「デプロイメント」に移動して、タスク7で作成したデプロイメントをクリックします。
「コンソールの起動」をクリックすると、OCI GoldenGate構成コンソールが開きます。
-
デプロイメント中に作成された「ユーザー名」および「パスワード」を入力します。
コンソール・ページにログインすると、ExtractおよびReplicat構成に必要なすべてのオプションが表示されます。後のステップに示すように、ExtractおよびReplicatサービスを作成できます。
-
抽出プロセスを構成します。
ソースMongoDBデータベース用に作成された「接続別名」を選択します。
パラメータ・ファイルでは、
sample_airbnb
はMongoDB内のデータベースであり、*
はそのデータベース内のすべてのコレクションを表します。 -
Replicatプロセスを構成します。
-
「クラシックReplicat」に「Replicatタイプ」を選択します。
-
次の必須情報を入力します。
抽出プロセスの作成で名前が付けられた同じ証跡ファイル名を選択する必要があります。「ターゲット」に「Oracle Autonomous JSON Database」を選択し、タスク8で作成した「接続別名」を入力します。
Replicatプロセスは、MongoDBの
sample_airbnb
データベースからOracle Autonomous JSON Databaseのsample_airbnb
スキーマへのすべてのトランザクションをレプリケートします。
ノート:構成でソース・データベース名とターゲット・データベース名とスキーマ名をそれぞれ変更する必要があります。
-
-
ExtractおよびReplicatプロセスの構成が完了したら、それに応じてプロセスを開始します。
ノート: Oracle Autonomous JSON Databaseはプライベート・エンドポイントで構成する必要があります。証明書を使用しない場合、相互TLS (mTLS)なしで認証を変更できます。
正しい動作保証が使用できない場合、レプリケーション・ログ・ファイルに次のエラーが表示されることがあります。
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
タスク11: プロセスの抽出およびレプリケートの開始および検証
「管理サービス」をクリックして、プロセス・ステータスとそれに対応するレポートおよびログ・ファイルの両方で問題がないか確認します。
-
抽出プロセス・ステータス:
-
Replicatプロセスのステータス:
タスク12: データ同期のテスト
-
ソースおよびターゲットで、次のコマンドを使用して一部のデータを挿入する前に、コレクション詳細のドキュメント数を確認します。
-
ソース・データベース:
show dbs use sample_airbnb show collections db.emp.countDocuments()
-
ターゲット・データベース:
show dbs use Sample_airbnb show collections db.emp.countDocuments()
-
-
次のコマンドを使用して、ソースおよびターゲット・データベースのデータをチェックします。
-
ソース・データベース:
db.emp.find({"name":"joe"}) db.emp.find({"name":"John"})
-
ターゲット・データベース:
db.emp.find({"name":"joe"}) db.emp.find({"name":"John"})
-
-
次のコマンドを使用して、ソースにデータを挿入し、ターゲットにレプリケートされているかどうかを確認します。
-
ソース・データベース:
dm.emp.insertOne( { "name":"John","job":"Data Analyst","Salary":7000}) db.emp.countDocuments() db.emp.find({"name":"John"})
-
ターゲット・データベース:
show DBs show collections db.emp.find({"name":"John"})
-
タスク13: MongoDB Atlasへの接続
MongoDB Atlasへの接続は、オンプレミスのMongoDBデータベースへの接続とは異なります。
-
次のMongoDB Atlasのデフォルト接続文字列はサポートされていません。
mongodb+srv://<db_username>:<db_password>@cluster0.xxxxx.mongodb.net/
-
接続に成功するには、次の接続文字列を使用する必要があります。
mongodb://cluster0-shard-00-00.xxxx.mongodb.net:27017,cluster0-shard-00-01.xxxx.mongodb.net:27017,cluster0-shard-00-02.xxxx.mongodb.net:27017/?ssl=true&replicaSet=xxxx&authSource=admin&retryWrites=true&w=majority&appName=Cluster0
ノート:パブリック・ネットワークで接続を確立する必要がある場合は、必ずNATゲートウェイを作成し、OCI GoldenGateデプロイメントで使用されているプライベート・サブネットとともにアタッチしてください。
接続の問題による一般的なエラー
ターゲットOracle Autonomous JSON Databaseへの接続の問題により、レプリケート・プロセスの開始中にその他のエラーが発生する可能性があります:
-
エラー 1:
ERROR OGG-01091 Unable to open file "/u02/Deployment/var/lib/data/a1000000000" (error 2, No such file or directory).
-
エラー 2:
ERROR OGG-15051 Java or JNI exception: java.lang.NoClassDefFoundError: oracle/goldengate/datasource/UserExitMain. oracle.goldengate.util.GGException: Error detected handling transaction commit event. Exception in thread "main" oracle.goldengate.util.GGException: Error detected handling transaction commit event. at oracle.goldengate.datasource.UserExitDataSource.commitTransaction(UserExitDataSource.java:261 at oracle.goldengate.datasource.UserExitDataSource.commitTx(UserExitDataSource.java:2180) Caused by: java.net.SocketTimeoutException: Connect timed out
-
エラー3: 統合レプリケートの場合、次のエラーが発生することがあります。
OGG-01091 Oracle GoldenGate Delivery, RSNOW.prm: Unable to open file "/u02/Deployment/etc/conf/ogg/<replicat name>001.properties" (error 2, No such file ordirectory). In that case, you need to set below parameter in property file of Replicate parameter. TARGETDB LIBFILE libggjava.so SET property=/u02/Deployment/etc/conf/ogg/<replicatname>.properties
-
エラー4: デフォルトの接続文字列を使用したMongoDB Atlasでの接続は、OCI GoldenGateビッグ・データ・デプロイメントではサポートされていません。次の図に示すようにエラーが表示されます。
関連リンク
承認
- 著者 - Ashish Srivastava (Oracle North America Cloud Servicesプリンシパル・クラウド・アーキテクト- NACIE)
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Migrate a MongoDB Database Running on MongoDB Atlas or On-Premises to Oracle Autonomous JSON Database
G26111-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.