9.2.27 MongoDB

MongoDBハンドラの使用方法を学習します。このハンドラにより、Oracle GoldenGateからターゲットのMongoDBおよびAutonomous JSONデータベース(AJDおよびATP)にトランザクション・データを複製できます。

9.2.27.1 概要

Mongodbハンドラは、MongoDB Wire Protocolを使用して、RDMSおよびMongodbやCassandraなどのドキュメント・ベースのデータベースを次のターゲット・データベースに複製するために使用できます

9.2.27.2 MongoDB Wire Protocol

MongoDB Wire Protocolは、単純なソケット・ベースのリクエスト・レスポンス・スタイル・プロトコルです。クライアントは、通常のTCP/IPソケットを介してデータベース・サーバーと通信します。https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/を参照してください。

9.2.27.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のインストールを参照してください。

9.2.27.4 詳細な機能

MongoDBハンドラは、ソース証跡ファイルから操作を取得し、対応するドキュメントをターゲットのMongoDBまたはAutonomousデータベース(AJDおよびATP)に作成します。

MongoDBでは、レコードはバイナリJSON (BSON)ドキュメントで、フィールドと値のペアで構成されるデータ構造です。BSONデータ構造は、JSONドキュメントのバイナリ形式です。MongoDBドキュメントはJSONオブジェクトに似ています。フィールドの値には、他のドキュメント、配列、およびドキュメントの配列を含めることができます。

コレクションはMongoDBまたはAJD/ATPドキュメントのグループであり、RDBMSの表に相当します。MongoDBやAJD/ATPのデータベースでは、コレクションがドキュメントの集合を保持します。コレクションはスキーマを強制しません。コレクション内のMongoDBまたはAJD/ATPドキュメントは、異なるフィールドを持つことができます。

9.2.27.4.1 ドキュメント・キー列

MongoDBまたはAJD/ATPデータベースでは、すべてのドキュメント(行)に_idという名前の列が必要で、その値はコレクション(表)内で一意である必要があります。これは、RDBMS表の主キーに似ています。挿入時に、ドキュメントに最上位の_id列が含まれていない場合、MongoDBドライバによってこの列が追加されます。

MongoDBハンドラは、証跡レコードの主キー列値に基づいて、すべてのドキュメントのカスタム_idフィールド値を構築します。このカスタム_id は、: (コロン)セパレータで連結されたすべてのキー列値を使用して構築されます。たとえば:

KeyColValue1:KeyColValue2:KeyColValue3

MongoDBハンドラは、このカスタム_id値に基づいて、一意性を強制します。つまり、証跡のすべてのレコードが、主キー列値に基づいて一意である必要があります。同じ表に一意でないレコードが存在すると、MongoDBハンドラ障害が発生し、Replicatは重複キー・エラーで異常終了します。

_idフィールドの動作は次のとおりです。

  • デフォルトでは、MongoDBは、コレクションの作成時に列の一意の索引を作成します。

  • これは常にドキュメントの最初の列になります。

  • 配列を除く任意のBSONデータ型の値を使用できます。

9.2.27.4.2 主キーの更新操作

MongoDBまたはAJD/ATPデータベースでは、_id列の変更は許可されていません。つまり、証跡内の主キーの更新操作レコードには、特別な処理が必要です。MongoDBハンドラは、主キーの更新操作をDELETE (古いキー)とINSERT (新しいキー)の組合せに変換します。INSERTを実行するには、証跡内の更新操作の完全な操作前イメージが推奨されます。Oracle GoldenGateのGETUPDATEBEFORESおよびNOCOMPRESSUPDATESパラメータを有効にすることで、証跡を生成して更新操作の完全な操作前イメージを移入できます。Oracle GoldenGateパラメータおよび機能リファレンスを参照してください。

9.2.27.4.3 MongoDB証跡のデータ型

MongoDBハンドラは、次に示すBSONデータ型への配信をサポートします。

  • 32ビットの整数

  • 64ビットの整数

  • 倍精度

  • 日付

  • 文字列

  • バイナリ・データ

9.2.27.5 MongoDBハンドラの設定および実行

次の各トピックでは、MongoDBハンドラのコンポーネントの構成およびこのハンドラの実行の手順について説明します。

9.2.27.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例外が発生します。

9.2.27.5.2 MongoDBハンドラ構成

MongoDBハンドラの操作は、プロパティ・ファイルを使用して構成します。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)

MongoDBハンドラの選択を有効にするには、まずgg.handler.name.type=mongodbを指定してハンドラ・タイプを構成してから、次に示す他のMongoDBプロパティを構成する必要があります。

表9-34 MongoDBハンドラの構成プロパティ

プロパティ 必須/オプション 有効な値 デフォルト 説明

gg.handler.name.type

必須

mongodb

なし

Replicatで使用するMongoDBハンドラを選択します。

gg.handler.name.bulkWrite

オプション

true | false

true

trueに設定すると、コミット・トランザクション・イベントを受信するまで、ハンドラは操作をキャッシュします。トランザクション・イベントのコミット時に、キャッシュされたすべての操作がターゲットのMongoDB、AJDおよびATPデータベースに書き出され、スループットが向上します。

falseに設定すると、ハンドラ内にキャッシュはなく、操作はすぐにMongoDB、AJDおよびATPデータベースに書き込まれます。

gg.handler.name.WriteConcern

オプション

{"w": "value" , "wtimeout": "number" }

なし

MongoDBハンドラで実行されるすべての操作に必要な書込み確認を設定します。

プロパティ値はJSON形式で、wおよびwtimeoutのキーのみを受け入れることができます。https://docs.name.com/manual/reference/write-concern/を参照してください。

gg.handler.name.clientURI

オプション

有効なMongoDBクライアントURI

なし

MongoDBクライアントURIを設定します。クライアントURIは、認証やWriteConcernなど、他のMongoDB接続プロパティの設定にも使用できます。

gg.handler.name.CheckMaxRowSizeLimit

オプション

true | false

false

trueに設定すると、ハンドラは、挿入または変更されるBSONドキュメントのサイズが、MongoDBデータベースで定義された制限内であることを確認します。サイズの計算は、RawBsonDocument,を生成するデフォルト・コーデックの使用を伴い、これによりMongoDBハンドラのスループットが少し低下します。

ドキュメントのサイズがMongoDBの制限を超えると、例外が発生し、Replicatが異常終了します。

gg.handler.name.upsert

オプション

true | false

false

trueに設定します。UPDATE操作の実行時に問合せフィルタに一致するものがない場合は、新しいMongoドキュメントが挿入されます。

gg.handler.name.enableDecimal128

オプション

true | false

true

MongoDBバージョン3.4には、Decimal128という128ビットの10進データ型のサポートが追加されました。このデータ型は、64ビットのLongまたはDoubleに適合しない整数データ型と10進データ型の両方をOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)でサポートするために必要でした。このプロパティをtrueに設定すると、これを必要とするソース・データ型のDouble128データ型へのマッピングが有効になります。falseに設定すると、これらのソース・データ型を64ビットのDoubleとして処理します。

gg.handler.name.enableTransactions

オプション

true | false

false

MongoDB 4.0以上でトランザクション処理を有効にする場合は、trueに設定します。

ノート:

MongoDBは、MongoDBバージョン4.0でトランザクションのサポートが追加されました。また、MongoDBクライアント・ドライバの最低限のバージョンは3.10.1です。

9.2.27.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つのリクエストでデータベースに書き込まれます。

9.2.27.5.4 書込み確認の使用

書込み確認は、スタンドアロンMongoDB、レプリカ・セットおよびシャード・クラスタへの書込み操作に関してMongoDBからリクエストされた確認のレベルを説明します。シャード・クラスタを使用して、Mongoインスタンスは書込み確認をシャードに渡します。https://docs.mongodb.com/manual/reference/write-concern/を参照してください。

次の構成を使用します。

w: value
wtimeout: number

9.2.27.5.5 3部構成の表名の使用

Oracle GoldenGate証跡では、Catalog.Schema.Tableなど、3部構成の表名をサポートするソースのデータが存在する場合があります。MongoDBは、DBName.Collectionなど、2部構成の名前のみをサポートします。ソースの3部構成の名前からMongoDBの2部構成の名前へのマッピングをサポートするには、ソースのCatalogSchemaをアンダースコア区切り文字で連結して、MongoのDBNameを構成します。

たとえば、Catalog.Schema.Tablecatalog1_schema1.table1になります。

9.2.27.5.6 Undo処理の使用

MongoDB Handlerハンドラは、軽量のundoエンジンを使用して、一括書込みエラーから回復できます。このエンジンは、通常のRDBMSのundoエンジンとは機能が異なり、どちらかといえばエラー・リカバリに役立つよう最善を尽くします。エラー・リカバリが正常に動作するのは、MongoDBデータベースがBulkWriteExceptionによって障害の場所に関する情報を提供する主な違反や他の一括書込みエラーがある場合です。

表9-35では、この機能を最大限に利用するための要件を示します。

表9-35 Undo処理の要件

元に戻す処理 証跡に完全な操作前イメージが必要か。

INSERT

いいえ

DELETE

あり

UPDATE

いいえ(SET句のフィールドの操作前イメージ。)

undo操作中にエラーが発生すると、MongoDBコレクションを一貫性のある状態にすることができない可能性があります。この場合、データを手動で調整する必要があります。

9.2.27.6 セキュリティと認証

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
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ドキュメントを参照してください

9.2.27.6.1 SSL構成の設定

MongoDBインスタンスとOracle GoldenGate for Distributed Applications and Analytics (GG for DAA)の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

9.2.27.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つあります。

データ・ポンプの作成

Replicatの前にデータ・ポンプを作成して、名前を小文字に変換できます。次に、ポンプからの出力を使用するようにMongoDB Replicatを構成します。

extract pmp 
exttrail ./dirdat/le 
map RAMOWER.EKKN, target "ram"."ekkn"; 
複製時の変換

このパラメータをMongoDBプロパティ・ファイルに追加することにより、MongoDB表に複製する場合に表の列名を小文字に変換できます。

gg.schema.normalize=lowercase

9.2.27.8 MongoDBからAJD/ATPへの移行

9.2.27.8.1 概要

トランザクション処理用のOracle Autonomous JSON Database (AJD)およびAutonomous Databaseも、ワイヤ・プロトコルを使用して接続します。ワイヤ・プロトコルには同じMongoDB CRUD APIがあります。

9.2.27.8.2 AJD/ATPに書き込むためのMongoDBハンドラの構成

基本構成は、この章で説明するオプションのプロパティを含めて同じままです。

ハンドラは、レプリケーションを実行するためのすべての操作をターゲットに依存しない方法で実行するために、mongodbと同じプロトコル(mongodb wire protocol)およびAutonomousデータベース用の同じドライバjarを使用します。プロパティは、サポートされている任意のターゲットにも使用できます。

Javaアダプタ・プロパティ・ファイルからのAJD/ATP用のMongoDBハンドラのサンプル構成を次に示します。
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

9.2.27.8.3 移行のステップ

MongoDBからAJDに移行するには、最初に初期ロードを実行する必要があります。初期ロードは、挿入操作のみで構成されます。初期ロードの実行後、ソース・データベースとターゲット・データベースの同期を維持するCDCを起動します。

  1. CDC Extractを開始し、証跡を生成します。これらの証跡ファイルを消費するために、Replicatを起動しないでください。
  2. 初期ロードExtractを起動し、初期ロードが完了するまで待機します。
  3. ステップ2で生成された初期ロード証跡を消費する新しいReplicatを作成します。完了を待ってから、Replicatを停止します。
  4. CDC証跡を消費する新しいレプリケートを作成します。HANDLECOLLISIONSを使用するようにこのReplicatを構成してから、Replicatを起動します。
  5. CDC Replicat (ステップ4)がすべての証跡を消費し、replicat lagおよびreplicat RBAをチェックして、CDC Replicatが追い付いたことを確認します。この時点で、ソース・データベースとターゲット・データベースが同期しています。
  6. CDC Replicatを停止し、HANDLECOLLISIONSパラメータを削除してから、CDC Replicatを再起動します。

9.2.27.8.4 ベスト・プラクティス

mongoDBからOracle Autonomous Database (AJD/ATP)に移行する場合、ベスト・プラクティスは次のとおりです。
  1. CDCを実行する前に、挿入操作を使用して初期データをロードする初期ロードを実行してください。
  2. スループットを向上させるために、mongoDBハンドラの実行にバルク・モードを使用します。
  3. 移行中にハンドル衝突を有効にして、Replicatが衝突エラーを自動的に処理できるようにします。
  4. 欠落している更新を挿入するために、INSERTMISSINGUPDATESプロパティを.prmファイルに追加してください。

9.2.27.9 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 JSONデータベースに接続するためにそれを使用します。

この項の内容は次のとおりです。

9.2.27.9.1 Oracle Database 23c Freeをインストールします

Oracle Database Free 23cをダウンロードします:
  1. Oracleの公式ダウンロード・ページOracle Database Free 23c (https://www.oracle.com/in/database/free/get-started/)に移動します。
  2. Oracle Linux 8 (OL8)マシン用のRPMパッケージoracle-database-free-23c-1.0-1.el8.x86_64.rpmをダウンロードします。
  3. RPMパッケージをインストールします:
    1. 次のコマンドを実行して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
  4. Oracle Databaseを構成します: インストール後、sudo /etc/init.d/oracle-free-23ai configureを使用してデータベースを構成します。SYSSYSTEMおよびPDBADMINユーザーのパスワードの入力を求められます。画面上の指示に従って構成を完了します。

9.2.27.9.2 Oracleデータベースへの接続

Oracle Database Free 23cをダウンロードします:
  1. 環境変数を設定します: export ORACLE_HOME=/opt/oracle/product/23ai/dbhomeFree/
  2. インストールを検証します: Oracle Databaseに接続して、インストールが成功したことを確認します: /opt/oracle/product/23ai/dbhomeFree/bin/sqlplus sys/Admin01@localhost:1521/FREE as sysdba

9.2.27.9.3 新規プラガブル・データベース(PDB)の作成

  1. SYSDBAとしてSQL*Plusにログインします: /opt/oracle/product/23ai/dbhomeFree/bin/sqlplus sys/Admin01@localhost:1521/FREE as sysdba
  2. 現在のコンテナおよび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
  3. 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/を事前に作成します
  4. その新しい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
  5. コンテナをPDBORDSに設定します。
    ALTER SESSION SET CONTAINER = pdbords;
    SHOW con_name;

9.2.27.9.4 ORDSのユーザーの作成

  1. ORDSユーザーを作成します:
    CREATE USER ordsuser IDENTIFIED BY Admin01;
    GRANT CONNECT, RESOURCE, DBA TO ordsuser;

    このユーザーは、ORDSを介したMongoDB統合に使用されます。

  2. 新規ユーザーとして接続:
    /opt/oracle/product/23ai/dbhomeFree/bin/sqlplus ordsuser/Admin01@localhost:1521/PDBORDS

9.2.27.9.5 SSL証明書の生成

  1. 次のように証明書用のディレクトリを作成します:
    mkdir certs
    cd certs/
  2. CAの秘密キーを生成します。次のコマンドにより、認証局(CA)の秘密キーが生成されます。ここで使用したパスワードを覚えておいてください。それは、他の証明書に署名するために必要になります。
    openssl genrsa -aes256 -out ca-key.pem 4096
  3. CAのパブリック証明書を作成します

    認証局の役割を果たす、CAの自己署名付きパブリック証明書を生成します。

    openssl req -new -x509 -sha256 -days 365 -key ca-key.pem -out ca.pem
  4. CA証明書の詳細を表示します。次のコマンドを使用してCA証明書の詳細を確認します:
    openssl x509 -in ca.pem -text
  5. クライアントの秘密キーを生成します。次のようにクライアントの秘密キーを作成します:
    openssl genrsa -out client-key.pem 4096
  6. 証明書署名リクエスト(CSR)を作成します。クライアント証明書のCSRを生成します。必ず、共通名(CN)が、その証明書を使用するホストの名前と一致するようにします。
    openssl req -new -sha256 -subj "/CN=oraclelinux8" -key client-key.pem -out client.csr
  7. 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
  8. 次のように証明書に署名します:
    openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem -out client.pem -extfile extfile.cnf -CAcreateserial
  9. クライアント証明書を検証します。

    次のコマンドを使用してクライアント証明書を検証します:

    openssl verify -CAfile ca.pem -verbose client.pem
  10. 証明書を結合して完全チェーンにします。

    次のように、クライアント証明書とCA証明書を組み合せて完全チェーン証明書を作成します:

    cat client.pem > fullchain.pem
    cat ca.pem >> fullchain.pem
  11. 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

9.2.27.9.6 Oracle REST Data Services (ORDS)のインストールおよび設定

  1. ORDSをダウンロードします
    1. オラクルのWebサイト(ORDSダウンロード)からファイルords-24.3.0.262.0924.zipをダウンロードします
    2. ダウンロードしたファイルを解凍します。
    mkdir certs
    cd certs/
  2. ORDSを設定します:
    1. 環境変数を設定します。
      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が設定されている場合は、その設定を解除します。
    2. 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
    3. 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;
    4. 証明書と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
  3. ORDSを起動します
    1. 次のコマンドを実行して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

9.2.27.9.7 MongoDBハンドラの構成および設定

  1. 生成されたCA証明書をJavaキーストアに追加します
    1. 生成された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を使用します。
  2. MongoDB接続URI: MongoDBに安全に接続するには、次の接続URIを使用します。tlsCAFiletlsCertificateKeyFileのパスが正しく、ご使用の環境と一致していることを確認してください。環境変数を設定します。
    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
  3. 表領域ORDSを作成します
    1. 次のようにSQL Plusに接続します:
      /opt/oracle/product/23ai/dbhomeFree/bin/sqlplus ordsuser/Admin01@localhost:1521/PDBORDS
    2. 表領域を作成します
      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ディレクトリを事前に作成します。
    3. 次のようにデフォルトの表領域を設定します:
      ALTER USER ordsuser DEFAULT TABLESPACE JCTTEST;
  4. レプリケーションを構成します
    1. MongoDBハンドラを構成するには、次のようにReplicat用のprmファイルを作成します:
      REPLICAT JCT
      MAP *.*, TARGET ordsuser.*; // here target schema is the ords user that we created.
    2. 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/*
  5. 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表を手動で作成し、ハンドラ構成においてそれをマップすることもできます。
    JSONコレクション表を作成するための構文:
    CREATE JSON COLLECTION TABLE JSONCT;

9.2.27.9.8 エラー処理

  1. 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スキーマのデフォルト表領域として設定されます。

9.2.27.10 MongoDBハンドラ・クライアント依存性

MongoDBデータベースに接続するためのMongoDBハンドラの依存性とはどのようなものでしょう。

Oracle GoldenGateでは、MongoDBとの統合にバージョン4.6.0 MongoDBのリアクティブ・ストリームが必要です。このドライバは、https://search.maven.org/artifact/org.mongodb/mongodb-driver-reactivestreamsからダウンロードできます

ノート:

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.27.10.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)から最新バージョンをダウンロードします。

9.2.27.10.2 MongoDB Java Driver 3.12.8

gg.classpathプロパティにMongoDB Java Driverへのパスを含める必要があります。Maven Central RepositoryからJavaドライバが自動的にダウンロードされるようにするには、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>