ワイルドカード文字を使用すると、スキーマの複数のオブジェクトを設定ファイルの1つのエントリで指定できます。SharePlexでは、明示的に除外したものを除き、ワイルドカードを満たすすべてのオブジェクトがレプリケートされます。
注: ワイルドカードで指定できるのはオブジェクト名のみです。所有者名はワイルドカードで指定できません。
以下を含む設定のエントリでは、ワイルドカードは使用できません。
これらの機能を使用するテーブルは、設定ファイルで個別に指定する必要があります。
SharePlexは以下のSQLワイルドカードをサポートしています。
このテンプレートは、設定ファイルでワイルドカード名を指定する際のヘルプとして使用します。
datasource_specification | ||
expand src_owner.wildcard_name [not (list)] |
tgt_owner.wildcard_name |
routing_map |
コンポーネント | 説明 |
---|---|
expand |
展開する必要があるワイルドカード文字が指定に含まれていることを示します。SharePlexがexpandキーワードを検出すると、ワイルドカード指定の条件に一致するすべてのオブジェクトをデータベースに照会します。この必須のキーワードがない場合、ワイルドカード文字は明示的なオブジェクト名の一部であると見なされ、ワイルドカードの展開は行われません。 注: expandの後にスペースを入れてからソースオブジェクトの指定を開始します。 |
src_owner.wildcard_name |
ルール: Oracle: ターゲットオブジェクトの名前はソースオブジェクトの名前と同一でなければなりませんが、オブジェクトは異なる所有者に属していてもかまいません。 |
not (list) |
ワイルドカードの展開から除外するオブジェクトを定義する除外リスト。このオプションを使用して、レプリケートしないオブジェクトを除外します。 注: このnotキーワードは、SQLワイルドカードのNOT演算子と同じ意味ではありません。
notキーワードの前後にはスペースを入れます。リスト内の各コンマの後にはスペースを入れることができます。 注: ワイルドカードを満たすオブジェクトが設定ファイルの他の場所にリストされている場合、そのエントリは、ワイルドカードエントリで指定された処理またはルーティングをオーバーライドします。この場合、not句は必要ありません。例を参照してください。 |
tgt_owner.wildcard_name |
ターゲットの指定はowner.%の形式でなければなりません。owner.tab%のように、部分的に展開されたターゲット側のワイルドカード名はサポートされません。 |
routing_map | 任意の有効なルーティングマップ。詳細については、「設定ファイル内のルーティング指定 |
ワイルドカードを指定することでレプリケートするテーブルの特定のリストが作成されることを確認するには、設定をアクティベーションする前にsp_ctrlでverify 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
ワイルドカード文字を使用すると、スキーマの複数のテーブルを設定ファイルの1つのエントリで指定できます。SharePlexでは、明示的に除外したものを除き、ワイルドカードを満たすすべてのオブジェクトがレプリケートされます。
注: ワイルドカードで指定できるのはテーブル名のみです。スキーマ名はワイルドカードで指定できません。
ワイルドカードのテーブル名を含むスキーマは、設定がアクティベーションされる前にソースとターゲット上に存在していなければなりません。
SharePlexは以下のPostgreSQLワイルドカードをサポートしています。
このテンプレートは、設定ファイルでワイルドカード名を指定する際の支援として使用します。
datasource_specification | ||
expand src_schema.wildcard_name [not (list)] |
tgt_schema.wildcard_name |
routing_map |
コンポーネント | 説明 |
---|---|
expand |
展開する必要があるワイルドカード文字が指定に含まれていることを示します。SharePlexがexpandキーワードを検出すると、ワイルドカードの指定の条件に一致するすべてのテーブルをデータベースに照会します。この必須のキーワードがない場合、ワイルドカード文字は明示的なテーブル名の一部であると見なされ、ワイルドカードの展開は行われません。 注: expandの後にスペースを入れてからソース側のテーブルの指定を開始します。 |
src_schema.wildcard_name |
PostgreSQL: ターゲット側のテーブルの名前はソース側のテーブルの名前と同じでなければなりませんが、テーブルは異なるスキーマに属している可能性があります。 |
not (list) |
ワイルドカードの展開から除外するテーブルを定義する除外リスト。このオプションを使用して、レプリケートしないテーブルを除外します。注: このnotキーワードは、SQLワイルドカードのNOT演算子と同じ意味ではありません。
notキーワードの前後にはスペースを入れます。リスト内の各コンマの後にはスペースを入れることができます。 注: ワイルドカードを満たすテーブルが設定ファイルの他の場所にリストされている場合、そのエントリは、ワイルドカードエントリで指定された処理またはルーティングをオーバーライドします。この場合、not句は必要ありません。例を参照してください。 |
tgt_schema.wildcard_name |
ターゲットの指定はschema.%の形式でなければなりません。schema.tab%のように部分的に展開されたターゲットのワイルドカード名はサポートされません。 |
routing_map | 任意の有効なルーティングマップ。 |
ワイルドカードを指定することでレプリケートするテーブルの特定のリストが作成されることを確認するには、設定をアクティベーションする前にsp_ctrlでverify 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
テーブルがプライマリキーまたは一意キーを使用して作成されていない場合、設定ファイルでオブジェクトを指定する際に、キーとして使用する列を指定することができます。SharePlexは指定された列をWHERE句で一意キーとして使用して、ポストするターゲット行を特定します。
注意:
|
キーとして指定する列は、以下の条件を満たす必要があります。
キー定義を作成するには、ソースオブジェクトの後にスペースを入力し、括弧を含めて以下の構文を使用します。
src_owner.table !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
キーとして指定する列は、以下の条件を満たす必要があります。
一意キーには、2000文字を超えるTEXT、BYTEA、JSON、JSONB、CHAR、サイズのないVARCHARまたは4000文字を超えるVARCHARを使用できません。
テーブルが垂直分割レプリケーション用に設定されている場合は、列パーティションの一部でなければなりません。垂直分割でexclude列表記を使用している場合、除外された列をキー定義で使用することはできません。詳細については、「分割レプリケーションの設定」を参照してください。
キー定義を作成するには、ソースオブジェクトの後にスペースを入力し、括弧を含めて以下の構文を使用します。
src_schema.table !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
キーとして指定する列は、以下の条件を満たす必要があります。
一意キーには、2000文字を超えるtext、char 、サイズのないvarcharまたは4000文字を超えるvarcharを使用できません。
キー定義を作成するには、ソースオブジェクトの後にスペースを入力し、括弧を含めて以下の構文を使用します。
src_schema.table !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
ワイルドカードが使用されている場合、レプリケーションから以下のDMLを除外するようにSharePlexを設定できます。
SharePlexを設定することで、ターゲット側のテーブルに操作がレプリケートされないように、任意のタイプのDML操作をフィルタリングすることができます。DMLのフィルタリングは、他のほとんどのSharePlex設定構文と互換性があります。
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 |
verify configコマンドを使用すると、設定ファイルの各テーブルでフィルタリングされているDMLを表示できます。このコマンドは、アクティブまたは非アクティブな設定ファイルに使用できます。
sp_ctrl> verify config myconfig
7: "SCOTT"."EMP" "SCOTT"."EMP" prodsys@o.proddb
Filter out >>>>> DELETES
Unique Key : (EMPLOYEE_ID)
設定ファイル内にソーステーブルの指定が複数ある場合、DMLフィルタの指定はすべて同じでなければなりません。同じソーステーブルの複数の指定は、次の場合に行われます。
SharePlexがシーケンスやSQL*Loaderのダイレクトパスロードをレプリケートしないようにできます。デフォルトでは、これらのオブジェクトのレプリケーションは有効になっています。
このオブジェクトを除外 | このパラメータを設定 | 値 |
---|---|---|
シーケンス | SP_OCT_REPLICATE_SEQUENCES | 0 |
SQL*Loaderダイレクトパスロード | SP_OCT_REPLICATE_DLOAD | 0 |
© ALL RIGHTS RESERVED. 利用規約 プライバシー Cookie Preference Center