サポートと今すぐチャット
サポートとのチャット

SharePlex 11.4 - 管理者ガイド

このガイドについて このガイドで使用される表記規則 SharePlexの概要 SharePlexの実行 SharePlexの複数のインスタンスの実行 sp_ctrlでのコマンドの実行 SharePlexパラメータの設定 データレプリケーションの設定 コンテナデータベースとの間のレプリケーションの設定 名前付きキューの設定 分割レプリケーションの設定 変更履歴ターゲットへのレプリケーションの設定 レプリケーション戦略の設定 DDLレプリケーションの設定 エラー処理の設定 データトランスフォーメーションの設定 セキュリティ機能の設定 SharePlexユーザのセキュリティグループへの割り当て 本番システムでのレプリケーションの開始 SharePlexの監視 レプリケーションの問題の防止と解決 非同期データのrepair Captureプロセスの調整 Postプロセスの調整 Oracleフェールオーバー後のレプリケーションのリカバリ アクティブなレプリケーション環境に対する変更 Oracleアプリケーションのパッチまたはアップグレードの適用 ソースまたはターゲットのOracleデータのバックアップ トラブルシューティングのヒント 付録A: ピアツーピア図 付録B: SharePlex環境変数

ワイルドカードを使用した複数のオブジェクトの指定

ワイルドカード文字を使用すると、スキーマの複数のオブジェクトを設定ファイルの1つのエントリで指定できます。SharePlexでは、明示的に除外したものを除き、ワイルドカードを満たすすべてのオブジェクトがレプリケートされます。

: ワイルドカードで指定できるのはオブジェクト名のみです。所有者名はワイルドカードで指定できません。

ワイルドカードのサポートの要件および制限

サポートされるワイルドカード構文

SharePlexは以下のSQLワイルドカードをサポートしています。

  • パーセント%ワイルドカードで文字列を指定しますワイルドカードを使用した複数のオブジェクトの指定ページを参照
  • アンダースコア_ワイルドカードで1文字を指定します。
  • パーセント記号やアンダースコア文字を含むテーブル名emp_salaryなどの場合、SharePlexはバックスラッシュ\を拡張文字として認識し、ワイルドカードではなくリテラルであることを示します。

設定ファイルでのワイルドカード名の指定

このテンプレートは、設定ファイルでワイルドカード名を指定する際のヘルプとして使用します。

ワイルドカードを使用したオブジェクト名の設定
datasource_specification
expand src_owner.wildcard_name [not (list)]

tgt_owner.wildcard_name

routing_map
構文要素の説明
コンポーネント 説明
expand

展開する必要があるワイルドカード文字が指定に含まれていることを示します。SharePlexexpandキーワードを検出すると、ワイルドカード指定の条件に一致するすべてのオブジェクトをデータベースに照会します。この必須のキーワードがない場合、ワイルドカード文字は明示的なオブジェクト名の一部であると見なされ、ワイルドカードの展開は行われません。

: expandの後にスペースを入れてからソースオブジェクトの指定を開始します。

src_owner.wildcard_name
  • src_ownerはソースオブジェクトの所有者です。所有者名はワイルドカードで指定できません。所有者名にワイルドカードが使われている場合、SharePlexは、ワイルドカードが所有者スキーマ名の一部であると見なします。
  • wildcard_nameはソースオブジェクトのワイルドカード名です。

ルール:

Oracle: ターゲットオブジェクトの名前はソースオブジェクトの名前と同一でなければなりませんが、オブジェクトは異なる所有者に属していてもかまいません。

not (list)

ワイルドカードの展開から除外するオブジェクトを定義する除外リスト。このオプションを使用して、レプリケートしないオブジェクトを除外します。

注: このnotキーワードは、SQLワイルドカードのNOT演算子と同じ意味ではありません。

  • notキーワードと括弧は必須の要素です。
  • listは、同じ所有者が所有するテーブルのカンマ区切りリストで、ワイルドカードにすることも明示的に指定することもできます。例: not (spo%, gen%, product)

notキーワードの前後にはスペースを入れます。リスト内の各コンマの後にはスペースを入れることができます。

注: ワイルドカードを満たすオブジェクトが設定ファイルの他の場所にリストされている場合、そのエントリは、ワイルドカードエントリで指定された処理またはルーティングをオーバーライドします。この場合、not句は必要ありませんを参照してください。

tgt_owner.wildcard_name
  • tgt_ownerはターゲットオブジェクトの所有者です。
  • wildcard_nameはターゲットオブジェクトのワイルドカード名です。

ターゲットの指定はowner.%の形式でなければなりません。owner.tab%のように、部分的に展開されたターゲット側のワイルドカード名はサポートされません。

routing_map 任意の有効なルーティングマップ。詳細については、「設定ファイル内のルーティング指定

ワイルドカードの指定の検証

ワイルドカードを指定することでレプリケートするテーブルの特定のリストが作成されることを確認するには、設定をアクティベーションする前にsp_ctrlverify configコマンドを実行します。このコマンドは、SharePlexがキャプチャしてレプリケートするオブジェクトのリストと発生した問題のリストを作成します。このコマンドの詳細については、『SharePlexリファレンスガイド』を参照してください。

有効なワイルドカードの指定の例

例1: 以下のようにワイルドカードを指定すると、SharePlexに対し、所有者がscottでテーブル名がprod%のようなすべてのテーブルをアクティベーションするように指示が与えられます。ただし、テーブル名が%temp%のような場合を除きます。この説明に一致するすべてのテーブルは、halスキーマのターゲット上にある同じ名前のテーブルにレプリケートされます。SharePlexが名前を自動的に大文字に変換し、「%TEMP%」ではなく「PROD%」のような名前を持つすべてのテーブルがアクティベーションされることに注意してください。

Datasource:o.sidA	 	 
expand scott.prod% not (%temp%)    hal.%    sysa@o.sidB

例2: 次の例は、ワイルドカードで指定するテーブルの1つこの場合はphotoテーブルに対して特別な処理を指定する方法を示しています。photoを除くすべてのテーブルは、デフォルトのpostキューを経由してルーティングされます。photoテーブルの個別のエントリはワイルドカードエントリをオーバーライドし、名前付きpostキューを通してphotoテーブルを処理します。詳細については、名前付きpostキューの設定を参照してください。

Datasource:o.sidA	 	 
cust.%        cust.%        hostB@o.oraB
cust.photo    cust.photo    hostB:lobQ@o.oraB

有効なワイルドカードの指定の例を以下に示します。

Datasource:o.sidA	 	 
expand scott.%test%    scott.%    sysa@o.sidB
Datasource:o.sidA	 	 
expand scott.%t__t%    fred.%    sysa@o.sidB
Datasource:o.sidA	 	 
expand scott.% not (spo%, gen%, prodct)    scott.%     sysa@o.sidB
Datasource:o.sidA	 	 
expand scott.prod% not (%temp%)    hal.%    sysa@o.sidB

無効なワイルドカードの指定の例

以下の例にはワイルドカードスキーマが含まれていますが、これは許可されていません。

Datasource:o.sidA	 	 
expand rob%.%test%    scott.%    sysa@o.sidB

以下の例では、ターゲットオブジェクト名の一部にワイルドカードが使用されていますが、これは許可されていません。

Datasource:o.sidA	 	 
expand scott.%test%    scott.%obj%    sysa@o.sidB

ワイルドカードを使用したPostgreSQLの複数のテーブルの指定

ワイルドカード文字を使用すると、スキーマの複数のテーブルを設定ファイルの1つのエントリで指定できます。SharePlexでは、明示的に除外したものを除き、ワイルドカードを満たすすべてのオブジェクトがレプリケートされます。

: ワイルドカードで指定できるのはテーブル名のみです。スキーマ名はワイルドカードで指定できません。

ワイルドカードのサポートの要件および制限

ワイルドカードのテーブル名を含むスキーマは、設定がアクティベーションされる前にソースとターゲット上に存在していなければなりません。

サポートされるワイルドカード構文

SharePlexは以下のPostgreSQLワイルドカードをサポートしています。

  • パーセント%ワイルドカードで文字列を指定しますページを参照
  • アンダースコア_ワイルドカードで1文字を指定します。
  • パーセント記号やアンダースコア文字を含むテーブル名emp_salaryなどの場合、SharePlexはバックスラッシュ\を拡張文字として認識し、ワイルドカードではなくリテラルであることを示します。

設定ファイルでのワイルドカード名の指定

このテンプレートは、設定ファイルでワイルドカード名を指定する際の支援として使用します。

ワイルドカードを使用したテーブル名の設定
datasource_specification
expand src_schema.wildcard_name [not (list)]

tgt_schema.wildcard_name

routing_map
構文要素の説明
コンポーネント 説明
expand

展開する必要があるワイルドカード文字が指定に含まれていることを示します。SharePlexexpandキーワードを検出すると、ワイルドカードの指定の条件に一致するすべてのテーブルをデータベースに照会します。この必須のキーワードがない場合、ワイルドカード文字は明示的なテーブル名の一部であると見なされ、ワイルドカードの展開は行われません。

: expandの後にスペースを入れてからソース側のテーブルの指定を開始します。

src_schema.wildcard_name
  • src_schemaはソース側のテーブルのスキーマです。スキーマ名はワイルドカードで指定できません。スキーマ名にワイルドカードが使われている場合、SharePlexは、ワイルドカードがスキーマ名の一部であると見なします。
  • wildcard_nameはソース側のテーブルのワイルドカード名です。

PostgreSQL: ターゲット側のテーブルの名前はソース側のテーブルの名前と同じでなければなりませんが、テーブルは異なるスキーマに属している可能性があります。

not (list)

ワイルドカードの展開から除外するテーブルを定義する除外リスト。このオプションを使用して、レプリケートしないテーブルを除外します。注: このnotキーワードは、SQLワイルドカードのNOT演算子と同じ意味ではありません。

  • notキーワードと括弧は必須の要素です。
  • listは、同じスキーマが所有するテーブルのカンマ区切りリストで、ワイルドカードにすることも明示的に指定することもできます。例: not (spo%, gen%, product)

notキーワードの前後にはスペースを入れます。リスト内の各コンマの後にはスペースを入れることができます。

注: ワイルドカードを満たすテーブルが設定ファイルの他の場所にリストされている場合、そのエントリは、ワイルドカードエントリで指定された処理またはルーティングをオーバーライドします。この場合、not句は必要ありませんを参照してください。

tgt_schema.wildcard_name
  • tgt_schemaはターゲット側のテーブルのスキーマです。
  • wildcard_nameはターゲット側のテーブルのワイルドカード名です。

ターゲットの指定はschema.%の形式でなければなりません。schema.tab%のように部分的に展開されたターゲットのワイルドカード名はサポートされません。

routing_map 任意の有効なルーティングマップ。

ワイルドカードの指定の検証

ワイルドカードを指定することでレプリケートするテーブルの特定のリストが作成されることを確認するには、設定をアクティベーションする前にsp_ctrlverify configコマンドを実行します。このコマンドは、SharePlexがキャプチャしてレプリケートするテーブルのリストと発生した問題のリストを作成します。このコマンドの詳細については、『SharePlexリファレンスガイド』を参照してください。

有効なワイルドカードの指定の例

例1: 以下のようにワイルドカードを指定すると、SharePlexに対し、所有者がscottでテーブル名がprod%のようなすべてのテーブルをアクティベーションするように指示が与えられます。ただし、テーブル名が%temp%のような場合を除きます。この説明に一致するすべてのテーブルは、halスキーマのターゲット上にある同じ名前のテーブルにレプリケートされます。

Datasource:r.dbname    
expand scott.prod% not (%temp%)    hal.%    hostB@r.dbname

例2: 次の例は、ワイルドカードで指定するテーブルの1つこの場合はphotoテーブルに対して特別な処理を指定する方法を示しています。photoを除くすべてのテーブルは、デフォルトのpostキューを経由してルーティングされます。photoテーブルの個別のエントリはワイルドカードエントリをオーバーライドし、名前付きpostキューを通してphotoテーブルを処理します。

Datasource:r.dbname	 	 
cust.%        cust.%        hostB@r.dbname
cust.photo    cust.photo    hostB:queuename@r.dbname

PostgreSQLからPostgreSQLへのレプリケーションで有効なワイルドカードの指定の例を以下に追加で示します。

Datasource:r.dbname    
expand scott.%test%    scott.%    hostB@r.dbname
Datasource:r.dbname	 	 
expand scott.%t__t%    fred.%    hostB@r.dbname
Datasource:r.dbname	 	 
expand scott.% not (spo%, gen%, prodct)    scott.%     hostB@r.dbname
Datasource:r.dbname	 	 
expand scott.prod% not (%temp%)    hal.%    hostB@r.dbname

PostgreSQLからOracleへのレプリケーションで有効なワイルドカードの指定の例を以下に示します。

Datasource:r.dbname	 	 
expand "scott"."%test%"    "scott"."%"    hostB@o.target_dbname

PostgreSQLからSQL Serverへのレプリケーションで有効な部分ワイルドカードの指定の例を以下に示します。

Datasource:r.dbname    
expand scott.%test%    scott.%test%     hostB@r.target_dbname
無効なワイルドカードの指定の例

以下の例にはワイルドカードスキーマが含まれていますが、これは許可されていません。

Datasource:r.dbname    
expand rob%.%test%    scott.%    hostB@r.dbname

以下の例では、ターゲット側のテーブル名の一部にワイルドカードが使用されていますが、これは許可されていません。

Datasource:r.dbname    
expand scott.%test%    scott.%obj%    hostB@r.dbname

Oracleデータベースのユニークキーの定義

一意キーの定義

テーブルがプライマリキーまたは一意キーを使用して作成されていない場合、設定ファイルでオブジェクトを指定する際に、キーとして使用する列を指定することができます。SharePlexは指定された列をWHERE句で一意キーとして使用して、ポストするターゲット行を特定します。

注意:
  • プライマリキーや一意キーがない場合、SharePlexはテーブルのすべての列または列パーティションのすべての列をキーとして使用するため、レプリケーションパフォーマンスが低下します。
  • プライマリキーまたは一意キーがあるテーブルにキー定義が指定された場合、そのキー定義が定義済みのキーを上書きします。これは、既存のキーをSharePlexで使用したくない場合に便利です。

一意キーの定義 - OracleからOracleへ

キーとして指定する列は、以下の条件を満たす必要があります。

  • LONG列やLOB列は指定できません。
  • 行を一意に識別できる必要があります。そうなっていない場合は、レプリケーションが非同期エラーを返したり、誤ったターゲット行にポストしたりする可能性があります。
  • テーブルが垂直分割レプリケーション用に設定されている場合は、列パーティションの一部でなければなりません。垂直分割でexclude列表記を使用している場合、除外された列をキー定義で使用することはできません。詳細については、分割レプリケーションの設定を参照してください。
  • 列をサプリメンタル・ログ・グループに含めます。そうしない場合、SharePlexはその値をデータベースに問い合わせる必要があります。
  • ターゲットテーブルにインデックスを作成し、変数データディレクトリにあるSharePlex hintsファイルにそのインデックスを追加します。これにより、Postプロセスにそのインデックスを使用するように指示します。

キー定義の構文

キー定義を作成するには、ソースオブジェクトの後にスペースを入力し、括弧を含めて以下の構文を使用します。

src_owner.table !key (column_list)

ここで

  • !keyは必須キーワードです。
  • column_listはキーに含める列のリストです。列名はコンマで区切ります。コンマの後のスペースは任意です。

datasource_specification

   
src_owner.table !key (col_name, col2_name, ...)

tgt_owner.table

host@o.SID

Datasource:o.ora1
scott.tab !key(name,ID)    scott.tab2    sysB@oraB

一意キーの定義 - PostgreSQLからPostgreSQLへ

キーとして指定する列は、以下の条件を満たす必要があります。

  • 一意キーには、2000文字を超えるTEXT、BYTEA、JSON、JSONB、CHAR、サイズのないVARCHARまたは4000文字を超えるVARCHARを使用できません。

  • 行を一意に識別できる必要があります。そうなっていない場合は、レプリケーションが非同期エラーを返したり、誤ったターゲット行にポストしたりする可能性があります。
  • テーブルが垂直分割レプリケーション用に設定されている場合は、列パーティションの一部でなければなりません。垂直分割でexclude列表記を使用している場合、除外された列をキー定義で使用することはできません。詳細については、「分割レプリケーションの設定」を参照してください。

  • ターゲットテーブルにインデックスを作成し、Postプロセスにインデックスを使用するように指示します。

キー定義の構文

キー定義を作成するには、ソースオブジェクトの後にスペースを入力し、括弧を含めて以下の構文を使用します。

src_schema.table !key (column_list)

ここで

  • !keyは必須キーワードです。
  • column_listはキーに含める列のリストです。列名はコンマで区切ります。コンマの後のスペースは任意です。

datasource_specification

   
src_schema.table !key (col_name, col2_name, ...)

tgt_schema.table

host@r.dbname

Datasource:r.dbname
scott.tab !key(name,ID)    scott.tab2    sysB@dbname

一意キーの定義 - PostgreSQLからOracleへ

キーとして指定する列は、以下の条件を満たす必要があります。

  • 一意キーには、2000文字を超えるtext、char 、サイズのないvarcharまたは4000文字を超えるvarcharを使用できません。

  • 行を一意に識別できる必要があります。そうなっていない場合は、レプリケーションが非同期エラーを返したり、誤ったターゲット行にポストしたりする可能性があります。
  • テーブルが垂直分割レプリケーション用に設定されている場合は、列パーティションの一部でなければなりません。垂直分割でexclude列表記を使用している場合、除外された列をキー定義で使用することはできません。詳細については、分割レプリケーションの設定を参照してください。
  • ターゲットテーブルにインデックスを作成し、変数データディレクトリにあるSharePlex hintsファイルにそのインデックスを追加します。これにより、Postプロセスにそのインデックスを使用するように指示します。

キー定義の構文

キー定義を作成するには、ソースオブジェクトの後にスペースを入力し、括弧を含めて以下の構文を使用します。

src_schema.table !key (column_list)

ここで

  • !keyは必須キーワードです。
  • column_listはキーに含める列のリストです。列名はコンマで区切ります。コンマの後のスペースは任意です。

datasource_specification

   
src_schema.table !key (col_name, col2_name, ...)

tgt_owner.table

host@o.SID

Datasource:r.dbname
"scott"."tab" !key(name,ID)    "scott"."tab2"    sysB@o.oraB 

OracleデータベースのDML操作のフィルタリング

ワイルドカードが使用されている場合、レプリケーションから以下のDMLを除外するようにSharePlexを設定できます。

  • Oracle DMLタイプINSERT、UPDATE、DELETE
  • OracleシーケンスおよびOracle SQL*Loader のダイレクトパスロードに関連するDML

DMLタイプのフィルタリング

SharePlexを設定することで、ターゲット側のテーブルに操作がレプリケートされないように、任意のタイプのDML操作をフィルタリングすることができます。DMLのフィルタリングは、他のほとんどのSharePlex設定構文と互換性があります。

DMLフィルタの設定

DMLフィルタを設定するには、ソーステーブルの指定に以下の構文を追加します。テーブルの指定とフィルタの指定の間にはスペースを空けます。複数の操作のタイプをフィルタリングの対象として指定することができます。列リストやキー定義など、他の機能の追加の構文は、DMLのフィルタの指定に従わなければなりません。

!dml(DML_type[,DML_type][,...])

ここで、DML_typeは以下のいずれかです。

DML_typeの入力 操作のタイプ
i INSERT
d DELETE
u UPDATE

例1

以下の例では、DELETE操作がターゲットテーブルにレプリケートされないようにフィルタリングしています。

Datasource:o.ora

 

 

scott.emp !dml(d)

scott.emp

prodsys@o.sysdb

例2

以下の例では、UPDATEのみがターゲット側のテーブルにレプリケートされるように、DELETEとINSERTをフィルタリングしています。この例は、DMLフィルタが列のマッピングの指定と互換性があることも示しています。

Datasource:o.ora

 

 

scott.stock !dml(d,i) (ID, name)

scott.stock (SKU, prod)

sys2@o.sysdb

現在のDMLフィルタの表示

verify configコマンドを使用すると、設定ファイルの各テーブルでフィルタリングされているDMLを表示できます。このコマンドは、アクティブまたは非アクティブな設定ファイルに使用できます。

sp_ctrl> verify config myconfig

7: "SCOTT"."EMP" "SCOTT"."EMP" prodsys@o.proddb

Filter out >>>>> DELETES

Unique Key : (EMPLOYEE_ID)

制限

レプリケーションからの特定のOracleオブジェクトに関連するDMLのフィルタリング

SharePlexがシーケンスやSQL*Loaderのダイレクトパスロードをレプリケートしないようにできます。デフォルトでは、これらのオブジェクトのレプリケーションは有効になっています。

このオブジェクトを除外 このパラメータを設定
シーケンス SP_OCT_REPLICATE_SEQUENCES 0
SQL*Loaderダイレクトパスロード SP_OCT_REPLICATE_DLOAD 0
関連ドキュメント

The document was helpful.

評価を選択

I easily found the information I needed.

評価を選択