18 適用のベスト・プラクティス
18.1 宛先データベース構成のベスト・プラクティス
Oracle Streamsレプリケーション環境では、宛先データベースは、適用プロセスが変更を適用するデータベースです。この項には、次の項目が含まれます。
18.1.1 適用ユーザーへの必要な権限の付与
適用ユーザーは、適用プロセスが次のアクションを実行するセキュリティ・ドメイン内のユーザーです。
-
ルール・セットを満たすメッセージのデキュー
-
適用プロセスのルール用に構成されたカスタム・ルールベースの変換の実行
-
メッセージのデータベース・オブジェクトへの直接適用
-
適用プロセス用に構成された適用ハンドラの実行
適用プロセスを作成すると、適用プロセスの適用ユーザーが構成され、適用プロセスを変更すると、適用ユーザーを変更できます。適用ユーザーに次の権限を付与します。
-
適用プロセスがデータ操作言語(DML)の変更を表に適用する場合、表に対する
INSERT
、UPDATE
およびDELETE
権限を適用ユーザーに付与します。 -
適用プロセスがデータ定義言語(DDL)の変更を表に適用する場合、
CREATE
TABLE
またはCREATE
ANY
TABLE
、CREAT
INDEX
またはCREATE
ANY
INDEX
、CREATE
PROCEDURE
またはCREATE
ANY
PROCEDURE
を適用ユーザーに付与します。 -
適用プロセスによって使用されるルール・セットに対して
EXECUTE
権限を付与します。 -
適用プロセスのポジティブ・ルール・セット内のルールに指定されたすべてのカスタム・ルールベースの変換ファンクションに対して
EXECUTE
権限を付与します。 -
適用プロセスによって使用されるすべての適用ハンドラに対して
EXECUTE
権限を付与します。 -
適用プロセスのキューからメッセージをデキューする権限を付与します。
これらの権限は適用ユーザーに直接付与するか、またはロールによって付与できます。
また、適用ユーザーには、適用プロセスで実行されるサブプログラムで起動されるすべてのパッケージ(Oracle提供パッケージを含む)に対するEXECUTE
権限を付与する必要があります。これらの権限は、適用ユーザーに直接付与する必要があります。ロールを通して付与することはできません。
関連項目:
-
権限の付与の概要は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
-
ルール・セットに対する権限の付与の詳細は、『Oracle Streams概要および管理』を参照してください。
18.1.2 インスタンス化SCNの値の設定
インスタンス化SCNの値は、適用プロセスが変更を適用する各データベース・オブジェクトに対して設定する必要があります。すべてのそのようなオブジェクトに対してインスタンス化SCNが設定されていることを確認し、未設定のすべての必要なインスタンス化SCNの値を設定します。
インスタンス化SCNの値は、エクスポート/インポート、Recovery Manager(RMAN)、手動などの様々な方法で設定できます。インスタンス化SCNの値を手動で設定するには、DBMS_APPLY_ADM
パッケージの次のいずれかのプロシージャを使用します。
たとえば、スキーマ内の各表に対して手動でインスタンス化SCNを設定するには、recursive
パラメータをTRUE
に設定して、SET_SCHEMA_INSTANTIATION_SCN
プロシージャを実行します。適用プロセスがデータ定義言語(DDL)変更を適用する場合、SET_SCHEMA_INSTANTIATION_SCN
またはSET_GLOBAL_INSTANTIATION_SCN
プロシージャのいずれかを使用して表レベルより高いレベルでインスタンス化SCNの値を設定します。
関連項目:
インスタンス化およびインスタンス化SCNの値の設定の詳細は、「インスタンス化とOracle Streamsレプリケーション」を参照してください
18.1.3 競合解消の構成
更新が複数のデータベースで同じ共有データベース・オブジェクトに対して実行される場合、そのオブジェクトの競合解消を構成されていることを確認します。LOB列を含む表の競合解消を簡素化するには、表のエラーを処理するエラー・ハンドラを作成します。DBMS_APPLY_ADM.SET_DML_HANDLER
プロシージャを使用してエラー・ハンドラを登録するときに、assemble_lobs
パラメータをTRUE
に設定していることを確認します。
宛先データベースで競合解消を構成する場合、ソース・データベースで追加のサプリメンタル・ロギングが必要です。特に、ソース・データベースの複数の列が宛先データベースの列リストに使用されている場合、適用時に競合解消用の列リストで指定された列は、条件付きでログに記録する必要があります。
18.2 適用プロセスの構成のベスト・プラクティス
ここでは、適用プロセスを構成するベスト・プラクティスについて説明します。
18.2.1 適用プロセスの並列性の設定
適用プロセスの並列性を設定するには、DBMS_APPLY_ADM.SET_PARAMETER
プロシージャのparallelism
パラメータを指定します。parallelism
パラメータによって、変更を同時に適用するプロセスの数を制御します。parallelism
適用プロセス・パラメータのデフォルト設定は、4
です。
通常、適用プロセスの並列性は、1
、4
、8
または16
のいずれかに設定されます。特定の適用プロセスに最適な設定は、適用されるロードおよびデータベースを実行するコンピュータ・システムの処理能力に依存します。適用プロセスの並列性を設定する際は、次のガイドラインに従ってください。
-
適用プロセスのロードが高く、データベースを実行するコンピュータ・システムの処理能力が高い場合は、適用プロセスの並列性を
8
または16
に設定します。複数の高速CPUによって、高い処理能力が提供されます。 -
適用プロセスのロードが低い場合は、適用プロセスの並列性を
1
または4
に設定します。 -
データベースを実行するコンピュータ・システムの処理能力が最適な処理能力よりも低い場合は、適用プロセスの並列性を
1
または4
に設定します。
parallelism
適用プロセス・パラメータを設定する際に、PROCESSES
初期化パラメータが適切に設定されていることを確認します。
また、適用プロセスの並列性が1より大きい場合に、適用プロセスによって変更が適用されるすべてのデータベース・オブジェクトにINITRANS
およびPCTFREE
パラメータが適切に設定されていることを確認します。INITRANS
パラメータでは、データベース・オブジェクトに割り当てられた各データ・ブロック内で割当て済のトランザクション・エントリの初期の数を指定します。INITRANS
パラメータを適用プロセス以上の並列性に設定します。PCTFREE
パラメータでは、オブジェクトの列への将来の更新のために予約されたデータベース・オブジェクトの各データ・ブロック内の領域の割合を指定します。PCTFREE
パラメータは、10以上に設定する必要があります。ALTER
TABLE
文を使用して表のこれらのパラメータを変更できます。
関連項目:
-
ALTER
TABLE
文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
18.3 適用プロセスの操作のベスト・プラクティス
ここでは、既存の適用プロセスを操作するベスト・プラクティスについて説明します。
18.3.1 適用エラーの管理
エラー・キューには、1つのデータベースの現在の適用エラーがすべて格納されます。データベースに複数の適用プロセスが存在する場合、エラー・キューには各適用プロセスの適用エラーが含まれます。適用プロセスがトランザクション内の論理変更レコード(LCR)を適用しようとする際にエラーが発生する場合、トランザクション内のすべてのLCRは、エラー・キューに移動されます。適用エラーに関する情報を表示するには、DBA_APPLY_ERROR
データ・ディクショナリ・ビューを問い合せるか、Oracle Enterprise Manager Cloud Controlを使用します。
DBA_APPLY_ERROR
ビューのMESSAGE_NUMBER
列は、エラーが発生したトランザクション内のLCRを示します。適用エラーが発生した場合、エラーの原因となった問題を訂正し、エラー・キュー内のエラー・トランザクションを再試行するか、または削除します。
関連項目:
適用エラーの管理およびエラー・トランザクション内の各LCRの列値の詳細情報の表示の詳細は、『Oracle Streams概要および管理』を参照してください。