8.1.8 MongoDB

MongoDB用のOracle GoldenGateキャプチャ(Extract)は、MongoDBデータベースから変更を取得するために使用されます。

この章では、MongoDB用のOracle GoldenGateキャプチャを使用する方法について説明します。

8.1.8.1 概要

MongoDBは、大量のデータ・ストレージに使用されるドキュメント指向のNoSQLデータベースであり、エンタープライズ・アプリケーションで大量のデータセットのデータ・モデリングおよびデータ管理とともに、高パフォーマンスおよびスケーラビリティを提供します。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

8.1.8.3 MongoDBデータベースの操作

サポートされている操作

  • INSERT
  • UPDATE
  • DELETE

サポートされていない操作

次のMongoDBソースDDL操作はサポートされていません。
  • CREATEコレクション
  • RENAMEコレクション
  • DROPコレクション
これらのサポートされていない操作を検出すると、これらの操作をABENDまたはスキップして次の操作の処理を続行するようにExtractを構成できます。

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で次のコマンドを実行して、初期ロード用のExtractを追加します。
adminclient> ADD EXTRACT load, SOURCEISTABLE 
adminclient> START EXTRACT load

8.1.8.5 チェンジ・データ・キャプチャのExtractの使用

Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)インストール・ディレクトリ(AdapterExamples/big-data/mongodbcapture)にあるサンプル.prmファイルを確認してください。

MongoDBのExtract証跡を追加する場合は、EXTTRAILを使用してローカル証跡ファイルを作成する必要があります。

MongoDB抽出証跡ファイルは、RMTTRAILオプションを使用して構成しないでください。
adminclient> ADD EXTRACT groupname, TRANLOG
adminclient> ADD EXTTRAIL trailprefix, EXTRACT groupname

:

adminclient> ADD EXTRACT mongo, TRANLOG
adminclient> ADD EXTTRAIL ./dirdat/z1, EXTRACT mongo

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" 

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構成の設定」を参照してください。
アクセス制御を指定するには、useridを使用します。
mongodb://<user>@<hostname1>:<port>,<hostname2>:<port>,<hostname3>:<port>/?replicaSet=<replicatName>
TLS/SSLを指定するには:
"+srv"の接続文字列接頭辞をmongodb+srvとして使用すると、tlsオプションはtrueに自動的に設定されます。
 mongodb+srv://server.example.com/ 
TLSを無効にするには、問合せ文字列にtls=falseを追加します。
mongodb:// >@<hostname1>:<port>/?replicaSet=<replicatName>&tls=false

認証を指定するには:

authSource:
mongodb://<user>@<hostname1>:<port>,<hostname2>:<port>,<hostname3>:<port>/?replicaSet=<replicatName>&authSource=admin
authMechanism:
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を構成するには、次の手順を実行します:

認証局(CA)の作成
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)
mongod用のプライバシ強化メール(PEM)ファイルの作成
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双方向レプリケーション

ノート:

双方向レプリケーションをサポートするには、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プロセスが実行される前に使用可能にする必要があります。

8.1.8.8.2 MongoDB双方向レプリケーションの有効化

MongoDB双方向レプリケーションを有効にするには、Replicatプロパティでgg.handler.mongodb.bidirectionaltrue (gg.handler.mongodb.bidirectional=true)に設定します。

gg.handler.mongodb.bidirectionalプロパティがtrueに設定されている場合、ReplicatプロセスはfilterAttributeとfilterAttributeValueのキー値ペアをドキュメントに追加します。ループ検出にはfilterAttributefilterAttributeValueが必要です。filterAttributeValueに、最大256文字で、ASCII文字[A-Za-z]および数字[0-9]のみが含まれていることを確認してください。ドキュメントにfilterAttributefilterAttributeValueのキー/値ペアがある場合は、そのドキュメントがOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)のReplicatプロセスによって処理されることを示しています。

gg.handler.mongodb.bidirectionalプロパティがtrueに設定されている場合、Replicatはデフォルト値のfilterAttributeoggApplyとして、デフォルト値のfilterAttributeValueが明示的に指定されていない場合はこれをtrueとして取り込みます。デフォルト設定でMongoDB双方向レプリケーションを有効にできます。たとえば、gg.handler.mongodb.bidirectional=trueのようにします

{ "_id" : ObjectId("65544aa60b0a066d021ba508"), "CUST_CODE" : "test65", "name" : "hello
        world", "cost" : 3000, "oggApply":"true"} 
filterAttributefilterAttributeValueのキー値ペアを定義することもできます。たとえば:
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"}

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プロセスが異常終了します。

8.1.8.8.4 トラブルシューティング

  1. 双方向レプリケーションでは、削除ドキュメントでビフォア・イメージを使用できない場合は、プロセスを中止してエラーを出力します。

    サンプル・エラー

    MONGODB-000XX No before image is available for collection [ <collection name> ] with the document [ <document> ].

  2. 使用するMongoDBバージョンが6未満の場合、MONGODB-000XX MongoDB version should be 6 or greater to support bi-directional replicationが表示されます。

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キャプチャまたはデータベースの問合せのソース・データベース。有効な値はMONGODBです。

JVMOPTIONS [CLASSPATH <classpath> | BOOTOPTIONS <options>]

オプション

Extractパラメータ・ファイル

なし CLASSPATH: Java仮想マシンのクラスパス。アスタリスク(*)ワイルドカードを含めて、任意のディレクトリ内のすべてのJARファイルに一致させることができます。複数のパスはコロン(:)文字で区切る必要があります。BOOTOPTIONS: Java仮想マシンのブート・オプション。複数のオプションは空白文字で区切られます。

JVMBOOTOPTIONS jvm_options

オプション

GLOBALSファイル

ノート:

GG for DAAリリース23.4.0.0.0以降では、このパラメータは非推奨になります。

なし

Java仮想マシンのブート・オプション。複数のオプションは空白文字で区切られます。

JVMCLASSPATH <classpath>

必須

GLOBALSファイル

ノート:

GG for DAAリリース23..0,0.0.0以降では、このパラメータは非推奨になります。
なし Java仮想マシンのクラスパス。アスタリスク(*)ワイルドカードを含めて、任意のディレクトリ内のすべてのJARファイルに一致させることができます。複数のパスはコロン(:)文字で区切る必要があります。例:
JVMCLASSPATH
ggjava/ggjava.jar:/path/to/mongodb_client_dependencyjars/*
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)ファイル なし

CREATEコレクション、RENAMEコレクションおよびDROPコレクションを検出すると、Extractプロセスはこれらの操作をスキップし、次の操作の処理を続行します。

ABEND_ON_DROP_DATABASE オプション CDC Extractパラメータ(.prm)ファイル なし これは、MongoDBキャプチャExtractのデフォルト動作です。データベースの削除操作を検出すると、Extractプロセスは異常終了します。
NO_ABEND_ON_DROP_DATABASE オプション

CDC Extractパラメータ(.prm)ファイル。

なし

データベースの削除操作を検出すると、Extractプロセスはこれらの操作をスキップし、次の処理を続行します。

BINARY_JSON_FORMAT オプション prm なし

BINARY_JSON_FORMATを構成すると、MongoDBキャプチャ・プロセスはBSON形式でドキュメントを表現し、BINARY_JSON_FORMATを使用するとパフォーマンス効率が向上します。BINARY_JSON_FORMATが指定されない場合、ドキュメントは人間が読みやすい拡張JSON形式で表現され、BINARY_JSON_FORMATを使用する場合と比較してパフォーマンス効率が低下します。

BINARY_JSON_FORMATを使用する場合 - 生成された証跡ファイルでは、列のメタデータはdata_typeが64、sub_data_typeが4、RemarksがJSONになります。

BINARY_JSON_FORMATを指定しない場合 - 生成された証跡ファイルでは、列のメタデータはdata_typeが64、sub_data_typeが0、RemarksがJSONになります。

詳細は、表メタデータを参照してください。
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

8.1.8.10 証跡ファイルの列

各証跡レコードには次の2つの列があります。
  • 列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"}  
 

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は、このレコードが更新操作の完全なイメージであることを示します。

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領域を使用できます。

削除は挿入と同じ量のデータに等しい

挿入したデータ量とほぼ同じデータを削除する場合、データベースのディスク使用量が大幅に増えることはありませんが、操作ログのサイズがかなり大きくなる可能性があります。

大量のインプレース更新

ワークロードの大部分が、ドキュメントのサイズを増やさない更新である場合、データベースは多数の操作を記録しますが、ディスク上のデータの量は変更しません。

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" } ){_}

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.jarmongodb-driver-core.jarmongodb-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をダウンロードします。

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>