Chat now with support
Chat with Support

SharePlex 11.4 - インストールおよびセットアップガイド

このガイドについて このガイドで使用される表記規則 OracleソースへのSharePlexのインストールと設定
Oracle向けSharePlexプレインストールチェックリスト SharePlexインストーラのダウンロード Install SharePlex on Linux and UNIX(LinuxとUNIXへのSharePlexのインストール レプリケーションのためのOracle環境のセットアップ Oracleから異なるターゲットタイプへのレプリケーションを設定する Oracle向けクラウドホスト型データベースのインストールとセットアップ リモートキャプチャ向けインストールとセットアップ HAクラスタ向けインストールとセットアップ Oracle向け一般SharePlexデモ Oracle向け高度なSharePlexデモ データベース・セットアップ・ユーティリティ Oracleのインストールに関する問題の解決
ソースおよびサービスとしてのPostgreSQLデータベースへのSharePlexのインストールとセットアップ
PostgreSQL向けSharePlexのインストール前のチェックリスト PostgreSQL向けSharePlexインストーラのダウンロード ソースとしてのPostgreSQL向けLinuxへのSharePlexのインストール PostgreSQLからサポートされているターゲットタイプへのレプリケーションの設定 PostgreSQL向けクラウドホスト型データベースのインストールとセットアップ PostgreSQL向けリモートキャプチャのインストールとセットアップ PostgreSQL高可用性クラスタへのSharePlexのインストール 論理レプリケーションを使用した高可用性のPostgreSQL Azure Flexible ServerでのSharePlexの設定 PostgreSQL向けの汎用SharePlexデモ PostgreSQL用の高度なSharePlexデモ PostgreSQLのデータベースセットアップ PGDB as a Service向けデータベースセットアップ pg_hint_plan拡張機能のインストール PostgreSQLのインストールに関する問題の解決
DockerコンテナへのSharePlexのインストール SharePlexユーザのセキュリティグループへの割り当て インストールの問題の解決 SharePlexのアンインストール 高度なインストーラオプション rootとしてのSharePlexのインストール SharePlexでインストーラされるアイテム

SharePlexをサポートするためのOracleのロギングの設定

SharePlexをサポートするためのOracleのロギングの設定

SharePlexは、オンラインおよびアーカイブされたOracle REDOログからキャプチャします。SharePlexは、rawデバイス、ファイルシステムデバイス、およびASMインスタンスに格納されたREDOログとデータファイルをサポートしています。

アーカイブロギングの有効化

レプリケーションがアクティブなときに、Captureプロセスが停止した場合またはSharePlexユーザにより停止された場合、CaptureはREDOログにその場所を記録し、再開時にその場所から続行します。ただし、以下の状況が発生した場合、CaptureはREDOログの代わりにアーカイブログを読み込む必要があります。

  • Captureが停止してから再び開始するまでに長い遅延があり、その間にREDOログがラップする。アーカイブログが利用可能になると、Captureはそれを読み込んで、失われたrhRのレコードを見つけます。
  • CaptureはOracleのトランザクション処理に遅れをとり、CaptureがOracleに追いつく前にREDOログがラップする。

オンラインログが利用できないときにCaptureが中断されないように、ソースシステム上で、またカスケードレプリケーション戦略の中間システムなど、SharePlexがデータをキャプチャするあらゆるシステムでアーカイブログを有効にする必要があります。そのようにしないと、Captureの処理が完了する前にオンラインログがラップし、ソースデータとターゲットデータの再同期が必要になります。

Captureの問題を回避するには、以下のようにアーカイブロギングを構成し、より高速で中断のないレプリケーションをサポートします。

要件 説明
適切な時間圧縮と除去 アーカイブログの圧縮または削除は、SharePlexの処理が終了するまで行わないでください。そのようにしないと、SharePlexはメッセージ「log wrap detectedログのラップを検出しました」を返し、データを処理できないため停止します。SharePlexの現在のログを確認するには、show captureコマンドを、ソースシステムでdetailオプシとともにsp_ctrlで指定し、実行します。現在のログより前に生成されたログも圧縮できます。
デフォルト以外のアーカイブ場所を指定する アーカイブログをデフォルトのOracleの場所以外に保存する場合は、SP_OCT_ARCH_LOCパラメーターをアーカイブログを含むディレクトリのフルパス名に設定します。REDOログがラップした場合、SharePlexはOracleのアーカイブ・ログ・リストでアーカイブログを検索します。SharePlexはここでアーカイブログを見つけられない場合、SP_OCT_ARCH_LOCパラメーターによって指定されたディレクトリを検索します。Captureが直接SP_OCT_ARCH_LOCの場所に移動し、Oracleログリストの読み取りをスキップするには、SP_OCT_CK_LOC_FIRSTを1に設定します。
ログ管理プロセスを待機するようにCaptureを設定する SP_OCT_ARCH_LOCを使用しているときに、自動化された方法でログをその場所に移動する場合、移動が完了するまで一定時間待つようにCaptureを設定できます。これにより、必要とするログがまだ利用できないためにCaptureが停止するのを防ぐことができます。Captureは待機し、ログをチェックし、まだ利用できなければ停止し、ログが利用可能になるまでチェックと停止を続けます。待機するようにCaptureを設定するには、SP_OCT_LOGWRAP_RESTARTパラメーターに、Captureで待機する秒数を設定します。レプリケーションのレイテンシを防ぐために、これらのプロセスを定期的に監視します。
ターゲットでアーカイブロギングを無効にする 高可用性またはピアツーピア戦略を除き、ターゲットシステムでのアーカイブロギングを無効にして、そのシステム上の不要なOracleアクティビティを排除することができます。
ルートASMの場所にログを置かない

データベースでASMを使用している場合、OracleのREDOログオンラインおよびアーカイブをASMルートディレクトリの下に配置することはできません。SharePlexは、その場所ではそれらを読み取ることができません。

ASM rawデバイスの権限 ASMの「oracle」ユーザには、rawデバイスにアクセスする権限がなければなりません。例えば、rawデバイスの権限に関するデフォルトがu:root g:diskの場合、「oracle」ユーザグループ「disk」を追加します。「grid」ユーザだけに権限を与えても不十分です。

オンラインログの設定

理想的には、SharePlexがアーカイブログの読み取りを回避できるようにREDOログを設定する必要があります。ほとんどの場合、オンラインログの方がアーカイブログよりも読み込みが速くなります。オンラインREDOログに、アーカイブログからの処理を最小限に抑えるために十分な大きさと個数があることを確認します。少なくとも、数時間分のデータをラップせずに保持できるだけのREDOログ容量が必要です。

適切なオンラインログ設定をテストするには:

本番稼働前のテストでは、Captureがアーカイブログを読み取っているかどうかを、以下の方法で確認できます。

  1. SharePlexが処理するログを、SHAREPLEX_ACTIDテーブルに対するクエリによって確認できます。

    SQL> select seqno from splex.shareplex_actid

  2. OracleのV$LOGテーブルに対するクエリによって、Oracleが書き込んでいるログを確認します。

    SQL> select sequence# from v$log where status='CURRENT'

  3. sequence#の値からseqnoの値を差し引きます。これにより、ログの個数単位でCaptureのOracleからの遅れがわかります。
  4. その値からオンラインREDOログの数を引きます。数値が負の場合、SharePlexはアーカイブログを処理している。例えば、REDOログが10本あり、SharePlexが11本遅れている場合、アーカイブログを処理していることになる。この結果を使用してオンラインログの設定を調整することができます。

重要: OracleがREDOログを生成するペースよりもCaptureが遅れている場合、以下が考えられます。

  • データを再同期する方が、SharePlexがアーカイブログからキャプチャしてパリティを復元するまで待つより現実的な可能性があります。
  • 処理できなかった操作をCaptureが処理し、キューに入れる間に、ソースシステムのディスク容量が不足する可能性があります。
  • SharePlexは、特に必要なアーカイブログが使用できなくなった場合に、PostがSQLステートメントを構築するために必要な情報を失う可能性があります。SharePlexを実行する際に、常にディスク容量とレイテンシを監視します。

適切なログレベルの設定

  • SharePlexのレプリケーション設定をアクティベーションする前に、最小のサプリメンタルログを設定する必要があります
  • 最小のサプリメンタルロギングに加えて、プライマリキーと一意キーのサプリメンタルロギングの両方を有効にするか、レプリケーションの各テーブルに対して一意の列のサプリメンタル・ログ・グループを作成することを強くお勧めます。行を更新するためのキー列の値がREDOログにある場合、SharePlexではデータベースからそれらを取得する必要はありません。処理量の多いシステムでは、この結果、Readプロセスのパフォーマンスが大幅に向上します。SharePlexの機能によっては、プライマリキーと一意キーのロギングを有効にする必要があります。

    注意:

    テーブルの行IDを変更するALTER TABLE DDLコマンドは、レプリケーション対象のテーブルのプライマリキーまたは一意キーがログに記録されていない場合、後続のDML操作に影響を与える可能性があります。キーがログに記録されていない場合、SharePlexはrowidに基づいてその値を取得します。行IDを変更する操作ALTER TABLE…MOVEなどを行うと、その後のDML操作で間違ったキー値が使用される可能性があります。

  • 任意のテーブルに対して垂直分割レプリケーションを使用している場合、テーブルレベルのロギングを使用して、レプリケートする列と、外部キーなどその列から参照される可能性のある他の列のみをログに記録することができます。同じテーブルに水平分割レプリケーションを使用している場合は、フィルタとして指定した列を必ずログに記録してください。

レプリケーションのためのOracleデータベースオブジェクトの設定

このトピックでは、SharePlexでレプリケートするOracleデータベースオブジェクトの特定の特性を設定する方法について説明します。

行の一意性の確保

SharePlexには、ターゲット上で変更している行がソース行と一致する正しい行であることを確認する方法が必要です。これは、キーとインデックスの使用によって1対1の関係を確保することで達成されます。

キーの役割

SharePlexは、レプリケートされるすべてのソーステーブルとターゲットテーブル、特に大きなテーブルやLONG列を含むテーブルにプライマリキーまたは一意キーがある場合に最も速く動作します。使用するキーを選択するときに、SharePlexは、利用できる最も適切なキー列を以下の優先度で使用します。

  • プライマリキー
  • 列数が最も少ない一意キーで、少なくとも1つの列がNOT NULL
  • 列数が最も少ない一意キー

パフォーマンスを最大化するために、プライマリキーと一意キーのサプリメンタルロギングを有効にすることをお勧めします。

テーブルが主キーまたは一意キーを持たない場合、またはOracleがSharePlexに対して間違った一意キーを記録する場合、構成ファイルを作成するときにキーとして使用する列をSharePlexに指定できます。これはキー定義と呼ばれ、設定ファイルで指定されます。詳細については、『SharePlex管理ガイド』の「一意キーの定義 」を参照してください。

キー定義に代わる方法として、一意性を確立する1つまたは複数の列に基づく一意のインデックスを作成または使用する方法があります。

正しいキーが記録されていることの確認

プライマリキーと一意キーのサプリメンタルロギングが有効で、テーブルにプライマリキーがない場合、Oracleはログに記録する一意キーのタイプを決定する必要があります。テーブルに複数の一意キーがある場合、Oracleは使用する最適なキーを決定し、UPDATEごとにそれらの列の値をログに記録します。テーブルにどのタイプのキーもない場合、OracleはLONGまたはLOBではないすべての列をログに記録します。

SharePlexは、データのレプリケーションに使用するキーも特定しなければなりません。Oracleと同様に、SharePlexは次の順序でキーを選択します。

  • プライマリキーある場合
  • 最適なまたは唯一の一意キーある場合
  • すべての列

SharePlexによってレプリケートされるテーブルにプライマリキーがなく、複数の一意キーがある場合、Oracleがログに記録するキー列がSharePlexで要求されるものでない可能性があります。

キーまたは一意のインデックスがないテーブル

SharePlexがテーブルのキーや一意のインデックスを検出できない場合、LONGとLOBを除くすべての列を使用してキーを構築します。このキーは内部で管理され、テーブル自体には作成されません。

これは好ましいオプションではありません。WHERE句の結果、Oracleは行を見つけるためにターゲットテーブルのフル・テーブル・スキャンを実行することになり、レプリケーションが著しく遅くなるからです。さらに、行の一意性を強制することはできません。

例えば、異なる行のLONG以外の列に同一の値が含まれていても、LONG列に異なる値が含まれる可能性がある場合は、テーブルの同期が外れていることをユーザやSharePlexが検出できないままになることがあります。以下の例でその問題を説明します。テーブルの行はLONG列を除いて同一であり、プライマリキーも一意キーもありません。

列A 列B 列CLONG
10 20 100
10 20 200
10 20 300

ソースシステムのあるユーザが、最初の行の列Aを15に変更したと仮定します。変更をターゲットテーブルに適用するようにSQLステートメントを構築するときに、SharePlexは列AおよびBを使用してキーを構築しUPDATEtablename SET ColumnA to 15 WHERE Column A = 10 and Column B = 20、変更する行を特定します。この条件を満たす行は3つあるので、SharePlexは、間違った行に変更を投稿してしまう可能性があります。

NULLを含むキー

キーがNULLを許容する場合、SharePlexは、UPDATEやDELETEに対して行の一意性を保証できないため、ターゲットシステム上で間違った行を変更する可能性があります。SharePlexがNULLを許可するキーを指定する方法を制御するには、SP_SYS_IN_SYNCパラメーターを設定します。詳細については『SharePlexリファレンスガイド』を参照してください。

キーの値の変更

SharePlexは、特別な設定なしにキー列の値の変更を処理します。ただし、キーにシーケンスを使用している場合、またその値が更新される可能性がある場合は、更新によってターゲットシステム上でキーが重複しないようにシーケンスを作成します。そのようにしないと、新しい値が使用されて操作が適用され、その値がターゲットテーブルの別の行のキーとして既に存在する場合、SharePlexは一意キー制約違反と非同期エラーを返します。このタイプのエラーは、式「x+nnは増分を使用して値を更新する場合に発生する可能性があります。値「x+n」のいずれかが既存の値と等しくなる可能性があります。

以下は、キー列の値を1だけ大きくする例です。

Key_Col

1

4

5

7

SQL> update table X set a=a+1; commit

新しい値は以下のようになり、ターゲットシステムにレプリケートされます。

Key_Col

2

5

6

8

SharePlexは、操作をREDOログに記録する順序で更新します。

updatexseta=2wherea=1;成功

updatexseta=5wherea=4;(5の値が既に存在するため失敗)

updatexseta=6wherea=5;成功

updatexseta=8wherea=7;成功

Postがターゲット配列に使用するプリイメージ値は、ソースからレプリケートされる増加値と同じです。Oracleはこの操作を一意制約違反として拒否します。別の例として、AをBに更新し、BをCに更新するトランザクションがあります。

重要!ピアツーピアレプリケーションを使用する予定がある場合は、キーに関する要件がさらにあります。詳細については、『SharePlex管理ガイド』の「複数のピアデータベースを維持するためのレプリケーションの設定」のセクションを参照してください

インデックス

レプリケーション環境では、インデックスを正しく使用することが重要です。インデックスはターゲットデータの完全性を維持します。

  • 一意のインデックスを持つソーステーブルをレプリケートする場合、ターゲットテーブルにも一意のインデックスがなければなりません。
  • すべての大規模なテーブルでは、ターゲットシステム上に一意のインデックスがなければなりません。一意のインデックスがない場合、OracleはPostによって変更される行を見つけるためにテーブル全体をスキャンします。
  • アプリケーションによってはプライマリキー制約を使用しないため、デフォルトでは一意のインデックスは作成されません。しかし、一意のインデックスとして作成されたにもかかわらず、名前が付けられていないCREATE UNIQUE INDEXコマンドを使用していないインデックスが存在することが頻繁にあります。この例として、個人名や従業員識別番号など、一意の値を持つ1つまたは複数の列で作成されたものがあります。テーブルに一意のインデックスが存在しない場合は、設定ファイルを作成する際に一意のインデックスを作成するか、ユーザ定義キーを指定することをお勧めします。詳細については、『SharePlex管理ガイド』の「一意キーの定義」のセクションを参照してください。
  • 一意のインデックスを特定または作成したら、OracleがSharePlexのヒント機能を使用してそのインデックスを使用することを確認できます。詳細については、『SharePlex管理ガイド』の「OracleのINDEXヒントの使用」のセクションを参照してください
  • テーブルに外部キーがある場合は、外部キーの変更によってテーブルのフルスキャンが発生しないように、適切な列にインデックスが付けられていることを確認してください。

  • インデックスを常に最新の状態に保ってください。最新の状態でないと、Postプロセスが低速化します。断片化したものを再構築します。

ターゲットテーブルにインデックスが多すぎる場合、Oracleは行の追加や削除に応じてインデックスをすべて更新しなければなりません。このため、レプリケーションを含むシステム全体の速度が遅くなります。インデックスの数を、最も有用性の高いものに限定することを検討してください。

ほぼ1つのタイプのDMLを実行するアプリケーションの場合、以下を考慮します。

  • INSERT: メンテナンスの手間を省くため、いくつかのインデックスだけを使用します。
  • UPDATE: INSERTステートメントの後に変更しない列のインデックスを使用します。
  • DELETE: できるだけ多くのインデックスを削除します。

何百万ものSQL操作を行う大規模なバッチジョブを実行する場合は、バッチジョブの前に不要なインデックスを削除し、最後にインデックスを再構築します。これにより、SharePlexの実行速度が上がり、その後、インデックスがより整理された状態になります。

ビットマップインデックス

パフォーマンスの理由から、Postプロセスがデータを適用している間は、ビットマップインデックスの使用を避けてください。これらのインデックスは、Postプロセスのパフォーマンスにマイナスの影響を及ぼす可能性があります。

ターゲットテーブルでビットマップインデックスを使用しなければならない場合は、Postによって適用されるトランザクションへの影響と、クエリに対するその利点を比較します。

  • Oracleがビットマップエントリを追加、更新、または削除すると、ビットマップセグメントに関連するすべての行が効果的にロックされます。
  • ビットマップセグメントには、数百個の行に対する参照を含めることができます。その結果、同じビットマップセグメント内のビットマップエントリを更新する場合、異なるPostセッションソースシステム上のセッションごとにPostセッションが存在するで行う変更が互いをブロックし合う可能性があります。
  • 操作を続けるには、Postがブロックを検出して解決する必要がありますが、ロックの数が多い場合はポストが大幅に遅れることになります。
  • 一般的に、ビットマップインデックスを持つテーブルに複数の同時セッションを頻繁に挿入するとロックのコンフリクトが発生しますが、そのようなテーブルでのランダムな更新や削除ではコンフリクトは発生しません。SharePlexは、より静的なテーブルにビットマップインデックスを持たせるというOracleの推奨事項に従っています。

注意: ビットマップインデックスのレプリケーションは推奨されません。ビットマップインデックスを持つテーブルを変更するたびに、インデックスは再構築されます。この再構築に関連するコストOracleの時間とリソースは、SQL UPDATEステートメントに追加されます。

ターゲットでのトリガの起動の防止

ソースシステムでのトリガの起動によるDMLの変更は、REDOログに記録され、SharePlexによってターゲットシステムにレプリケートされます。その結果、同じトリガがターゲットシステムで起動され、同じDMLの変更レプリケーションによって既に行われたが開始された場合には非同期エラーが発生します。

例えば、ソースシステムでのテーブルAへのINSERTがテーブルBへのINSERTをトリガする場合、SharePlexは両方のINSERTをターゲットシステムにレプリケートします。Postプロセスは、ターゲットシステム上のTableAに最初のINSERTを適用し、TableBへのINSERTをトリガします。したがって、レプリケートされたINSERTをPostがTableBにポストしようとすると、一意キー違反が発生します。テーブルAに対してトリガが起動されたため、この行は既に存在しています。

トリガは、レプリケーション戦略に応じて以下のように処理できます。

レプリケーション戦略 ターゲットでのトリガの取り扱い方

高可用性

および

ピアツーピア

  1. SharePlex以外のユーザのトリガを有効にします。これは、フェールオーバーの準備のため、またはトランザクションが複数のソースシステムで実行されるためです。
  2. SharePlexユーザのトリガを、sp_add_trigger.sqlスクリプトを実行して無効にします。このスクリプトは、各トリガの手続きステートメントにWHEN句を追加し、SharePlexユーザによってポストされる操作を無視するように指示します。
レポート作成、データ共有、その他の基本的な一方向レプリケーション
  • ターゲットシステムでトリガを全体的に無効にするか、sp_add_trigger.sqlスクリプトを実行して、SharePlexユーザによってポストされた操作を無視します。
  • レプリケーション設定にないオブジェクトのトリガは、アクティブのままにしておくことができます。

    トリガスクリプトの使用方法に関する重要な情報については、『SharePlexリファレンスガイド』を参照してください。

    整合性制約の設定

    整合性制約はレプリケーションに影響を与えます。以下のガイドラインに従って確実に取り扱ってください。

    外部キー制約

    外部キー制約は、ターゲットテーブルで無効にする必要があります。SharePlexは、ソース外部キー制約の結果をレプリケートします。ソースの外部キーの結果を正確にレプリケートするためには、互いに対する外部キーを持つテーブルをすべてレプリケーションの設定に含める必要があります。参照制約を持つテーブルはすべてターゲットデータベースに存在していなければなりません。もし1つでも欠けると、参照整合性が崩れる可能性があります。

    注意: ターゲットテーブルの制約がDEFERREDの場合、Postトランザクションは制約の検証で失敗する可能性があります。この問題を回避するには、SP_OPO_DISABLE_OBJNUMパラメーターを有効にして、トランザクションを成功させます。再同期されるまで、基礎となるターゲットテーブルは引き続き非同期のままになります。

    ON DELETE CASCADE制約

    SharePlexには、ON DELETE CASCADE制約をターゲットテーブル上で有効なままに維持する機能がありますが、パラメーターの設定を通じて、明示的に有効にする必要があります。PostはON DELETE CASCADEの依存関係を検出し、レプリケートされたカスケード削除の子テーブルへのポストを抑制します。

    SharePlexを使用してこのサポートを有効にしていない場合、ターゲット上でこれらの制約を手動で無効にする必要があります。そのようにしないと、SharePlexは、プライマリ削除とカスケード削除の両方をレプリケートするため、ターゲット上で削除がカスケードされるとコンフリクトやエラーが発生します。

    ON DELETE CASCADEのサポートを有効にするには:

    1. ソース上のプライマリキー、一意のインデックス列、および外部キー列のロギングを有効にします。
    2. 以下のSharePlexパラメーターを設定します。

      • SP_OPO_DEPENDENCY_CHECKパラメーターを2に設定
      • SP_OCT_REDUCED_KEYパラメーターを0に設定
      • SP_OPO_REDUCED_KEYパラメーターを0、1、または2に設定

    注意: ピアツーピアレプリケーションでは、SP_OPO_REDUCED_KEYを0に設定する必要があります。

    チェック制約

    ターゲットシステムのチェック制約を無効にします。これらの制約により不必要なオーバーヘッドが増えます。これらのチェックはソースシステム上で行われるため、十分にメンテナンスされ同期化されたレプリケーション環境では冗長になります。高可用性を目的とする場合は、フェールオーバー手順の一環として制約を再アクティベーションするスクリプトを作成できます。

    ターゲットオブジェクトへのアクセスの防止

    ピアツーピアレプリケーション以外のすべての状況では、SharePlexデータベースユーザは、ターゲットオブジェクトでDMLまたはDDLを実行できる唯一のユーザでなければなりません。他のユーザ、ジョブ、またはアプリケーションによってターゲットオブジェクトにDMLまたはDDLの変更が加えられた場合、ターゲットデータはソースシステム上のデータの状態を反映しなくなる可能性があります。詳細については、『SharePlex管理ガイド』の「同期の概念の理解」のセクションを参照してください。

    シーケンスの設定

    SharePlexは、ALTER SEQUENCEおよびDROP SEQUENCEコマンドやDMLトランザクションで行われたOracleシーケンスへの変更をレプリケートします。特定のレプリケート戦略では、配列をレプリケートする必要がない場合があります。

    • 高可用性:必要あり

      SharePlexがシーケンスをレプリケートする方法により、ユーザはシーケンスの増分や再利用を気にすることなく、直ちにフェールオーバーデータベースを使い始めることができます。

    • レポート作成、データ共有、その他の基本的な一方向レプリケーション:必要なし

      ターゲットシステムでシーケンスが不要な場合は、レプリケートしないでください。レプリケーションが遅くなる可能性があります。ソーステーブルのキー生成にシーケンスが使用されている場合でも、レプリケートされた行がターゲットシステムに挿入されると、シーケンス値がキー列の一部になります。シーケンス自体をレプリケートする必要はありません。

    • ピアツーピア:必要なし

      SharePlexは同一シーケンスのピアツーピアレプリケーションをサポートしていません。詳細については、『SharePlex管理ガイド』の「複数のピアデータベースを維持するためのレプリケーションの設定」のセクションを参照してください

    レプリケーション用にシーケンスを設定するには:

    1. シーケンスをレプリケートするには、データベースレベルでプライマリキーとユニークキーのサプリメンタルロギングを有効にするか、sys.seq$テーブルでプライマリキーのサプリメンタルロギングを有効にする必要があります。

    2. キャッシュを使用し、増分を少なくとも20に設定します。シーケンスがキャッシュされると、SharePlexはグループとして値を複製することができます。シーケンスをキャッシュしない場合、SharePlexは、シーケンスから値を取得するたびにディスクに移動しなければならないため、より重要なデータのレプリケーションが遅くなります。
    3. ターゲットシステムでのシーケンスの一意性を確保するために、ターゲットシーケンスの開始値をソースシーケンスの開始値よりも大きくする必要があります。以下の式を使用して、ターゲットのSTART_WITH値を決定します。

      source_current_value+ (source_INCREMENT_BY_value x source_CACHE_value) =target_START_WITH_value

      重要!(source_INCREMENT_BY_value x source_CACHE_value)は2GBを超えてはなりません。超えるとシーケンスのレプリケーションに失敗します。

    1. 設定では、テーブルと同様にオーナーと名前でシーケンスを指定します。
    1. シーケンスの変更はDDLコマンドであるため、Postプロセスはシーケンスの更新が終了するまですべてのポストを一時停止します。そのため、特にシーケンスがキャッシュされていない場合は、テーブルとは別のpostキューでシーケンスをポストすることをお勧めします。詳細については、『SharePlex管理ガイド』の「データをレプリケートするためのSharePlexの設定」のセクションを参照してください。

    SharePlexは、ALTER SEQUENCEコマンドを使用して、以下のようにターゲットデータベースのシーケンスを更新します。

    • 増分値を以下のように変更します。

      source_INCREMENT_BY_valuexsource_CACHE_value

    • NOCACHEに設定します。
    • シーケンスを更新します。
    • 以下の値を設定して、シーケンスを再度変更します。

      Increment_value=source_INCREMENT_BY_value

      Cache_value=source_CACHE_value

    SharePlexは、シーケンスに対する単純なSELECTUPDATE操作と同じようにALTER SEQUENCE操作を扱います。これは、REDOログレコードではこれらの2つの操作が区別されないからです。

    SharePlexをサポートするためのOracleデータベースのセットアップ

    SharePlexをサポートするためのOracleのデータベースセットアップ

    一部のOracleデータベースの設定にはレプリケーションに影響を与えるものがあるため、適切に設定する必要があります。

    PostのカーソルをサポートするためのOPEN_CURSORSの調整

    SharePlexでは、Oracle OPEN_CURSORSパラメーターの値がターゲットデータベース上で正しく設定されている必要があります。OPEN_CURSORSの値を表示するには、以下のSQLステートメントを使用してデータベースに問い合わせます。

    select value from V$PARAMETER where name = 'open_cursors';

    Postプロセスは、終了すると閉じるルーチン呼び出し用に10個のカーソルと、SQL Cache機能が有効になっている場合はこれがデフォルト、これに加えてトランザクションごとに少なくとも50個のカーソルを保持しています。詳細については、「SQLキャッシュの調整』で参照してください。

    SQLキャッシュを無効にするつもりであれば、アプリケーションが生成する同時更新トランザクションセッションのピーク数を見積もり、次の式に従います。

    10 + (同時トランザクションのピーク数 x 2) =必要な最小限のオープンカーソル数

    OPEN_CURSORSの値は、変更することも、ない場合に追加することもできます。Oracleのパラメーターを変更する前に、Oracleのドキュメントを参照してください。

    PROCESSESパラメーターの調整による接続のサポート

    PROCESSESおよびSESSIONSパラメーターの場合、現在のトランザクション量を処理するのに十分なSQL接続をターゲットデータベースにオープンできるように、SharePlexのPostプロセスで必要となる最小値は65です。この値は、SP_OPO_THREADS_MAXパラメーターのデフォルト設定に、メインのPostスレッド用の1を加えたものです。

    init.oraファイルのPROCESSESパラメーターは、SharePlexおよびデータベースユーザによって作成された接続に対応できるように設定する必要があります。この値は、データベースがソースデータベースであるかターゲットデータベースであるか、またはソースデータベースとターゲットデータベースの両方を兼ねるデータベースであるかによって異なります。

    データベースがソースのみの場合

    データベースがソースとしてのみ機能する場合、以下の式はReadプロセスによるログインを考慮します。

    (ソース・データベース・セッションのピーク数)+(バックグラウンドのOracleプロセス)+(SP_ORD_LDA_ARRAY_SIZEパラメーターの値+3)=PROCESSESの設定

    データベースがターゲットのみの場合

    Postプロセスは、トランザクションの一貫性を維持するために、ソースシステム上のセッション数と同じ数の接続をターゲットシステム上に作成します。

    ターゲットシステムのPROCESSESパラメーターは、これらのすべての接続に加えて、以下に対応できるように十分に大きい値に設定しなければなりません。

    • これらの接続により生成されるバックグラウンドのOracleプロセス
    • クエリのためにターゲットデータベースにアクセスすると予想されるユーザのピーク数

    以下の計算式をガイドとして使用します。

    (ソース・データベース・セッションのピーク数)+(ターゲット・データベース・セッションのピーク数)+(バックグラウンドのOracleプロセス)=PROCESSESの設定

    データベースがソースでありターゲットである場合

    データベースがソースとターゲットの両方を兼ねている場合、以下の式は次により生成される接続を考慮します。

    • Readプロセス
    • Postプロセス
    • バックグラウンドのOracleプロセス
    • ユーザ接続

    (ソース・データベース・セッションのピーク数)+(ターゲット・データベースのピーク数)+(バックグラウンドのOracleプロセス)+(SP_ORD_LDA_ARRAY_SIZEパラメータの値+3)=PROCESSESの設定

    ログバッファサイズの調整によるポストの改善

    データベースライターの数は、特に多数の同時トランザクションがある場合、レプリケーションに影響を与えます。トランザクションがコミットされるたびに、バッファ内のデータはディスクにフラッシュされます。ほとんどのトランザクションが小規模であるにもかかわらずバッファが大きい場合、ポストが遅くなる可能性があります。大規模なトランザクションがコミットされている間に、別の通常のサイズのトランザクションがコミットされた場合、2番目のCOMMITは、バッファ全体がディスクにフラッシュされる間は待機しなければなりません。

    ディスクにフラッシュされるバッファのサイズを小さくすることで、Postプロセスを高速化することができます。可能であれば、ログバッファのサイズを1024 KBまたは512 KBまで下げてみてください。

    ユーザボリュームに基づくSharePlexトランザクションテーブルの調整

    SharePlex はSHAREPLEX_TRANSテーブルを更新し、ターゲットデータベースの読み取りの一貫性を維持します。レプリケーションのパフォーマンスを向上させ、テーブルの競合を減らすために、このテーブルのinitransの設定を調整しなければならないことがあります。

    • 本番データベースに500~1,000名の同時ユーザがいる場合は、SHAREPLEX_TRANSテーブルをinitransが30になるように再構築してください。
    • 本番データベースに1,000名を超える同時ユーザがいる場合は、initrans値が40になるようにSHAREPLEX_TRANSテーブルを再構築してください。

    文字セットの変換の制御

    このトピックでは、SharePlexがOracleソースとOracleターゲット間、またOracleソースと非Oracleターゲット間の文字セット変換をどのように処理するかを説明します。

    OracleソースとOracleターゲット間のレプリケーション

    SharePlexが、使用しているOracleの文字セット内のすべての文字を複製するには、以下のいずれかが真でなければなりません。

    • ソースとターゲットの文字セットが同一である
    • ソースデータベースの文字セットが、ターゲットデータベースの文字セットのサブセットであるソースに含まれるすべての文字がターゲットの文字セットに存在する

    SharePlexでは、以下の文字セットがテストされ、サポートされています。

    US7ASCII

    UTF8

    WE8ISO8859P1

    AL16UTF16

    AL32UTF8

    KO16KSC5601

    デフォルトでは、SharePlexにより、Oracleターゲットデータベースは文字変換を行うことができます。Postはソースデータの文字エンコーディングをOracleに通知し、Oracleは必要な変換を実行します。

    関係する文字セットによっては、Oracleの変換はデータロスにつながる可能性があります。次などを考慮します。

    例1: JA16SJIS文字セットの「米」という日本語文字は、US7ASCII文字セットには対応する記号がありません。この記号をUS7ASCIIデータベースに複製しようとすると、Oracleはこの記号を「?」文字に変換します。

    例2: Oracleによると、WE8ISO8859P1文字セットはUS7ASCII文字セットのスーパーセットであるため、US7ASCIIの文字はすべて、変換されずにWE8ISO8859P1ターゲットデータベースにポストされると考えるのが論理的です。これは、0x00から0x7Fの範囲の文字に当てはまります。しかし、Oracleは、0x80から0xFFの範囲の文字の最上位ビットを除去します。この「変換」は、ソースのスーパーセットである文字セットにレプリケートする際に、データロスを引き起こす可能性があります。

    注意: Oracleは、文字セットが同一の場合は文字を変換しません。したがって、WE8ISO8859P1のデータをWE8ISO8859P1の文字セットを持つデータベースにポストすると、Oracleの変換プロセスがバイパスされます。

    データを変換せずに適用するには:

    SP_OPO_NLS_CONVERSIONパラメーターを1に設定し、データを変換して適用します。

    注意: ソースデータベースのNLS_NCHAR_CHARACTERSETとターゲットデータベースのNLS_NCHAR_CHARACTERSETが異なる場合、SharePlexは、常にNVARCHARとNCLOBのデータを変換します。

    OracleソースとOracle以外のターゲット間のレプリケーション

    Open TargetターゲットOracle以外のターゲットにレプリケートする場合、SharePlexは、任意のOracle Unicode文字セットおよびUS7ASCII文字セットからのレプリケーションをサポートします。SharePlexはUnicode文字セットでOpen Targetターゲットにデータをポストするため、ソースデータがUnicodeまたはUS7ASCIIの場合、ターゲット上で変換する必要はありません。

    ただし、以下の項目に当てはまる場合は、ターゲット上で変換が必要となります。

    • ソースデータの文字セットがOracle UnicodeまたはUS7ASCII以外の場合、ターゲットに転記するためにUnicodeに変換するには、ターゲットにOracleクライアントをインストールする必要があります。
    • データをUnicode以外の文字セットでターゲットデータベースにポストする必要がある場合は、ターゲットにOracleクライアントをインストールして変換を実行し、targetコマンドを使用してPostが使用するターゲット文字セットを特定する必要があります。
    • LOBデータをレプリケートする場合は、ソースの文字セットにかかわらず変換が必要です。

    Linux上のOracleクライアントで変換を実行するには:

    1. Oracle Administratorクライアントをターゲットシステムにインストールします。クライアントは管理者インストールタイプでなければなりません。Instant ClientおよびRuntimeインストールタイプはサポートされていません。
    2. ORACLE_HOMEをクライアントのインストールに設定します。ORACLE_SIDをエイリアスまたは存在しないSIDに設定します。SharePlexはこれらのSIDを使用せず、データベースが実行されている必要はありません。
    3. お使いのオペレーティングシステム用のLinux/Unixインストーラーを使用してSharePlexインストールします。
    4. SP_OPX_NLS_CONVERSIONパラメーターがデフォルトの1に設定されていることを確認してください。

    UnicodeとUS7ASCIIのデータを変換せずに適用するには:

    ソースデータがUnicodeまたはUS7ASCIIで、LOBデータをレプリケートしない場合は、変換やOracleクライアントは必要ありません。SP_OPX_NLS_CONVERSIONパラメーターを0に設定して変換を無効にし、Postが実行中であれば再起動します。

    OracleデータをサポートするためのSharePlexのセットアップ

    OracleデータをサポートするためのSharePlexのセットアップ

    このトピックには、Oracleの特定のデータ型に適用されるセットアップガイドラインが含まれています。これらのガイドラインは、初めてレプリケーションを開始する前に対応が必要です。

    LOB、LONG、VARRAY、XML

    • LOBやLONGを含むテーブルには、必ずプライマリキーか一意キーが定義されている必要があります。テーブルにキーがない場合、SharePlexは、LONGまたはLOBを除くすべての列から独自のキーを作成します。Post WHERE句を満たす2つの行の唯一の違いがLOBかLONGかである場合、Postは間違った行を更新することがあります。
    • LOBを含むテーブルに1つ以上の名前付きexportキューを割り当てます。これによって、個別のExportプロセスと、独自のPostプロセスを持つ名前付きpostキューが自動的に作成されます。LOBデータ型の処理を他のデータの処理から分離することで、レプリケーション全体の速度を向上させることができます。詳細については、『SharePlex管理ガイド』の「名前付きexportキューの設定」を参照してください
    • LOBのレプリケーション時に、SharePlexに十分な共有メモリを確保するには、SP_QUE_POST_SHMSIZEパラメーターを初期設定の60 MBに上げます。SharePlexが「Error: sp_cop process sp_mport/sp_opst_mt killed due to SIGSEGV」のような共有メモリー・セグメント・エラーを生成する場合は、設定の値を大きくします。

    注意: 共有メモリセグメントを大きくすると、システム上で大量のスワップスペースが使用される可能性があるため、十分なディスク容量を確保してください。

    SharePlexLOBストレージの管理

    データベース・セットアップ・ユーティリティは、選択したテーブルスペースにいくつかのテーブルをインストールします。SHAREPLEX_LOBMAPテーブル以外は、テーブルスペースのデフォルトのストレージ設定を使用します。

    SHAREPLEX_LOBMAPテーブルには、行の外に格納されたLOBのエントリが含まれています。これは、1 MBのINITIALエクステント、1 MBのNEXTエクステント、および10のPCTINCREASEで作成されます。MAXEXTENTSは120で、テーブルの最大許容値サイズは120 MBです。

    推奨アクション: プライマリキーと一意キーのサプリメンタルロギングを有効にしている場合、SP_OCT_ENABLE_LOBMAPパラメーターを0に設定すると、SHAREPLEX_LOBMAPテーブルには何も保存されません。この場合、サイズが大きくなることを考慮する必要はありません。Readプロセスのパフォーマンスを最大化するために、プライマリキーと一意キーのサプリメンタルロギングを有効にすることを推奨します。

    代替アクション: 通常、デフォルトのストレージはSHAREPLEX_LOBMAPに十分であり、400万以上のLOBエントリが許可されます。複製するOracleテーブルに、頻繁に挿入または更新される多数のLOB列がある場合は、SharePlexのテーブルスペースのサイズを適宜大きくすることを検討してください。このテーブルが、SharePlexの他のテーブルとテーブルスペースを共有していることを考慮してください。

    データベースがコスト・ベース・オプティマイザCBOを使用しており、SharePlexが処理するテーブルに多数のLOBが含まれる場合は、SHAREPLEX_LOBMAPテーブルを分析スケジュールに組み込みます。

    注意: SharePlexを新規にインストールしても、以前のインストールからストレージパラメーターは変更されません。

    システムプロセスの優先度の設定

    Oracleや他のプロセスにリソースの優先順位が割り当てられている場合、SharePlexは、デフォルト設定のままでリソースをほとんど割り当てないようにできます。Oracleはピーク処理時にCPU使用率を増加させます。SharePlexがOracleよりも遅れる場合は、プロセスの優先度を上げてみてください。

    Unixでプロセスの優先度を設定するには:

    niceコマンドを使用します。システム管理者に相談し、システム上で実行されているすべてのソフトウェアの要件に基づいて適切な値を選択してください。rootユーザは、どのプロセスのniceness値も変更できます。SharePlex管理者ユーザはSharePlexのnicenesの値を調整できます。

    Oracleのダイレクト・パス・ロードの有効化

    デフォルトにより、SharePlexは、SQL*Loaderのダイレクトパスロードによってテーブルに加えられた変更をレプリケートしますDIRECT=TRUEキーワードパラメーター。異なるテーブルに同時にロードできますが、1つのテーブルに対するロードは1回のみですPARALLEL=FALSE。データベースをアーカイブモードにし、テーブルロギングを有効にしなければなりません。

    ソースシステムでダイレクトパスロードが長時間持続すると予想される場合は、レプリケーションに頼らず、ターゲットデータベースにデータを直接ロードする方が効率的な場合があります。ダイレクトパスロードが大きいと、ユーザアプリケーションのアクティビティによってREDOログに記録される変更にCaptureが遅れを取る可能性があります。

    ロード後にチェック制約を無効にする必要があります。ONDELETECASCADE制約を有効にしたままにすることができます。

    SP_OCT_REPLICATE_DLOADパラメーターで、ダイレクトパスロードをレプリケートするかどうかを制御します。ダイレクトパスロードのレプリケーションを無効にするには、このパラメーターを0に変更します。詳しくは、『SharePlexリファレンスガイド』を参照してください。

    圧縮の使用

    圧縮を有効にすると、SharePlexがネットワーク経由で送信するデータ量を減らすことができます。SharePlexはLZIPロスレス圧縮を使用します。ソースのSharePlexインスタンスで圧縮を有効にすると、ソースのSharePlexインスタンスのすべてのターゲットへの圧縮が自動的に有効になります。

    デフォルトでは圧縮は無効になっています。圧縮は単独で、または暗号化と組み合わせて有効にすることができます。暗号化の詳細については、『SharePlex管理ガイド』を参照してください。

    圧縮を有効にするには

    SP_XPT_ENABLE_COMPRESSIONパラメーターを1に設定します。

    sp_ctrl> set param SP_XPT_ENABLE_COMPRESSION 1

    設定後にパラメーターを有効にするには、Exportを停止して開始します。

    Data Pumpエクスポートのサポートの設定

    Oracle Data Pumpエクスポート操作をレプリケートする場合は、SP_OCT_ALLOW_DP_DDLパラメーターを1に設定し、Captureを再開します。

    このパラメーターは、Oracle Data Pumpのexport/importを実行する際に発生するDDL操作のレプリケーションにSharePlexが失敗した場合に有効にすることができます。場合によっては、SharePlexは、Data PumpのロードでDDLを無視すべき再帰的なDDLとして識別することがあります。このパラメーターは、そのDDLをキャプチャするようにSharePlexに指示します。

    1を設定すると、このパラメーターが有効になります。ロード終了後、このパラメーターを0に戻し、Captureを再開します。

    Related Documents

    The document was helpful.

    Select Rating

    I easily found the information I needed.

    Select Rating