特定の Oracle データベース設定は複製に影響を及ぼすので、適切に設定する必要があります。
SharePlex では、ターゲットデータベースで Oracle OPEN_CURSORS パラメータの値を正しく設定する必要があります。OPEN_CURSORS の値を表示するには、次の SQL 文を使用してデータベースをクエリします。
select value from V$PARAMETER where name = 'open_cursors' ;
Post プロセスは、終了時に閉じるルーチンコール用の 10 個のカーソルのほか、SQL Cache 機能が有効になっている場合(デフォルト設定)はトランザクション当たり 50 個以上のカーソルを予約しています。詳細については、次を参照: SQL Cache のチューニング。
SQL Cache を無効にする場合は、アプリケーションが生成する並行更新トランザクション(セッション)のピーク数を概算し、次の公式に従います。
10 +(並行トランザクションのピーク数 x 2)= 必要最小オープンカーソル数
OPEN_CURSORS の値が存在しない場合、変更または追加できます。Oracle パラメータに変更を加える前に、Oracle マニュアルを参照してください。
SharePlex およびデータベースユーザーによって作成された接続を処理するためにinit.ora ファイルの PROCESSES パラメータを設定する必要があります。その値は、データベースがソースデータベース、ターゲットデータベース、またはその両方として機能するかどうかによって決まります。
データベースがソースとしてのみ機能する場合、次の公式では Read プロセスによるログインが考慮されます。
(ソースデータベースセッションのピーク数) + (バックグランドの Oracle プロセス) + (SP_ORD_LDA_ARRAY_SIZE パラメータ値 + 3) = PROCESSES 用の設定
Post プロセスはトランザクションの一貫性を保つため、ソースシステム上のセッション数と同じ数の接続をターゲットシステムに作成します。ターゲットシステムの PROCESSES パラメータは、これらすべての接続に加えて、次の内容に十分対応できるように高く設定する必要があります。
次の公式で説明します。
(ソースデータベースセッションのピーク数) + (ターゲットデータベースセッションのピーク数) + (バックグランドの Oracle プロセス) = PROCESSES 用の設定
データベースがソースとターゲットの両方として機能する場合、次の公式では、以下による接続が考慮されます。
(ソースデータベースセッションのピーク数) + (ターゲットデータベースセッションのピーク数) + (バックグランドの Oracle プロセス) + (SP_ORD_LDA_ARRAY_SIZE パラメータの値 + 3) = PROCESSES 用の設定
データベースライターの数は特に複数の並行トランザクションがある場合、複製に影響を及ぼします。トランザクションがコミットされるとき、そのバッファデータがディスクにフラッシュされます。もしほとんどのトランザクションが小さく、しかしそのバッファが大きい場合は、Post が遅くなる原因となります。大きいトランザクションがコミットされ、そして標準サイズのトランザクションがコミットされた場合は、2 つ目の COMMIT はバッファ全体がディスクにフラッシュされるまで待たなければなりません。
ディスクにフラッシュするバッファのサイズを減少することで Post プロセスを高速化することができます。ログバッファのサイズを 1024 KB または可能であれば 512 KB まで減少してください。
SharePlex はターゲットデータベースの read の一貫性を維持するために、SHAREPLEX_TRANS テーブルを更新します。テーブルの複製のパフォーマンスを改善して競合を減らすため、このテーブルの initrans 設定の調整が必要な場合があります。
このトピックでは、Oracle ソースと Oracle ターゲットの間および Oracle ソースと非 Oracle ターゲットの間のキャラクタセットの変換が SharePlex でどのように処理されるのかを説明します。
使用している Oracle キャラクタセット内のすべての文字を SharePlex で複製するには、次のいずれかを満たしている必要があります。
次のキャラクタセットが SharePlex 向けにテストされ、サポートされています。
US7ASCII
UTF8
WE8ISO8859P1
AL16UTF16
AL32UTF8
KO16KSC5601
デフォルトでは、SharePlex は Oracle ターゲットデータベースによるキャラクタ変換の実行を許可します。Post がソースデータのキャラクタエンコーディングについて Oracle に通知し、Oracle が必要に応じて変換を実行します。
関連するキャラクタセットによって Oracle 変換はデータ損失が生じる可能性があります。例:
例 1:JA16SJIS キャラクタセットに含まれる日本語の「米印(※)」の文字に対応する記号は、US7ASCII キャラクタセットには含まれていません。この記号を US7ASCII データベース内で複製しようとした場合、Oracle が「?」文字に変換します。
例 2:Oracle によると、WE8ISO8859P1 キャラクタセットは US7ASCII キャラクタセットのスーパーセットであるので、US7ASCII に含まれる文字は変換されずに WE8ISO8859P1 ターゲットデータベースに post されると想定するのが論理的です。これは、0x00 から 0x7F. までの範囲に適応されます。しかし、Oracle は 0x80 から 0xFF までの範囲の文字は、先頭ビットを取り去ります。この「変換」はソースのスーパーセットであるキャラクタセットに複製する際に、データ損失となる可能性があります。
注: Oracle はキャラクタセットが同一である場合は、文字の変換はしません。このため、キャラクタセットが WE8ISO8859P1 のデータベースに対して WE8ISO8859P1 データを post した場合、Oracle のデータ変換処理はバイパスされます。
変換なしでデータを適用するには
SP_OPO_NLS_CONVERSION パラメータを 1 に設定して、変換なしでデータを適用します。詳細については、「SharePlex SharePlex リファレンスガイド」を参照してください。
注: NLS_NCHAR_CHARACTERSET がソースデータベースとターゲットデータベースで異なる場合、SharePlex は常に NVARCHAR および NCLOB データを変換します。
オープンターゲットのターゲット(非 Oracle ターゲット)に複製する場合、SharePlex は任意の Oracle Unicode キャラクタセットと US7ASCII キャラクタセットからの複製をサポートします。SharePlex は Unicode キャラクタセットでオープンターゲットにデータを post するので、ソースデータが Unicode または US7ASCII の場合、ターゲットでの変換は必要ありません。
ただし、次に該当する場合、ターゲットでの変換が必要です。
Linux 上で Oracle クライアントとの変換を実行するには
Windows 上で Oracle クライアントとの変換を実行するには
Unicode および US7ASCII データを変換せずに適用するには
ソースデータが Unicode または US7ASCII であり、LOB データを複製していない場合、変換または Oracle クライアントは必要ありません。SP_OPX_NLS_CONVERSION パラメータを 0 に設定して変換を無効にし、Post が実行中の場合は再起動します。
© 2021 Quest Software Inc. ALL RIGHTS RESERVED. Feedback Terms of Use Privacy