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

SharePlex 11.4 - 管理者ガイド

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

分割レプリケーションの設定

この章では、水平パーティン化レプリケーションと垂直分割レプリケーションといったSharePlexの高度な設定オプションの使用方法を説明します。これらのオプションによって、特定の要件を満たすためにデータを分割、並列化、フィルタリングするための高いレベルの柔軟性が実現されます。先に進む前に、設定ファイルの作成に関わる概念とプロセスを確実に理解してください。

内容

水平分割レプリケーションの設定

水平分割レプリケーションを使用して、テーブルの行を個別の処理ストリームに分割します。以下を実行するために、水平分割レプリケーションを使用できます。

  • ソースの残りの行を保持したまま、行のサブセットをターゲットにレプリケートます。
  • 行の異なるサブセットを異なるターゲットにレプリケートします。
  • ソーステーブルのレプリケーションを並列postキューに分割して、ターゲットテーブルへのポストを高速化します。

サポート対象のソースとターゲット

  • PostgreSQLからPostgreSQL、Oracle、SQL Server、Kafkaへ

  • Oracleから全ターゲットへ

  • サービスとしてのPGDBからサービスとしてのPGDBへ

  • サービスとしてのPGDBからOracleへ

  • サービスとしてのPGDBからPostgreSQLへ

水平分割レプリケーションの概要: Oracleから全ターゲットへ

テーブルの水平分割レプリケーションを設定する手順は以下の通りです。

  1. 行パーティションを定義し、それらをパーティションスキーム にリンクします。

    • 行パーティションは、グループとしてレプリケートするソーステーブルの行のサブセットです。

    • パーティションスキームは、行パーティションの論理コンテナです

  2. パーティションをレプリケーションに含めるには、SharePlex設定ファイルにパーティションスキームの名前を指定します。

パーティションタイプ

パーティションスキームの行パーティションは、以下のいずれかに基づくことができます。

  • : 列ベースのパーティションスキームには、列条件によって定義された行パーティションが含まれます。列条件とは、テーブル内の行のサブセットを定義するWHERE句です。
  • ハッシュ: ハッシュベースのパーティションスキームには、複数のキューに行を均等に分配することをSharePlexに指示するハッシュ値によって定義される行パーティションが含まれます。
列ベースのパーティションスキームについて

列条件に基づく行パーティションは、次の目的で使用できます。

  • 単一の行パーティションを使用して、テーブルの行のサブセットのみをレプリケートします。例えば、YEAR列の値が2014より大きい行だけをレプリケートすることができます。この場合のパーティションスキームは、「Since2014」や「Recent」などの名前を付けることができます。
  • 複数の行パーティションを使用してテーブルの行を分割し、行の各セットが異なるターゲットにレプリケートされるようにします。例えば、CORPORATE.SALESという名前のテーブルに、「East」と「West」という2つの行パーティションがあるとします。それに応じて列条件が定義され、REGION = EASTを満たす行は1つの場所にレプリケートされ、REGION = WESTを満たす行は別の場所にレプリケートされます。例えば、パーティションスキームに「Sales_by_region」という名前を付けることができます。

  • 複数の行パーティションを使用して、テーブルの行を並列処理ストリーム並列のExport、Import、Postストリームに分割し、ターゲットテーブルへのポストを高速化します。例えば、頻繁に更新されるターゲットテーブルへのレプリケーションのフローを改善することができます。この目的での列条件の使用は、並列Postプロセスに均等に処理を振り分けることができる列がテーブルに含まれている場合にのみ適切です。

ハッシュベースのパーティションスキームについて

ハッシュ値に基づいた行パーティションを使用して、テーブルの行を並列処理ストリーム並列のExport、Import、Postに分割し、ターゲットテーブルへのポストを高速化できます。パーティションの作成に列条件ではなくハッシュ値を使用する利点は、WHERE句でテーブルの列を参照する必要がなく、SharePlexによって行が自動的に均等に分割されることです。しかし、列ベースのパーティションスキームとは異なり、ハッシュベースのパーティションスキームには、SharePlexcompareコマンドやrepairコマンドを使用できません。

分割レプリケーションとフルテーブルレプリケーションの組み合わせ

水平分割レプリケーションと垂直分割レプリケーションを組み合わせることで、情報の配布方法を最大限に制御できます。

次などを考慮します。

  • 本社は主要な企業データベースを管理します。
  • 会社の4つの地域オフィスがそれぞれ独自のデータベースを管理します。
  • 本社は垂直分割レプリケーションを使用して、あるテーブルの一部の列データを地域オフィスと共有しますが、機密データを含む列は共有しません。
  • テーブルの行は、レプリケーションのために水平方向に4つのグループEast、West、North、Southに分割され、各地域はそれに該当するレコードの変更のみを受け取ります。

水平分割レプリケーションは、同じテーブルのフルテーブルレプリケーションと組み合わせて使用することができます。例えば、行のグループを異なるレポートシステムにルーティングし、すべての行をバックアップシステムにルーティングすることができます。

使用の制限

ハッシュベースのパーティション化は、以下をサポートしていません。

  • compareコマンドおよびrepairコマンド。
  • 索引構成表IOTおよびLOBまたはLONGを含むテーブル。
  • キー値を削除または更新し、同じキー値を再度挿入する操作。これは、行IDが異なるために一意制約違反を引き起こす可能性があります。
  • 同じテーブルの列ベースのパーティション化。

ハッシュベースのパーティション化は、行を別のパーティションに移行させるような操作もサポートしていません。そのような操作には以下のような例があります。

  • 新しい行パーティションに移動するような値の更新
  • テーブルの再編成
  • テーブルパーティションの分割または2つのパーティションの結合
  • テーブルのエクスポートまたはインポート
  • MOVEオプションを使用したALTER TABLE
  • SHRINK SPACEオプションを使用したALTER TABLE
  • FLASHBACK TABLE
  • dbms_redefinitionを使用したテーブルの再定義
  • データが現在のブロックに収まらないような行サイズの変更につながる、非分割テーブルへのUPDATE。
  • 非分割テーブルの行をDELETEした後の再挿入

パーティションスキームと行パーティションの定義

add partitionコマンドを使用して行パーティションを作成し、パーティションスキームに割り当てます。

列条件に基づいて行をパーティション化するには

特定のパーティションスキームで作成する行パーティションごとに、add partitionを発行します。最初の行パーティションを作成するとき、SharePlexはパーティションスキームも作成します。

sp_ctrl> add partition to scheme_name setcondition = column_condition and route = routing_map [and name = name] [and tablename =owner.table] [and description =description]

ハッシュ値に基づいて行をパーティション化するには

add partitionを1回発行して、作成するハッシュパーティションの数を指定します。

sp_ctrl> add partition to scheme_name set hash = value and route = value

add partitionコマンドの構文

注意: add partitionto scheme_nameおよびsetキーワードと共に指定した後は、他のすべてのコンポーネントはどのような順序でも構いません。

コンポーネント 説明
to scheme_name

toは、行パーティションがscheme_nameに追加されることを示す必須キーワードです。

scheme_nameはパーティションスキームの名前です。パーティションスキームは、最初に発行するadd partitionコマンドによって作成されます。このコマンドは、パーティション化する最初の行のセットも指定します。

水平分割を多用する場合は、パーティションスキームの命名規則を確立しておくことをお勧めします。

set

行パーティションの定義を開始する必須キーワード。

condition = column_condition

列条件に基づいて行パーティションを作成します。条件は引用符で囲む必要があります。((region_id = West) and region_id is not null)のような標準的なWHERE条件構文を使用します。詳細については、「有効な列条件の作成方法」を参照してください。

conditionコンポーネントとhashコンポーネントは相互に排他的です。

hash = value

ハッシュ値に基づいて行パーティションを作成します。指定された値は、パーティションスキームにおける行パーティションの数を決定します。

conditionコンポーネントとhashコンポーネントは相互に排他的です。

route = routing_map

このパーティションのルート。これは以下のいずれかになります。

列条件に基づくパーティション:

標準のSharePlexルーティングマップを指定します例: sysB@o.myorasysB:q1@o.myoraまたはsysB@o.myora+sysC@o.myora複合ルーティングマップ

ターゲットがJMS、Kafka、またはファイルの場合、ターゲットをx.jms、x.kafka、またはx.fileとして指定する必要があります例: sysA:hpq1@x.kafka

異なる名前を持つ複数のターゲットテーブルにパーティションをルーティングするには、以下の手順を実行します。

  • 異なるターゲット名ごとにadd partitionコマンドを個別に発行します。tablenameオプションを使って名前を指定します。
  • 設定ファイルで、このパーティションスキームを使用するエントリのターゲットテーブルとして、これらのターゲットテーブルのいずれかを指定します。SharePlexは、設定が有効化されると他の名前を検出します。
  • SP_ORD_FIRST_FINDパラメーターを0に設定し、パーティションスキームのすべての列条件をSharePlexでチェックするようにします。デフォルトでは、SharePlexは、特定の行変更がパーティションスキームの1つの列条件のみを満たすことを想定しています。詳細については、『SharePlexリファレンスガイド』を参照してください。

ハッシュに基づくパーティション:

以下のフォーマットを使用して、各パーティションに名前付きpostキューを作成するようにSharePlexに指示します。

host:basename|#{o.SID | r.database}

ここで

  • hostはターゲットシステムの名前です。
  • basenameはすべてのキューに割り当てられる基本名です。
  • |#は、1からhashで設定された値までの整数を基本名に付加することでキューに連番を付けるようにSharePlexに指示します。
  • o.SIDOracleターゲットの場合またはr.databaseOpen Targetターゲットの場合
name = name

推奨このパーティションの短い名前。このオプションは、列条件に基づくパーティションにのみ有効です。名前を付けておくと、将来パーティションを変更したり削除したりする必要が生じたときに、長い列の条件を入力する必要がなくなります。

tablename = owner.table

オプションこのオプションは、ターゲットテーブルが複数あり、そのうちの1つ以上が異なる名前である場合に使用します。名前ごとにadd partitionコマンドを個別に発行します。

テーブル名は完全修飾名でなければなりません。大文字と小文字が区別される場合は、名前を引用符で囲んで指定する必要があります。

例:

add partition to scheme1 set name = p1 and condition = "C1 > 200" and route = sysb:p1@o.orasid and tablename = myschema.mytable

description = description オプション このパーティションの説明。
列条件に基づくパーティション

異なる行のセットを異なるpostキューにルーティング:

sp_ctrl> add partition to scheme1 set name = q1 and condition = "C1 >= 200" and route = sysb:q1@o.orasid

sp_ctrl> add partition to scheme1 set name = q2 and condition = "C1 < 200" and route = sysb:q2@o.orasid

異なる行のセットを、異なるターゲットシステムおよびソースと異なるテーブル名にルーティング:

sp_ctrl> add partition to scheme1 set name = east and condition = "area = east" and route = sys1e@o.orasid and tablename = ora1.targ

sp_ctrl> add partition to scheme1 set name = west and condition = "area = west" and route = sys2w@o.orasid and tablename = ora2.targ

ハッシュに基づくパーティション

行を4つのパーティションに分け、それぞれを異なるpostキューで処理します。

sp_ctrl> add partition to scheme1 set hash = 4 and route = sysb:hash|#@o.ora112

有効な列条件の作成方法

以下に、列条件を作成するためのガイドラインを示します。このガイドラインは、ハッシュ値を使用して作成する行パーティションには適用されません。

適切な列の選択

列条件のベースになる列の種類は、データソースによって異なります。

PRIMARYキー列やUNIQUEキー列など、列条件は値が変更されない列に基づく必要があります。これは、パーティションシフトを回避するためです。パーティションシフトは、パーティションの条件列に加えられた変更により、基礎となるデータが別のパーティションの条件を満たす、またはどのパーティションの条件も満たさなくなることです。

パーティションシフトのケース1: 列の値が更新され、新しい値がどの列の条件も満たさなくなります。

  • SharePlexは操作を実行しますが、その行に対する今後の操作はレプリケートされなくなります。理由は、その行が列条件を満たさなくなったからです。
  • 元のパーティションのソーステーブルとターゲットテーブルが同期しなくなりますが、Postはエラーを返しません。

パーティションシフトのケース2: ある列の条件を満たす行が更新され、別の条件を満たすようになります。

  • Postは一致するターゲット行を見つけることができません。理由は、列条件を満たさなくなったため、元の変更がレプリケートされなかったからです。
  • Postは非同期エラーを返します。

列条件の値の変更によって生じた非同期行は、以下の方法を使用して修復できます。

  • compareコマンドを使用して、非同期行を修復します。このコマンドの詳細については、『SharePlexリファレンスガイド』を参照してください。

さらに、設定ファイルをアクティブにする前に、ソースで以下のパラメータを設定することで、データが正しくレプリケートされることを確認できます。

  • SP_ORD_HP_IN_SYNCパラメータを1に設定します。このパラメータを有効にすると、UPDATEによって列条件列の値が変更され、その結果、行が正しい条件を満たさなくなった場合、SharePlexがその行を修正します。このパラメータを有効にすると、水平分割レプリケーションを設定するテーブルの数に応じて、多少パフォーマンスが低下します。詳細やこのパラメータによって修正される条件のリストについては、『SharePlexリファレンスガイド』を参照してください。

注意: キー以外の列を列条件のベースとして使用しており、水平分割レプリケーションが有効な状態でパフォーマンスの低下に気づいた場合は、その列のロググループを追加してください。

サポートされているデータ型の使用

SharePlexは、列条件で以下のデータ型をサポートしています。

  • NUMBER
  • DATE
  • CHAR
  • VARCHAR
  • VARCHAR2
  • LONG VARCHAR
注意:
  • 日付には、SharePlexはMMDDSYYYYHH24MISSを使用します。次などを考慮します。

    hiredate<‘1111 2011000000’

  • 水平分割レプリケーションは以下をサポートしていません。

    • このセクションに記載されている以外のデータ型。また、LOBのような大きな型や、VARRAYのようなオブジェクト型、抽象データ型も除外されます。
    • Oracle TO_DATE関数
    • 100kを超えるLONG列でのUPDATEまたはINSERT
    • シーケンス
    • OracleパーティションのTRUNCATE

標準的な条件構文の使用

次のリストは、SharePlexが列条件でサポートしている条件構文を示しています。

  • valueには、文字列または数値を指定できます。文字列と日付は引用符で囲みます例: 'west'。数字は引用符で囲まないでください。
  • columnは、水平分割レプリケーションを使用するように設定しているテーブル内の列の名前です。
column = value
not (column = value)
column > value
value > column
column < value
column <= value
column >= value
column <> value
column != value
column like value
column between value1 and value2
not (column between value1 and value2 )
column is null
column is not null

条件は、括弧とANDORNOTの論理接続子を使用して入れ子式に組み合わせることができます。

列条件の例
not (col1 = 5)
(col2 = 5) and not (col3 = 6)
((col1 is not null) and (col2 = 5))

その他のガイドライン

  • NULLは次のような場合、SharePlexによってレプリケートされます: not (department_id = 90)で、department_idがNULLの場合、レプリケートされます。NULLを含むレコードがレプリケートされないようにするには、次のように、条件の一部にis not null構文を含めます。not (department_id = 90) and department_id is not null
  • 演算子の優先順位を示すために括弧を使用しない場合、SharePlexはSQLと同じ順序で演算子の優先順位をサポートします。例えば、not x and yという条件は、(not x) and yと同じ動作をします。条件x and y or zは、(x and y) or zと同じ動作をします。条件に括弧が含まれる場合は、明示的な優先順位が尊重されます。
  • 条件列がVARCHAR列で、パーティションを定義するために使われる値が文字列リテラルである場合、次の例のように、条件全体を二重引用符で囲む必要があります。add partition toschemeset route=routeand condition="C2 = 'Fred'"
  • 列名を引用符で囲む必要がある場合は、次の例のように、条件全体を引用符で囲む必要があります。add partition toschemeset route=routeand condition="\"c2\" > 0"
  • 禁止事項:

    • 列条件に他のテーブルへの参照を含める。
    • 最大ストレージの1024バイトを超える。
  • パーティションスキームを参照する設定をアクティベーションするときに、 SharePlexはそれらのスキームの列条件の構文を検証します。構文が正しくない場合、アクティベーションは失敗します。SharePlexはエラーの発生箇所を示すエラーをイベントログに出力します。

設定ファイルでのパーティションスキームの指定

フルテーブルレプリケーションを使用するテーブルと分割レプリケーションを使用するテーブルを含め、指定したデータソースからレプリケートするすべてのデータに対して1つの設定ファイルを使用します。設定ファイルの作成方法の詳細については、「データをレプリケートするためのSharePlexの構成」を参照してください。水平分割レプリケーションのエントリを設定するには、次の構文を使用します。

Datasource:o.SID
src_owner.table tgt_owner.table

!partition_scheme

!   routing_map
コンポーネント 説明

o.database

データソースの指定。Oracleソースにはo.表記を、データベースの場合、ORACLE_SID
src_owner.tableおよびtgt_owner.table ソース側のテーブルとターゲット側のテーブルのそれぞれの指定。
!partition_scheme

指定されたソーステーブルとターゲットテーブルで使用するパーティションスキームの名前。!は必須です。名前は大文字と小文字が区別されます。!schemeA+schemeBなど、複数のパーティションスキームの複合ルーティングはサポートされていません。

同じソーステーブルに使用するパーティションスキームごとに個別のエントリを作成します。を参照してください。

! routing_map

プレースホルダ・ルーティング・マップ 。パーティションスキームで使用したルートが、設定ファイルのどこにもリストされていない場合にのみ必要です。SharePlexでは、パーティションスキームにリストされている場合でも、すべてのルートが設定ファイルに記述されている必要があります。

注意:
  • このオプションは、列条件に基づくパーティションに対してのみ有効です。
  • 名前付きキューを使用する場合は、このオプションを使用して各キューのルートをリストします。
  • パーティションスキームを異なるターゲットにルーティングする場合は、このオプションを使用して各ターゲットをリストします。すべてのターゲットテーブルの名前が同じであれば、複合ルーティングマップを使用できます。

を参照してください。

パーティションスキームを指定するには
Datasource: o.mydb
scott.emp scott.emp_2 !partition_emp
同じソーステーブルに複数のパーティションスキームを指定するには
Datasource: o.mydb
scott.emp scott.emp_2 !partition_schemeA
scott.emp scott.emp_3 !partition_schemeB
プレースホルダ・ルーティング・マップを指定するには
! targsys1
! targsys2@o.ora2+targsys3@o.ora3

このプレースホルダは列条件に基づくパーティションにのみ必要です。

パーティションとスキームの表示

view partitionsコマンドを使用して、水平分割レプリケーション設定内の1つのパーティションスキームまたはすべてのパーティションスキームの行パーティションを表示します。

行パーティションを表示するには

  1. sp_ctrlをソースシステム上で実行します。
  2. すべてのパーティションを表示するか、特定のパーティションスキームのパーティションだけを表示するかによって、次のコマンドでいずれかのオプションを指定して実行します。

    sp_ctrl> view partitions for {scheme_name | all}

次の例は、ハッシュベースのパーティションスキームと列ベースのパーティションスキームの両方を示しています。

sp_ctrl> view partitions all

Scheme        Name           Route                            Hash     Condition
-----------   -------------  ------------------------------   ------   ---------------
HASH4         hash           sys02:hash|#@o.ora112            4        ROWID
TEST_CT       highvalues     sys02:highvalues@o.ora112                 sales>=10000
TEST_CT       lowvalues      sys02:lowvalues@o.ora112                  sales<10000
HASH4ハッシュベースのパーティションスキーム
  • Scheme列に、HASH4という名前のパーティションスキームが表示されています。
  • Name列に、パーティション定義の名前がhashであることが表示されています。
  • Route列に、パーティションが自動的に作成され、ターゲットがo.ora112であることが表示されています。
  • Hash列の値は4で、これは4つのパーティションを持つハッシュベースのパーティションスキームであることを示しています。
  • Condition列に、使用されているハッシュアルゴリズムのタイプがblockではなく、デフォルトのrowidであることが表示されています。
TEST_CT column-based partition scheme
  • Scheme列に、TEST_CTという名前のパーティションスキームが表示されています。この名前には2つのエントリがあり、2つのパーティションが含まれていることを示しています。
  • Name列には、各パーティションの名前が表示されます。デフォルトのpostキューの名前か、add partitionコマンドのNameオプションで設定された値になります。
  • Route列に、postキューの名前がパーティション名に基づいており、ターゲットがo.ora112であることが表示されています。
  • 列ベースのパーティションスキームの場合、Hash列は空です。
  • Condition列には、行パーティションを作成する列条件が表示されます。

パーティションのpostキューを表示するには

ターゲット上でqstatusコマンドを実行すると、水平分割レプリケーションに関連付けられたpostキューが表示されます。

TEST_CT列ベースのパーティションスキームのキュー:
sp_ctrl sys02>
 
Queues Statistics for sys02
  
  Name:  highvalues (o.ora11-o.ora112) (Post queue)
    Number of messages:          0 (Age         0 min; Size          1 mb)
    Backlog (messages):          0 (Age         0 min)
 
  Name:  lowvalues (o.ora11-o.ora112) (Post queue)
    Number of messages:          0 (Age         0 min; Size          1 mb)
    Backlog (messages):          0 (Age         0 min)
HASH4ハッシュベースのパーティションスキームのキュー:
Queues Statistics for sys02
  
  Name:  hash1 (o.ora11-o.ora112) (Post queue)
    Number of messages:          0 (Age         0 min; Size          1 mb)
    Backlog (messages):          0 (Age         0 min)
 
  Name:  hash2 (o.ora11-o.ora112) (Post queue)
    Number of messages:          0 (Age         0 min; Size          1 mb)
    Backlog (messages):          0 (Age         0 min)

 Name:  hash3 (o.ora11-o.ora112) (Post queue)
    Number of messages:          0 (Age         0 min; Size          1 mb)
    Backlog (messages):          0 (Age         0 min)

 Name:  hash4 (o.ora11-o.ora112) (Post queue)
    Number of messages:          0 (Age         0 min; Size          1 mb)
    Backlog (messages):          0 (Age         0 min)

パーティションスキームの変更

パーティションスキームを管理するために、以下のコマンドまたはパラメータを使用できます。詳細については、『SharePlexリファレンスガイド』を参照してください。

タスク

コマンド/パラメーター

説明

パーティションを変更

modify partitionコマンド

行パーティション定義の属性を変更します。

パーティションスキームを削除

drop partition schemeコマンド

パーティションスキームとその中のすべての行パーティションを削除します。

ハッシュアルゴリズムの変更

SP_OCF_HASH_BY_BLOCK

ハッシュアルゴリズムをデフォルトの行IDベースからブロックベースに変更します。ブロックベースのアルゴリズムを有効にするには1に設定します。

PostgeSQLとPostgreSQL Database as a Serviceの水平分割レプリケーションの概要

サポート対象

PostgreSQL、Oracle、SQL Server、Kafka

注意:

  • PostgreSQLからSQLサーバへのレプリケーションは、水平分割データのBOOLEAN、TIME、TIME WITH TIME ZONE、およびBYTEAデータ型をサポートしていません。

  • PostgreSQLからPostgreSQLへのレプリケーションは、水平分割データのJSONおよびJSONBデータ型をサポートしていません。

テーブルの水平分割レプリケーションを設定する手順は以下の通りです。

  1. 行パーティションを定義し、それらをパーティションスキーム にリンクします。

    • 行パーティションは、グループとしてレプリケートするソーステーブルの行のサブセットです。

    • パーティションスキームは、行パーティションの論理コンテナです

  2. パーティションをレプリケーションに含めるには、SharePlex設定ファイルにパーティションスキームの名前を指定します。

パーティションタイプ

  • : 列ベースのパーティションスキームには、列条件によって定義された行パーティションが含まれます。列条件とは、テーブル内の行のサブセットを定義するWHERE句です。
列ベースのパーティションスキームについて

列条件に基づく行パーティションは、次の目的で使用できます。

  • 単一の行パーティションを使用して、テーブルの行のサブセットのみをレプリケートします。例えば、YEAR列の値が2014より大きい行だけをレプリケートすることができます。この場合のパーティションスキームは、「Since2014」や「Recent」などの名前を付けることができます。
  • 複数の行パーティションを使用してテーブルの行を分割し、行の各セットが異なるターゲットにレプリケートされるようにします。例えば、CORPORATE.SALESという名前のテーブルに、「East」と「West」という2つの行パーティションがあるとします。それに応じて列条件が定義され、REGION = EASTを満たす行は1つの場所にレプリケートされ、REGION = WESTを満たす行は別の場所にレプリケートされます。例えば、パーティションスキームに「Sales_by_region」という名前を付けることができます。

  • 複数の行パーティションを使用して、テーブルの行を並列処理ストリーム並列のExport、Import、Postストリームに分割し、ターゲットテーブルへのポストを高速化します。例えば、頻繁に更新されるターゲットテーブルへのレプリケーションのフローを改善することができます。この目的での列条件の使用は、並列Postプロセスに均等に処理を振り分けることができる列プライマリキーまたは非nullの一意のキーの使用を推奨がテーブルに含まれている場合にのみ適切です。

分割レプリケーションとフルテーブルレプリケーションの組み合わせ

水平分割レプリケーションと垂直分割レプリケーションを組み合わせることで、情報の配布方法を最大限に制御できます。

次などを考慮します。

  • 本社は主要な企業データベースを管理します。
  • 会社の4つの地域オフィスがそれぞれ独自のデータベースを管理します。
  • 本社は垂直分割レプリケーションを使用して、あるテーブルの一部の列データを地域オフィスと共有しますが、機密データを含む列は共有しません。
  • テーブルの行は、レプリケーションのために水平方向に4つのグループEast、West、North、Southに分割され、各地域はそれに該当するレコードの変更のみを受け取ります。

水平分割レプリケーションは、同じテーブルのフルテーブルレプリケーションと組み合わせて使用することができます。例えば、行のグループを異なるレポートシステムにルーティングし、すべての行をバックアップシステムにルーティングすることができます。

パーティションスキームと行パーティションの定義

add partitionコマンドを使用して行パーティションを作成し、パーティションスキームに割り当てます。

列条件に基づいて行をパーティション化するには

特定のパーティションスキームで作成する行パーティションごとに、add partitionを発行します。最初の行パーティションを作成するとき、SharePlexはパーティションスキームも作成します。

sp_ctrl> add partition to scheme_name setcondition = column_condition and route = routing_map [and name = name] [and tablename =schema.table] [and description =description]

add partitionコマンドの構文

注意: add partitionto scheme_nameおよびsetキーワードと共に指定した後は、他のすべてのコンポーネントはどのような順序でも構いません。

コンポーネント 説明
to scheme_name

toは、行パーティションがscheme_nameに追加されることを示す必須キーワードです。

scheme_nameはパーティションスキームの名前です。パーティションスキームは、最初に発行するadd partitionコマンドによって作成されます。このコマンドは、パーティション化する最初の行のセットも指定します。

水平分割を多用する場合は、パーティションスキームの命名規則を確立しておくことをお勧めします。

set

行パーティションの定義を開始する必須キーワード。

condition = column_condition

列条件に基づいて行パーティションを作成します。条件は引用符で囲む必要があります。((region_id = West) and region_id is not null)のような標準的なWHERE条件構文を使用します。詳細については、「有効な列条件の作成方法」を参照してください。

route = routing_map

このパーティションのルート。これは以下のいずれかになります。

列条件に基づくパーティション:

標準のSharePlexルーティングマップを指定します。例: sysB@r.dbnameまたはsysB:q1@r.dbnameまたはsysB@r.dbname+sysC@r.dbname複合ルーティングマップ

異なる名前を持つ複数のターゲットテーブルにパーティションをルーティングするには、以下の手順を実行します。

  • 異なるターゲット名ごとにadd partitionコマンドを個別に発行します。tablenameオプションを使って名前を指定します。
  • 設定ファイルで、このパーティションスキームを使用するエントリのターゲットテーブルとして、これらのターゲットテーブルのいずれかを指定します。SharePlexは、設定が有効化されると他の名前を検出します。
  • SP_ORD_FIRST_FINDパラメータを0に設定し、SharePlexがパーティションスキームのすべての列条件をチェックするようにします。デフォルトでは、SharePlexは、特定の行変更がパーティションスキームの1つの列条件のみを満たすことを想定しています。詳細については、『SharePlexリファレンスガイド』を参照してください。
name = name

推奨このパーティションの短い名前。このオプションは、列条件に基づくパーティションにのみ有効です。名前を付けておくと、将来パーティションを変更したり削除したりする必要が生じたときに、長い列の条件を入力する必要がなくなります。

tablename = schemaname.table

オプションこのオプションは、ターゲットテーブルが複数あり、そのうちの1つ以上が異なる名前である場合に使用します。名前ごとにadd partitionコマンドを個別に発行します。

テーブル名は完全修飾名でなければなりません。大文字と小文字が区別される場合は、名前を引用符で囲んで指定する必要があります。

例:

add partition to scheme1 set name = p1 and condition = "C1 > 200" and route = sysb:p1@r.dbname and tablename = myschema.mytable

description = description (オプション) このパーティションの説明。
列条件に基づくパーティション

異なる行のセットを異なるpostキューにルーティング:

sp_ctrl> add partition to scheme1 set name = q1 and condition = "C1 >= 200" and route = sysb:q1@r.dbname

sp_ctrl> add partition to scheme1 set name = q2 and condition = "C1 < 200" and route = sysb:q2@r.dbname

異なる行のセットを、異なるターゲットシステムおよびソースと異なるテーブル名にルーティング:

sp_ctrl> add partition to scheme1 set name = east and condition = "area = east" and route = sys1e@r.dbname and tablename = schema1.targ

sp_ctrl> add partition to scheme1 set name = west and condition = "area = west" and route = sys2w@r.dbname and tablename = schema2.targ

有効な列条件の作成方法

以下に、列条件を作成するためのガイドラインを示します。

適切な列の選択

列条件のベースになる列の種類は、データソースによって異なります。

PRIMARYキー列やUNIQUE キー列など、列条件は値が変更されない列に基づく必要があります。これは、パーティションシフトを回避するためです。パーティションシフトは、パーティションの条件列に加えられた変更により、基礎となるデータが別のパーティションの条件を満たす、またはどのパーティションの条件も満たさなくなることです。

パーティションシフトのケース1: 列の値が更新され、新しい値がどの列の条件も満たさなくなります。

  • SharePlexは操作を実行しますが、その行に対する今後の操作はレプリケートされなくなります。理由は、その行が列条件を満たさなくなったからです。
  • 元のパーティションのソーステーブルとターゲットテーブルが同期しなくなりますが、Postはエラーを返しません。

パーティションシフトのケース2: ある列の条件を満たす行が更新され、別の条件を満たすようになります。

  • Postは一致するターゲット行を見つけることができません。理由は、列条件を満たさなくなったため、元の変更がレプリケートされなかったからです。
  • Postは非同期エラーを返します。

さらに、設定ファイルをアクティブにする前に、ソースで以下のパラメータを設定することで、データが正しくレプリケートされることを確認できます。

  • SP_ORD_HP_IN_SYNCパラメータを1に設定します。このパラメータを有効にすると、UPDATEによって列条件列の値が変更され、その結果、行が正しい条件を満たさなくなった場合、SharePlexがその行を修正します。このパラメータを有効にすると、水平分割レプリケーションを設定するテーブルの数に応じて、多少パフォーマンスが低下します。詳細やこのパラメータによって修正される条件のリストについては、『SharePlexリファレンスガイド』を参照してください。

注意: キー以外の列を列条件のベースとして使用しており、水平分割レプリケーションが有効な状態でパフォーマンスの低下に気づいた場合は、その列のロググループを追加してください。PostgreSQLでは、レプリカアイデンティティにFULLを設定して、このパラメータを使用できます。

サポートされているデータ型の使用

SharePlexは、列条件で以下のデータ型をサポートしています。

  • SMALLINT

  • INT

  • BIGINT

  • NUMERIC

  • CHAR長さ2000以下

  • VARCHAR長さ1<=4000

  • DATE

  • BOOLEANcondition = "column_name =1" or condition = "column_name = 0"

注意:
  • 日付には、SharePlexはMMDDSYYYYHH24MISSを使用します。次などを考慮します。

    hiredate<‘1111 2011000000’

  • 水平分割レプリケーションは以下をサポートしていません。

    • このセクションに記載されている以外のデータ型。
    • 長さが2000を超えるTEXT、BYTEA、CHAR、長さが4000を超えるVARCHAR、長さのないVARCHARのような大きなデータ型は、列条件ではサポートされません。

    • 100k列に更新または挿入されるデータの長さを超えるLONG列に対するUPDATEまたはINSERT。

標準的な条件構文の使用

次のリストは、SharePlexが列条件でサポートしている条件構文を示しています。

  • valueには、文字列または数値を指定できます。文字列と日付は引用符で囲みます例: 'west'。数字は引用符で囲まないでください。
  • columnは、水平分割レプリケーションを使用するように設定しているテーブル内の列の名前です。
column = value
not (column = value)
column > value
value > column
column < value
column <= value
column >= value
column <> value
column != value
column like value
column between value1 and value2
not (column between value1 and value2 )
column is null
column is not null

条件は、括弧とANDORNOTの論理接続子を使用して入れ子式に組み合わせることができます。

列条件の例
not (col1 = 5)
(col2 = 5) and not (col3 = 6)
((col1 is not null) and (col2 = 5))
その他のガイドライン
  • NULLは次のような場合、SharePlexによってレプリケートされます: not (department_id = 90)で、department_idがNULLの場合、レプリケートされます。NULLを含むレコードがレプリケートされないようにするには、次のように、条件の一部にis not null構文を含めます。not (department_id = 90) and department_id is not null
  • 演算子の優先順位を示すために括弧を使用しない場合、SharePlexはSQLと同じ順序で演算子の優先順位をサポートします。例えば、not x and yという条件は、(not x) and yと同じ動作をします。条件x and y or zは、(x and y) or zと同じ動作をします。条件に括弧が含まれる場合は、明示的な優先順位が尊重されます。
  • 条件列がVARCHAR列で、パーティションを定義するために使われる値が文字列リテラルである場合、次の例のように、条件全体を二重引用符で囲む必要があります。add partition toschemeset route=routeand condition="C2 = 'Fred'"
  • 列名を引用符で囲む必要がある場合は、次の例のように、条件全体を引用符で囲む必要があります。add partition toschemeset route=routeand condition="\"c2\" > 0"
  • 禁止事項:

    • 列条件に他のテーブルへの参照を含める。
    • 最大ストレージの1024バイトを超える。
  • パーティションスキームを参照する設定をアクティベーションするときに、 SharePlexはそれらのスキームの列条件の構文を検証します。構文が正しくない場合、アクティベーションは失敗します。SharePlexはエラーの発生箇所を示すエラーをイベントログに出力します。

設定ファイルでのパーティションスキームの指定

フルテーブルレプリケーションを使用するテーブルと分割レプリケーションを使用するテーブルを含め、指定したデータソースからレプリケートするすべてのデータに対して1つの設定ファイルを使用します。設定ファイルの作成方法の詳細については、「データをレプリケートするためのSharePlexの構成」を参照してください。水平分割レプリケーションのエントリを設定するには、次の構文を使用します。

Datasource:r.dbname
srcschemaname.table targetschemaname.table

!partition_scheme

!   routing_map

 

コンポーネント 説明

r.dbname

データソースの指定。PostgreSQLソースにはr.表記を使用します。
src_schema.tableおよびtgt_schema.table ソース側のテーブルとターゲット側のテーブルのそれぞれの指定。
!partition_scheme

指定されたソーステーブルとターゲットテーブルで使用するパーティションスキームの名前。!は必須です。名前は大文字と小文字が区別されます。!schemeA+schemeBなど、複数のパーティションスキームの複合ルーティングはサポートされていません。

同じソーステーブルに使用するパーティションスキームごとに個別のエントリを作成します。を参照してください。

! routing_map

プレースホルダ・ルーティング・マップ 。パーティションスキームで使用したルートが、設定ファイルのどこにもリストされていない場合にのみ必要です。SharePlexでは、パーティションスキームにリストされている場合でも、すべてのルートが設定ファイルに記述されている必要があります。

注意:
  • このオプションは、列条件に基づくパーティションに対してのみ有効です。
  • 名前付きキューを使用する場合は、このオプションを使用して各キューのルートをリストします。
  • パーティションスキームを異なるターゲットにルーティングする場合は、このオプションを使用して各ターゲットをリストします。すべてのターゲットテーブルの名前が同じであれば、複合ルーティングマップを使用できます。

パーティションスキームを指定するには

Datasource: r.mydb
scott.emp scott.emp_2 !partition_emp

同じソーステーブルに複数のパーティションスキームを指定するには

Datasource: r.mydb
scott.emp scott.emp_2 !partition_schemeA
scott.emp scott.emp_3 !partition_schemeB

プレースホルダ・ルーティング・マップを指定するには

! targsys1
! targsys2@r.dbname2+targsys3@r.dbname3

このプレースホルダは列条件に基づくパーティションにのみ必要です。

パーティションとスキームの表示

view partitionsコマンドを使用して、水平分割レプリケーション設定内の1つのパーティションスキームまたはすべてのパーティションスキームの行パーティションを表示します。

行パーティションを表示するには

  1. sp_ctrlをソースシステム上で実行します。
  2. すべてのパーティションを表示するか、特定のパーティションスキームのパーティションだけを表示するかによって、次のコマンドでいずれかのオプションを指定して実行します。

    sp_ctrl>view partitions for {scheme_name | all}

次の例は、列ベースのパーティションスキームを示しています。

sp_ctrl> view partitions all

Scheme Name Route Tablename Condition
product lessQuantity 10.250.40.27@r.testdb splex.prod_1 id between 1 and 100
product moreQuantity 10.250.40.27@r.testdb splex.prod_2 id between 101 and 200
product largeQuantity 10.250.40.27@r.testdb splex.prod_3 id between 201 and 300
sales_by_region east 10.250.40.27@r.testdb splex.sales_dst1 ((region = 'East') and region is not null)
sales_by_region west 10.250.40.27@r.testdb splex.sales_dst2 ((region = 'west') and region is not null)
city_scheme Pune 10.250.40.27:pune_queue@r.testdb splex.student_target1 ((stud_name = 'Pune') and stud_name is not null)
city_scheme Mumbai 10.250.40.24:mumbai_queue@r.testdb splex.student_target2 ((stud_name = 'Mumbai') and stud_name is not null)

city_scheme column-based partition scheme

  • Scheme列には、city_schemeというパーティションスキームが表示されています。この名前には2つのエントリがあり、2つのパーティションが含まれていることを示しています。
  • Name列には、各パーティションの名前が表示されます。デフォルトのpostキューの名前か、add partitionコマンドのNameオプションで設定された値になります。
  • Route列は、postキューの名前がパーティション名に基づいており、ターゲットがr.testdbであることを示しています。
  • Condition列には、行パーティションを作成する列条件が表示されます。

パーティションのpostキューを表示するには

ターゲット上でqstatusコマンドを実行すると、水平分割レプリケーションに関連付けられたpostキューが表示されます。

city_scheme列ベースのパーティションスキーマのキュー
sp_ctrl (pslinuxpgsp11:2200)> qstatus
 
Queues Statistics for pslinuxpgsp11 
  
  Name:  pune_queue (r.testdb-r.testdb) (Post queue)
    Number of messages:          0 (Age         0 min; Size          1 mb)
    Backlog (messages):          0 (Age         0 min)
sp_ctrl (pslinuxpgsp08:2200)> qstatus
Queues Statistics for pslinuxpgsp08
 
  Name:  mumbai_queue (r.testdb-r.testdb) (Post queue) 
    Number of messages:          0 (Age         0 min; Size          1 mb)
    Backlog (messages):          0 (Age         0 min)

パーティションスキームの変更

パーティションスキームを管理するために、以下のコマンドまたはパラメータを使用できます。詳細については、『SharePlexリファレンスガイド』を参照してください。

タスク

コマンド/パラメーター

説明

パーティションを変更

modify partitionコマンド

行パーティション定義の属性を変更します。

パーティションスキームを削除

drop partition schemeコマンド

パーティションスキームとその中のすべての行パーティションを削除します。

垂直分割レプリケーションの設定

テーブルの垂直分割レプリケーションは、列のサブセットをレプリケートする場合に使用します。例えば図に示すように、C1、C2、C3、C4に加えられたデータの変更はレプリケートできますが、C5とC6に加えられた変更はレプリケートできません。

サポート対象のソースとターゲット

  • PostgreSQLからPostgreSQL、Oracle、SQL Server、Kafkaへ

  • Oracleから全ターゲットへ

  • サービスとしてのPGDBからサービスとしてのPGDBへ

  • サービスとしてのPGDBからOracleへ

  • サービスとしてのPGDBからPostgreSQLへ

垂直分割レプリケーションの使用のガイドライン

垂直分割レプリケーションを含む設定ファイルを作成する場合は、以下のガイドラインに従ってください。

  • 垂直分割レプリケーションは、レポート作成やその他のデータ共有戦略には適していますが、高可用性環境には適していません。テーブルを垂直分割レプリケーション用に設定すると、SharePlexはその他の列を認識しないため、これらの列のデータはレプリケートされません。

  • 水平分割レプリケーションと垂直分割レプリケーションを組み合わせることで、配布する情報を最大限に制御できます。

    例: ある会社には本社と地域部門があり、本社が企業データベースを、各地域が地域データベースを管理しています。本社は、垂直分割レプリケーションを使用して、テーブルの列データの一部をこれらの地域拠点と共有し、その他の機密データは本社で保持しています。共有された列に加えられた行の変更は、さらに水平分割され、該当する地域のデータベースにレプリケートされます。

  • テーブルの一部の列を1つのターゲット側のシステムにレプリケートし、すべての列を別のターゲットシステムにレプリケートするような設定垂直分割レプリケーションとフルテーブルレプリケーションの組み合わせはできません。ただし、1つのターゲット上の同一のテーブルに対してフルテーブルレプリケーションを設定し、そのターゲットから、パーティション列のみが必要なテーブルを含む2番目のターゲットに対して垂直分割レプリケーションを設定することはできます。
  • ターゲット側のテーブルにはソース側のテーブルと同じ列をすべて含めることもできますが、含めないことも可能です。ターゲットには、ソース側のテーブルからレプリケートされる列だけを含めることができます。対応するソース側の列とターゲット側の列の名前は同じである必要はありません。対応する列に含まれるデータ型は同一でなければなりません同一の型、サイズ、精度

垂直分割レプリケーションの概要: Oracleから全ターゲットへ

垂直分割レプリケーションを構成するには、列パーティションまたは除外列パーティションのいずれかを設定ファイルで指定します。

  • 列パーティションは、レプリケーションに含める列を指定します。指定された列に加えられたデータ変更のみがターゲットに送信されます。
  • 除外列パーティションは、レプリケーションから除外する列を指定します。これらの列のデータはターゲットにレプリケートされません。

どちらのタイプの列パーティションを指定する場合も、以下の規則に従ってください。

  • パーティションはソース側のテーブルごとに1つです。列パーティションと除外パーティションは互いに排他的です。
  • 列リストは括弧で囲まなければなりません。
  • 各列名はカンマで区切ります。コンマの後のスペースは任意です。
  • パーティションの最大長は174820バイト設定ファイルで許される行の最大長です。したがって、実際にリストできる列の数は、それぞれの名前の長さに依存します。
  • 列は、ソース側のテーブル内で連続していても、連続していなくても構いません。例えば、テーブルの1列目、3列目、7列目をレプリケートすることができます。
  • キー列はパーティションに含める必要はありません
  • このテーブルで水平分割レプリケーションと垂直分割レプリケーションを併用する場合は、パーティションスキームのすべての列が列条件の一部でなければなりません。
  • フルテーブルレプリケーションを使用するテーブルと分割レプリケーションを使用するテーブルを含め、指定したデータソースからレプリケートするすべてのデータに対して1つの設定ファイルを使用します。

垂直分割レプリケーションのエントリを設定するには、以下の構文を使用します。設定ファイルの作成方法の詳細については、「データをレプリケートするためのSharePlexの設定」を参照してください。

datasource_specification    

#列パーティションを使用したテーブルの指定

src_owner.table (src_col,src_col,...)

tgt_owner.table [(tgt_col,tgt_col,...)]。 routing_map

#除外列パーティションを使用したテーブルの指定

src_owner.table !(src_col,src_col,...) tgt_owner.table routing_map
設定のコンポーネント 説明
src_owner.tableおよびtgt_owner.table ソース側のテーブルとターゲット側のテーブルのそれぞれの指定。

(src_col, src_col,...)

レプリケーションに含める列をリストした列パーティションを指定します。レプリケーション開始後に追加された列のデータも含め、他の列のデータはレプリケートされませんDDLレプリケーションが有効になっていると仮定

!(src_col,src_col,...)

レプリケーションから除外する列をリストする除外列パーティションを指定します。レプリケーション開始後に追加された列のデータも含め、その他の列のデータはすべてレプリケートされますDDLレプリケーションが有効になっていると仮定

注: 除外列パーティションを使用する場合、対応するソース側の列名とターゲット側の列名は同一でなければならず、除外列をキー定義で使用することはできません。詳細については、「一意キーの定義 」を参照してください。

(tgt_col,tgt_col,...)

ターゲット側の列。このオプションを使用して、異なる所有者や名前を持つソース側の列をターゲット側の列にマッピングします。ソース側の列とターゲット側の列の所有者または名前が同じ場合は、ターゲット側の列を省略することができます。

ソース側の列をターゲット側の列にマッピングするには、以下の規則に従います。

  • ソース側の列パーティションの構文規則はターゲット側の列リストにも適用されます。
  • ターゲット側の列の定義は、名前を除きソース側の列と同じでなければなりません。

  • ターゲット側の列を、対応するソース側の列と同じ論理順序でリストします。この操作は、SharePlexがオブジェクトキャッシュ内で正しい相関関係を構築するために、テーブル内のターゲット側の列の実際の順序にかかわらず必要です。例えば、ソース側のリストの2番目の列への変更は、ターゲット側のリストの2番目の列にレプリケートされます。
routing_map

列パーティションのルーティングマップ。ルーティングマップは以下のいずれかにできます。

  • ソース側のテーブルに水平分割レプリケーションを使用する場合は、!partition_schemeのようにパーティションスキームを指定します。
  • ソース側のテーブルに水平分割レプリケーションを使用しない場合は、以下のようにルーティングマップを指定します。

    • 列パーティションを1つのターゲットにレプリケートする場合は、sysB@o.myoraのようなシンプルなルーティングマップを使用します。名前付きexportキューまたはpostキューを持つルートがサポートされています。詳細については、以下を参照してください。

      名前付きexportキューの設定

      名前付きpostキューの設定

    • 列パーティションを複数のターゲットシステムにレプリケートする場合は、sysB@o.myora+sysC@o.myora2のような複合ルーティングマップを使用します。

重要! 設定ファイルにはソース側のテーブルごとに1つの列条件のみをリストできます。このため、複数のターゲットを個別のエントリに記載するのではなく、複合ルーティングマップを使用する必要があります。複合ルーティングマップを使用するには、すべてのターゲット側のテーブルの所有者と名前が同じでなければなりません。詳細については、設定ファイル内のルーティング指定を参照してください。

設定の例

複合ルーティングマップを使用して複数のターゲットにレプリケートする垂直分割レプリケーションの設定を次に示します。このソース側のテーブルに複合ルーティングマップを使用するには、すべてのターゲットの名前をscott.salにしなければなりません。

Datasourceo.oraA    
scott.emp (c1,c2) scott.sal

sysB@o.oraB+sysC@o.oraC

以下は、単一のターゲットにレプリケートする垂直分割レプリケーションの設定で、ターゲット側の列はソース側の列とは異なる名前を持っています。

Datasourceo.oraA    
scott.emp (c1,c2) scott.sal (c5,c6)

sysB@o.oraB

scott.emp (c1, c2)の同じ列パーティションを設定ファイル内で2回繰り返しているため、以下の設定ファイルは有効ではありません

Datasourceo.oraA    
scott.emp (c1,c2) scott.cust (c1,c2)

sysB@o.oraB

scott.emp (c1,c2) scott.sales (c1,c2) sysC@o.oraC

PostgreSQLおよびサービスとしてのPostgreSQLデータベースの垂直分割レプリケーションの概要

サポート対象

PostgreSQL、Oracle、SQL Server、Kafka

注: PostgreSQLからSQLサーバへのレプリケーションは、垂直分割データのBOOLEAN、TIME、TIME WITH TIME ZONE、およびBYTEAデータ型をサポートしていません。

垂直分割レプリケーションを設定するには:

垂直分割レプリケーションを構成するには、列パーティションまたは除外列パーティションのいずれかを設定ファイルで指定します。

  • 列パーティションは、レプリケーションに含める列を指定します。指定された列に加えられたデータ変更のみがターゲットに送信されます。
  • 除外列パーティションは、レプリケーションから除外する列を指定します。これらの列のデータはターゲットにレプリケートされません。

どちらのタイプの列パーティションを指定する場合も、以下の規則に従ってください。

  • パーティションはソース側のテーブルごとに1つです。列パーティションと除外パーティションは互いに排他的です。
  • 列リストは括弧で囲まなければなりません。
  • 各列名はカンマで区切ります。コンマの後のスペースは任意です。
  • パーティションの最大長は174820バイト設定ファイルで許される行の最大長です。したがって、実際にリストできる列の数は、それぞれの名前の長さに依存します。
  • 列は、ソース側のテーブル内で連続していても、連続していなくても構いません。例えば、テーブルの1列目、3列目、7列目をレプリケートすることができます。
  • キー列はパーティションに含める必要はありません。キー列をパーティション化していない場合、パフォーマンスに影響が出る可能性があります。
  • フルテーブルレプリケーションを使用するテーブルと分割レプリケーションを使用するテーブルを含め、指定したデータソースからレプリケートするすべてのデータに対して1つの設定ファイルを使用します。

垂直分割レプリケーションのエントリを設定するには、以下の構文を使用します。

datasource_specification    

#列パーティションを使用したテーブルの指定

src_schema.table (src_col,src_col,...)

tgt_schema.table [(tgt_col,tgt_col,...)] routing_map

#除外列パーティションを使用したテーブルの指定

src_schema.table !(src_col,src_col,...) tgt_schema.table routing_map
設定のコンポーネント 説明
src_schema.tableおよびtgt_schema.table ソース側のテーブルとターゲット側のテーブルのそれぞれの指定。
(tgt_col,tgt_col,...)

ターゲット側の列。このオプションを使用して、異なるスキーマや名前を持つソース側の列をターゲット側の列にマッピングします。ソース側の列とターゲット側の列のスキーマや名前が同じ場合は、ターゲット側の列を省略することができます。

ソース側の列をターゲット側の列にマッピングするには、以下の規則に従います。

  • ソース側の列パーティションの構文規則はターゲット側の列リストにも適用されます。
  • ターゲット側の列の定義は、名前を除きソース側の列と同じでなければなりません。

  • ターゲット側の列を、対応するソース側の列と同じ論理順序でリストします。この操作は、SharePlexがオブジェクトキャッシュ内で正しい相関関係を構築するために、テーブル内のターゲット側の列の実際の順序にかかわらず必要です。例えば、ソース側のリストの2番目の列への変更は、ターゲット側のリストの2番目の列にレプリケートされます。
routing_map

列パーティションのルーティングマップ。ルーティングマップは以下のいずれかにできます。

  • ソース側のテーブルに水平分割レプリケーションを使用する場合は、!partition_schemeのようにパーティションスキームを指定します。
  • ソース側のテーブルに水平分割レプリケーションを使用しない場合は、以下のようにルーティングマップを指定します。

    • 列パーティションを1つのターゲットにレプリケートする場合は、sysB@r.dbnameのようなシンプルなルーティングマップを使用します。名前付きexportキューまたはpostキューを持つルートがサポートされています。詳細については、以下を参照してください。

      名前付きexportキューの設定

      名前付きpostキューの設定

    • 列パーティションを複数のターゲットシステムにレプリケートする場合は、sysB@r.dbname+sysC@r.dbname2のような複合ルーティングマップを使用します。

重要! 設定ファイルにはソース側のテーブルごとに1つの列条件のみをリストできます。このため、複数のターゲットを個別のエントリに記載するのではなく、複合ルーティングマップを使用する必要があります。複合ルーティングマップを使用するには、すべてのターゲット側のテーブルのスキーマと名前が同じでなければなりません。

設定の例

複合ルーティングマップを使用して複数のターゲットにレプリケートする垂直分割レプリケーションの設定を次に示します。このソース側のテーブルに複合ルーティングマップを使用するには、すべてのターゲットの名前をscott.salにしなければなりません。

Datasource: r.dbname    
scott.emp (c1,c2) scott.sal

sysB@r.dbname1 + sysC@r.dbname2

以下は、単一のターゲットにレプリケートする垂直分割レプリケーションの設定で、ターゲット側の列はソース側の列とは異なる名前を持っています。

Datasource: r.dbname    
scott.emp (c1,c2) scott.sal (c5,c6)

sysB@r.dbname1

scott.emp (c1, c2)の同じ列パーティションを設定ファイル内で2回繰り返しているため、以下の設定ファイルは有効ではありません

Datasource: r.dbname    
scott.emp (c1,c2) scott.cust (c1,c2)

sysB@r.dbname1

scott.emp (c1,c2) scott.cust (c1,c2) sysC@r.dbname2

変更履歴ターゲットへのレプリケーションの設定

この章では、変更履歴ターゲットを管理するためにSharePlexを設定する方法について説明します。SharePlexにより、履歴を維持すると同時に、同じデータセットをレプリケートして最新のターゲットを維持することができます。

内容
関連ドキュメント

The document was helpful.

評価を選択

I easily found the information I needed.

評価を選択