9.2.28 MongoDB
MongoDBハンドラの使用方法を学習します。このハンドラにより、Oracle GoldenGateからターゲットのMongoDBおよびAutonomous JSONデータベース(AJDおよびATP)にトランザクション・データを複製できます。
- 概要
- MongoDB Wire Protocol
- サポートされているターゲット・タイプ
- 詳細な機能
- MongoDBハンドラの設定および実行
- セキュリティと認証
- サンプル構成の確認
- MongoDBからAJD/ATPへの移行
- 正確なインスタンス化を使用したMongoDBソース・データベースのExtractの初期同期の構成
- Oracle JSONコレクション表(JCT)への配信
- MongoDBハンドラ・クライアント依存性
MongoDBデータベースに接続するためのMongoDBハンドラの依存性とはどのようなものでしょう。
親トピック: ターゲット
9.2.28.1 概要
Mongodbハンドラは、MongoDB Wire Protocolを使用して、RDMSおよびMongodbやCassandraなどのドキュメント・ベースのデータベースを次のターゲット・データベースに複製するために使用できます
親トピック: MongoDB
9.2.28.2 MongoDB Wire Protocol
MongoDB Wire Protocolは、単純なソケット・ベースのリクエスト・レスポンス・スタイル・プロトコルです。クライアントは、通常のTCP/IPソケットを介してデータベース・サーバーと通信します。https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/を参照してください。
親トピック: MongoDB
9.2.28.3 サポートされているターゲット・タイプ
-
MongoDBは、高パフォーマンス、高可用性および自動スケーリングを提供するオープン・ソースのドキュメント・データベースです。https://www.mongodb.com/を参照してください。
-
Oracle Autonomous JSON Database (AJD)は、JSON中心のアプリケーションの開発を簡素化するクラウド・ドキュメント・データベース・サービスです。Autonomous JSON Database | Oracleを参照してください。
-
トランザクション処理および混合ワークロード(ATP)用のAutonomous Databaseは、トランザクション、分析およびバッチ・ワークロードを同時に実行するように最適化された、完全に自動化されたデータベース・サービスです。Autonomous Transaction Processing | Oracleを参照してください。
- MongoDBのデータベースAPIを使用したオンプレミスのOracle Database 21cもサポートされているターゲットです。Oracle DatabaseのためのMongoDBのデータベースAPIのインストールを参照してください。
親トピック: MongoDB
9.2.28.4 詳細な機能
MongoDBハンドラは、ソース証跡ファイルから操作を取得し、対応するドキュメントをターゲットのMongoDBまたはAutonomousデータベース(AJDおよびATP)に作成します。
MongoDBでは、レコードはバイナリJSON (BSON)ドキュメントで、フィールドと値のペアで構成されるデータ構造です。BSONデータ構造は、JSONドキュメントのバイナリ形式です。MongoDBドキュメントはJSONオブジェクトに似ています。フィールドの値には、他のドキュメント、配列、およびドキュメントの配列を含めることができます。
コレクションはMongoDBまたはAJD/ATPドキュメントのグループであり、RDBMSの表に相当します。MongoDBやAJD/ATPのデータベースでは、コレクションがドキュメントの集合を保持します。コレクションはスキーマを強制しません。コレクション内のMongoDBまたはAJD/ATPドキュメントは、異なるフィールドを持つことができます。
親トピック: MongoDB
9.2.28.4.1 ドキュメント・キー列
MongoDBまたはAJD/ATPデータベースでは、すべてのドキュメント(行)に_id
という名前の列が必要で、その値はコレクション(表)内で一意である必要があります。これは、RDBMS表の主キーに似ています。挿入時に、ドキュメントに最上位の_id
列が含まれていない場合、MongoDBドライバによってこの列が追加されます。
MongoDBハンドラは、証跡レコードの主キー列値に基づいて、すべてのドキュメントのカスタム_id
フィールド値を構築します。このカスタム_id
は、:
(コロン)セパレータで連結されたすべてのキー列値を使用して構築されます。たとえば:
KeyColValue1:KeyColValue2:KeyColValue3
MongoDBハンドラは、このカスタム_id
値に基づいて、一意性を強制します。つまり、証跡のすべてのレコードが、主キー列値に基づいて一意である必要があります。同じ表に一意でないレコードが存在すると、MongoDBハンドラ障害が発生し、Replicatは重複キー・エラーで異常終了します。
_id
フィールドの動作は次のとおりです。
-
デフォルトでは、MongoDBは、コレクションの作成時に列の一意の索引を作成します。
-
これは常にドキュメントの最初の列になります。
-
配列を除く任意のBSONデータ型の値を使用できます。
親トピック: 詳細な機能
9.2.28.4.2 主キーの更新操作
_id
列の変更は許可されていません。つまり、証跡内の主キーの更新操作レコードには、特別な処理が必要です。MongoDBハンドラは、主キーの更新操作をDELETE
(古いキー)とINSERT
(新しいキー)の組合せに変換します。INSERT
を実行するには、証跡内の更新操作の完全な操作前イメージが推奨されます。Oracle GoldenGateのGETUPDATEBEFORES
およびNOCOMPRESSUPDATES
パラメータを有効にして、更新操作の完全な操作前イメージを移入する証跡を生成できます。
親トピック: 詳細な機能
9.2.28.4.3 MongoDB証跡のデータ型
MongoDBハンドラは、次に示すBSONデータ型への配信をサポートします。
-
32ビットの整数
-
64ビットの整数
-
倍精度
-
日付
-
文字列
-
バイナリ・データ
親トピック: 詳細な機能
9.2.28.5 MongoDBハンドラの設定および実行
次の各トピックでは、MongoDBハンドラのコンポーネントの構成およびこのハンドラの実行の手順について説明します。
9.2.28.5.1 クラスパス構成
MongoDB Java Driverは、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)でMongoDBに接続しデータをストリーミングするために必要です。GG for DAAのバージョンが21.7.0.0.0以下である場合は、3.x (MongoDB Java Driver 3.12.8)を使用する必要があります。GG for DAAのバージョンが21.8.0.0.0以上である場合は、MongoDB Java Driver 4.6.0を使用する必要があります。MongoDB Java Driverは、GG for DAA製品に含まれていません。ドライバはmongo java driverからダウンロードする必要があります。
推奨されるドライバJARファイルをダウンロードするには、mongo-java-driverとバージョンを選択します。
実行時にMongoDB Java Driver JARをロードするには、gg.classpath
変数を構成する必要があります。たとえば: gg.classpath=/home/mongodb/mongo-java-driver-3.12.8.jar
。
GG for DAAでは、MongoDB 3.4に追加されたMongoDB Decimal 128データ型がサポートされています。3.12.8より前のMongoDB Java Driverを使用すると、ClassNotFound
例外が発生します。
親トピック: MongoDBハンドラの設定および実行
9.2.28.5.2 MongoDBハンドラ構成
MongoDBハンドラの操作は、プロパティ・ファイルを使用して構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)
MongoDBハンドラの選択を有効にするには、まずgg.handler.name.type=mongodb
を指定してハンドラ・タイプを構成してから、次に示す他のMongoDBプロパティを構成する必要があります。
表9-34 MongoDBハンドラの構成プロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
必須 |
|
なし |
Replicatで使用するMongoDBハンドラを選択します。 |
|
オプション |
|
|
|
|
オプション |
|
なし |
MongoDBハンドラで実行されるすべての操作に必要な書込み確認を設定します。 プロパティ値はJSON形式で、 |
|
オプション |
有効なMongoDBクライアントURI |
なし |
MongoDBクライアントURIを設定します。クライアントURIは、認証や |
|
オプション |
|
|
ドキュメントのサイズがMongoDBの制限を超えると、例外が発生し、Replicatが異常終了します。 |
|
オプション |
|
|
|
|
オプション |
|
|
MongoDBバージョン3.4には、Decimal128という128ビットの10進データ型のサポートが追加されました。このデータ型は、64ビットのLongまたはDoubleに適合しない整数データ型と10進データ型の両方をOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)でサポートするために必要でした。このプロパティを |
|
オプション |
|
|
MongoDB 4.0以上でトランザクション処理を有効にする場合は、 ノート: MongoDBは、MongoDBバージョン4.0でトランザクションのサポートが追加されました。また、MongoDBクライアント・ドライバの最低限のバージョンは3.10.1です。 |
親トピック: MongoDBハンドラの設定および実行
9.2.28.5.3 一括書込みの使用
一括書込みはデフォルトで有効になっています。スループットを向上させるために、一括書込みを使用することをお薦めします。
また、BulkWrite
ハンドラ・プロパティを使用して、一括書込みを有効にすることもできます。一括書込みを有効または無効にするには、gg.handler.handler.BulkWrite=true | false
を使用します。MongoDBハンドラでは、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)で使用されるgg.handler.handler.mode=
プロパティは使用されません。
op | tx
一括書込みでは、MongoDBハンドラは、GROUPTRANSOPS
パラメータを使用して、バッチ・サイズを取得します。ハンドラは、証跡レコードのバッチをMongoDBドキュメントに変換し、このドキュメントは1つのリクエストでデータベースに書き込まれます。
親トピック: MongoDBハンドラの設定および実行
9.2.28.5.4 書込み確認の使用
書込み確認は、スタンドアロンMongoDB、レプリカ・セットおよびシャード・クラスタへの書込み操作に関してMongoDBからリクエストされた確認のレベルを説明します。シャード・クラスタを使用して、Mongoインスタンスは書込み確認をシャードに渡します。https://docs.mongodb.com/manual/reference/write-concern/を参照してください。
次の構成を使用します。
w: value
wtimeout: number
親トピック: MongoDBハンドラの設定および実行
9.2.28.5.5 3部構成の表名の使用
Oracle GoldenGate証跡では、Catalog.Schema.Table
など、3部構成の表名をサポートするソースのデータが存在する場合があります。MongoDBは、DBName.Collection
など、2部構成の名前のみをサポートします。ソースの3部構成の名前からMongoDBの2部構成の名前へのマッピングをサポートするには、ソースのCatalog
とSchema
をアンダースコア区切り文字で連結して、MongoのDBName
を構成します。
たとえば、Catalog.Schema.Table
はcatalog1_schema1.table1
になります。
親トピック: MongoDBハンドラの設定および実行
9.2.28.5.6 Undo処理の使用
MongoDB Handlerハンドラは、軽量のundoエンジンを使用して、一括書込みエラーから回復できます。このエンジンは、通常のRDBMSのundoエンジンとは機能が異なり、どちらかといえばエラー・リカバリに役立つよう最善を尽くします。エラー・リカバリが正常に動作するのは、MongoDBデータベースがBulkWriteException
によって障害の場所に関する情報を提供する主な違反や他の一括書込みエラーがある場合です。
表9-35では、この機能を最大限に利用するための要件を示します。
表9-35 Undo処理の要件
元に戻す処理 | 証跡に完全な操作前イメージが必要か。 |
---|---|
|
いいえ |
|
あり |
|
いいえ( |
undo操作中にエラーが発生すると、MongoDBコレクションを一貫性のある状態にすることができない可能性があります。この場合、データを手動で調整する必要があります。
親トピック: MongoDBハンドラの設定および実行
9.2.28.6 セキュリティと認証
- MongoDB URIベースの認証
- TLS/SSL構成
MongoDB接続は、TLSまたは相互TLS (mTLS)を使用して保護できます。 - SSL構成の設定
- MongoDB ExtractおよびReplicatの構成
X509認証および認可が有効になっているMongoDBクラスタへのセキュアな接続の場合、接続URIには認証タイプ、クライアント証明書およびCA証明書のパラメータを含める必要があります。また、クライアントおよびサーバーのトラストストア/キーストアのファイルとそのパスワードをJVMブート・オプションで渡す必要があります。
親トピック: MongoDB
9.2.28.6.1 MongoDB URIベースの認証
MongoDBでは、様々な認証方式およびオプションを問合せパラメータとしてサポートするURI形式の接続文字列を使用します。
9.2.28.6.1.1 認証方式
-
SCRAM-SHA-256 : 推奨されるパスワードベースの認証メカニズム。
例:
mongodb://username@host:27017/?authSource=admin&authMechanism=SCRAM-SHA-256
- SCRAM-SHA-1 : 下位互換性を確保するため。
例:
mongodb://username@host:27017/?authSource=admin&authMechanism=SCRAM-SHA-1
- PLAIN (LDAP): TLSが必要です。
例:
mongodb://ldapUser@host:27017/?authMechanism=PLAIN&authSource=$external&tls=true
- x.509証明書による認証:
例:
mongodb://host:27017/?authMechanism=MONGODB-X509&tls=true&tlsCertificateKeyFile=client.pem&tlsCAFile=ca.pem
ノート:
X509構成ステップの詳細は、「MongoDB ExtractおよびReplicatの構成」を参照してください。
親トピック: MongoDB URIベースの認証
9.2.28.6.2 TLS/SSL構成
MongoDB接続は、TLSまたは相互TLS (mTLS)を使用して保護できます。
親トピック: セキュリティと認証
9.2.28.6.2.2 TLSの有効化
- サーバーがCAの信頼された証明書を使用する場合:
例:
mongodb://host:27017/?tls=true
- サーバーが自己署名証明書を使用する場合:
例:
mongodb://host:27017/?tls=true&tlsAllowInvalidCertificates=true
または
例:mongodb://host:27017/?tls=true
ノート:
トラストストア情報は、ReplicatプロパティのJVMブートオプションに、-Djavax.net.ssl.trustStore=/path/to/truststore.jks -Djavax.net.ssl.trustStorePassword=changeit
と指定する必要があります
親トピック: TLS/SSL構成
9.2.28.6.2.3 相互TLS (mTLS)
サーバー証明書の検証とともにクライアント証明書の検証を実行します。
mongodb://host:27017/?tls=true
ノート:
トラストストアおよびキーストアの情報は、JVMブート・オプションに指定する必要があります。mTLSのJVMブート・オプション:
-Djavax.net.ssl.trustStore=/path/to/truststore.jks -Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.ssl.keyStore=/path/to/keystore.jks -Djavax.net.ssl.keyStorePassword=changeit
親トピック: TLS/SSL構成
9.2.28.6.3 SSL構成の設定
MongoDBインスタンスとOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)のMongoDBハンドラの間にSSLを構成するには、次の手順を実行します:
openssl req -passout pass:password -new -x509 -days 3650 -extensions v3_ca -keyout
ca_private.pem -out ca.pem -subj
"/CN=CA/OU=GOLDENGATE/O=ORACLE/L=BANGALORE/ST=KA/C=IN"
クライアントおよびすべてのサーバー・ノードのキーおよび証明書署名リクエスト(CSR)の作成
openssl req -newkey rsa:4096 -nodes -out client.csr -keyout client.key -subj
'/CN=certName/OU=OGGBDCLIENT/O=ORACLE/L=BANGALORE/ST=AP/C=IN'
openssl req -newkey rsa:4096 -nodes -out server.csr -keyout server.key -subj
'/CN=slc13auo.us.oracle.com/OU=GOLDENGATE/O=ORACLE/L=BANGALORE/ST=TN/C=IN'
CAによる証明書署名リクエストの署名
openssl x509 -passin pass:password -sha256 -req -days 365 -in client.csr -CA ca.pem -CAkey
ca_private.pem -CAcreateserial -out client-signed.crt
openssl x509 -passin pass:password -sha256 -req -days 365 -in server.csr -CA ca.pem -CAkey
ca_private.pem -CAcreateserial -out server-signed.crt -extensions v3_req -extfile
<(cat << EOF[ v3_req ]subjectAltName = @alt_names
[ alt_names ]
DNS.1 = 127.0.0.1
DNS.2 = localhost
DNS.3 = hostname
EOF)
cat client-signed.crt client.key > client.pem
cat server-signed.crt server.key > server.pem
openssl pkcs12 -export -out server.pkcs12 -in server.pem
openssl pkcs12 -export -out client.pkcs12 -in client.pem
ノート:
プロンプトが表示されたら、サーバーおよびクライアントのトラストストアのパスワードを指定します。bash-4.2$ ls
ca.pem ca_private.pem client.csr client.pem server-signed.crt server.key server.pkcs12
ca.srl client-signed.crt client.key client.pkcs12 server.csr server.pem
openssl x509 -in <pathToClientPEM> -inform PEM -subject -nameopt RFC2253
Example Output:
subject= CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry
ユーザーを作成するためのTLS/SSLを使用しないMongoDBインスタンスの起動
ノート:
ユーザー名は、MongoDB用に受信したクライアント証明書サブジェクトおよび管理者としてのロールと一致する必要があります。mongosh --bind_ip <hostname> --port <port>
db.getSiblingDB("$external").runCommand({
createUser: " CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry ",
roles: [{ role: "root", db: "admin" }]
});
TLS/SSLを有効にしたMongoDBクラスタの再起動
--tlsMode requireTLS --tlsCertificateKeyFile ../opensslKeys/server.pem --tlsCAFile
../opensslKeys/ca.pem
または
関連するノード情報を使用して、MongoDBクラスタのノードごとに構成ファイルを作成します。
net:
bindIp: <hostname of node>
port: <port number of node>
tls:
mode: requireTLS
certificateKeyFile: /certificates/server.pem
CAFile: /certificates/ca.pem
clusterFile: /certificates/server.pem
replication:
replSetName: "rs0"
storage:
dbPath: /data/d1
security:
authorization: enabled
clusterAuthMode: x509
mongod –config node1.conf
mongod –config node2.conf
mongod –config node3.conf
MongoDBクラスタのレプリカ・セットの初期化
mongosh "mongodb://host-name:port/?authMechanism=MONGODB-X509&tls=true" --tlsCertificateKeyFile=certs/client.pem --tlsCAFile=certs/ca.pem
mongosh “mongodb://hostname:port/?authMechanism=MONGODBX509&tls=true&tlsCertificateKeyFile=/path/to/certificates/client.pem&tlsCAFile=/path/to/certificates/ca.pem”
rs.initiate({ _id: "rs1", members:
[
{ id: 0, host: "localhost:27017" },
{ id: 1, host: "localhost:27018" },
{ id: 2, host: "localhost:27019" }
] });
親トピック: セキュリティと認証
9.2.28.6.4 MongoDB ExtractおよびReplicatの構成
X509認証および認可が有効になっているMongoDBクラスタへのセキュアな接続の場合、接続URIには認証タイプ、クライアント証明書およびCA証明書のパラメータを含める必要があります。また、クライアントおよびサーバーのトラストストア/キーストアのファイルとそのパスワードをJVMブート・オプションで渡す必要があります。
接続URI形式
mongodb://hostname:port/?authMechanism=MONGODBX509&tls=true&tlsCertificateKeyFile=/path/to/certificates/client.pem&tlsCAFile=/path/to/certificates/ca.pem
Jvm.bootoptions= -Xms512m -Xmx4024m -Xss32m -Djavax.net.ssl.trustStore=../mcopensslkeys /server.pkcs12 -Djavax.net.ssl.trustStorePassword=<trust-store password> -Djavax.net.ssl.keyStore=../mcopensslkeys/client.pkcs12 -Djavax.net.ssl.keyStorePassword=<key-store password>
add credentialstore user mongodb://hostname:port/?authMechanism=MONGODBX509&tls=true&tlsCertificateKeyFile=/path/to/certificates/client.pem&tlsCAFile=/path/to/certificates/ca.pem password root alias mongo
alter credentialstrore add user mongodb://hostname:port/?authMechanism=MONGODBX509&tls=true&tlsCertificateKeyFile=/path/to/certificates/client.pem&tlsCAFile=/path/to/certificates/ca.pem password root alias mongo
ノート:
connectionStringの長さは256以下にする必要があります。Extract構成
EXTRACT emongo
EXTTRAIL mn
SOURCEDB USERIDALIAS mongo DOMAIN OracleGoldenGate
JVMOPTIONS BOOTOPTIONS -Xms512m -Xmx4024m -Xss32m -Djavax.net.ssl.trustStore=/certs/server.pkcs12 -Djavax.net.ssl.trustStorePassword=pass -Djavax.net.ssl.keyStore=/certs/client.pkcs12 -Djavax.net.ssl.keyStorePassword=pass CLASSPATH $OGG_HOME/ggjava/ggjava.jar:/DependencyDownloader/dependencies/mongodb_capture_5.0.1/*
no_abend_on_ddl
TABLE srcDB.*;
Replicat構成
gg.handlerlist=mongodb
gg.handler.mongodb.type=mongodb
gg.handler.mongodb.clientURI=mongodb://hostname:port/?authMechanism=MONGODBX509&tls=true&tlsCertificateKeyFile=/path/to/certificates/client.pem&tlsCAFile=/path/to/certificates/ca.pem
gg.classpath=/DependencyDownloader/dependencies/mongodb_5.0.1/*
jvm.bootoptions=-Xms512m -Xmx4024m -Xss32m -Djavax.net.ssl.trustStore=/tmp/certs/server.pkcs12 -Djavax.net.ssl.trustStorePassword=pass -Djavax.net.ssl.keyStore=/tmp/certs/client.pkcs12 -Djavax.net.ssl.keyStorePassword=pass
親トピック: セキュリティと認証
9.2.28.7 サンプル構成の確認
基本構成
Javaアダプタ・プロパティ・ファイルからのMongoDBハンドラのサンプル構成を次に示します。
gg.handlerlist=mongodb gg.handler.mongodb.type=mongodb #The following handler properties are optional. #Refer to the Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA) documentation #for details about the configuration. #gg.handler.mongodb.clientURI=mongodb://localhost:27017/ #gg.handler.mongodb.WriteConcern={w:value, wtimeout: number } #gg.handler.mongodb.BulkWrite=false #gg.handler.mongodb.CheckMaxRowSizeLimit=true goldengate.userexit.timestamp=utc goldengate.userexit.writers=javawriter javawriter.stats.display=TRUE javawriter.stats.full=TRUE gg.log=log4j gg.log.level=INFO gg.report.time=30sec #Path to MongoDB Java driver. # maven co-ordinates # <dependency> # <groupId>org.mongodb</groupId> # <artifactId>mongo-java-driver</artifactId> # <version>3.10.1</version> # </dependency> gg.classpath=/path/to/mongodb/java/driver/mongo-java-driver-3.10.1.jar javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm
OracleまたはMongDBデータベース・ソースからMongoDB、AJDおよびATPターゲット
OracleまたはMongDBデータベースの大文字のソース表名を、MongoDBの小文字の表にマップできます。これは表名とスキーマの両方に適用されます。使用できる方法は2つあります。
親トピック: MongoDB
9.2.28.8 MongoDBからAJD/ATPへの移行
9.2.28.8.1 概要
トランザクション処理用のOracle Autonomous JSON Database (AJD)およびAutonomous Databaseも、ワイヤ・プロトコルを使用して接続します。ワイヤ・プロトコルには同じMongoDB CRUD APIがあります。
親トピック: MongoDBからAJD/ATPへの移行
9.2.28.8.2 AJD/ATPに書き込むためのMongoDBハンドラの構成
基本構成は、この章で説明するオプションのプロパティを含めて同じままです。
ハンドラは、レプリケーションを実行するためのすべての操作をターゲットに依存しない方法で実行するために、mongodbと同じプロトコル(mongodb wire protocol)およびAutonomousデータベース用の同じドライバjarを使用します。プロパティは、サポートされている任意のターゲットにも使用できます。
gg.handlerlist=mongodb gg.handler.mongodb.type=mongodb #URL mentioned below should be an AJD instance URL gg.handler.mongodb.clientURI=mongodb://[username]:[password]@[url]?authSource=$external&authMechanism=PLAIN&ssl=true #Path to MongoDB Java driver. Maven co-ordinates # <dependency> # <groupId>org.mongodb</groupId> # <artifactId>mongo-java-driver</artifactId> # <version>3.10.1</version> # </dependency> gg.classpath=/path/to/mongodb/java/driver/mongo-java-driver-3.10.1.jar javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm
親トピック: MongoDBからAJD/ATPへの移行
9.2.28.8.3 移行のステップ
MongoDBからAJDに移行するには、最初に初期ロードを実行する必要があります。初期ロードは、挿入操作のみで構成されます。初期ロードの実行後、ソース・データベースとターゲット・データベースの同期を維持するCDCを起動します。
- CDC Extractを開始し、証跡を生成します。これらの証跡ファイルを消費するために、Replicatを起動しないでください。
- 初期ロードExtractを起動し、初期ロードが完了するまで待機します。
- ステップ2で生成された初期ロード証跡を消費する新しいReplicatを作成します。完了を待ってから、Replicatを停止します。
- CDC証跡を消費する新しいレプリケートを作成します。
HANDLECOLLISIONS
を使用するようにこのReplicatを構成してから、Replicatを起動します。 - CDC Replicat (ステップ4)がすべての証跡を消費し、replicat lagおよびreplicat RBAをチェックして、CDC Replicatが追い付いたことを確認します。この時点で、ソース・データベースとターゲット・データベースが同期しています。
- CDC Replicatを停止し、
HANDLECOLLISIONS
パラメータを削除してから、CDC Replicatを再起動します。
親トピック: MongoDBからAJD/ATPへの移行
9.2.28.8.4 ベスト・プラクティス
- CDCを実行する前に、挿入操作を使用して初期データをロードする初期ロードを実行してください。
- スループットを向上させるために、mongoDBハンドラの実行にバルク・モードを使用します。
- 移行中にハンドル衝突を有効にして、Replicatが衝突エラーを自動的に処理できるようにします。
- 欠落している更新を挿入するために、
INSERTMISSINGUPDATES
プロパティを.prm
ファイルに追加してください。
親トピック: MongoDBからAJD/ATPへの移行
9.2.28.9 正確なインスタンス化を使用したMongoDBソース・データベースのExtractの初期同期の構成
この記事では、正確なインスタンス化手法を使用して、MongoDBソース・データベースからMongoDB/ORDSターゲットへのデータの初期同期を実行する方法を説明します。この手法により、初期ロードによるパフォーマンスの向上が不要になり、ターゲットReplicatで競合が発生しないことが保証され、パフォーマンスが低下する可能性がある競合処理が不要になるため、パフォーマンスが最適化されます。
この正確なインスタンス化手法では、MongoDBダンプ・ユーティリティを使用してMongoDBソース・データベースのスナップショットを取得し、この初期ダンプの最初の操作をExtract側のチェンジ・データ・キャプチャ(CDC)の開始位置と同期します。このプロセスにより、ダンプされたデータとExtractによって生成された後続のCDC証跡との間のデータ損失または重複がなくなります。
9.2.28.9.1 同期プロセスの概要
- MongoDBダンプ・ユーティリティ: mongodumpユーティリティは、ソースMongoDBデータベースのスナップショットを作成するために使用されます。ドキュメント、メタデータおよび索引定義をバイナリ・アーカイブにダンプできます。
--oplog
オプションを有効にすると、oplog.bson
ファイルにもエントリが書き込まれ、すべての操作(ダンプ中に発生した操作を含む)とそのタイムスタンプが取得されます。 - Oplogの分析:
oplog.bson
ファイルには、一連の操作とそのタイムスタンプが格納されます。このファイルは、ダンプ中の最初の操作と最後の操作を特定するために分析されます。ダンプ・プロセス中に操作が発生しなかった場合、oplog.bson
にはnoop
エントリのみが含まれます。CDC Extractの同期には、最初の操作と最後の操作(または操作が発生しなかった場合は最初のnoop
エントリ)のタイムスタンプが重要です。 - MongoDBリストア・ユーティリティ: ダンプの完了後、mongorestoreユーティリティを使用して、データ、メタデータおよび索引定義をターゲットMongoDBインスタンスにリストアします。
--nsInclude
オプションを使用すると、ターゲットで特定のコレクションを選択的にリストアできます。 - CDC ExtractおよびReplicat: CDC Extractは、
oplog.bson
ファイルに記載されている最初の操作のタイムスタンプから開始されます。Replicatは、競合処理が不要になるようにoplogReplayLastLsn
プロパティで構成されたoplog.bson
の最後の操作のタイムスタンプから開始して、証跡ファイルからの変更を適用するように構成されています。
これらのステップにより、操作が欠落することがなくなり、ターゲットでの重複が回避されます。
9.2.28.9.2 前提条件
次のことを確認してください:
- MongoDBソース・バージョンは5以降であること。
- Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA) 23.7以降が、ソースMongoDBとターゲット・データベース・インスタンスの両方に対してインストールおよび構成されていること。
- MongoDBデータベース・ツール (mongodumpおよびmongorestoreを含む)がインストールされ、それぞれのディレクトリ・パスがpath環境変数に追加されていること。
9.2.28.9.3 手順を追った説明
- MongoDBダンプ・ユーティリティを実行します。
--oplog
オプションを指定してmongodump
コマンドを実行し、ソースMongoDBデータベースのスナップショットを作成します:$ ./bin/mongodump --uri="mongodb://localhost:27021" --oplog -v Output: 2025-02-28T07:24:53.260+0000 getting most recent oplog timestamp 2025-02-28T07:24:53.268+0000 writing admin.system.version to dump/admin/system.version.bson 2025-02-28T07:24:53.269+0000 done dumping admin.system.version (1 document) 2025-02-28T07:24:53.270+0000 dumping up to 4 collections in parallel 2025-02-28T07:24:53.271+0000 writing testDB.coll1 to dump/testDB/coll1.bson 2025-02-28T07:24:53.272+0000 writing testDB.coll2 to dump/testDB/coll2.bson 2025-02-28T07:24:53.272+0000 writing testDB.coll3 to dump/testDB/coll3.bson 2025-02-28T07:24:53.303+0000 done dumping testDB.coll3 (10000 documents) 2025-02-28T07:24:53.313+0000 done dumping testDB.coll1 (10000 documents) 2025-02-28T07:24:53.326+0000 done dumping testDB.coll2 (10000 documents) 2025-02-28T07:24:53.328+0000 writing captured oplog to 2025-02-28T07:24:53.328+0000 dumped 7 oplog entries
これにより、バイナリ・アーカイブ・データ・ファイルを含むダンプ・フォルダが、すべてのデータベースおよびコレクションのdump/database-name/collection-name/collection-name.bson
と、ダンプ・フォルダ直下のoplog.bson
に生成されます。oplog.bson
ファイル(人間が読めないバイナリ形式)の内容を検査するには、bsondumpユーティリティを使用してJSONに変換できます。$ ./bin/bsondump --pretty --outFile /path/to/oplog.json dump/oplog.bson Output: 2025-02-28T07:25:03.346+0000 7 objects found
OplogLSN.sh
を使用してタイムスタンプを抽出します。OplogLSN.sh
スクリプトを実行して、$./oplogLSN.sh /path/to/dump/oplog.bson
のように引数としてoplog.bson
ファイルへのパスを指定して、oplog.bson
ファイルから最初および最後の操作のタイムスタンプを抽出します出力には、最初および最後の操作(またはダンプ・プロセス中に操作が発生しなかった場合は最初の
出力:noop
)のタイムスタンプが表示されます。2025-02-27T13:53:00.885+0000 1 objects found First LSN: 1740663867.1 Last LSN: 1740663946.211
- Oplogエントリを調査します。
ダンプ中に受信操作があった場合、
oplog.bson
ファイルには、それらの操作のエントリがそれぞれタイムスタンプとともに格納されます。OplogLSN.sh
を使用すると、前のステップに示すように、最初および最後の操作のタイムスタンプを取得したり、手動調査のためにJSONファイルに変換できます。 - MongoDBリストア・ユーティリティを実行します。
必要なタイムスタンプを取得したら、mongorestoreユーティリティを使用して、選択したコレクションをダンプからターゲットMongoDBインスタンスにリストアします。
$ ./mongorestore --uri="mongodb://localhost:27021" --nsInclude=testDB.coll1 --nsInclude=testDB.coll2 /path/to/dump -v Output: 2025-02-28T07:26:08.760+0000 using write concern: &{majority <nil> 0s} 2025-02-28T07:26:08.785+0000 using default 'dump' directory 2025-02-28T07:26:08.785+0000 preparing collections to restore from 2025-02-28T07:26:08.785+0000 found collection admin.system.version bson to restore to admin.system.version 2025-02-28T07:26:08.785+0000 found collection metadata from admin.system.version to restore to admin.system.version 2025-02-28T07:26:08.785+0000 don't know what to do with file "dump/oplog.json", skipping... 2025-02-28T07:26:08.785+0000 found collection testDB.coll1 bson to restore to testDB.coll1 2025-02-28T07:26:08.785+0000 found collection metadata from testDB.coll1 to restore to testDB.coll1 2025-02-28T07:26:08.785+0000 found collection testDB.coll2 bson to restore to testDB.coll2 2025-02-28T07:26:08.785+0000 found collection metadata from testDB.coll2 to restore to testDB.coll2 2025-02-28T07:26:08.785+0000 reading metadata for testDB.coll1 from dump/testDB/coll1.metadata.json 2025-02-28T07:26:08.785+0000 reading metadata for testDB.coll2 from dump/testDB/coll2.metadata.json 2025-02-28T07:26:08.786+0000 creating collection testDB.coll1 with no metadata 2025-02-28T07:26:08.791+0000 creating collection testDB.coll2 with no metadata 2025-02-28T07:26:08.827+0000 restoring testDB.coll1 from dump/testDB/coll1.bson 2025-02-28T07:26:08.843+0000 restoring testDB.coll2 from dump/testDB/coll2.bson 2025-02-28T07:26:09.144+0000 finished restoring testDB.coll1 (10000 documents, 0 failures) 2025-02-28T07:26:09.204+0000 finished restoring testDB.coll2 (10000 documents, 0 failures) 2025-02-28T07:26:09.204+0000 no indexes to restore for collection testDB.coll1 2025-02-28T07:26:09.204+0000 no indexes to restore for collection testDB.coll2 2025-02-28T07:26:09.204+0000 20000 document(s) restored successfully. 0 document(s) failed to restore.
このコマンドは、指定されたコレクションのデータ、メタデータおよび索引定義(前述のデータベースtestDBのcoll1およびcoll2など)をターゲットMongoDB/ORDSインスタンスにリストアします。
- MongoDB CDC Extractを開始します。
oplog.bson
ファイルから抽出された最初の操作のタイムスタンプ(LSN位置)から、MongoDB CDC Extractプロセスを開始します。これにより、CDC Extractは、ダンプ・プロセスの開始後に発生する操作の取得を開始します。図9-1 MongoDB CDC Extractの開始
- MongoDB Replicatを構成します。
生成されたCDC証跡ファイルでMongoDB Replicatを構成し、
oplogReplayLastLsn
プロパティをoplog.bson
ファイルからの最後の操作のタイムスタンプに設定します。これにより、Replicatは確実にoplogリプレイ・モードで実行され、競合を回避できます。最後のタイムスタンプが処理されると、通常モードで続行されます。# Set the oplogReplayLastLsn property in Replicat configuration. Either provide the last timestamp or just the path to oplog.bson file (and it figures out the last timestamp automatically). gg.handler.mongodb.oplogReplayLastLsn=1740663946.211
この構成により、データ損失や重複のない正確な開始が保証され、Replicatではコストのかかる競合処理が不要になります。
ノート:
mongo-dump前のクリーン・アップ: mongorestoreの実行時に、既存のダンプ・フォルダによってデータの不整合状態が作り出されました。新しいダンプを取得する前に、既存のダンプ・フォルダがクリーン・アップされていることを確認します。新しいダンプを取得する前に、既存のダンプ・フォルダとその内容を削除してクリーン・アップすることが非常に重要です。
MongoDBリストア: mongorestoreコマンドで複数の--nsInclude
オプションを使用することで、1つのデータベースの複数のコレクションを複数レプリケートできます。ただし、複数の--nsInclude
を使用してORDSの複数のデータベースをリストアすることはできません。リストアする必要があるデータベースごとに1つずつ、複数のリストア・コマンドが必要です。
mongodb-database-toolsの推奨バージョンは100.10.0以前です。最新バージョンはまだ安定していません。
9.2.28.10 Oracle JSONコレクション表(JCT)への配信
このトピックでは、Oracle Database 23c Freeのインストール、環境の構成、Oracle REST Data Services (ORDS)統合用のプラガブル・データベース(PDB)の作成、ORDSのインストールと設定のためのステップについて概要を示し、Oracle GoldenGate for Distributed Applications and AnalyticsのMongoDBハンドラを使用してOracle Database MongoDB APIでOracle Databaseに接続するためにそれを使用します。
ノート:
MongoDBソースから取得し、Oracle JSONコレクション表(JCT)およびOracle JSON二面性ビュー(JDV)に配信することもできます。この項の内容は次のとおりです。
- Oracle Database 23c Freeをインストールします
- Oracleデータベースへの接続
- 新規プラガブル・データベース(PDB)の作成
- ORDSのユーザーの作成
- SSL証明書の生成
- Oracle REST Data Services (ORDS)のインストールおよび設定
- MongoDBハンドラの構成および設定
- エラー処理
親トピック: MongoDB
9.2.28.10.1 Oracle Database 23c Freeをインストールします
- Oracleの公式ダウンロード・ページOracle Database Free 23c (https://www.oracle.com/in/database/free/get-started/)に移動します。
- Oracle Linux 8 (OL8)マシン用のRPMパッケージ
oracle-database-free-23c-1.0-1.el8.x86_64.rpm
をダウンロードします。 - RPMパッケージをインストールします:
- 次のコマンドを実行してOracle Database Freeをインストールします:
sudo dnf install -y oracle-database-free*
予想される出力Package: oracle-database-free-23ai Version: 1.0-1 Architecture: x86_64 Repository: @commandline Size: 1.3 GB
- 次のコマンドを実行してOracle Database Freeをインストールします:
- Oracle Databaseを構成します: インストール後、
sudo /etc/init.d/oracle-free-23ai configure
を使用してデータベースを構成します。SYS
、SYSTEM
およびPDBADMIN
ユーザーのパスワードの入力を求められます。画面上の指示に従って構成を完了します。
親トピック: Oracle JSONコレクション表(JCT)への配信
9.2.28.10.2 Oracleデータベースへの接続
- 環境変数を設定します:
export ORACLE_HOME=/opt/oracle/product/23ai/dbhomeFree/
- インストールを検証します: Oracle Databaseに接続して、インストールが成功したことを確認します:
/opt/oracle/product/23ai/dbhomeFree/bin/sqlplus sys/Admin01@localhost:1521/FREE as sysdba
親トピック: Oracle JSONコレクション表(JCT)への配信
9.2.28.10.3 新規プラガブル・データベース(PDB)の作成
-
SYSDBA
としてSQL*Plusにログインします:/opt/oracle/product/23ai/dbhomeFree/bin/sqlplus sys/Admin01@localhost:1521/FREE as sysdba
- 現在のコンテナおよびPDBを確認します:
show con_name; show pdbs; Expected Output: CON_NAME ------------------------------ CDB$ROOT CON_ID CON_NAME OPEN MODE RESTRICTED ------ ------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 FREEPDB1 READ WRITE NO
- ORDS用の新しいPDBを作成します:
CREATE PLUGGABLE DATABASE pdbords ADMIN USER pdbordsadmin IDENTIFIED BY Admin01 FILE_NAME_CONVERT = ('/opt/oracle/oradata/FREE/pdbseed/', '/scratch/oracle/pdbseed_ords/');
ノート:
ディレクトリ/scratch/oracle/pdbseed_ords/
を事前に作成します - その新しいPDBをオープンし確認します:
ALTER PLUGGABLE DATABASE pdbords OPEN;SHOW pdbs;
予想される出力:CON_ID CON_NAME OPEN MODE RESTRICTED ------ ------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 FREEPDB1 READ WRITE NO 5 PDBORDS READ WRITE NO
- コンテナを
PDBORDS
に設定します。ALTER SESSION SET CONTAINER = pdbords; SHOW con_name;
親トピック: Oracle JSONコレクション表(JCT)への配信
9.2.28.10.4 ORDSのユーザーの作成
- ORDSユーザーを作成します:
CREATE USER ordsuser IDENTIFIED BY Admin01; GRANT CONNECT, RESOURCE, DBA TO ordsuser;
このユーザーは、ORDSを介したMongoDB統合に使用されます。
- 新規ユーザーとして接続:
/opt/oracle/product/23ai/dbhomeFree/bin/sqlplus ordsuser/Admin01@localhost:1521/PDBORDS
親トピック: Oracle JSONコレクション表(JCT)への配信
9.2.28.10.5 SSL証明書の生成
- 次のように証明書用のディレクトリを作成します:
mkdir certs cd certs/
- CAの秘密キーを生成します。次のコマンドにより、認証局(CA)の秘密キーが生成されます。ここで使用したパスワードを覚えておいてください。それは、他の証明書に署名するために必要になります。
openssl genrsa -aes256 -out ca-key.pem 4096
- CAのパブリック証明書を作成します
認証局の役割を果たす、CAの自己署名付きパブリック証明書を生成します。
openssl req -new -x509 -sha256 -days 365 -key ca-key.pem -out ca.pem
- CA証明書の詳細を表示します。次のコマンドを使用してCA証明書の詳細を確認します:
openssl x509 -in ca.pem -text
- クライアントの秘密キーを生成します。次のようにクライアントの秘密キーを作成します:
openssl genrsa -out client-key.pem 4096
- 証明書署名リクエスト(CSR)を作成します。クライアント証明書のCSRを生成します。必ず、共通名(CN)が、その証明書を使用するホストの名前と一致するようにします。
openssl req -new -sha256 -subj "/CN=oraclelinux8" -key client-key.pem -out client.csr
- CAを使用してクライアント証明書を生成します。現在の環境と一致するIPアドレスとDNS名をextfile.cnfに追加します。それらがhostsファイル内のホスト名詳細と一致するようにしてください。
hostsファイルの例:
127.0.0.1 localhost 100.01.01.01 phoenix.dev3sub2phx.oraclevcn.com
次のようにextfile.cnfを作成します:
echo "subjectAltName=DNS:*.oraclevcn.com,DNS:phoenix.dev3sub2phx.oraclevcn.com,IP:100.01.01.01" >> extfile.cnf
- 次のように証明書に署名します:
openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem -out client.pem -extfile extfile.cnf -CAcreateserial
- クライアント証明書を検証します。
次のコマンドを使用してクライアント証明書を検証します:
openssl verify -CAfile ca.pem -verbose client.pem
- 証明書を結合して完全チェーンにします。
次のように、クライアント証明書とCA証明書を組み合せて完全チェーン証明書を作成します:
cat client.pem > fullchain.pem cat ca.pem >> fullchain.pem
- SSL証明書を使用するようにORDSを構成します。
一部のシステムでは、PEMではなくDER形式の証明書が必要です。
次のように、クライアント・キーと証明書をDER形式に変換します:openssl pkcs8 -topk8 -inform PEM -outform DER -in client-key.pem -out client-key.der -nocrypt openssl x509 -inform PEM -outform DER -in client.pem -out client.der
親トピック: Oracle JSONコレクション表(JCT)への配信
9.2.28.10.6 Oracle REST Data Services (ORDS)のインストールおよび設定
- ORDSをダウンロードします。
- オラクルのWebサイト(ORDSダウンロード)からファイルords-24.3.0.262.0924.zipをダウンロードします
- ダウンロードしたファイルを解凍します。
mkdir certs cd certs/
- ORDSを設定します:
- 環境変数を設定します。
export ORDS_HOME=/scratch/ords/ export ORDS_CONFIG=/scratch/ords/ordsconfig export PATH=${ORDS_HOME}/bin:${PATH} export _JAVA_OPTIONS="-Xms1126M -Xmx1126M"
ノート:
JAVA11以上が必要です。ORACLE_HOME
が設定されている場合は、その設定を解除します。 - ORDSをインストールします。次のコマンドを実行します。
ords install
- インストール中に次のオプションを選択します:
- 接続タイプ: 基本
- データベース: localhost:1521/PDBORDS
- プロトコル: HTTPS
- ポート: 8443
- 証明書タイプ: 自己署名証明書と完全修飾ホスト名を使用します
予想される出力:
-bash-4.4$ ords install Enter a number to update the value or select option A to Accept and Continue [1] Connection Type: Basic [2] Basic Connection: HOST=localhost PORT=1521 SERVICE_NAME=PDBORDS Administrator User: SYS AS SYSDBA [3] Database password for ORDS runtime user (ORDS_PUBLIC_USER): <generate> [4] ORDS runtime user and schema tablespaces: Default: SYSAUX Temporary TEMP [5] Additional Feature: Database Actions [6] Configure and start ORDS in Standalone Mode: Yes [7] Protocol: HTTPS [8] HTTPS Port: 8443 [9] Certificate Type: Use Self-Signed Certificate [10] SSL Hostname: phoenix.dev3sub2phx.oraclevcn.com [A] Accept and Continue - Create configuration and Install ORDS in the database [Q] Quit - Do not proceed. No changes Choose [A]: A
- インストール中に次のオプションを選択します:
- ORDSスキーマを有効にします。データベースに接続し、次のように、必要な権限を付与します:
/opt/oracle/product/23ai/dbhomeFree/bin/sqlplus ordsuser/Admin01@localhost:1521/PDBORDS SQL> grant soda_app, create session, create table, create view, create sequence, create procedure, create job, unlimited tablespace to ordsuser; SQL> exec ords.enable_schema;
- 証明書とMongoDBを構成します。
ords config set standalone.https.cert /scratch/ords/certs/client.der ords config set standalone.https.cert.key /scratch/ords/certs/client-key.der ords config set mongo.enabled true ords config set mongo.port 27040
- 環境変数を設定します。
- ORDSを起動します
- 次のコマンドを実行してORDSを起動します:
ords serve
予想される出力:
-bash-4.4$ ords serve Picked up _JAVA_OPTIONS: -Xms1126M -Xmx1126M 2024-11-04T10:53:10.119Z WARNING Your configuration folder /scratch/ords/ordsconfig is located in ORDS product folder. Oracle recommends to use a different configuration folder. Refer to Oracle REST Data Services Documentation on how to setup your configuration folder. ORDS: Release 24.3 Production on Mon Nov 04 10:53:10 2024 Copyright (c) 2010, 2024, Oracle. Configuration: /scratch/ords/ordsconfig 2024-11-04T10:53:10.642Z INFO HTTP and HTTP/2 cleartext listening on host: 0.0.0.0 port: 8080 2024-11-04T10:53:10.643Z INFO HTTPS and HTTPS/2 listening on host: 0.0.0.0 port: 8443 2024-11-04T10:53:10.679Z INFO Disabling document root because the specified folder does not exist: /scratch/ords/ordsconfig/global/doc_root 2024-11-04T10:53:10.680Z INFO Default forwarding from / to contextRoot configured. 2024-11-04T10:53:10.764Z SEVERE ORAMLVERSION null 2024-11-04T10:53:10.775Z INFO Oracle API for MongoDB listening on port: 27040 2024-11-04T10:53:10.775Z INFO The Oracle API for MongoDB connection string is: mongodb://[{user}:{password}@]localhost:27040/{user}?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true
- 次のコマンドを実行してORDSを起動します:
親トピック: Oracle JSONコレクション表(JCT)への配信
9.2.28.10.7 MongoDBハンドラの構成および設定
- 生成されたCA証明書をJavaキーストアに追加します。
- 生成されたCA証明書をJavaキーストアに追加します。MongoDBとのセキュアな通信を可能にするには、CA証明書(ca.pem)をJavaキーストアに追加する必要があります。次のコマンドを実行します。
keytool -import -trustcacerts -keystore /scratch/oui_21.15/ogg_install_home/jdk/jre/lib/security/cacerts -storepass changeit -alias MiCA -file /scratch/ca.pem -noprompt
これで、証明書がキーストアに正常に追加されました。ノート:
OGGDAA
インストール・ディレクトリにあるcacertsを使用します。 - MongoDB接続URI: MongoDBに安全に接続するには、次の接続URIを使用します。
tlsCAFile
とtlsCertificateKeyFile
のパスが正しく、ご使用の環境と一致していることを確認してください。環境変数を設定します。mongodb://ordsuser:Admin01@phoenix.dev3sub2phx.oraclevcn.com:27040/ordsuser? authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true&tlsCAFile=/scratch/ca.pem
構文:mongodb://[{user}:{password}@]localhost:27040/{user}?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true
- 表領域ORDSを作成します
- 次のようにSQL Plusに接続します:
/opt/oracle/product/23ai/dbhomeFree/bin/sqlplus ordsuser/Admin01@localhost:1521/PDBORDS
- 表領域を作成します
CREATE TABLESPACE jcttest DATAFILE '/scratch/ords/tablespace/jct_datafile.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
ノート:
/scratch/ords/tablespace
ディレクトリを事前に作成します。 - 次のようにデフォルトの表領域を設定します:
ALTER USER ordsuser DEFAULT TABLESPACE JCTTEST;
- 次のようにSQL Plusに接続します:
- レプリケーションを構成します
- MongoDBハンドラを構成するには、次のようにReplicat用のprmファイルを作成します:
REPLICAT JCT MAP *.*, TARGET ordsuser.*; // here target schema is the ords user that we created.
- Replicat JCT用のプロパティ・ファイルを作成します。
gg.handlerlist=mongodb gg.handler.mongodb.type=mongodb #TODO: MongoDB Client URI (replace with the actual MongoDB URI) gg.handler.mongodb.clientURI=mongodb://ordsuser:Admin01@phoenix.dev3sub2phx.oraclevcn.com:27040/ordsuser?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true&tlsCAFile=/scratch/ca.pem #TODO: Path to MongoDB Java driver gg.classpath=/scratch/oui_21.15/ogg_install_home/opt/DependencyDownloader/dependencies/mongodb_5.0.0/*
- MongoDBハンドラを構成するには、次のようにReplicat用のprmファイルを作成します:
- ORDS SQL Developerでデータを検証します
レプリケーションを設定した後、次のようにSQL Developerでデータを検証できます:
ログインURL: SQL DeveloperのURL (https://phoenix.dev3sub2phx.oraclevcn.com:8443/ords/sql-developer)
資格証明:ordsuser/Admin01
SELECT DATA, RESID, ETAG FROM ORDSUSER.JSONCT;
このDATA列に、MongoDBからのJCTレコードが保持されている必要があります。
ノート:
- JCT表が存在しない場合は、デフォルトで、MongoDBハンドラによってそれが作成されます。
- ターゲットJCT表を手動で作成し、ハンドラ構成においてそれをマップすることもできます。
CREATE JSON COLLECTION TABLE JSONCT;
親トピック: Oracle JSONコレクション表(JCT)への配信
9.2.28.10.8 エラー処理
-
JSONタイプは、自動でないセグメント領域管理の表領域'SYSTEM'では使用できません
というエラーが発生した場合は、次のコマンドを実行してデフォルトの表領域をordsuserに割り当てます。次のようにSQL Plusに接続します:
/opt/oracle/product/23ai/dbhomeFree/bin/sqlplus ordsuser/Admin01@localhost:1521/PDBORDS
次のようにデフォルトの表領域を設定します:ALTER USER ordsuser DEFAULT TABLESPACE JCTTEST;
これにより、
JCTTEST
がordsuserスキーマのデフォルト表領域として設定されます。
親トピック: Oracle JSONコレクション表(JCT)への配信
9.2.28.11 MongoDBハンドラ・クライアント依存性
MongoDBデータベースに接続するためのMongoDBハンドラの依存性とはどのようなものでしょう。
ノート:
Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)のバージョンが21.7.0.0.0以下の場合、このドライバのバージョンはMongoDB Java Driver 3.12.8です。Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)バージョン21.8.0.0.0以上の場合、このドライバのバージョンはMongoDB Java Driver 4.6.0です。9.2.28.11.1 MongoDB Java Driver 4.6.0
必要な依存クライアント・ライブラリは次のとおりです:
bson-4.6.0.jar
bson-record-codec-4.6.0.jar
mongodb-driver-core-4.6.0.jar
mongodb-driver-legacy-4.6.0.jar
mongodb-driver-legacy-4.6.0.jar
mongodb-driver-sync-4.6.0.jar
MongoDB Replicatの実行に必要なサード・パーティ・ライブラリのMaven座標は次のとおりです:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-legacy</artifactId> <version>4.6.0</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>4.6.0</version> </dependency>
例
Maven Central (https://central.sonatype.com/artifact/org.mongodb/mongodb-driver-reactivestreams/4.6.0)から最新バージョンをダウンロードします。
親トピック: MongoDBハンドラ・クライアント依存性
9.2.28.11.2 MongoDB Java Driver 3.12.8
pom.xml
ファイルに次の行を追加して、正しい情報で置換します。<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.8</version> </dependency>
親トピック: MongoDBハンドラ・クライアント依存性