9.2.27 MongoDB
MongoDBハンドラの使用方法を学習します。このハンドラにより、Oracle GoldenGateからターゲットのMongoDBおよびAutonomous JSONデータベース(AJDおよびATP)にトランザクション・データを複製できます。
- 概要
- MongoDB Wire Protocol
- サポートされているターゲット・タイプ
- 詳細な機能
- MongoDBハンドラの設定および実行
- セキュリティと認証
- サンプル構成の確認
- MongoDBからAJD/ATPへの移行
- Oracle JSONコレクション表(JCT)への配信
- MongoDBハンドラ・クライアント依存性
MongoDBデータベースに接続するためのMongoDBハンドラの依存性とはどのようなものでしょう。
親トピック: ターゲット
9.2.27.1 概要
Mongodbハンドラは、MongoDB Wire Protocolを使用して、RDMSおよびMongodbやCassandraなどのドキュメント・ベースのデータベースを次のターゲット・データベースに複製するために使用できます
親トピック: MongoDB
9.2.27.2 MongoDB Wire Protocol
MongoDB Wire Protocolは、単純なソケット・ベースのリクエスト・レスポンス・スタイル・プロトコルです。クライアントは、通常のTCP/IPソケットを介してデータベース・サーバーと通信します。https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/を参照してください。
親トピック: MongoDB
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のインストールを参照してください。
親トピック: MongoDB
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ドキュメントは、異なるフィールドを持つことができます。
親トピック: MongoDB
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 主キーの更新操作
_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
例外が発生します。
親トピック: MongoDBハンドラの設定および実行
9.2.27.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.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つのリクエストでデータベースに書き込まれます。
親トピック: MongoDBハンドラの設定および実行
9.2.27.5.4 書込み確認の使用
書込み確認は、スタンドアロンMongoDB、レプリカ・セットおよびシャード・クラスタへの書込み操作に関してMongoDBからリクエストされた確認のレベルを説明します。シャード・クラスタを使用して、Mongoインスタンスは書込み確認をシャードに渡します。https://docs.mongodb.com/manual/reference/write-concern/を参照してください。
次の構成を使用します。
w: value
wtimeout: number
親トピック: MongoDBハンドラの設定および実行
9.2.27.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.27.5.6 Undo処理の使用
MongoDB Handlerハンドラは、軽量のundoエンジンを使用して、一括書込みエラーから回復できます。このエンジンは、通常のRDBMSのundoエンジンとは機能が異なり、どちらかといえばエラー・リカバリに役立つよう最善を尽くします。エラー・リカバリが正常に動作するのは、MongoDBデータベースがBulkWriteException
によって障害の場所に関する情報を提供する主な違反や他の一括書込みエラーがある場合です。
表9-35では、この機能を最大限に利用するための要件を示します。
表9-35 Undo処理の要件
元に戻す処理 | 証跡に完全な操作前イメージが必要か。 |
---|---|
|
いいえ |
|
あり |
|
いいえ( |
undo操作中にエラーが発生すると、MongoDBコレクションを一貫性のある状態にすることができない可能性があります。この場合、データを手動で調整する必要があります。
親トピック: 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構成の設定」を参照してください。 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ドキュメントを参照してください9.2.27.6.1 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.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
親トピック: セキュリティと認証
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つあります。
親トピック: MongoDB
9.2.27.8 MongoDBからAJD/ATPへの移行
9.2.27.8.1 概要
トランザクション処理用のOracle Autonomous JSON Database (AJD)およびAutonomous Databaseも、ワイヤ・プロトコルを使用して接続します。ワイヤ・プロトコルには同じMongoDB CRUD APIがあります。
親トピック: MongoDBからAJD/ATPへの移行
9.2.27.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.27.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.27.8.4 ベスト・プラクティス
- CDCを実行する前に、挿入操作を使用して初期データをロードする初期ロードを実行してください。
- スループットを向上させるために、mongoDBハンドラの実行にバルク・モードを使用します。
- 移行中にハンドル衝突を有効にして、Replicatが衝突エラーを自動的に処理できるようにします。
- 欠落している更新を挿入するために、
INSERTMISSINGUPDATES
プロパティを.prm
ファイルに追加してください。
親トピック: MongoDBからAJD/ATPへの移行
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データベースに接続するためにそれを使用します。
この項の内容は次のとおりです。
- Oracle Database 23c Freeをインストールします
- Oracleデータベースへの接続
- 新規プラガブル・データベース(PDB)の作成
- ORDSのユーザーの作成
- SSL証明書の生成
- Oracle REST Data Services (ORDS)のインストールおよび設定
- MongoDBハンドラの構成および設定
- エラー処理
親トピック: MongoDB
9.2.27.9.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.27.9.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.27.9.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.27.9.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.27.9.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.27.9.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.27.9.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.27.9.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.27.10 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.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)から最新バージョンをダウンロードします。
親トピック: MongoDBハンドラ・クライアント依存性
9.2.27.10.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ハンドラ・クライアント依存性