8.1.8 MongoDB
MongoDB用のOracle GoldenGateキャプチャ(Extract)は、MongoDBデータベースから変更を取得するために使用されます。
この章では、MongoDB用のOracle GoldenGateキャプチャを使用する方法について説明します。
- 概要
- MongoDBを設定するための前提条件
- MongoDBデータベースの操作
- Extract初期ロードの使用
- チェンジ・データ・キャプチャのExtractの使用
- Extractの配置
- セキュリティと認証
- MongoDB双方向レプリケーション
- Mongo DB構成リファレンス
- 証跡ファイルの列
- 更新操作の動作
- Oplogサイズの推奨事項
- トラブルシューティング
- MongoDBキャプチャ・クライアント依存性
MongoDBデータベースに接続するためのMongoDBキャプチャの依存性とはどのようなものでしょう。
親トピック: ソース
8.1.8.1 概要
MongoDBは、大量のデータ・ストレージに使用されるドキュメント指向のNoSQLデータベースであり、エンタープライズ・アプリケーションで大量のデータセットのデータ・モデリングおよびデータ管理とともに、高パフォーマンスおよびスケーラビリティを提供します。MongoDBには次が用意されています:
- 組込みのレプリケーションとフェイルオーバーによる高可用性
- ネイティブ・シャーディングによる水平スケーラビリティ
- エンド・ツー・エンドのセキュリティとその他多数
親トピック: MongoDB
8.1.8.2 MongoDBを設定するための前提条件
- MongoDBクラスタまたはMongoDBノードにレプリカ・セットが必要です。レプリカ・セットの最小推奨構成は、3つのデータ・ベアリング・メンバー(1つのプライマリ・メンバーと2つのセカンダリ・メンバー)を持つ3つのメンバー・レプリカ・セットです。
次のようにレプリカ・セットを使用してmongodインスタンスを作成します。
bin/mongod --bind_ip localhost --port 27017 --replSet rs0 --dbpath ../data/d1/ bin/mongod --bind_ip localhost --port 27018 --replSet rs0 --dbpath ../data/d2/ bin/mongod --bind_ip localhost --port 27019 --replSet rs0 --dbpath ../data/d3/ bin/mongod --host localhost --port 27017
レプリカ・セットの追加:
rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "localhost:27017" }, { _id: 1, host: "localhost:27018" }, { _id: 2, host: "localhost:27019" } ] })
- レプリカ・セットOplog
MongoDBキャプチャは、oplogを使用してCDCレコードを読み取ります。操作ログ(
oplog
)は、データベースに格納されているデータを変更するすべての操作のローリング・レコードを保持する制限付きコレクションです。MongoDBは、次の場合にのみoplogエントリを削除します: oplogが設定した最大サイズに達している場合、およびoplogエントリがホスト・システム・クリックを基準にして設定した時間数より古い場合。
oplogエントリの保持は、
oplogMinRetentionHours
およびreplSetResizeOplog
を使用して制御できます。oplogの詳細は、Oplogサイズの推奨事項を参照してください。
- バージョン5.0.0以降のMongoDBクライアントのサード・パーティ・ライブラリをダウンロードし提供する必要があります。「MongoDBキャプチャ・クライアントの依存性: リアクティブ・ストリームJavaドライバ4.4.1」を参照してください。
ノート:
5.0.0未満のMongoDBクライアント・バージョンはサポートされていません。
8.1.8.2.1 ソース・タイプを検出するための資格証明ストア・エントリの設定
userid
の接頭辞に基づいています。useridの一般的な形式は次のとおりです: <dbtype>://<db-user>@<comma separated list of server addresses>:<port>
。userid
値(MongoDB)は、パスワードのない有効なMongoDB clientURIです。
MongoDBキャプチャ
alter credentialstore add user "mongodb+srv://user@127.0.0.1:27017" password db-passwd alias mongo
ノート:
userid値が二重引用符で囲まれていることを確認してください。MongoDB Atlas
例:
alter credentialstore add user "mongodb+srv://user@127.0.0.1:27017" password db-passwd alias mongo
親トピック: MongoDBを設定するための前提条件
8.1.8.3 MongoDBデータベースの操作
サポートされている操作
- INSERT
- UPDATE
- DELETE
サポートされていない操作
- CREATEコレクション
- RENAMEコレクション
- DROPコレクション
親トピック: MongoDB
8.1.8.4 Extract初期ロードの使用
MongoDB Extractでは、ソース表のデータをOracle GoldenGate証跡ファイルに抽出する標準の初期ロード機能がサポートされます。
MongoDBの初期ロードは、変更を複製するための前提条件ステップとして、またはスタンドアロン機能として表を同期化するために実行できます。初期ロードの構成
初期ロード・パラメータ・ファイル:-- ggsci> alter credentialstore add user mongodb://db-user@localhost:27017/admin password db-passwd alias mongo
EXTRACT LOAD
JVMOPTIONS CLASSPATH ggjava/ggjava.jar:/path/to/mongo-capture/libs/*
SOURCEISTABLE
SOURCEDB USERIDALIAS mongo
TABLE database.collection;
adminclient> ADD EXTRACT load, SOURCEISTABLE
adminclient> START EXTRACT load
親トピック: MongoDB
8.1.8.5 チェンジ・データ・キャプチャのExtractの使用
Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)インストール・ディレクトリ(AdapterExamples/big-data/mongodbcapture
)にあるサンプル.prmファイルを確認してください。
MongoDBのExtract証跡を追加する場合は、EXTTRAIL
を使用してローカル証跡ファイルを作成する必要があります。
RMTTRAIL
オプションを使用して構成しないでください。adminclient> ADD EXTRACT groupname, TRANLOG
adminclient> ADD EXTTRAIL trailprefix, EXTRACT groupname
例:
adminclient> ADD EXTRACT mongo, TRANLOG
adminclient> ADD EXTTRAIL ./dirdat/z1, EXTRACT mongo
親トピック: MongoDB
8.1.8.6 Extractの配置
MongoDB Extractプロセスでは、EARLIEST、TIMESTAMP、EOFおよびLSNから配置できます。
EARLIEST: 特定のコレクションのOplogの開始位置に配置します。
構文:
ADD EXTRACT groupname, TRANLOG, EARLIEST
TIMESTAMP: 特定のタイムスタンプに配置します。トークンBEGINは、NOWを使用して現在の時刻から開始するか、特定のタイムスタンプを使用して開始できます。
BEGIN {NOW | yyyy-mm-dd[ hh:mi:[ss[.cccccc]]]}
構文
ADD EXTRACT groupname, TRANLOG, BEGIN NOW
ADD EXTRACT groupname, TRANLOG, BEGIN ‘yyyy-mm-dd hh:mm:ss’
EOF: oplogの末尾に配置します。
構文
ADD EXTRACT groupname, TRANLOG, EOF
LSN: 特定のLSNに配置します。
MongoDBキャプチャでは、ログ順序番号(LSN)は、エントリごとに一意のoplog
の操作時間に対応します。この操作時間は、増分付きのtimestamp
(t.i
形式)または20桁の数値の2つの形式で表すことができます。たとえば、oplogの操作時間が"ts": {"$timestamp": {"t": 1733328879, "i": 2}}
の場合、対応するLSNは1733328879.2
または07444590848517341186
として表すことができます。
Extractを追加するための構文は次のとおりです:
timestamp.increment
形式の場合:
ADD EXTRACT groupname, TRANLOG, LSN "1733328879.2"
20桁のLSN形式の場合:
ADD EXTRACT groupname, TRANLOG, LSN "07444590848517341186"
親トピック: MongoDB
8.1.8.7 セキュリティと認証
MongoDBキャプチャは、Oracle GoldenGateの資格証明ストアを使用して、Oracle GoldenGateプロセスがMongoDBデータベースとやり取りするために使用するユーザーIDおよびその暗号化されたパスワード(まとめて資格証明と呼ばれます)を管理します。資格証明ストアを使用すると、Oracle GoldenGateのパラメータ・ファイルにユーザー名およびクリアテキスト・パスワードを指定する必要がなくなります。
ユーザーIDのかわりにパラメータ・ファイルのオプションの別名を使用して、資格証明ストアのユーザーIDとパスワードのペアにマップすることもできます。
Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)では、実際のユーザーIDまたはパスワードではなく、別名およびドメインをプロパティ・ファイル内で指定します。ユーザー資格証明は、セキュアなウォレット・ストレージで管理されます。
CREDENTIAL STORE
およびDBLOGIN
を追加するには、adminclientで次のコマンドを実行します。
adminclient> add credentialstore
adminclient> alter credentialstore add user "<userid>" password <pwd> alias mongo
useridの値の例:mongodb://myUserAdmin@localhost:27017/admin?replicaSet=rs0
ノート:
userid値が二重引用符で囲まれていることを確認してください。adminclient > dblogin useridalias mongo
DBLOGIN
をテストするには、次のコマンドを実行します
adminclient> list tables tcust*
認証を資格証明ストアに正常に追加したら、Extractのパラメータ・ファイルに別名を追加します。
SOURCEDB USERIDALIAS mongo
MongoDBキャプチャは、接続URIを使用してMongoDBデプロイメントに接続します。認証およびセキュリティは、接続URIの一部として問合せ文字列として渡されます。SSLを構成するには、「SSL構成の設定」を参照してください。 mongodb://<user>@<hostname1>:<port>,<hostname2>:<port>,<hostname3>:<port>/?replicaSet=<replicatName>
TLS/SSLを指定するには: "+srv"
の接続文字列接頭辞をmongodb+srv
として使用すると、tlsオプションはtrue
に自動的に設定されます。 mongodb+srv://server.example.com/
tls=false
を追加します。
mongodb:// >@<hostname1>:<port>/?replicaSet=<replicatName>&tls=false
認証を指定するには:
mongodb://<user>@<hostname1>:<port>,<hostname2>:<port>,<hostname3>:<port>/?replicaSet=<replicatName>&authSource=admin
mongodb://<user>@<hostname1>:<port>,<hostname2>:<port>,<hostname3>:<port>/?replicaSet=<replicatName>&authSource=admin&authMechanism=GSSAPI
接続URLを使用したセキュリティおよび認証の詳細は、Mongo DBドキュメントを参照してください8.1.8.7.1 SSL構成の設定
MongoDBインスタンスとOracle GoldenGate for Distributed Applications and Analyticsの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.crtopenssl 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
次のオプションを使用して、mongodのインスタンスを起動します。
--tlsMode requireTLS --tlsCertificateKeyFile ../opensslKeys/server.pem --tlsCAFile
../opensslKeys/ca.pem
credentialstore connectionString
alter credentialstore add user
mongodb://myUserAdmin@localhost:27017/admin?ssl=true&tlsCertificateKeyFile=../mcopensslkeys/client.pem&tlsCertificateKeyFilePassword=password&tlsCAFile=../mcopensslkeys/ca.pem
password root alias mongo
ノート:
connectionString
の長さは256を超えないでください。
CDC Extractの場合は、JVMオプションの一部としてキー・ストアおよびトラスト・ストアを追加します。
JVMのオプション
-Xms512m -Xmx4024m -Xss32m -Djavax.net.ssl.trustStore=../mcopensslkeys /server.pkcs12
-Djavax.net.ssl.trustStorePassword=password
-Djavax.net.ssl.keyStore =../mcopensslkeys/client.pkcs12
-Djavax.net.ssl.keyStorePassword=password
親トピック: セキュリティと認証
8.1.8.8 MongoDB双方向レプリケーション
Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)には、MongoDBソース・データベースから変更を取得しその変更をMongoDBターゲット・データベースに適用する統合があります。双方向レプリケーションでは、1つのソース・コレクションに加えられた変更がターゲット・コレクションにレプリケートされ、2番目のコピーに加えられた変更が最初のコピーにレプリケートされます。
このトピックでは、MongoDBの双方向レプリケーションをサポートする設計について説明します。
ノート:
双方向レプリケーションをサポートするには、MongoDBバージョン6以降が必要です。6.0より前のバージョンでは、MongoDB双方向はサポートされず、次のエラー・メッセージで失敗します: MONGODB-000XX MongoDB version should be 6 or greater to support bi-directional replication.
8.1.8.8.1 Trandataの有効化
双方向が有効になっているReplicatプロセスを開始する前に、データが複製されているコレクションのtrandataを有効にする必要があります。Replicatプロセスの起動前にコレクションに対してtrandataを有効にすると、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)のExtractプロセスでドキュメントがGG for DAAによって処理されるかどうかを特定できる、操作のビフォア・イメージが取得されます。
双方向対応Replicatプロセスで使用されたコレクションでtrandataが有効になっていない場合、Extractは異常終了します。
Trandataを有効にするコマンド
Dblogin useridalias <aliasname>
“add trandata <schema>.<collectionname>”
ノート:
ターゲット・コレクションは、双方向が有効になっている状態でReplicatプロセスが実行される前に使用可能にする必要があります。親トピック: MongoDB双方向レプリケーション
8.1.8.8.2 MongoDB双方向レプリケーションの有効化
MongoDB双方向レプリケーションを有効にするには、Replicatプロパティでgg.handler.mongodb.bidirectional
をtrue
(gg.handler.mongodb.bidirectional=true
)に設定します。
gg.handler.mongodb.bidirectional
プロパティがtrue
に設定されている場合、ReplicatプロセスはfilterAttributeとfilterAttributeValueのキー値ペアをドキュメントに追加します。ループ検出にはfilterAttribute
とfilterAttributeValue
が必要です。filterAttributeValue
に、最大256文字で、ASCII文字[A-Za-z]および数字[0-9]のみが含まれていることを確認してください。ドキュメントにfilterAttribute
とfilterAttributeValue
のキー/値ペアがある場合は、そのドキュメントがOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)のReplicatプロセスによって処理されることを示しています。
gg.handler.mongodb.bidirectional
プロパティがtrue
に設定されている場合、Replicatはデフォルト値のfilterAttribute
をoggApply
として、デフォルト値のfilterAttributeValue
が明示的に指定されていない場合はこれをtrue
として取り込みます。デフォルト設定でMongoDB双方向レプリケーションを有効にできます。たとえば、gg.handler.mongodb.bidirectional=true
のようにします
{ "_id" : ObjectId("65544aa60b0a066d021ba508"), "CUST_CODE" : "test65", "name" : "hello
world", "cost" : 3000, "oggApply":"true"}
filterAttribute
とfilterAttributeValue
のキー値ペアを定義することもできます。たとえば:gg.handler.mongodb.bidirectional=true
gg.handler.mongodb.filterAttribute=region
gg.handler.mongodb.filterAttributeValue=westcentral
カスタムのキー値ペアを使用したサンプルの挿入ドキュメント:{ "_id" : ObjectId("65544aa60b0a066d021ba508"), "CUST_CODE" : "test65", "name" : "hello world", "cost" : 3000, "region":"westcentral"}
親トピック: MongoDB双方向レプリケーション
8.1.8.8.3 双方向で処理されるターゲットReplicatからの抽出
TRANLOGOPTIONS EXCLUDEFILTERATTRIBUTE
をExtractパラメータで使用すると、ソースMongoDB操作をフィルタできます。TRANLOGOPTIONS EXCLUDEFILTERATTRIBUTE
は、値/キーのペアです。EXCLUDEFILTERATTRIBUTE
属性のデフォルトの名前と値は、oggApplyとtrueです。オプションで、名前と値をユーザーが設定することもできます。ユーザーは、複数のTRANLOGOPTIONS EXCLUDEFILTERATTRIBUTE
オプションに、別々のキー/値ペアを指定できます。
このオプションは、MongoDB Replicatによって使用された値でEXCLUDEFILTERATTRIBUTE
の名前を指定することで、MongoDBキャプチャの双方向構成でのデータ・ループを回避するために使用できます。
例1
TRANLOGOPTIONS EXCLUDEFILTERATTRIBUTE
により、属性oggApply
と値true
でフィルタします。指定したEXCLUDEFILTERATTRIBUTE
がソース・ドキュメントに含まれている場合、そのドキュメントはフィルタされ、抽出されません。
TRANLOGOPTIONS EXCLUDEFILTERATTRIBUTE
フィルタされたサンプル・メッセージ:
{ "_id" : ObjectId("65544aa60b0a066d021ba508"), "CUST_CODE" : "test65", "name" : "hello world", "cost" : 3000, "oggApply":"true"}
ループを逃れるためや、操作を処理/フィルタするか決めるために、TRANLOGOPTIONS EXCLUDEFILTERATTRIBUTE
パラメータ値はソースReplicatのFILTERATTRIBUTE
およびFILTERATTRIBUTEVALUE
と一致している必要があります。指定したFILTERATTRIBUTE
がソース・ドキュメントに含まれている場合、そのドキュメントは、複製された操作として識別されます。
例2
**
次のExtractパラメータでは、属性regionと値westcentralでマークされた、複製された操作がフィルタされます。また、アプリケーションの操作が取得されます。さらに、別の属性値でマークされた他の操作がある場合は、それらが抽出されます。
TRANLOGOPTIONS EXCLUDEFILTERATTRIBUTE region=westcentral
フィルタされたサンプル・メッセージ:
{ "_id" : ObjectId("65544aa60b0a066d021ba508"), "CUST_CODE" : "test65", "name" : "hello world", "cost" : 3000, "region":"westcentral"}
抽出されたサンプル・メッセージ:
{ "_id" : ObjectId("1881aa60bMKA66d021b1938"), "CUST_CODE" : "test38", "name" : "hello world", "cost" : 2000 }
**
ノート:
バージョン23.4以降では、ExtractパラメータFILTERATTRIBUTE
の名前がEXCLUDEFILTERATTRIBUTE
に変更され、パラメータGETREPLICATES/IGNOREREPLICATE
およびGETAPPLOPS/IGNOREAPPLOPS
が非推奨になりました。これらのパラメータを使用すると、Extractプロセスが異常終了します。
親トピック: MongoDB双方向レプリケーション
8.1.8.8.4 トラブルシューティング
- 双方向レプリケーションでは、削除ドキュメントでビフォア・イメージを使用できない場合は、プロセスを中止してエラーを出力します。
サンプル・エラー
MONGODB-000XX No before image is available for collection [ <collection name> ] with the document [ <document> ]
. - 使用するMongoDBバージョンが6未満の場合、
MONGODB-000XX
MongoDB version should be 6 or greater to support bi-directional replicationが表示されます。
親トピック: MongoDB双方向レプリケーション
8.1.8.9 Mongo DB構成リファレンス
次のプロパティは、MongoDBチェンジ・データ・キャプチャで使用されます。
プロパティ | 必須/オプション | 場所 | デフォルト | 説明 |
---|---|---|---|---|
OGGSOURCE <source> |
必須 | GLOBALSファイル
ノート: Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)リリース23.4.0.0.0以降では、このパラメータは非推奨になります。 |
なし |
CDCキャプチャまたはデータベースの問合せのソース・データベース。有効な値は |
|
オプション |
Extractパラメータ・ファイル |
なし | CLASSPATH : Java仮想マシンのクラスパス。アスタリスク(*)ワイルドカードを含めて、任意のディレクトリ内のすべてのJARファイルに一致させることができます。複数のパスはコロン(:)文字で区切る必要があります。BOOTOPTIONS : Java仮想マシンのブート・オプション。複数のオプションは空白文字で区切られます。
|
|
オプション |
GLOBALSファイル
ノート: GG for DAAリリース23.4.0.0.0以降では、このパラメータは非推奨になります。 |
なし |
Java仮想マシンのブート・オプション。複数のオプションは空白文字で区切られます。 |
JVMCLASSPATH <classpath> |
必須 |
GLOBALSファイル
ノート: GG for DAAリリース23..0,0.0.0以降では、このパラメータは非推奨になります。 |
なし | Java仮想マシンのクラスパス。アスタリスク(*)ワイルドカードを含めて、任意のディレクトリ内のすべてのJARファイルに一致させることができます。複数のパスはコロン(:)文字で区切る必要があります。例:
|
SOURCEDB USERIDALIAS <alias name> |
必須 | Extractパラメータ(.prm)ファイル | なし | このパラメータは、ソースMongoDBデータベースへの認証のためにExtractプロセスで使用されます。別名は、Oracle Walletに存在する必要がある別名を示します。セキュリティと認証を参照してください。 |
ABEND_ON_DDL |
オプション | CDC Extractパラメータ(.prm)ファイル | なし | これは、MongoDBキャプチャExtractのデフォルト動作です。CREATE コレクション、RENAME コレクションおよびDROP コレクションを検出すると、Extractプロセスは異常終了します。
|
NO_ABEND_ON_DDL |
オプション | CDC Extractパラメータ(.prm )ファイル
|
なし |
|
ABEND_ON_DROP_DATABASE |
オプション | CDC Extractパラメータ(.prm )ファイル
|
なし | これは、MongoDBキャプチャExtractのデフォルト動作です。データベースの削除操作を検出すると、Extractプロセスは異常終了します。 |
NO_ABEND_ON_DROP_DATABASE |
オプション |
CDC Extractパラメータ(. |
なし |
データベースの削除操作を検出すると、Extractプロセスはこれらの操作をスキップし、次の処理を続行します。 |
BINARY_JSON_FORMAT |
オプション | prm | なし |
|
TRANLOGOPTIONS FETCHPARTIALJSON |
オプション | CDC Extractパラメータ(.prm)ファイル | なし | tranlogoptions FETCHPARTIALJSON を構成すると、ExtractプロセスはDB参照を実行し、指定された更新操作の完全なドキュメントをフェッチします。「MongoDB双方向レプリケーション」を参照してください。
|
表メタデータ
BINARY_JSON_FORMAT
が構成されている場合、列のメタデータは、data_type
が64、sub_data_type
が4、RemarksがJSONになります。
例:
2021/11/11 06:45:06.311.849 Metadata Len 143 RBA 1533 Table Name: MYTEST.TEST * 1)Name 2)Data Type 3)External Length 4)Fetch Offset 5)Scale 6)Level 7)Null 8)Bump if Odd 9)Internal Length 10)Binary Length 11)Table Length 12)Most Sig DT 13)Least Sig DT 14)High Precision 15)Low Precision 16)Elementary Item 17)Occurs 18)Key Column 19)Sub DataType 20)Native DataType 21)Character Set 22)Character Length 23)LOB Type 24)Partial Type 25)Remarks * TDR version: 11 Definition for table MYTEST.TEST Record Length: 16010 Columns: 2 id 64 8000 0 0 0 0 0 8000 8000 0 0 0 0 0 1 0 1 4 -4 -1 0 0 0 JSON payload 64 8000 8005 0 0 1 0 8000 8000 0 0 0 0 0 1 0 0 4 -4 -1 0 1 0 JSON End of definition s
BINARY_JSON_FORMAT
が構成されている場合、列のメタデータは、data_type
が64、sub_data_type
が0、RemarksがJSONになります。
例
2021/11/11 06:45:06.311.849 Metadata Len 143 RBA 1533 Table Name: MYTEST.TEST * 1)Name 2)Data Type 3)External Length 4)Fetch Offset 5)Scale 6)Level 7)Null 8)Bump if Odd 9)Internal Length 10)Binary Length 11)Table Length 12)Most Sig DT 13)Least Sig DT 14)High Precision 15)Low Precision 16)Elementary Item 17)Occurs 18)Key Column 19)Sub DataType 20)Native DataType 21)Character Set 22)Character Length 23)LOB Type 24)Partial Type 25)Remarks * TDR version: 11 Definition for table MYTEST.TEST Record Length: 16010 Columns: 2 id 64 8000 0 0 0 0 0 8000 8000 0 0 0 0 0 1 0 1 0 -4 -1 0 0 0 JSON payload 64 8000 8005 0 0 1 0 8000 8000 0 0 0 0 0 1 0 0 0 -4 -1 0 1 0 JSON End of definition
親トピック: MongoDB
8.1.8.10 証跡ファイルの列
- 列0は'
_id
'で、コレクション内のドキュメントを識別します。 - 列1は'
payload
'で、すべての列(コレクションのフィールド)を保持します。
プロパティBINARY_JSON_FORMAT
に基づいて、列はBSON形式または拡張JSON形式として表示されます。BINARY_JSON_FORMAT
が構成されている場合、取得されたドキュメントは次のようにBSON形式で表現されます。
2021/10/26 06:21:33.000.000 Insert Len 329 RBA 1921 Name: MYTEST.TEST (TDR Index: 1) After Image: Partition x0c G s 0000 1a00 0000 1600 1600 0000 075f 6964 0061 7800 | ..............ax. ddc2 d894 d2f5 fca4 9e00 0100 2701 0000 2301 2301 | ............'...#.#. 0000 075f 6964 0061 7800 ddc2 d894 d2f5 fca4 9e02 | ..._id.ax........... 4355 5354 5f43 4f44 4500 0500 0000 7361 6162 0002 | CUST_CODE.....saab.. 6e61 6d65 0005 0000 006a 6f68 6e00 026c 6173 746e | name.....john..lastn 616d 6500 0500 0000 7769 6c6c 0003 6164 6472 6573 | ame.....will..addres 7365 7300 8300 0000 0373 7472 6565 7464 6574 6169 | ses......streetdetai Column 0 (0x0000), Length 26 (0x001a) id. 0000 1600 1600 0000 075f 6964 0061 7800 ddc2 d894 | ..........ax..... d2f5 fca4 9e00 | ...... Column 1 (0x0001), Length 295 (0x0127) payload. 0000 2301 2301 0000 075f 6964 0061 7800 ddc2 d894 | ..#.#.....ax..... d2f5 fca4 9e02 4355 5354 5f43 4f44 4500 0500 0000 | ......CUST_CODE..... 7361 6162 0002 6e61 6d65 0005 0000 006a 6f68 6e00 | saab..name.....john. 026c 6173 746e 616d 6500 0500 0000 7769 6c6c 0003 | .lastname.....will.. 6164 6472 6573 7365 7300 8300 0000 0373 7472 6565 | addresses......stree 7464 6574 6169 6c73 006f 0000 0003 6172 6561 0020 | tdetails.o....area. 0000 0003 5374 7265 6574 0013 0000 0001 6c61 6e65 | ....Street......lane 0000 0000 0000 005e 4000 0003 666c 6174 6465 7461 | .......^@...flatdeta 696c 7300 3700 0000 0166 6c61 746e 6f00 0000 0000 | ils.7....flatno..... 0040 6940 0270 6c6f 746e 6f00 0300 0000 3262 0002 | .@i@.plotno.....2b.. 6c61 6e65 0009 0000 0032 6e64 7068 6173 6500 0000 | lane.....2ndphase... 0003 7072 6f76 6973 696f 6e00 3000 0000 0373 7461 | ..provision.0....sta 7465 0024 0000 0003 6b61 001b 0000 0002 6b61 726e | te.$....ka......karn 6174 616b 6100 0700 0000 3537 3031 3032 0000 0000 | ataka.....570102.... 0263 6974 7900 0400 0000 626c 7200 00 | .city.....blr..
BINARY_JSON_FORMAT
が構成されていない場合、取得されたドキュメントは次のようにJSON形式で表現されます。
2021/10/01 01:09:35.000.000 Insert Len 366 RBA 1711 Name: MYTEST.testarr (TDR Index: 1) After Image: Partition x0c G s 0000 2700 0000 2300 7b22 246f 6964 223a 2236 3135 | ..'...#.{"$oid":"615 3663 3233 6633 3466 3061 3965 3661 3735 3536 3930 | 6c23f34f0a9e6a755690 6422 7d01 003f 0100 003b 017b 225f 6964 223a 207b | d"}..?...;.{"_id": { 2224 6f69 6422 3a20 2236 3135 3663 3233 6633 3466 | "$oid": "6156c23f34f 3061 3965 3661 3735 3536 3930 6422 7d2c 2022 4355 | 0a9e6a755690d"}, "CU 5354 5f43 4f44 4522 3a20 2265 6d70 3122 2c20 226e | ST_CODE": "emp1", "n 616d 6522 3a20 226a 6f68 6e22 2c20 226c 6173 746e | ame": "john", "lastn Column 0 (0x0000), Length 39 (0x0027). 0000 2300 7b22 246f 6964 223a 2236 3135 3663 3233 | ..#.{"$oid":"6156c23 6633 3466 3061 3965 3661 3735 3536 3930 6422 7d | f34f0a9e6a755690d"} Column 1 (0x0001), Length 319 (0x013f). 0000 3b01 7b22 5f69 6422 3a20 7b22 246f 6964 223a | ..;.{"_id": {"$oid": 2022 3631 3536 6332 3366 3334 6630 6139 6536 6137 | "6156c23f34f0a9e6a7 3535 3639 3064 227d 2c20 2243 5553 545f 434f 4445 | 55690d"}, "CUST_CODE 223a 2022 656d 7031 222c 2022 6e61 6d65 223a 2022 | ": "emp1", "name": " 6a6f 686e 222c 2022 6c61 7374 6e61 6d65 223a 2022 | john", "lastname": " 7769 6c6c 222c 2022 6164 6472 6573 7365 7322 3a20 | will", "addresses": 7b22 7374 7265 6574 6465 7461 696c 7322 3a20 7b22 | {"streetdetails": {" 6172 6561 223a 207b 2253 7472 6565 7422 3a20 7b22 | area": {"Street": {" 6c61 6e65 223a 2031 3230 2e30 7d7d 2c20 2266 6c61 | lane": 120.0}}, "fla 7464 6574 6169 6c73 223a 207b 2266 6c61 746e 6f22 | tdetails": {"flatno" 3a20 3230 322e 302c 2022 706c 6f74 6e6f 223a 2022 | : 202.0, "plotno": " 3262 222c 2022 6c61 6e65 223a 2022 326e 6470 6861 | 2b", "lane": "2ndpha 7365 227d 7d7d 2c20 2270 726f 7669 7369 6f6e 223a | se"}}}, "provision": 207b 2273 7461 7465 223a 207b 226b 6122 3a20 7b22 | {"state": {"ka": {" 6b61 726e 6174 616b 6122 3a20 2235 3730 3130 3222 | karnataka": "570102" 7d7d 7d2c 2022 6369 7479 223a 2022 626c 7222 7d | }}}, "city": "blr"}
親トピック: MongoDB
8.1.8.11 更新操作の動作
MongoDBキャプチャのExtractは、制限付きコレクションoplog.rs
から変更レコードを読み取ります。更新操作の場合、コレクションには変更したフィールドに関する情報のみが含まれます。したがって、MongoDBキャプチャのExtractでは、MongoDBネイティブの$set
および$unset
ドキュメントとして更新操作時に、変更したフィールドのみが証跡に書き込まれます。
証跡レコードの例:
2022/02/22 01:26:52.000.000 FieldComp Len 243 RBA 1711 Name: lobt.MNGUPSRT (TDR Index: 1) Min. Replicat version: 21.5, Min. GENERIC version: 0.0, Incompatible Replicat: Abend Column 0 (0x0000), Length 55 (0x0037) id. 0000 3300 7b20 225f 6964 2220 3a20 7b20 2224 6f69 | ..3.{ "_id" : { "$oi 6422 203a 2022 3632 3133 3633 3064 3931 3561 6631 | d" : "6213630d915af1 3633 3265 6264 6461 3766 2220 7d20 7d | 632ebdda7f" } } Column 1 (0x0001), Length 180 (0x00b4) payload. 0000 b000 7b22 2476 223a 207b 2224 6e75 6d62 6572 | ....{"$v": {"$number 496e 7422 3a20 2231 227d 2c20 2224 7365 7422 3a20 | Int": "1"}, "$set": 7b22 6c61 7374 4d6f 6469 6669 6564 223a 207b 2224 | {"lastModified": {"$ 6461 7465 223a 207b 2224 6e75 6d62 6572 4c6f 6e67 | date": {"$numberLong 223a 2022 3136 3435 3532 3230 3132 3238 3522 7d7d | ": "1645522012285"}} 2c20 2273 697a 652e 756f 6d22 3a20 2263 6d22 2c20 | , "size.uom": "cm", 2273 7461 7475 7322 3a20 2250 227d 2c20 225f 6964 | "status": "P"}, "_id 223a 207b 2224 6f69 6422 3a20 2236 3231 3336 3330 | ": {"$oid": "6213630 6439 3135 6166 3136 3332 6562 6464 6137 6622 7d7d | d915af1632ebdda7f"}} GGS tokens: TokenID x50 'P' COLPROPERTY Info x01 Length 6 Column: 1, Property: 0x02, Remarks: Partial TokenID x74 't' ORATAG Info x01 Length 0 TokenID x4c 'L' LOGCSN Info x00 Length 20 3037 3036 3734 3633 3232 3633 3838 3131 3935 3533 | 07067463226388119553 TokenID x36 '6' TRANID Info x00 Length 19 3730 3637 3436 3332 3236 3338 3831 3139 3535 33 | 7067463226388119553
ここで、RemarksがPartialであるGGSトークンx50は、このレコードが部分レコードであることを示します。
tranlogoptions FETCHPARTIALJSON
を構成すると、Extractプロセスはデータベース参照を実行し、指定された更新操作の完全なドキュメントをフェッチします。
例
2022/02/22 01:26:59.000.000 FieldComp Len 377 RBA 2564 Name: lobt.MNGUPSRT (TDR Index: 1) Column 0 (0x0000), Length 55 (0x0037) id. 0000 3300 7b20 225f 6964 2220 3a20 7b20 2224 6f69 | ..3.{ "_id" : { "$oi 6422 203a 2022 3632 3133 3633 3064 3931 3561 6631 | d" : "6213630d915af1 3633 3265 6264 6461 3764 2220 7d20 7d | 632ebdda7d" } } Column 1 (0x0001), Length 314 (0x013a) payload. 0000 3601 7b20 225f 6964 2220 3a20 7b20 2224 6f69 | ..6.{ "_id" : { "$oi 6422 203a 2022 3632 3133 3633 3064 3931 3561 6631 | d" : "6213630d915af1 3633 3265 6264 6461 3764 2220 7d2c 2022 6974 656d | 632ebdda7d" }, "item 2220 3a20 226d 6f75 7365 7061 6422 2c20 2271 7479 | " : "mousepad", "qty 2220 3a20 7b20 2224 6e75 6d62 6572 446f 7562 6c65 | " : { "$numberDouble 2220 3a20 2232 352e 3022 207d 2c20 2273 697a 6522 | " : "25.0" }, "size" 203a 207b 2022 6822 203a 207b 2022 246e 756d 6265 | : { "h" : { "$numbe 7244 6f75 626c 6522 203a 2022 3139 2e30 2220 7d2c | rDouble" : "19.0" }, 2022 7722 203a 207b 2022 246e 756d 6265 7244 6f75 | "w" : { "$numberDou 626c 6522 203a 2022 3232 2e38 3530 3030 3030 3030 | ble" : "22.850000000 3030 3030 3031 3432 3122 207d 2c20 2275 6f6d 2220 | 000001421" }, "uom" 3a20 2269 6e22 207d 2c20 2273 7461 7475 7322 203a | : "in" }, "status" : 2022 5022 2c20 226c 6173 744d 6f64 6966 6965 6422 | "P", "lastModified" 203a 207b 2022 2464 6174 6522 203a 207b 2022 246e | : { "$date" : { "$n 756d 6265 724c 6f6e 6722 203a 2022 3136 3435 3532 | umberLong" : "164552 3230 3139 3936 3122 207d 207d 207d | 2019961" } } } GGS tokens: TokenID x46 'F' FETCHEDDATA Info x01 Length 1 6 | Current by key TokenID x4c 'L' LOGCSN Info x00 Length 20 3037 3036 3734 3633 3235 3634 3532 3839 3036 3236 | 07067463256452890626 TokenID x36 '6' TRANID Info x00 Length 19 3730 3637 3436 3332 3536 3435 3238 3930 3632 36 | 7067463256452890626
ここでGGSトークンx46 FETCHEDDATA
は、このレコードが更新操作の完全なイメージであることを示します。
親トピック: MongoDB
8.1.8.12 Oplogサイズの推奨事項
デフォルトでは、MongoDBはoplogサイズとしてディスク領域の5%を使用します。
Oplogは、セカンダリで予想される最長のダウンタイムのすべてのトランザクションを保持するのに十分な長さである必要があります。少なくとも、oplogは最低72時間の操作、または1週間の操作作業を保持できる必要があります。
mongodがoplogを作成する前に、--oplogSize
オプションを使用してそのサイズを指定できます。
初めてレプリカ・セット・メンバーを起動した後、replSetResizeOplog
管理コマンドを使用してoplogサイズを変更します。replSetResizeOplog
を使用すると、mongodプロセスを再起動せずにoplogを動的にサイズ変更できます。
より大きいOplogサイズを必要とするワークロード
レプリカ・セットのワークロードが次のパターンのいずれかに似ていると予測できる場合、デフォルトより大きいoplogを作成できます。逆に、読取りが主で、書込みが少ないアプリケーションの場合、少ないoplogで十分である可能性があります。
次のワークロードでは、より多くのoplogサイズが必要になる場合があります。
一度に複数のドキュメントを更新
oplogは、べき等性を維持するために、複数の更新を個々の操作に変換する必要があります。これにより、対応するデータ・サイズやディスク使用量を増やすことなく、大量のoplog領域を使用できます。
削除は挿入と同じ量のデータに等しい
挿入したデータ量とほぼ同じデータを削除する場合、データベースのディスク使用量が大幅に増えることはありませんが、操作ログのサイズがかなり大きくなる可能性があります。
大量のインプレース更新
ワークロードの大部分が、ドキュメントのサイズを増やさない更新である場合、データベースは多数の操作を記録しますが、ディスク上のデータの量は変更しません。
親トピック: MongoDB
8.1.8.13 トラブルシューティング
- エラー: com.mongodb.MongoQueryException: サーバーlocalhost: 27018で、エラーコード11600とエラー・メッセージ'interrupted at shutdown'で問合せが失敗しました。
MongoDBサーバーは強制終了または閉じられます。MongodインスタンスおよびMongoDBキャプチャを再起動します。
- エラー: java.lang.IllegalStateException: 状態はopen。
アクティブなセッションは、セッションのアイドル・タイムアウト値が超過したため閉じられます。mongodインスタンスの
logicalSessionTimeoutMinutes
パラメータ値を増やし、MongodインスタンスとMongoDBキャプチャを再起動します。 - エラー:スレッド"main"で例外com.mongodb.MongoQueryException: 問合せがエラー・コード136と次のエラー・メッセージで失敗しました: 'CollectionScan died due to position in capped collection being deleted.最終表示レコードID: RecordId(6850088381712443337)' (com.mongodb.internal.operation.QueryHelper.translateCommandException(QueryHelper.java:29)のサーバーlocalhost:27018)
この例外は、mongodへの書込みが高速で、oplogサイズが不十分な場合に発生します。Oplogサイズの推奨事項を参照してください。
- エラー: DBでコマンドを実行する権限がありません
このエラーは、ユーザーの権限不足のために発生します。ユーザーは、指定されたコマンドを実行するために認証されている必要があります。
- エラー: com.mongodb.MongoClientException: セッションは、このクライアントが接続されているMongoDBクラスタではサポートされていません。
レプリカ・セットが使用可能でアクセス可能であることを確認します。別のバージョンからMongoDBインスタンスを移行する場合は、プロパティ
FeatureCompatibilityVersion
を次のように設定します:db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } ){_}
親トピック: MongoDB
8.1.8.14 MongoDBキャプチャ・クライアント依存性
MongoDBデータベースに接続するためのMongoDBキャプチャの依存性とはどのようなものでしょう。
Oracle GoldenGateでは、MongoDBとの5.x以降のMongoDBリアクティブ・ストリームとの統合を使用する必要があります。このドライバは、https://search.maven.org/artifact/org.mongodb/mongodb-driver-reactivestreamからダウンロードできます
8.1.8.14.1 MongoDBキャプチャ・クライアントの依存性: リアクティブ・ストリームJavaドライバ4.4.1
必要な依存クライアント・ライブラリは、bson.jar
、mongodb-driver-core.jar
、mongodb-driver-reactivestreams.jar
およびreactive-streams.jar and reactor-core.jar
です。
gg.classpath
プロパティにMongoDBリアクティブ・ストリームJavaドライバへのパスを含める必要があります。Maven Central RepositoryからJavaドライバを自動的にダウンロードするには、pom.xml
ファイルでMongoDBチェンジ・データ・キャプチャを実行するために必要なサード・パーティ・ライブラリの次のMaven座標を追加します:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-reactivestreams</artifactId> <version>4.4.1</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>bson</artifactId> <version>4.4.1</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-core</artifactId> <version>4.4.1</version> </dependency> <dependency> <groupId>org.reactivestreams</groupId> <artifactId>reactive-streams</artifactId> <version>1.0.3</version> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-core</artifactId> </dependency>
例
Maven Central (https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-reactivestreams)からバージョン4.4.1をダウンロードします。
親トピック: MongoDBキャプチャ・クライアント依存性
8.1.8.14.2 MongoDBリアクティブ・ストリームJavaドライバ4.4.1
gg.classpathプロパティにMongoDBリアクティブ・ストリームJavaドライバへのパスを含める必要があります。Maven Central RepositoryからJavaドライバが自動的にダウンロードされるようにするには、pom.xmlファイルに次の行を追加して、正しい情報で置換します。
<!-- https://search.maven.org/artifact/org.mongodb/mongodb-driver-reactivestreams --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-reactivestreams</artifactId> <version>4.4.1</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>bson</artifactId> <version>4.4.1</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-core</artifactId> <version>4.4.1</version> </dependency> <dependency> <groupId>org.reactivestreams</groupId> <artifactId>reactive-streams</artifactId> <version>1.0.3</version> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-core</artifactId> </dependency>
親トピック: MongoDBキャプチャ・クライアント依存性