Oracle® Fusion Middleware Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成 12c (12.2.0.1) E70107-04 |
|
![]() 前 |
![]() 次 |
DDL操作には、ベース・オブジェクト名と導出オブジェクト名を含めることができます。ベース・オブジェクトは、データを含むオブジェクトです。導出オブジェクトは、ベース・オブジェクトの一部の属性を継承し、そのオブジェクトに関連する関数を実行するオブジェクトです。ベース・オブジェクトと導出オブジェクトの両方を含むDDL文は、次のとおりです。
RENAME
およびALTER RENAME
索引、シノニムまたはトリガーに対するCREATE
およびDROP
次のDDL文があるとします。
CREATE INDEX hr.indexPayrollDate ON TABLE hr.tabPayroll (payDate);
この場合、表がベース・オブジェクトです。その名前(hr.tabPayroll
)がベース名で、MAPPED
スコープでのTABLE
またはMAP
によるマッピングの対象です。導出オブジェクトは索引で、その名前(hr.indexPayrollDate
)が導出名です。
導出名は、ベース・オブジェクトとは別に、それ自体のTABLE
またはMAP
文でマップできます。または、1つのMAP
文で両方を処理できます。MAP
の場合、ターゲットでの導出オブジェクト名の変換は次のように処理されます。
MAP
文がベース・オブジェクトに存在して、導出オブジェクトに存在しない場合、結果は導出オブジェクトの暗黙的マッピングになります。DDL文にMAPPED
が含まれる場合、Replicatによって、ベース・オブジェクトと同じターゲット・スキーマが導出オブジェクトに付与されます。導出オブジェクトの名前は、ソース文と同じです。たとえば、次のようだとします。
Extract (ソース)
Table hr.tab*;
Replicat (ターゲット)
MAP hr.tab*, TARGET hrBackup.*;
次のソースDDL文があるとします。
CREATE INDEX hr.indexPayrollDate ON TABLE hr.tabPayroll (payDate);
ターゲットでReplicatによって実行されるCREATE INDEX
文は次のとおりです。
CREATE INDEX hrBackup.indexPayrollDate ON TABLE hrBackup.tabPayroll (payDate);
暗黙的マッピングのルールは、導出オブジェクトにベース・オブジェクトと同じスキーマを割り当てるという一般的な方法に基づきます。導出オブジェクトの名前がソースの文で完全修飾されていない場合でも、名前が適切に変換されることが保証されます。また、ベース・オブジェクトと同じターゲット・スキーマによって索引が所有される場合、暗黙的マッピングによって、導出オブジェクト名を明示的にマップする必要がなくなります。
ベース・オブジェクトに対するMAP
文があり、導出オブジェクトに対するものもある場合、結果は明示的マッピングです。DDL文にMAPPED
が含まれる場合、Replicatで独自のTARGET
句に従って各オブジェクトのスキーマと名前が変換されます。たとえば、次のようだとします。
Extract (ソース)
TABLE hr.tab*; TABLE hr.index*;
Replicat (ターゲット)
MAP hr.tab*, TARGET hrBackup.*;MAP hr.index*, TARGET hrIndex.*;
次のソースDDL文があるとします。
CREATE INDEX hr.indexPayrollDate ON TABLE hr.tabPayroll (payDate);
ターゲットでReplicatによって実行されるCREATE INDEX
文は次のとおりです。
CREATE INDEX hrIndex.indexPayrollDate ON TABLE hrBackup.tabPayroll (payDate);
ターゲットの索引が、ベース・オブジェクトとは異なるスキーマによって所有される必要がある場合、またはターゲットでの名前がソースの名前と異なる必要がある場合、明示的マッピングを使用します。
MAP
文が導出オブジェクトに存在して、ベース・オブジェクトに存在しない場合、Replicatでは、どちらのオブジェクトに対しても名前の変換が行われません。ターゲットのDDL文は、ソースと同じになります。導出オブジェクトをマップするには、次の方法があります。
ベース・オブジェクトに明示的MAP
文を使用します。
名前の問題がない場合は、ワイルドカードを使用して、ベース・オブジェクトと導出オブジェクトの両方を同じMAP
文にマップします。
名前をどのように変換するかに応じて、各オブジェクトのMAP
文を作成します。
次のものから作成された新規の表のOracle GoldenGateによる処理方法について、次に説明します。
RENAME
およびALTER RENAME
CREATE TABLE AS SELECT
RENAME
およびALTER TABLE RENAME
操作では、ベース・オブジェクトは常に新規の表の名前です。次の例において、ベース・オブジェクト名はindex_paydate
です。
ALTER TABLE hr.indexPayrollDate RENAME TO index_paydate;
または
RENAME hr.indexPayrollDate TO index_paydate;
導出オブジェクト名はhr.indexPayrollDate
です。
CREATE TABLE AS SELECT
(CTAS)文には、基礎となる任意の数のオブジェクトを参照するSELECT
文とINSERT
文が含まれます。デフォルトでは、Oracle GoldenGateにより、ターゲット・データベースからAS SELECT
句のデータが取得されます。このパラメータを使用して元の挿入を保持するようにCTAS操作を強制できます。
注意:
このため、CTAS
(CREATE TABLE AS SELECT
)文から作成されるOracle XMLType
の表はサポートされません。XMLType
表の場合、行オブジェクトIDがソースとターゲットの間で一致する必要がありますが、これは、このシナリオでは保持されません。空のCTAS
文(新規表にデータを挿入しない)で作成されたXMLType
表は適切に保持されません。
また、CTASによるCTASの挿入への応答を可能にするGETCTASDML
パラメータを使用できるため、レプリケーション中にOIDを保持できます。このパラメータは、統合ディクショナリでのみサポートされるため、トレイルを使用するには、ダウンストリームReplicatが12.1.2.1以上である必要があり、そうでないと、相違が生じる場合があります。
ターゲット・データベースにはAS SELECT
句のオブジェクトが存在し、その名前がソースのものと同一であることが必要です。
MAP
文でOracle GoldenGateは、新規の表の名前(CREATE TABLE name
)のみTARGET
指定にマップします。AS
SELECT
句の基になるオブジェクトの名前はマップしません。名前がTARGET
の指定に変換されると、データ不整合の原因となるオブジェクトに対する依存性が存在する可能性があります。
次に、ソースのCREATE TABLE AS SELECT
文と、この文がOracle GoldenGateによってターゲットにどのようにレプリケートされるかの例を示します。
CREATE TABLE a.tab1 AS SELECT * FROM a.tab2;
ReplicatのMAP
文は次のとおりです。
MAP a.tab*, TARGET a.x*;
Replicatによって適用されるターゲットのDDL文は次のとおりです。
CREATE TABLE a.xtab1 AS SELECT * FROM a.tab2;
AS SELECT * FROM
句の表名は、ソースと同じtab2
のまま(xtab2
ではなく)です。
ソースとターゲットで、基礎となるオブジェクトのデータの一貫性を保つには、Oracle GoldenGateによるデータ・レプリケーションに備えて構成します。前述の例では、次の文を使用してこの要件に対応できます。
ソース
TABLE a.tab*;
ターゲット
MAPEXCLUDE a.tab2 MAP a.tab*, TARGET a.x*; MAP a.tab2, TARGET a.tab2;
「DDL内の修飾されていないオブジェクト名の正しい識別」を参照してください。
NOMAPDERIVED
オプションを指定してDDLOPTIONS
パラメータを使用し、これを含むMAP
文のTARGET
句に従って導出オブジェクトの名前が変換されないようにします。NOMAPDERIVED
によって、ベースまたは導出オブジェクトの名前を含む明示的なMAP
文はオーバーライドされます。導出オブジェクトを含むソースDDLは、ソースと同じスキーマとオブジェクト名のターゲットにレプリケートされます。
次の表に、MAP
文がベース・オブジェクトのみに対するものか、導出オブジェクトのみに対するものか、両方に対するものかに基づいたMAPDERIVED
の結果を、NOMAPDERIVED
と比較して示します。
表13-2 マッピング構成に基づいた、ターゲットでの[NO]MAPDERIVEDの結果
ベース・オブジェクト | 導出オブジェクト | MAP/NOMAP DERIVED | MAPごとの導出オブジェクトの変換されるか | 導出オブジェクトにベース・オブジェクトのスキーマが割り当てられるか |
---|---|---|---|---|
マップされる脚注1 |
マップされる |
|
はい |
いいえ |
マップされる |
マップされない |
|
いいえ |
はい |
マップされない |
マップされる |
|
いいえ |
いいえ |
マップされない |
マップされない |
|
いいえ |
いいえ |
マップされる |
マップされる |
|
いいえ |
いいえ |
マップされる |
マップされない |
|
いいえ |
いいえ |
マップされない |
マップされる |
|
いいえ |
いいえ |
マップされない |
マップされない |
|
いいえ |
いいえ |
脚注1
「マップされる」とは、MAP
文に含まれていることを示しています。
次の例で、MAPDERIVED
の結果をNOMAPDERIVED
と比較して示します。表13-3では、ベース名と導出名の両方がMAPDERIVED
によって変換されるため、ターゲットでトリガーと表の両方がrpt
によって所有されます。
表13-3 導出オブジェクト名のデフォルト・マッピング(MAPDERIVED)
MAP文 | Extractに取得されたソースDDL文 | Replicatにより適用されたターゲットDDL文 |
---|---|---|
|
|
|
表13-4では、NOMAPDERIVED
の使用によって変換が行われないため、トリガーはfin
によって所有されます。
表13-4 NOMAPDERIVEDを使用する場合の導出オブジェクト名のマッピング
MAP文 | Extractに取得されたソースDDL文 | Replicatにより適用されたターゲットDDL文 |
---|---|---|
|
|
|
注意:
RENAME
文の場合、新しい表名はベース表の名前とみなされ、古い表名は導出表の名前とみなされます。