この章では、メタデータの使用方法と、レプリケートされたデータとメタデータとを関連付ける方法について説明します。
この章の内容は次のとおりです。
ある表から別の表にデータをレプリケートする際に考慮すべき重要な点の1つは、ソース表とターゲット表の列構造(メタデータ)が同一であるかどうかです。Oracle GoldenGateは、次の目的でメタデータを参照します。
ソースでは、取得された操作に関する完全な情報をReplicatプロセスに提供するため。
ターゲットでは、レプリケートされたデータがReplicatによって正しくマップされ、必要に応じて変換されるように、ターゲット表の構造を判別するため。
次に示すシナリオでは、それぞれ異なるパラメータまたはパラメータ・セットを使用して、メタデータを処理するOracle GoldenGateプロセスに対してメタデータを正しく表現する必要があります。
ソース表を、同一のメタデータ定義を持つターゲット表にレプリケートする場合(同機種レプリケーション)。
ソース表を、異なるメタデータ定義を持つターゲット表にレプリケートする場合。
ソース表を2つのターゲット表(同一の定義を持つターゲット表と異なる定義を持つターゲット表)にレプリケートする場合。
ソース表とターゲット表が同一のメタデータ定義を持つ場合、Replicatのパラメータ・ファイルでASSUMETARGETDEFS
パラメータを使用します。このパラメータは、Replicatに対して、ターゲットの定義がソースの定義と同じであると想定し、SQL文の作成時にその定義をレプリケートされたデータに適用するよう指示します。ソース表とターゲット表はあらゆる点で同一である必要があるため、変換処理は不要です(ただし、カタログ、コンテナ、表の所有者と名前のいずれかまたは両方が異なっていてもかまいません)。
ソースとターゲットの構造が同一であるためには、次の要件を満たす必要があります。
データベース・タイプが同じであること(すべてOracleであるなど)。
キャラクタ・セットおよびロケールが同じであること(american_AMERICA
など)。
同じ数の列が含まれていること。
列名が同一であること(該当する場合は大/小文字、空白、引用符も含む)。
データ型が同一であること。
列の長さが同一であること。
文字の列の列長さセマンティクス(バイトか文字か)が同じであること。
すべての列が同じ順序で定義されていること。
次の単純なReplicatパラメータ・ファイルは、ASSUMETARGETDEFS
の使用方法を示しています。詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXの「ASSUMETARGETDEFS」を参照してください。
-- Specifies the group name. REPLICAT acctrep -- Specifies database login with an alias to a credential in the credential store. USERIDALIAS ogg -- Specifies a file for discard output. DISCARDFILE ./dirrpt/backup/r_prod.dsc, APPEND -- States that source and target definitions are identical. ASSUMETARGETDEFS -- Maps source tables to target tables. MAP hq.product, TARGET region1.product; MAP hq.price, TARGET region1.price;
ソースとターゲットの構造が異なる場合は、SOURCEDEFS
パラメータを使用します。13.3項「異なるメタデータを想定するためのOracle GoldenGateの構成」を参照してください。ASSUMETARGETDEFS
とSOURCEDEFS
は、同じパラメータ・ファイルで使用できません。
13.2.1項「表が同一とみなされるためのルール」のルールを満たさない場合、ソースとターゲットのメタデータ定義は同一であるとみなされません。ソース表とターゲット表の定義が異なる場合、Oracle GoldenGateでは、ある形式から別の形式への変換を実行する必要があります。変換を実行するには、Oracle GoldenGateが両方の定義セットを認識していることが必要です。Oracle GoldenGateは、ローカル・データベースに問い合せて一方の定義セットを取得できますが、リモート・データベースから定義を取得するにはデータ定義ファイルが必要になります。データ定義ファイルには、レプリケート対象データのメタデータに関する情報が含まれています。次の2種類の定義ファイルがあります。
パラメータ・ファイルでは複数のデータ定義ファイルを使用できます。たとえば、それぞれに異なるアプリケーションの定義を含めることができます。
データ定義ファイルの形式は内部使用を目的としているため、手順に記載されている場合、またはサポート担当者から指示された場合を除き、Oracle GoldenGateユーザーが編集しないでください。ファイルの先頭に、DEFGENのバージョン、キャラクタ・セットの情報、データベース・タイプ、ロケール、およびその他のデータ・プロパティを示す内部メタデータからなるファイル・ヘッダーがあります。ヘッダーの次にあるのが表定義セクションです。各表定義セクションには、表名、レコード長、列数、および1つ以上の列定義が含まれています。
使用する定義ファイルのタイプは、列のマッピングおよび変換がどこで実行されるかによって異なります。
WindowsまたはUNIXベースの任意のタイプのデータベース・システムからWindowsまたはUNIXベースの他のシステムにレプリケートする場合、マッピングと変換はExtract、データ・ポンプExtract、Replicatのいずれでも実行できますが、通常はターゲット・システムのReplicatによって実行されます。ただし、Oracle GoldenGateで異なるキャラクタ・セット間の変換を行う必要がある場合、ターゲットのReplicatによってマッピングと変換が行われる必要があります。13.3.3項「定義ファイルのキャラクタ・セットの影響の理解」を参照してください。
Windows、UNIXまたはLinuxベースの任意のデータベース・システムからNonStopシステム上のEnscribeターゲットにレプリケートする場合、マッピングと変換はWindows、UNIXまたはLinuxシステムで実行する必要があります。2つおよび3つの部分からなるSQL名およびデータ型を、NonStopプラットフォームで使用される3つの部分からなるファイル名に変換できるのはExtractのみです。このシナリオでは、Oracle GoldenGateはソースとターゲットの間でキャラクタ・セットを変換できません。13.3.3項「定義ファイルのキャラクタ・セットの影響の理解」を参照してください。
したがって、次のようになります。
列のマッピングおよび変換をターゲットで実行するには、ソースで生成されたソース定義ファイルを使用して、Replicatにソース定義を提供します。
列のマッピングおよび変換をソースで実行するには、ターゲットで生成されたターゲット定義ファイルを使用し、プライマリExtractとデータ・ポンプExtractのどちらが変換を実行するかに応じて、該当するプロセスにターゲット定義を提供します。
中間システムで列マッピングと変換を行うには、複数の定義ファイル・タイプを使用する必要がある場合があります。5.4項「中間システムでデータ・ポンプを使用するレポート構成の作成」および5.5項「カスケード・レポート構成の作成」を参照してください。中間システムにReplicatがない場合、キャラクタ・セット間の変換は行われないことに注意してください。
Oracle GoldenGateでは、データの変換を行う場合は、データベースのキャラクタ・セット・エンコーディングを考慮に入れ、定義ファイルを作成する場合は、ローカル・オペレーティング・システムのキャラクタ・セットを考慮に入れます。ソース・データとターゲット・データのキャラクタ・セットが異なる場合、次のガイドラインを考慮に入れます。
異なるキャラクタ・セット間でレプリケートされたデータの変換を行うプロセスはReplicatのみです。ソース・データベースのキャラクタ・セットからターゲット・データベースのキャラクタ・セット(カスケード構成では中間システムのデータベースのキャラクタ・セット)へデータを変換します。そのため、ソースとターゲットのキャラクタ・セットが異なる場合、データ・マッピングと変換はReplicatによって行われる必要があります。データ・ポンプのみが含まれるソース・システムや中間システムで行うことはできません。このような場合、ターゲット定義ファイルは無効です。
デフォルトでは、定義ファイルはDEFGENによってローカル・オペレーティング・システムのキャラクタ・セットで記述されます。次の条件を満たす場合、エンコーディング関連の問題が生じることなく、定義ファイルをローカル・システムで作成し、リモート・システムに転送できます。
定義ファイルの転送先のリモート・システムに、ローカル・システムと同じか同等のキャラクタ・セットがあります。
リモート・システムのオペレーティング・システム・キャラクタ・セットは、ローカル・システムのオペレーティング・システム・キャラクタ・セットのサブセットです。たとえば、ソースとターゲットのキャラクタ・セットがいずれもASCII互換またはEBCDIC互換で、表名と列名がすべて7ビットのUS-ASCIIまたはそれと同等の文字を使用している場合、ソースとターゲットのシステム間で定義ファイルを移動できます。
オペレーティング・システム・キャラクタ・セット同士の多くは、あまり互換性がないか、まったく互換性がありません。リモート・システムで使用されるものと同じか、互換性のあるキャラクタ・セットで定義ファイルを記述するには、DEFGENを構成する際、DEFSFILE
パラメータのCHARSET
オプションを使用します。
既存の定義ファイルを、キャラクタ・セットに互換性のないオペレーティング・システムへ転送する場合、そのシステムでDEFGENユーティリティを実行して、ファイルのキャラクタ・セットを目的のものに変換できます。この手順では、2つの入力引数(定義ファイルの名前とUPDATECS
character_set
パラメータ)を指定します。例:
defgen ./dirdef/source.def UPDATECS UTF-8
UPDATECS
が役立つのは、日本語のWindowsにおける日本語の表名がWindows CP932でデータ定義ファイルに記述されており、その定義ファイルを日本語のUNIXに転送するような場合です。UNIXがPCKロケールで構成されていないかぎり、このファイルは使用できません。そのため、UPDATECS
を使用して定義ファイルのエンコーディングを正しい形式に変換する必要があります。
定義ファイルを作成する際に定義テンプレートを指定すると、初期起動の後、Oracle GoldenGate構成に表が追加された場合に、新しい定義ファイルを作成する必要性が軽減されます。テンプレートを使用するには、たとえば顧客データベースに顧客ごとの別々の表が存在するが、すべての表が同一であるというように、新しい表がすべて同一の構造を持っている必要があります(13.2.1項「表が同一とみなされるためのルール」を参照)。
テンプレートを使用しない場合に、起動後、新しい表が追加されたときは、Oracle GoldenGate構成に追加された新しい表ごとに定義ファイルを生成し、その内容を既存のマスター定義ファイルにコピーしてから、プロセスを再起動する必要があります。
データ定義ファイルとテンプレート(必要な場合)を使用するようにOracle GoldenGateを構成するには、次の操作を実行します。
注意: Oracleの順序に対するデータ定義ファイルは作成しないでください。このファイルは不要であり、DEFGENではサポートされません。 |
メタデータ定義を取得するシステムで次の手順を実行します。
Oracle GoldenGateディレクトリからGGSCIを実行します。
GGSCIで、次のコマンドを発行してDEFGENのパラメータ・ファイルを作成します。
EDIT PARAMS DEFGEN
表13-1にリストされている順序でパラメータを入力します。パラメータ文ごとに新規行を開始します。
パラメータ | 説明 |
---|---|
CHARSET |
DEFGENでパラメータ・ファイルの読取りに使用されるキャラクタ・セットを指定するには、このパラメータを使用します。デフォルトでは、パラメータ・ファイルのキャラクタ・セットはローカル・オペレーティング・システムのキャラクタ・セットです。 |
DEFSFILE
|
DEFGENの出力となるデータ定義ファイルの相対名または完全修飾名を指定します。 各パラメータ・オプションとそれらがキャラクタ・セットに与える影響についての重要な情報は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。 追加情報は、13.3.3項「定義ファイルのキャラクタ・セットの影響の理解」を参照してください。 |
[{SOURCEDB | TARGETDB}
|
データベース接続情報を指定します。
|
|
定義が定義ファイルへ書き込まれる前に、表名からコンテナ名(Oracle)またはカタログ名(SQL/MX)を削除します。このパラメータは、2つの部分からなる名前( |
TABLE 説明:
|
定義を定義する1つ以上の表の完全修飾名を指定し、オプションで表のメタデータを定義テンプレートの基礎として使用します。大/小文字が区別されるデータベースに対しては、表名とテンプレート名における大/小文字の区別が維持されます。ワイルドカードの使用と大/小文字の区別の詳細は、4.5項「Oracle GoldenGateの入力におけるオブジェクト名の指定」を参照してください。 ソース定義ファイルを生成する場合はソース表を指定し、ターゲット定義ファイルを生成する場合はターゲット表を指定します。 ワイルドカードの指定から表を除外するには、 DEFGENでは、UDTがサポートされないことに注意してください。 |
ファイルを保存して閉じます。
GGSCIを終了します。
Oracle GoldenGateがインストールされているディレクトリから、次の引数を使用してDEFGENを実行します。この例は、UNIXファイル・システムの構造を示しています。
defgen paramfile dirprm/defgen.prm [reportfile dirrpt/defgen.rpt] [NOEXTATTR]
説明:
defgen
は、プログラムの名前です。
paramfile
は必須のキーワードです。dirprm/defgen.prm
は、DEFGENパラメータ・ファイルの相対名またはフルパス名です。(例には通常の場所が示されています。)
reportfile
は必須のキーワードです。dirrpt/defgen.rpt
は、画面および指定したレポート・ファイルに出力を送ります。(例には通常の場所が示されています。)画面に出力するのみの場合、reportfile
引数は省略できます。
NOEXTATTR
は、リリース11.2.1より古いOracle GoldenGateとの下位互換性を維持するために使用できますが、ASCII以外のキャラクタ・セット、大/小文字の区別、および空白とともに引用符で囲んだオブジェクト名をサポートしません。NOEXTATTR
を指定すると、DEFGENは、Oracle GoldenGateリリース11.2.1で導入されたグローバリゼーション機能をサポートするデータベース・ロケールおよびキャラクタ・セットを組み込みません。表名または列名にマルチバイト文字や空白などの特殊文字が含まれている場合、NOEXTATTR
を指定すると、DEFGENは表定義を組み込みません。パラメータ・ファイルでAPPEND
モードが使用されている場合、NOEXTATTR
は無視され、その他の属性が指定されているかどうかに関係なく、新しい表定義が既存のファイル形式で追加されます。
追加で作成する定義ファイルについて、前述の手順を繰り返します。
ASCIIモードを使用して、ローカルのOracle GoldenGate dirdef
サブディレクトリからリモートのdirdef
サブディレクトリに定義ファイルをFTP送信します。
ローカルとリモートのオペレーティング・システムが異なり、リモート・オペレーティング・システムのキャラクタ・セット用に定義ファイルが作成されている場合に、データ定義ファイルをリモート・システムにFTP送信するには、BINARY
モードを使用します。こうすることで、FTPプログラムによって予期しない文字(復帰改行文字や改行文字など)がファイルに挿入されるのを回避できます。z/OSからz/OS以外のプラットフォームへ定義ファイルを転送する場合、必ずBINARY
モードを使用してください。
次の方法でデータ定義ファイルを適切なOracle GoldenGateプロセスに関連付けます。
Extractパラメータ・ファイルのTARGETDEFS
パラメータを使用して、ターゲット定義ファイルをExtractグループまたはデータ・ポンプに関連付けます。
Replicatパラメータ・ファイルのSOURCEDEFS
パラメータを使用して、ソース定義ファイルをReplicatグループに関連付けます。
Oracle GoldenGateによって、ソース・データベースもターゲット・データベースも含まない中間システムでマッピングまたは変換を実行する場合、パラメータ・ファイルのSOURCEDEFS
およびTARGETDEFS
を使用して、ソース定義ファイルおよびターゲット定義ファイルをデータ・ポンプExtractに関連付けます。Oracle Databaseでは、中間システムにOracleライブラリも存在している必要があります。
複数の定義ファイルを指定する正しい方法は、13.3.7項「定義ファイルの使用例」を参照してください。
同じパラメータ・ファイルで、SOURCEDEFS
とASSUMETARGETDEFS
を使用しないでください。ASSUMETARGETDEFS
の詳細は、13.2項「同一のメタデータを想定するためのOracle GoldenGateの構成」を参照してください。
Oracle GoldenGate構成内の新しい表を定義テンプレートにマップするには、TABLE
パラメータとMAP
パラメータの次のオプションを適宜使用します。
ソース定義テンプレートの名前を指定するには、DEF
を使用します。
ターゲット定義テンプレートの名前を指定するには、TARGETDEF
を使用します。
これらのオプションを指定すると、ExtractプロセスまたはReplicatプロセスで指定のテンプレートと同じ定義が使用されるため、新しい表の定義ファイルを新たに作成したり、プロセスを再起動したりする必要はありません。
このトピックには、定義ファイルを含むいくつかの基本的な使用例が含まれます。
ターゲット・システム上で使用する複数のソース定義ファイルの作成
次の構成では、ソース定義ファイルを出力として作成するDEFGENパラメータ・ファイルを使用します。この例は、Oracleデータベースの表を対象としています。
DEFSFILE C:\ggs\dirdef\record.def USERIDALIAS ogg TABLE acct.cust100, DEF custdef; TABLE ord.*; TABLE hr.*;
このDEFGEN構成の結果は次のとおりです。
名前別の個別定義が、ord
およびhr
スキーマのすべての表に対して作成されます。
表acct.cust100
に基づいてcustdef
テンプレートが作成されます。データベースには、それぞれacct.cust100
と同一の定義を持つ他のacct.cust*
表が存在します。
表は、Replicatのパラメータ・ファイルで次のようにマップされます。
-- This is a simplified parameter file. Your requirements may vary. REPLICAT acctrep USERIDALIAS ogg SOURCEDEFS c:\ggs\dirdef\record.def MAP acct.cust*, TARGET acct.cust*, DEF custdef; MAP ord.prod, TARGET ord.prod; MAP ord.parts, TARGET ord.parts; MAP hr.emp, TARGET hr.emp; MAP hr.salary, TARGET hr.salary;
最初のMAP
文のDEF
オプションで指定したとおり、ワイルドカード指定acct.cust*
に一致する表の定義はcustdef
テンプレートから取得されます。
同じ表のターゲット定義が必要な場合、その表をプライマリExtractまたはデータ・ポンプに対してマップできます。
ターゲットがEnscribeデータベースの場合、ソース定義のかわりにターゲット定義が必要です。
マッピングと変換を中間システムで実行する場合、ソース定義に加えてターゲット定義も必要です。
ターゲット定義ファイルを作成するためのDEFGEN構成は次のようになります。
DEFSFILE C:\ggs\dirdef\trecord.def USERIDALIAS ogg TABLE acct.cust100, DEF tcustdef; TABLE ord.*; TABLE hr.*;
注意: ソース定義ファイルを作成するDEFGEN構成については、前の例を参照してください。 |
Extract構成は次のようになります。
-- This is a simplified parameter file. Your requirements may vary. EXTRACT acctex USERIDALIAS ogg RMTHOSTOPTIONS sysb, MGRPORT 7890, ENCRYPT AES192 KEYNAME mykey1 ENCRYPTTRAIL AES192 RMTTRAIL $data.ggsdat.rt SOURCEDEFS c:\ggs\dirdef\record.def TARGETDEFS c:\ggs\dirdef\trecord.def TABLE acct.cust*, TARGET acct.cust*, DEF custdef, TARGETDEF tcustdef; TABLE ord.prod, TARGET ord.prod; TABLE ord.parts, TARGET ord.parts; TABLE hr.emp, TARGET hr.emp; TABLE hr.salary, TARGET hr.salary;
この例では、acc.cust*
表に対して、custdef
(record.def
ファイルから)という名前のソース・テンプレートとtcustdef
(trecord.def
ファイルから)という名前のターゲット・テンプレートが使用されます。ord
およびhr
スキーマの表の定義は、表名に基づいた明示的な定義から取得されます(そのかわりに、ここでワイルドカード指定を使用することも可能です)。
これは、複数の定義ファイルの使用方法を示す単純な例です。パラメータの要件は、Oracle GoldenGateトポロジとデータベース・タイプによって異なる場合があります。
次に示すのは、1つ目のデータ定義ファイルを作成するDEFGENパラメータ・ファイルです。
DEFSFILE C:\ggs\dirdef\sales.def USERIDALIAS ogg TABLE ord.*;
次に示すのは、2つ目のデータ定義ファイルを作成するDEFGENパラメータ・ファイルです。ファイル名および表の指定が1つ目のものとは異なります。
DEFSFILE C:\ggs\dirdef\admin.def USERIDALIAS ogg TABLE hr.*;
1つ目の定義ファイルと2つ目の定義ファイルの表は、同じReplicatパラメータ・ファイルで次のようにマップされます。
REPLICAT acctrep USERIDALIAS ogg SOURCEDEFS c:\ggs\dirdef\sales.def MAP ord.*, TARGET ord.*; SOURCEDEFS c:\ggs\dirdef\admin.def MAP hr.*, TARGET hr.*;
ASSUMETARGETDEFS
とSOURCEDEFS
は、同じパラメータ・ファイルで使用できます。これが可能なのは、一部のソース表とターゲット表のペアの間では列のマッピングまたは変換を実行する必要があるが、その他の表のペアは同一である場合です。
次の例は、同じパラメータ・ファイルでSOURCEDEFS
とASSUMETARGETDEFS
を使用する方法を示しています。この例は、acct
、ord
、hr
の各スキーマの表がSOURCEDEFS
を必要とする前の例に基づいていますが、動的に作成されstock
という名前がランダムな数値とともに付加される表を持つrpt
スキーマが追加されています。Oracle GoldenGateでDMLだけでなくDDLもレプリケートするには、ターゲット表が同一であることが必要です。その場合、ASSUMETARGETDEFS
を指定する必要があります。
REPLICAT acctrep USERIDALIAS ogg SOURCEDEFS c:\ggs\dirdef\record.def MAP acct.cust*, TARGET acct.cust*, DEF custdef; MAP ord.prod, TARGET ord.prod; MAP ord.parts, TARGET ord.parts; MAP hr.emp, TARGET hr.emp; MAP hr.salary, TARGET hr.salary; ASSUMETARGETDEFS MAP rpt.stock, TARGET rpt.stock;