Chat now with support
Chat with Support

SharePlex 8.6.6 - 管理ガイド

このガイドについて このガイドで使用されている表記規則 SharePlex の概要 SharePlex の実行 複数の SharePlex インスタンスの実行 sp_ctrl でのコマンドの実行 SharePlex パラメータ 複製のための Oracle 環境の準備 設定ファイルの作成 オープンターゲットのターゲットへの複製の設定 複製方法の設定 分割レプリケーションの設定 名前付きキューの設定 変更履歴ターゲットを維持するための SharePlex の設定 Oracle DDL の複製 エラー処理のセットアップ データの変換 SharePlex セキュリティ機能の設定 実稼動環境での複製のアクティベート SharePlex の監視 複製上の問題の防止および解決方法 非同期データの修復 Oracle の高可用性を維持するための手順 アクティブな複製環境の変更 Oracle アプリケーションのパッチまたはアップグレードの適用 ソースまたはターゲット上の Oracle データのバックアップ Capture プロセスのチューニング Post プロセスのチューニング 付録 A:ピアトゥピアの説明図 付録 B:SharePlex 環境変数

トランスフォーメーションの展開

データの変換 > トランスフォーメーションの展開

トランスフォーメーションは次の手順で展開します。

トランスフォーメーションルーチンの作成

動的な PL/SQL 手続き型言語を使用してトランスフォーメーションルーチンを作成します。パブリックパッケージ sp_cr で定義されたパラメータとレコードおよびテーブルの構造を使用します。このパッケージは、データベースの SharePlex スキーマにインストールされています。このパッケージは、次のパラメータを使用します。

プロシージャインターフェイス

このテンプレートに従ってプロシージャを作成します。

(table_info in outsplex.sp_cr.row_typ, col_values insplex.sp_cr.col_def_tabtyp)

ここで、

  • splex は、SharePlex スキーマです。
  • sp_cr は、PL/SQL レコードおよびテーブル構造を含むパッケージの名前です。
  • row_typ は、in 変数および out 変数を渡す PL/SQL レコードの名前です(「パッケージ定義」を参照してください)。
  • col_def_type は、列情報を格納する PL/SQL テーブルの名前です(「col_def_type テーブル」を参照してください)。

パッケージ定義

SharePlex は、SharePlex データベーススキーマの sp_cr という名前のパブリックパッケージに PL/SQL レコードおよびテーブル構造を定義します。このパッケージは、次のパラメータを使用します。

"CREATE or REPLACE PACKAGE %s.sp_cr AS 
        "TYPE row_typ IS RECORD  
        "(src_host VARCHAR2(32), 
        "src_ora_sid VARCHAR2(32), 
        "src_ora_time VARCHAR2(20), 
        "source_rowid VARCHAR2(20), 
        "target_rowid VARCHAR2(20), 
        "statement_type VARCHAR2(6), 
        "source_table VARCHAR2(78), 
        "target_table VARCHAR2(78), \n\t"
        "oracle_err NUMBER, 
        "status NUMBER, 
        "action NUMBER, 
        "reporting NUMBER 
        "); 
IN 変数

競合を引き起こす行操作のたびに、SharePlex はこのメタデータ情報をプロシージャに渡します。

変数 説明
src_host (操作が発生した)ソースシステムの名前。これには大文字と小文字の区別があり、たとえば SysA というようにソースシステムと同じ大文字/小文字を用いて渡されます。指定した post キューがターゲットシステムで使用中である場合、この変数は、たとえば postq1 というように post キュー の名前で構成されます。
src_ora_sid ソースデータベースの ORACLE_SID。これには大文字と小文字の区別があり、Windows レジストリまたは V$PARAMETER テーブルの oratab ファイルと同じ大文字/小文字を用いて渡されます。
src_ora_time ソース REDO ログ内の変更レコードのタイムスタンプ。
source_rowid ソース行の行識別子。これは、たとえば ‘123456’ というように一重引用符で囲まれたリテラルとして渡されます。
target_rowid ターゲットデータベース内の対応する行の行識別子。SharePlex は、ターゲットデータベースへのクエリによって行識別子を取得します。これは、たとえば ‘123456’ というように一重引用符で囲まれたリテラルとして渡されます。PRIMARY キーを使用しても行が見つからない場合、値は NULL です。
statement_type I、U または D のいずれかの文字。操作が INSERT 文、UPDATE 文、DELETE 文のいずれであるのかを示します。
source_table ソーステーブルの所有者および名前。owner.table 形式で記述します。この値には大文字と小文字の区別があり、データベースでテーブルが指定される方法に一致します。これは、たとえば "scott"."emp." というように二重引用符で囲まれて渡されます。
target_table ターゲットテーブルの所有者および名前。owner.table 形式で記述します。この値には大文字と小文字の区別があり、データベースでテーブルが指定される方法に一致します。これは、たとえば "scott"."emp." というように二重引用符で囲まれて渡されます。
oracle_err

プロシージャが競合解決とトランスフォーメーションのどちらに使用されるかに応じて異なります。

トランスフォーメーション:SharePlex はこの変数については 0 の値を渡します。この変数は、conflict resolution に対してのみ使用します。

競合解決: 競合を引き起こした Oracle エラー番号。

OUT 変数

これらの変数は、プロシージャが成功したか失敗したかに応じて、SharePlex の動作を指示します。

変数 説明
status

プロシージャが成功したかどうかを定義します。このパラメータについては、値を指定する必要があります。

  • 0 の値は実行に成功したことを意味します。プロシージャが競合解決とトランスフォーメーションのどちらに使用されるかに応じて、動作が異なります。

    トランスフォーメーション:Post は SQL を書き込みません。トランスフォーメーション が成功すると、SharePlex は Event Log にはいかなるエラーメッセージも書き込みません。post キューの次の複製操作を読み込んで処理を継続します。

  • 競合解決:0 の値は SharePlex に SQL 文の処理を進めるよう指示します。conflict resolution が成功すると、SharePlex は Event Log にはいかなるエラーメッセージも書き込みません。
  • 1 の値はプロシージャが成功しなかったことを示します。この場合、 SharePlex が行う動作は、 action 変数として指定する内容によって決まります。
  • トランスフォーメーションのみ)7 の値は実行に失敗したことを意味し、Post プロセスの停止を指示します。
action

SharePlex で実行するアクションを定義します。これは、プロシージャがトランスフォーメーションと競合解決のどちらに使用されるかに応じて異なります。

トランスフォーメーション:このパラメータについては 0 の値を指定する必要があります。この値は、SQL 文を post しないよう SharePlex に指示します。トランスフォーメーションルーチンは、トランスフォーメーションの結果をターゲットテーブルまたは別のテーブルのどちらかに post します。この動作の結果は、reporting 変数について指定する内容によって決まります。

競合解決:競合解決プロシージャが失敗した結果として実行するアクションを指定します。このパラメータについては、値を指定する必要があります。

  • 0 の値は SharePlex が SQL 文を post 「しない」よう指示します。この動作の結果は、reporting 変数について指定する内容によって決まります。
  • 1 の値は SharePlex の内部使用のために保持されます。この値は使用しないでください。
  • conflict resolution ファイルが存在する場合、SharePlex がファイルに一覧化した次の conflict resolution プロシージャを試行するよう指示します。
reporting

プロシージャの失敗をどのように SharePlex が報告するかを決定します。このパラメータについては、値を指定する必要があります。

  • 0 の値は、エラーを報告したり、失敗した SQL 文を SID_errlog.sql ログに書き込んだりしないよう SharePlex に指示します。
  • 1 と 2 の値は、SharePlex の内部での使用のために保持されます。これらの値は使用しないでください。
  • 3 の値は、失敗した SQL 文を SID_errlog.sql ログに書き込んで、エラーを Event Log に出力するよう SharePlex に指示します。

col_def_type テーブル

SharePlex は、複製した操作ごとに col_def_tabtyp PL/SQL テーブルを作成します。このテーブルには、列情報が格納されます。これは、プロシージャがトランスフォーメーションと競合解決のどちらに使用されるかに応じて異なります。

  • トランスフォーメーション:SharePlex は行操作ごとに、列情報を col_def_type に書き込みます。
  • 競合解決:競合を引き起こす各行操作に対し、SharePlex は列情報を col_def_tabtyp に書き込みます。

SharePlex が行を特定できない場合、すべてのフィールドが値を備えているわけではないにもかかわらず、SharePlex はルーチンにすべてのフィールドを渡します。

col_def_tabtyp テーブルに値を設定するためのデータ型を以下に示します。

type col_def_typ is record
	(column_name	user_tab_columns.column_name%type
	,datatype	user_tab_columns.datatype%type
	,is_key	boolean
	,is_changed	boolean
	,old_value	varchar2(32764)
	,new_value	varchar2(32764)
	,current_value	varchar2(32764)
	);
type col_def_tabtyp is table of col_def_typ
col_def_tabtyp の説明
説明
column_name たとえば emp_last_name というように、ソーステーブルから複製された列の名前をプロシージャに伝えます。この値には、大文字と小文字の区別はありません。
datatype たとえば VARCHAR2 というように、複製された列のデータのデータ型をプロシージャに伝えます。この値は常に大文字です。
is_key 列がキー列であるかどうかをプロシージャに伝えます。キー列である場合、SharePlex は TRUE の値を渡します。キー列の一部でなければ、SharePlex は FALSE の値を渡します。
is_changed

列の値が変更されたかどうかをプロシージャに伝えます。値が変更されている場合、SharePlex は TRUE の値を渡します。列が変更されていなければ、SharePlex は FALSE の値を渡します。

  • INSERT の場合、データベースには列が存在しないため、is_changed は非NULL の値に対してTRUEです。NULL の値が挿入されると、is_changed は FALSE になります。
  • UPDATE の場合、is_changed は非キー列に対して TRUEです。キー列の場合、is_changed は通常 FALSE です。ただし、SharePlex は、変更されたキー列の値を渡します。

    競合解決のみ:ターゲットシステムでキー値も変更された場合、SharePlex が正しい行を特定できず、競合解決が失敗することがあります。

  • DELETE の場合、SharePlex は DELETE 文のキーの値のみを複製するため、is_changed は常に FALSE です。
old_value

複製した列の古い値がソースシステムで変更される前にその値をプロシージャに伝えます。INSERT の前にターゲットデータベースに行が存在しなかったため、この列は INSERT に対して NULL です。

競合解決のみ:これは、SharePlex が UPDATE と DELETE のための同期チェックの一部としてソースおよびターゲット列を比較したプリイメージです。SharePlex によって渡された古い値がターゲット行から取得した current_value 値と一致しない場合、競合が存在します。

new_value 複製した列がソースシステムで変更されたときにその新しい値をプロシージャに伝えます。
current_value ターゲットテーブルの列の現在の値をプロシージャに伝えます。SharePlex がターゲット行を特定できない場合、値は NULL です。
操作タイプごとの col_def_tabtyp テーブルのエントリの例

次のテーブルは、操作のそれぞれのタイプについて起こり得る結果を示しています。

INSERT 操作
column_name is_changed old_value new_value current_value1 is_key
C1 TRUE NULL bind NULL FALSE
C2 TRUE NULL bind NULL TRUE
C3 FALSE NULL NULL NULL TRUE | FALSE

1 INSERT が失敗した場合、その原因は同じ PRIMARY キーを持つ行がすでにターゲットデータベースに存在することにあります。SharePlex は INSERT に現在の値を返しません。

UPDATE 操作
column_name is_changed old_value new_value current_value1、2 is_key
C1 TRUE bind bind NULL | target_value FALSE
C2 FALSE bind NULL NULL | target_value TRUE
C3 TRUE bind bind NULL | target_value TRUE

1(競合解決)UPDATE が失敗した場合、その原因は SharePlex が PRIMARY キーおよびプリイメージを使用して行を見つけられないことにあります。行が見つからない場合、SharePlex は、PRIMARY キーのみを使用して行を検索します。行が見つかった場合、SharePlex は、変更された列だけでなくキー列についても現在の値を返します。SharePlex が PRIMARY キーのみを使用して行を見つけることができない場合、SharePlexNULL を返します。

2(トランスフォーメーション)UPDATE の場合、トランスフォーメーションのためにプリイメージが異なっているので、PRIMARY キーとプリイメージを使用しても SharePlex は行を特定できません。別の方法として、PRIMARY キーのみを使用して行を検索します。行が見つかった場合、SharePlex は、変更された列だけでなくキー列についても現在の値を返します。PRIMARY キーのみを使用して行を特定できない場合、current_value は NULL です。

DELETE 操作
column_name is_changed old_value new_value current_value1 is_key
C1 FALSE bind NULL NULL TRUE

1 DELETE が失敗した場合、その原因は SharePlex が PRIMARY キーを使用して行を見つけられないことにあります。したがって、SharePlex は NULL を返します。

トランスフォーメーションファイルの完成

SQL 操作を post する代わりにトランスフォーメーションルーチンを呼び出すよう SharePlex に指示するには、transformation.SID ファイルを使用します。ここで、SID はターゲットデータベースの ORACLE_SID です。SQL 操作を実行する前に、Post はこのファイルを読み込んで、呼び出すトランスフォーメーションルーチンがあるかどうかを判断します。

このファイルの場所

空の transformation.SID ファイル(SID はターゲットインスタンスの ORACLE_SID)は、SharePlex がインストールされたときに、SharePlex 変数データディレクトリの data サブディレクトリに含まれています。ターゲットシステム上にあるこのファイルを使用してください。

このファイルが存在しない場合は、ASCII テキストエディタを用いて ASCII フォーマットで作成します。transformation.SID という名前を付けてください。ここで SID はターゲットインスタンスの ORACLE_SID です。注:SID には、大文字と小文字の区別があります。

重要! transformation.SID ファイルは、アクティブな設定ごとに 1 つだけです。

ファイル内にエントリを作成する方法

次のテンプレートを使用して、プロシージャを 1 つまたは複数のオブジェクトおよび操作タイプにリンクします。

owner.object {i | u | d | iud} owner.procedure

ここで、

  • owner.object は、target オブジェクトの所有者と名前、またはワイルドカードエントリです(「構文ルール」を参照してください)。
  • i| u | d は、指定された手続きによって変換される操作のタイプです。idiud のように、任意またはすべての操作タイプを指定できます。大文字と小文字のどちらも有効です。
  • owner.procedure は、指定されたオブジェクトおよび操作タイプを処理するプロシージャの所有者名およびプロシージャ名です。
構文ルール
  • オブジェクト指定、操作タイプ指定、およびプロシージャ指定の間には、1 つ以上のスペースが必要です。
  • LIKE 演算子と SQL ワイルドカード(%)を使用して、検索文字列によって複数のオブジェクトを指定できます(例を参照してください)。
  • 1 文字のワイルドカードを表すには、アンダーライン(_)を使用できます。アンダーラインが含まれるテーブル名の場合(emp_sal など)、SharePlex は、バックスラッシュ(\)については、アンダーラインをワイルドカードではなくリテラルとして表すエスケープ文字として認識します(例:like:scott.%\_corp\_emp)。LIKE 演算子を使用しない場合は、オブジェクト名にアンダーラインが含まれていてもバックスラッシュのエスケープ文字は不要です。
  • コメント行はファイルの任意の場所に使用できます。コメント行はパウンド(#)記号で開始します。
トランスフォーメーションファイルの例
scott.sal IUD scott.sal_tr
like:scott.%\_corp\_emp IUD scott.emp_tr1
like:scott% IUD scott.emp_tr2
scott.cust U scott.sal_tr

複製中にファイルを変更する方法

トランスフォーメーションファイルは複製中にいつでも変更して、テーブルやプロシージャを追加したり削除したりできます。ファイルを変更したら、Post プロセスを停止して再起動します。

SharePlex セキュリティ機能の設定

SharePlexセキュリティ機能の設定

SharePlex には、ローカルシステム上の複製データやネットワーク上で送信中の複製データを保護する、さまざまなセキュリティ機能があります。この章では、これらの機能を設定および使用するためのガイドラインを説明します。

コンテンツ

SharePlex との接続のセキュリティ保護

SharePlex セキュリティ機能の設定 > SharePlex との接続のセキュリティ保護

SharePlex には、特定のリモートシステムの SharePlex プロセスがサービスやコマンドの要求のためにローカルシステムに接続するのを許可するかどうかを確認するホスト認証セキュリティ機能があります。ホスト認証を実装するには、SharePlex 変数データディレクトリの data サブディレクトリに auth_hosts という名前の ASCII テキストファイルを作成し、接続許可を付与されているシステムの名前をそのファイルに書き込みます。

必要条件

  • 使用する場合は、auth_hosts ファイルに有効なエントリが含まれる必要があります。このファイルが存在していても空であったり、不正なエントリが含まれていたりすると、SharePlex はイベントログに次のようなメッセージを送ります。unauthorized connection attempt.
  • auth_hosts がシステムに存在しない場合、sp_cop への接続を試みるすべてのシステムからのあらゆる要求を SharePlex は受け入れます。
  • ローカルシステムの名前は、このファイルの最初の非コメント行に記載されている必要があります。これに該当しない場合、ホスト認証は機能しません。
  • コメントを含む、すべてのエントリの末尾は改行であることが必要です。

auth_hosts ファイルを設定するには

注: コメント行の先頭には、ポンド記号(#)を付けます。

  1. vi(Unix および Linux)、NotePad(Windows)、ワードパッド(Windows)などの ASCII テキストエディタを起動して空白のファイルを開きます。Unix および Linux のテキストエディタを使用する場合は、エディタを起動する前に SharePlex 変数データディレクトリの data サブディレクトリにディレクトリを変更します。
  2. 最初の非コメント行に、Localhost.mycorp.com のように、ローカルシステムのフルマシン名を入力します。
  3. 次の非コメント行に、次のいずれかを入力します。

    説明
    all すべてのリモートシステム上のプロセスに対して接続権限を付与します。
    hostname 指定したホストに対して接続権限を付与します。remotehost.mycorp.com のように、完全修飾マシン名を入力します。必要な数だけ(1 行に 1 つずつ)、ホスト名を指定します。
  4. このファイルを auth_hosts という名前で、SharePlex 変数データディレクトリの data サブディレクトリ内に保存します。複数の sp_cop インスタンスを実行している場合、このファイルを必ず正しい変数データディレクトリに保存します。

例:

ローカルホスト名は、最初の非コメント行に記載されています。

#Comment: first line is local host name.

Localhost.mycorp.com

#Comment: remaining lines are remote hosts.

remotehost.mycorp.com

remotehost2.mycorp.com

remotehost3.mycorp.com

SSH によるデータのセキュリティ保護

SharePlex セキュリティ機能の設定 > SSH によるデータのセキュリティ保護

SharePlex は SSH® Secure ShellTM ユーティリティを使用して、ネットワークサービス(セキュアでないネットワークでのセキュアなリモートログインやその他のサービス)を暗号化します。

必要条件

  • SSH ソフトウェアを購入してインストールします。SSH は Shareplex には含まれていません。
  • SharePlex で SSH を利用する場合は、SSH 構成においてローカルポートフォワーディング(トンネリングとも呼ばれる)を使用する必要があります。ポートフォワーディングにより、安全な SSH セッションを確立し、そのセッションを介して TCP 接続を行うことができます。
  • SharePlex は、ソースシステムと 1 つのターゲットシステムの間で SSH ソフトウェアと連携するように設定できます。ソースが複数のターゲットに複製される場合、SSH で設定できるルートは 1 つに限定されます。
  • この機能は、Unix と Linux でサポートされています。

SSH を使用するように SharePlex をセットアップするには

  1. ソースおよびターゲットシステムで、トンネルポートとして利用可能なローカルポートを選択します。ピアトゥピアおよび高可用性レプリケーションでは、ポートは両方のシステムで同じ番号であることが必要です。その他の複製方法では、システムごとに異なるポートを選択します。
  2. ソースシステムで、次のコマンドをコマンドプロンプトから発行します。このコマンドは、ターゲットシステムに接続してトンネルをセットアップします。

    $ ssh -L source_port:target_host:target_port userid@target_host -N -f

    ここで、

    • -L は、(クライアントとして機能する)ローカルホストで指定したポートを、リモートホストおよびポートに転送することを指定します。
    • source_port は、ソースシステム上のポート番号です。
    • target_host は、ターゲットシステムの名前です。
    • target_port は、ターゲットシステム上のポートです。
    • userid は、Unix および Linux ユーザー ID です。パスワードを指定するように、プロンプトが表示されます。
    • -N は、リモートコマンドを実行しないという指定です。この指定は、ポートの転送(プロトコルバージョン 2 のみ)に限定して使用されます。
    • -f は、コマンドの実行直前に SSH シェルがバックグラウンドで動作するように強制的に設定します。この引数を省略した場合、使用しているターミナルウィンドウを開いたままにする必要があります。SSH は、nohup では起動できません。

    これらのコマンドの詳細については、SSH のドキュメントを参照してください。

  3. (複数の SharePlex インスタンスを使用している場合)ソースシステムで、SSH をセットアップしている sp_cop のインスタンス用に正しい変数データディレクトリをエクスポートします。

    ksh シェルの場合:

    export SP_SYS_VARDIR=/full_path_of_variable-data_directory

    csh シェルの場合:

    setenv SP_SYS_VARDIR /full_path_of_variable-data_directory

  4. ソースシステムで、sp_cop を開始します。SharePlex を起動する場合の詳細については、「SharePlex の実行」を参照してください。
  5. ソースシステムで、製品ディレクトリの bin サブディレクトリから sp_ctrl を実行します。
  6. sp_ctrl で、SP_XPT_USE_LOCALHOST パラメータを次のいずれかの方法で設定します。

    • ターゲットシステムが 1 つだけの場合は、次の構文でパラメータを設定します。

      sp_ctrl> set param SP_XPT_USE_LOCALHOST 1

    • 複数のターゲットが存在する場合は、次のコマンドを使用して、SSH を使用するターゲットへのトンネルをセットアップします。別のターゲットシステムへの複製は、通常の方法で直接接続します。

      sp_ctrl> set param SP_XPT_USE_LOCALHOST to host 1

    ここで、host は、トンネルを使用するターゲットシステムの名前です。

  7. sp_ctrl で、list param コマンドを modified オプション付きで使用して、パラメータ設定を確認します。設定が正しい場合、この時点で設定をアクティベートできます。

    sp_ctrl> list param modified

  8. アクティブな設定が存在する場合は、sp_cop をいったん停止してから開始して、新しいパラメータ設定をアクティブにします。

    sp_cop を停止するには

    sp_ctrl> shutdown /productdir/bin/sp_cop &

    sp_cop を開始するには

    $ /productdir/bin/sp_cop &

Related Documents

The document was helpful.

Select Rating

I easily found the information I needed.

Select Rating