ヘッダーをスキップ
Oracle Streamsレプリケーション管理者ガイド
11g リリース1(11.1)
E05776-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

13 Oracle Streamsレプリケーションの監視

この章では、Oracle Streamsレプリケーションに関連する静的データ・ディクショナリ・ビューと動的パフォーマンス・ビューについて説明します。これらのビューを使用すると、Oracle Streamsレプリケーション環境を監視できます。この章では、Oracle Streamsレプリケーション環境の監視に使用できる問合せの例も示します。

この章の内容は次のとおりです。


注意:

  • Oracle Enterprise Manager ConsoleのOracle Streamsツールも、Oracle Streams環境を監視するための優れた手段です。Oracle Streamsツールの詳細は、ツールのオンライン・ヘルプを参照してください。

  • この章で説明する動的パフォーマンス・ビューの経過時間の統計を収集するには、TIMED_STATISTICS初期化パラメータをTRUEに設定してください。



参照:

  • Oracle Streams環境を監視する方法の詳細は、『Oracle Streams概要および管理』を参照してください。

  • この章で説明するデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。


Oracle Streamsのトポロジおよびパフォーマンスの監視

DBMS_STREAMS_ADVISOR_ADMパッケージを使用すると、Oracle Streamsのトポロジおよびパフォーマンスに関する情報を収集できます。収集した情報を表示するには、次のデータ・ディクショナリ・ビューを問い合せます。

DBMS_STREAMS_ADVISOR_ADMパッケージを使用して情報を収集すると、Oracle Streamsパフォーマンス・アドバイザによって、Oracle Streamsのトポロジおよびパフォーマンスに関する情報がこれらのビューに記録されます。これらのビューを問い合せて、Oracle Streamsコンポーネントの現在の実行状況を判断し、パフォーマンスを向上させる方法について確認できます。


参照:

DBMS_STREAMS_ADVISOR_ADMパッケージ、トポロジのデータ・ディクショナリ・ビューおよびOracle Streamsパフォーマンス・アドバイザを使用する方法の詳細は、『Oracle Streams概要および管理』を参照してください。

サプリメンタル・ロギングの監視

ここでは、ソース・データベースでサプリメンタル・ロギングを監視するために実行できる問合せについて説明します。

データベースでの総合的なサプリメンタル・ロギングは、この項の3つの問合せで表示される結果の組合せによって決定されます。たとえば、「ソース・データベースのサプリメンタル・ログ・グループの表示」の項の問合せで表から結果が戻されなかった場合でも、表内の列に対してサプリメンタル・ロギングを有効化できます。つまり、データベース・サプリメンタル・ロギングが有効化されているか、またはインスタンス化のための準備中にサプリメンタル・ロギングが有効化されたスキーマ内に表がある場合、その表のサプリメンタル・ロギングを有効にできます。

サプリメンタル・ロギングでは、操作が実行されるたびにREDOログに列データが追加されます。取得プロセスは、この追加情報を取得してLCRに含めます。これらの取得LCRを適用する適用プロセスには、変更を適切にスケジュールまたは適用するために、この追加情報が必要となる場合があります。

ソース・データベースのサプリメンタル・ログ・グループの表示

ソース・データベースで表に対して1つ以上のログ・グループが指定されているかどうかをチェックするには、次の問合せを実行します。

COLUMN LOG_GROUP_NAME HEADING 'Log Group' FORMAT A20
COLUMN TABLE_NAME HEADING 'Table' FORMAT A15
COLUMN ALWAYS HEADING 'Conditional or|Unconditional' FORMAT A14
COLUMN LOG_GROUP_TYPE HEADING 'Type of Log Group' FORMAT A20

SELECT
    LOG_GROUP_NAME,
    TABLE_NAME,
    DECODE(ALWAYS,
             'ALWAYS', 'Unconditional',
             'CONDITIONAL', 'Conditional') ALWAYS,
    LOG_GROUP_TYPE
  FROM DBA_LOG_GROUPS;

出力は次のようになります。

                                     Conditional or
Log Group            Table           Unconditional  Type of Log Group
-------------------- --------------- -------------- --------------------
LOG_GROUP_DEP_PK     DEPARTMENTS     Unconditional  USER LOG GROUP
SYS_C002105          REGIONS         Unconditional  PRIMARY KEY LOGGING
SYS_C002106          REGIONS         Conditional    FOREIGN KEY LOGGING
SYS_C002110          LOCATIONS       Unonditional   ALL COLUMN LOGGING
SYS_C002111          COUNTRIES       Conditional    ALL COLUMN LOGGING
LOG_GROUP_JOBS_CR    JOBS            Conditional    USER LOG GROUP

ログ・グループのタイプの出力がログ・グループの作成方法を示していると想定すると、次のことがいえます。

  • 出力がUSER LOG GROUPの場合、ログ・グループは、ALTER TABLE文のADD SUPPLEMENTAL LOG GROUP句を使用して作成されています。

  • その他の場合、ログ・グループは、ALTER TABLE文のADD SUPPLEMENTAL LOG DATA句を使用して作成されています。

ログ・グループのタイプがUSER LOG GROUPの場合、DBA_LOG_GROUP_COLUMNSデータ・ディクショナリ・ビューを問い合せることで、ログ・グループの列をリストできます。


注意:

ログ・グループのタイプがUSER LOG GROUPではない場合、DBA_LOG_GROUP_COLUMNSデータ・ディクショナリ・ビューには、ログ・グループの列に関する情報は含まれません。かわりに、表に操作が実行されると、Oracleは正しい列に対してサプリメンタル・ロギングを実行します。たとえば、ログ・グループのタイプがPRIMARY KEY LOGGINGの場合、Oracleはその表に変更が加えられたときに、現行の主キー列をログに記録します。

データベースのサプリメンタル・ロギング指定の表示

データベースのサプリメンタル・ロギング指定を表示するには、V$DATABASE動的パフォーマンス・ビューを問い合せます。次に例を示します。

COLUMN log_min HEADING 'Minimum|Supplemental|Logging?' FORMAT A12
COLUMN log_pk HEADING 'Primary Key|Supplemental|Logging?' FORMAT A12
COLUMN log_fk HEADING 'Foreign Key|Supplemental|Logging?' FORMAT A12
COLUMN log_ui HEADING 'Unique|Supplemental|Logging?' FORMAT A12
COLUMN log_all HEADING 'All Columns|Supplemental|Logging?' FORMAT A12

SELECT SUPPLEMENTAL_LOG_DATA_MIN log_min,
       SUPPLEMENTAL_LOG_DATA_PK log_pk,
       SUPPLEMENTAL_LOG_DATA_FK log_fk,
       SUPPLEMENTAL_LOG_DATA_UI log_ui,
       SUPPLEMENTAL_LOG_DATA_ALL log_all
  FROM V$DATABASE;

出力は次のようになります。

Minimum      Primary Key  Foreign Key  Unique        All Columns
Supplemental Supplemental Supplemental Supplemental  Supplemental
Logging?     Logging?     Logging?     Logging?      Logging?
------------ ------------ ------------ ------------- ------------
YES          YES          YES          YES           NO

この結果は、データベース内のすべての表について、最小値列、主キー列、外部キー列および一意キー列にサプリメンタル・ロギングが実行されていることを示しています。一意キー列にサプリメンタル・ロギングが実行されているため、ビットマップ索引列にもサプリメンタル・ロギングが実行されています。ただし、すべての列にサプリメンタル・ロギングが実行されているわけではありません。

インスタンス化の準備中に指定されたサプリメンタル・ロギングの表示

DBMS_CAPTURE_ADMパッケージの3つのうちの1つのプロシージャを使用して、データベース・オブジェクトがインスタンス化のために準備されている場合、サプリメンタル・ロギングを有効化できます。データ・ディクショナリ・ビューには、PREPARE_TABLE_INSTANTIATIONPREPARE_SCHEMA_INSTANTIATIONおよびPREPARE_GLOBAL_INSTANTIATIONの各プロシージャによって有効化されたサプリメンタル・ロギングが表示されます。

  • DBA_CAPTURE_PREPARED_TABLESビューには、PREPARE_TABLE_INSTANTIATIONプロシージャによって有効化されたサプリメンタル・ロギングが表示されます。

  • DBA_CAPTURE_PREPARED_SCHEMASビューには、PREPARE_SCHEMA_INSTANTIATIONプロシージャによって有効化されたサプリメンタル・ロギングが表示されます。

  • DBA_CAPTURE_PREPARED_DATABASEビューには、PREPARE_GLOBAL_INSTANTIATIONプロシージャによって有効化されたサプリメンタル・ロギングが表示されます。

これらの各ビューには、次の列があります。

  • SUPPLEMENTAL_LOG_DATA_PK: プロシージャによって主キーのサプリメンタル・ロギングが有効化されたかどうかが表示されます。

  • SUPPLEMENTAL_LOG_DATA_UI: プロシージャによって一意キーおよびビットマップ索引のサプリメンタル・ロギングが有効化されたかどうかが表示されます。

  • SUPPLEMENTAL_LOG_DATA_FK: プロシージャによって外部キーのサプリメンタル・ロギングが有効化されたかどうかが表示されます。

  • SUPPLEMENTAL_LOG_DATA_ALL: プロシージャによってすべての列のサプリメンタル・ロギングが有効化されたかどうかが表示されます。

これらの各列には、次のいずれかの値が表示されます。

  • IMPLICIT: 関連するプロシージャによって列のサプリメンタル・ロギングが有効化されたことを意味します。

  • EXPLICIT: ADD SUPPLEMENTAL LOG DATA句を指定したALTER TABLEまたはALTER DATABASE文を使用して、列のサプリメンタル・ロギングが手動で有効化されたことを意味します。

  • NO: PREPAREプロシージャまたはADD SUPPLEMENTAL LOG DATA句を指定したALTER TABLEまたはALTER DATABASE文を使用して、列のサプリメンタル・ロギングが有効化されていないことを意味します。サプリメンタル・ロギングは、その列に対して有効化されていない場合があります。ただし、サプリメンタル・ロギングは、その列に対して他のレベル(表、スキーマまたはデータベース)で有効化されていたり、ADD SUPPLEMENTAL LOG GROUP句を指定したALTER TABLE文を使用して有効化されている場合があります。

ここでは、これらのプロシージャによって有効化されたサプリメンタル・ロギングを表示する問合せについて説明します。

PREPARE_TABLE_INSTANTIATIONによって有効化されたサプリメンタル・ロギングの表示

次の問合せを実行すると、PREPARE_TABLE_INSTANTIATIONプロシージャによってhrスキーマ内の表に対して有効化されたサプリメンタル・ロギングが表示されます。

COLUMN TABLE_NAME HEADING 'Table Name' FORMAT A15
COLUMN log_pk HEADING 'Primary Key|Supplemental|Logging' FORMAT A12
COLUMN log_fk HEADING 'Foreign Key|Supplemental|Logging' FORMAT A12
COLUMN log_ui HEADING 'Unique|Supplemental|Logging' FORMAT A12
COLUMN log_all HEADING 'All Columns|Supplemental|Logging' FORMAT A12

SELECT TABLE_NAME,
       SUPPLEMENTAL_LOG_DATA_PK log_pk,
       SUPPLEMENTAL_LOG_DATA_FK log_fk,
       SUPPLEMENTAL_LOG_DATA_UI log_ui,
       SUPPLEMENTAL_LOG_DATA_ALL log_all
  FROM DBA_CAPTURE_PREPARED_TABLES
  WHERE TABLE_OWNER = 'HR';

出力は次のようになります。

                Primary Key  Foreign Key  Unique         All Columns
                Supplemental Supplemental Supplemental   Supplemental
Table Name      Logging      Logging      Logging        Logging
--------------- ------------ ------------ -------------- ------------
COUNTRIES       NO           NO           NO             NO
REGIONS         IMPLICIT     IMPLICIT     IMPLICIT       NO
DEPARTMENTS     IMPLICIT     IMPLICIT     IMPLICIT       NO
LOCATIONS       EXPLICIT     NO           NO             NO
EMPLOYEES       NO           NO           NO             IMPLICIT
JOB_HISTORY     NO           NO           NO             NO
JOBS            NO           NO           NO             NO

結果は次のとおりです。

  • PREPARE_TABLE_INSTANTIATIONプロシージャによって、hr.regionsおよびhr.departments表内の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効化されています。

  • PREPARE_TABLE_INSTANTIATIONプロシージャによって、hr.employees表内のすべての列のサプリメンタル・ロギングが有効化されています。

  • ADD SUPPLEMENTAL LOG DATA句を指定したALTER TABLE文によって、hr.locations表の主キーのサプリメンタル・ロギングが有効化されています。


注意:

データベース内のすべての表の情報を表示するには、問合せでWHERE句を省略します。

PREPARE_SCHEMA_INSTANTIATIONによって有効化されたサプリメンタル・ロギングの表示

次の問合せを実行すると、PREPARE_SCHEMA_INSTANTIATIONプロシージャによって有効化されたサプリメンタル・ロギングが表示されます。

COLUMN SCHEMA_NAME HEADING 'Schema Name' FORMAT A20
COLUMN log_pk HEADING 'Primary Key|Supplemental|Logging' FORMAT A12
COLUMN log_fk HEADING 'Foreign Key|Supplemental|Logging' FORMAT A12
COLUMN log_ui HEADING 'Unique|Supplemental|Logging' FORMAT A12
COLUMN log_all HEADING 'All Columns|Supplemental|Logging' FORMAT A12

SELECT SCHEMA_NAME,
       SUPPLEMENTAL_LOG_DATA_PK log_pk,
       SUPPLEMENTAL_LOG_DATA_FK log_fk,
       SUPPLEMENTAL_LOG_DATA_UI log_ui,
       SUPPLEMENTAL_LOG_DATA_ALL log_all
  FROM DBA_CAPTURE_PREPARED_SCHEMAS;

出力は次のようになります。

                     Primary Key  Foreign Key  Unique         All Columns
                     Supplemental Supplemental Supplemental   Supplemental
Schema Name          Logging      Logging      Logging        Logging
-------------------- ------------ ------------ -------------- ------------
OUTLN                NO           NO           NO             NO
DIP                  NO           NO           NO             NO
TSMSYS               NO           NO           NO             NO
DBSNMP               NO           NO           NO             NO
WMSYS                NO           NO           NO             NO
CTXSYS               NO           NO           NO             NO
SCOTT                NO           NO           NO             NO
ADAMS                NO           NO           NO             NO
JONES                NO           NO           NO             NO
CLARK                NO           NO           NO             NO
BLAKE                NO           NO           NO             NO
HR                   NO           NO           NO             IMPLICIT
OE                   IMPLICIT     IMPLICIT     IMPLICIT       NO
IX                   NO           NO           NO             NO
ORDSYS               NO           NO           NO             NO
ORDPLUGINS           NO           NO           NO             NO
SI_INFORMTN_SCHEMA   NO           NO           NO             NO
MDSYS                NO           NO           NO             NO
PM                   NO           NO           NO             NO
SH                   NO           NO           NO             NO

結果は次のとおりです。

  • PREPARE_SCHEMA_INSTANTIATIONプロシージャによって、hrスキーマ内の表のすべての列のサプリメンタル・ロギングが有効化されています。

  • PREPARE_SCHEMA_INSTANTIATIONプロシージャによって、oeスキーマ内の表の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効化されています。

PREPARE_GLOBAL_INSTANTIATIONによって有効化されたサプリメンタル・ロギングの表示

次の問合せを実行すると、PREPARE_GLOBAL_INSTANTIATIONプロシージャによって有効化されたサプリメンタル・ロギングが表示されます。

COLUMN log_pk HEADING 'Primary Key|Supplemental|Logging' FORMAT A12
COLUMN log_fk HEADING 'Foreign Key|Supplemental|Logging' FORMAT A12
COLUMN log_ui HEADING 'Unique|Supplemental|Logging' FORMAT A12
COLUMN log_all HEADING 'All Columns|Supplemental|Logging' FORMAT A12

SELECT SUPPLEMENTAL_LOG_DATA_PK log_pk,
       SUPPLEMENTAL_LOG_DATA_FK log_fk,
       SUPPLEMENTAL_LOG_DATA_UI log_ui,
       SUPPLEMENTAL_LOG_DATA_ALL log_all
  FROM DBA_CAPTURE_PREPARED_DATABASE;

出力は次のようになります。

Primary Key  Foreign Key  Unique         All Columns
Supplemental Supplemental Supplemental   Supplemental
Logging      Logging      Logging        Logging
------------ ------------ -------------- ------------
IMPLICIT     IMPLICIT     IMPLICIT       NO

この結果は、PREPARE_GLOBAL_INSTANTIATIONプロシージャによって、データベース内のすべての表の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効化されていることを示しています。

Oracle Streamsレプリケーション環境での適用プロセスの監視

ここでは、Streamsレプリケーション環境で適用プロセスを監視するために実行できる問合せについて説明します。

接続先データベースで指定されている代替キー列の表示

接続先データベースで代替キーを指定できます。代替キーとは、Oracleが適用中に表の各行を識別するために使用できる列または列セットです。代替キー列を使用すると、主キーのない表のキー列を指定できます。また、接続先データベースで表が適用プロセスによって処理されるときには、その表の主キーのかわりに使用できます。

接続先データベースで指定されている代替キー列をすべて表示するには、次の問合せを実行します。

COLUMN OBJECT_OWNER HEADING 'Table Owner' FORMAT A20
COLUMN OBJECT_NAME HEADING 'Table Name' FORMAT A20
COLUMN COLUMN_NAME HEADING 'Substitute Key Name' FORMAT A20
COLUMN APPLY_DATABASE_LINK HEADING 'Database Link|for Remote|Apply' FORMAT A15

SELECT OBJECT_OWNER, OBJECT_NAME, COLUMN_NAME, APPLY_DATABASE_LINK
  FROM DBA_APPLY_KEY_COLUMNS
  ORDER BY APPLY_DATABASE_LINK, OBJECT_OWNER, OBJECT_NAME;

出力は次のようになります。

                                                               Database Link
                                                               for Remote
Table Owner          Table Name           Substitute Key Name  Apply
-------------------- -------------------- -------------------- ---------------
HR                   DEPARTMENTS          DEPARTMENT_NAME
HR                   DEPARTMENTS          LOCATION_ID
HR                   EMPLOYEES            FIRST_NAME
HR                   EMPLOYEES            LAST_NAME
HR                   EMPLOYEES            HIRE_DATE

注意:

Oracle以外のリモート・データベースの代替キー列の場合は、この問合せを実行すると、最終列にデータベース・リンクが表示されます。ローカルの接続先データベースの代替キー列が指定されている場合は、最終列がNULLになります。


参照:


DMLおよびDDLハンドラに関する情報の表示

この項では、適用プロセスのDMLハンドラおよびDDLハンドラに関する情報を表示する問合せについて説明します。


参照:

DMLハンドラおよびDDLハンドラの詳細は、『Oracle Streams概要および管理』を参照してください。

ローカルの適用に関するすべてのDMLハンドラの表示

接続先データベースでDBMS_APPLY_ADMパッケージのSET_DML_HANDLERプロシージャを使用して、ローカルのDMLハンドラを指定する際に、そのハンドラを特定の適用プロセスで実行するか、または変更をローカルに適用するデータベース内のすべての適用プロセスについて、必要に応じて汎用ハンドラを実行するかを指定できます。特定のDMLハンドラは、汎用DMLハンドラより優先されます。DMLは、特定の表に対する指定した操作について実行されます。

データベース内で変更をローカルに適用する各適用プロセスについて、DMLハンドラを表示するには、次の問合せを実行します。

COLUMN OBJECT_OWNER HEADING 'Table|Owner' FORMAT A11
COLUMN OBJECT_NAME HEADING 'Table Name' FORMAT A10
COLUMN OPERATION_NAME HEADING 'Operation' FORMAT A9
COLUMN USER_PROCEDURE HEADING 'Handler Procedure' FORMAT A25
COLUMN APPLY_NAME HEADING 'Apply Process|Name' FORMAT A15

SELECT OBJECT_OWNER,
       OBJECT_NAME,
       OPERATION_NAME,
       USER_PROCEDURE,
       APPLY_NAME
  FROM DBA_APPLY_DML_HANDLERS
  WHERE ERROR_HANDLER = 'N' AND
        APPLY_DATABASE_LINK IS NULL
  ORDER BY OBJECT_OWNER, OBJECT_NAME;

出力は次のようになります。

Table                                                      Apply Process
Owner       Table Name Operation Handler Procedure         Name
----------- ---------- --------- ------------------------- --------------
HR          LOCATIONS  UPDATE    "STRMADMIN"."HISTORY_DML"

strmadmin.history_dml DMLハンドラのApply Process NameNULLであるため、このハンドラはすべてのローカル適用プロセスについて実行される汎用ハンドラです。


注意:

Oracle以外のリモート・データベースに関して、変更を処理するDMLハンドラを指定することもできます。この問合せでは、この種のDMLハンドラは表示されません。これは、DMLハンドラが表示されるのは、APPLY_DATABASE_LINK列がNULLの場合のみであるためです。

各適用プロセスのDDLハンドラの表示

データベース内の各適用プロセスについて、DDLハンドラを表示するには、次の問合せを実行します。

COLUMN APPLY_NAME HEADING 'Apply Process Name' FORMAT A20
COLUMN DDL_HANDLER HEADING 'DDL Handler' FORMAT A40

SELECT APPLY_NAME, DDL_HANDLER FROM DBA_APPLY;

出力は次のようになります。

Apply Process Name   DDL Handler
-------------------- ----------------------------------------
STREP01_APPLY        "STRMADMIN"."HISTORY_DDL"

仮想依存性定義の監視

ここでは、データベース内の仮想依存性定義に関する情報を表示する問合せについて説明します。


参照:

仮想依存性定義の詳細は、「適用プロセスと依存性」を参照してください。

値依存性の表示

データベース内の値依存性を表示するには、次の問合せを実行します。

COLUMN DEPENDENCY_NAME HEADING 'Dependency Name' FORMAT A25
COLUMN OBJECT_OWNER HEADING 'Object Owner' FORMAT A15
COLUMN OBJECT_NAME HEADING 'Object Name' FORMAT A20
COLUMN COLUMN_NAME HEADING 'Column Name' FORMAT A15

SELECT DEPENDENCY_NAME,
       OBJECT_OWNER,
       OBJECT_NAME,
       COLUMN_NAME
  FROM DBA_APPLY_VALUE_DEPENDENCIES;

出力は次のようになります。

Dependency Name           Object Owner    Object Name          Column Name
------------------------- --------------- -------------------- ---------------
ORDER_ID_FOREIGN_KEY      OE              ORDERS               ORDER_ID
ORDER_ID_FOREIGN_KEY      OE              ORDER_ITEMS          ORDER_ID
KEY_53_FOREIGN_KEY        US_DESIGNS      ALL_DESIGNS_SUMMARY  KEY_53
KEY_53_FOREIGN_KEY        US_DESIGNS      DESIGN_53            KEY_53

この出力には、次の値依存性が表示されています。

  • order_id_foreign_key値依存性は、oe.orders表のorder_id列とoe.order_items表のorder_id列の間の依存性を示します。

  • key_53_foreign_key値依存性は、us_designs.all_designs_summary表のkey_53列とus_designs.design_53表のkey_53列の間の依存性を示します。

オブジェクト依存性の表示

データベース内のオブジェクト依存性を表示するには、次の問合せを実行します。

COLUMN OBJECT_OWNER HEADING 'Object Owner' FORMAT A15
COLUMN OBJECT_NAME HEADING 'Object Name' FORMAT A15
COLUMN PARENT_OBJECT_OWNER HEADING 'Parent Object Owner' FORMAT A20
COLUMN PARENT_OBJECT_NAME HEADING 'Parent Object Name' FORMAT A20

SELECT OBJECT_OWNER,
       OBJECT_NAME,
       PARENT_OBJECT_OWNER,
       PARENT_OBJECT_NAME
  FROM DBA_APPLY_OBJECT_DEPENDENCIES;

出力は次のようになります。

Object Owner    Object Name     Parent Object Owner  Parent Object Name
--------------- --------------- -------------------- --------------------
ORD             CUSTOMERS       ORD                  SHIP_ORDERS
ORD             ORDERS          ORD                  SHIP_ORDERS
ORD             ORDER_ITEMS     ORD                  SHIP_ORDERS

この出力には、ord.ship_orders表が次に示す子表の親表であるオブジェクト依存性が表示されています。

  • ord.customers

  • ord.orders

  • ord.order_items

競合検出に関する情報の表示

DBMS_APPLY_ADMパッケージのCOMPARE_OLD_VALUESプロシージャを使用すると、非キー列の競合検出を停止できます。このプロシージャを使用すると、接続先データベースのすべての適用プロセスについて、指定した列の競合検出が停止されます。競合検出が停止された各列を表示するには、次の問合せを実行します。

COLUMN OBJECT_OWNER HEADING 'Table Owner' FORMAT A15
COLUMN OBJECT_NAME HEADING 'Table Name' FORMAT A20
COLUMN COLUMN_NAME HEADING 'Column Name' FORMAT A20
COLUMN COMPARE_OLD_ON_DELETE HEADING 'Compare|Old On|Delete' FORMAT A7
COLUMN COMPARE_OLD_ON_UPDATE HEADING 'Compare|Old On|Update' FORMAT A7

SELECT OBJECT_OWNER,
       OBJECT_NAME,
       COLUMN_NAME,
       COMPARE_OLD_ON_DELETE,
       COMPARE_OLD_ON_UPDATE
  FROM DBA_APPLY_TABLE_COLUMNS
  WHERE APPLY_DATABASE_LINK IS NULL;

出力は次のようになります。

                                                          Compare Compare
                                                          Old On  Old On
Table Owner     Table Name           Column Name          Delete  Update
--------------- -------------------- -------------------- ------- -------
HR              EMPLOYEES            COMMISSION_PCT       NO      NO
HR              EMPLOYEES            EMAIL                NO      NO
HR              EMPLOYEES            FIRST_NAME           NO      NO
HR              EMPLOYEES            HIRE_DATE            NO      NO
HR              EMPLOYEES            JOB_ID               NO      NO
HR              EMPLOYEES            LAST_NAME            NO      NO
HR              EMPLOYEES            PHONE_NUMBER         NO      NO
HR              EMPLOYEES            SALARY               NO      NO


注意:

Oracle以外のリモート・データベースに適用される変更についての競合検出を停止することもできます。この問合せでは、この種の指定は表示されません。これは、指定が表示されるのは、APPLY_DATABASE_LINK列がNULLの場合のみであるためです。

更新の競合ハンドラに関する情報の表示

DBMS_APPLY_ADMパッケージのSET_UPDATE_CONFLICT_HANDLERプロシージャを使用して更新の競合ハンドラを指定した場合は、関連する競合が発生すると、そのハンドラがデータベース内のすべての適用プロセスに対して実行されます。

この項で説明する問合せを実行すると、ビルトインの更新の競合ハンドラを使用して競合解消が指定されている列がすべて表示されます。つまり、データベース内で指定されているすべての列リストの列が表示されます。また、この問合せでは、指定されているビルトインの競合ハンドラの型と、列リストに指定されている解消列も表示されます。

データベース内のすべての更新の競合ハンドラに関する情報を表示するには、次の問合せを実行します。

COLUMN OBJECT_OWNER HEADING 'Table|Owner' FORMAT A5
COLUMN OBJECT_NAME HEADING 'Table Name' FORMAT A12
COLUMN METHOD_NAME HEADING 'Method' FORMAT A12
COLUMN RESOLUTION_COLUMN HEADING 'Resolution|Column' FORMAT A13
COLUMN COLUMN_NAME HEADING 'Column Name' FORMAT A30

SELECT OBJECT_OWNER,
       OBJECT_NAME,
       METHOD_NAME,
       RESOLUTION_COLUMN,
       COLUMN_NAME
  FROM DBA_APPLY_CONFLICT_COLUMNS
  ORDER BY OBJECT_OWNER, OBJECT_NAME, RESOLUTION_COLUMN;

出力は次のようになります。

Table                           Resolution
Owner Table Name   Method       Column        Column Name
----- ------------ ------------ ------------- ------------------------------
HR    COUNTRIES    MAXIMUM      TIME          COUNTRY_NAME
HR    COUNTRIES    MAXIMUM      TIME          REGION_ID
HR    COUNTRIES    MAXIMUM      TIME          TIME
HR    DEPARTMENTS  MAXIMUM      TIME          DEPARTMENT_NAME
HR    DEPARTMENTS  MAXIMUM      TIME          LOCATION_ID
HR    DEPARTMENTS  MAXIMUM      TIME          MANAGER_ID
HR    DEPARTMENTS  MAXIMUM      TIME          TIME

Oracle Streamsタグの監視

ここでは、現行セッション用のOracle Streamsタグと各適用プロセス用のデフォルト・タグを表示するために実行できる問合せについて説明します。


参照:


現行セッション用のタグ値の表示

次のようにDUALビューを問い合せると、現行セッションについてすべてのREDOエントリ内で生成されたタグ値を表示できます。

SELECT DBMS_STREAMS.GET_TAG FROM DUAL;

出力は次のようになります。

GET_TAG
--------------------------------------------------------------------------------
1D

また、DBMS_STREAMS.GET_TAGファンクションをコールすると、セッション用のタグを判断できます。

各適用プロセス用のデフォルトのタグ値の表示

DBA_APPLYデータ・ディクショナリ・ビューでAPPLY_TAGの値を問い合せると、各適用プロセスによって生成されるすべてのREDOエントリのデフォルト・タグを取得できます。たとえば、各適用プロセスによってREDOエントリ内で生成されるデフォルト・タグの16進値を取得するには、次の問合せを実行します。

COLUMN APPLY_NAME HEADING 'Apply Process Name' FORMAT A30
COLUMN APPLY_TAG HEADING 'Tag Value' FORMAT A30

SELECT APPLY_NAME, APPLY_TAG FROM DBA_APPLY;

出力は次のようになります。

Apply Process Name             Tag Value
------------------------------ ------------------------------
APPLY_FROM_MULT2               00
APPLY_FROM_MULT3               00

適用プロセスに関連付けられているハンドラまたはカスタム・ルールベースの変換ファンクションでは、DBMS_STREAMS.GET_TAGファンクションをコールしてタグを取得できます。

インスタンス化の監視

ここでは、ソース・データベースでインスタンス化のために準備済であるデータベース・オブジェクト、および接続先データベースでのデータベース・オブジェクトのインスタンス化SCNを判断するために実行できる問合せについて説明します。

どのデータベース・オブジェクトがインスタンス化のために準備済であるかの判断

データベース・オブジェクトをインスタンス化のために準備するには、DBMS_CAPTURE_ADMパッケージの次のいずれかのプロシージャまたはファンクションを使用します。

  • PREPARE_TABLE_INSTANTIATIONプロシージャでは、表に対する変更が取得プロセスによって取得される場合、1つの表がインスタンス化のために準備されます。

  • PREPARE_SYNC_INSTANTIATIONファンクションでは、表に対する変更が同期取得によって取得される場合、1つの表または複数の表がインスタンス化のために準備されます。

  • PREPARE_SCHEMA_INSTANTIATIONプロシージャでは、スキーマ内のすべてのデータベース・オブジェクトおよび将来そのスキーマに追加されるすべてのデータベース・オブジェクトがインスタンス化のために準備されます。このプロシージャは、取得プロセスによって変更が取得される場合にのみ使用する必要があります。

  • PREPARE_GLOBAL_INSTANTIATIONプロシージャでは、データベース内のすべてのデータベース・オブジェクトおよび将来そのデータベースに追加されるすべてのデータベース・オブジェクトがインスタンス化のために準備されます。このプロシージャは、取得プロセスによって変更が取得される場合にのみ使用する必要があります。

どのデータベース・オブジェクトのインスタンス化の準備が完了しているかを判断するには、対応する次のデータ・ディクショナリ・ビューを問い合せます。

  • DBA_CAPTURE_PREPARED_TABLES

  • DBA_SYNC_CAPTURE_PREPARED_TABS

  • DBA_CAPTURE_PREPARED_SCHEMAS

  • DBA_CAPTURE_PREPARED_DATABASE

たとえば、PREPARE_TABLE_INSTANTIATIONプロシージャでインスタンス化の準備が完了しているすべての表、各表が準備された時刻およびそのSCNを表示するには、次の問合せを実行します。

COLUMN TABLE_OWNER HEADING 'Table Owner' FORMAT A15
COLUMN TABLE_NAME HEADING 'Table Name' FORMAT A15
COLUMN SCN HEADING 'Prepare SCN' FORMAT 99999999999
COLUMN TIMESTAMP HEADING 'Time Ready for|Instantiation'

SELECT TABLE_OWNER,
       TABLE_NAME,
       SCN,
       TO_CHAR(TIMESTAMP, 'HH24:MI:SS MM/DD/YY') TIMESTAMP
  FROM DBA_CAPTURE_PREPARED_TABLES;

出力は次のようになります。

                                                  Time Ready for
Table Owner     Table Name            Prepare SCN Instantiation
--------------- --------------- ----------------- -----------------
HR              COUNTRIES                  196655 12:59:30 02/28/02
HR              DEPARTMENTS                196658 12:59:30 02/28/02
HR              EMPLOYEES                  196659 12:59:30 02/28/02
HR              JOBS                       196660 12:59:30 02/28/02
HR              JOB_HISTORY                196661 12:59:30 02/28/02
HR              LOCATIONS                  196662 12:59:30 02/28/02
HR              REGIONS                    196664 12:59:30 02/28/02

インスタンス化SCNが設定されている表の判断

インスタンス化SCNは、接続先データベースで設定されます。このSCNによって、データベース・オブジェクト対して、適用プロセスで無視される取得LCRおよび適用される取得LCRが制御されます。ソース・データベースからの表に関するLCRのコミットSCNが、接続先データベースでその表のインスタンス化SCN以下であれば、接続先データベースの適用プロセスではLCRが廃棄されます。それ以外の場合は、適用プロセスによってLCRが適用されます。LCRは、取得プロセスまたは同期取得で取得できます。

インスタンス化SCNは、DBMS_APPLY_ADMパッケージの次のいずれかのプロシージャを使用して設定できます。

  • SET_TABLE_INSTANTIATION_SCN: 1つの表のインスタンス化SCNを設定します。

  • SET_SCHEMA_INSTANTIATION_SCN: 1つのスキーマ(オプションで、スキーマ内のすべてのデータベース・オブジェクト)のインスタンス化SCNを設定します。

  • SET_GLOBAL_INSTANTIATION_SCN: 1つのデータベース(オプションで、データベース内のすべてのデータベース・オブジェクト)のインスタンス化SCNを設定します。

どのデータベース・オブジェクトのインスタンス化SCNが設定されているかを判断するには、対応する次のデータ・ディクショナリ・ビューを問い合せます。

  • DBA_APPLY_INSTANTIATED_OBJECTS

  • DBA_APPLY_INSTANTIATED_SCHEMAS

  • DBA_APPLY_INSTANTIATED_GLOBAL

次の問合せを実行すると、接続先データベースでインスタンス化SCNが設定されている各表と、それぞれの表のインスタンス化SCNが表示されます。

COLUMN SOURCE_DATABASE HEADING 'Source Database' FORMAT A15
COLUMN SOURCE_OBJECT_OWNER HEADING 'Object Owner' FORMAT A15
COLUMN SOURCE_OBJECT_NAME HEADING 'Object Name' FORMAT A15
COLUMN INSTANTIATION_SCN HEADING 'Instantiation SCN' FORMAT 99999999999

SELECT SOURCE_DATABASE,
       SOURCE_OBJECT_OWNER,
       SOURCE_OBJECT_NAME,
       INSTANTIATION_SCN
  FROM DBA_APPLY_INSTANTIATED_OBJECTS
  WHERE APPLY_DATABASE_LINK IS NULL;

出力は次のようになります。

Source Database Object Owner    Object Name     Instantiation SCN
--------------- --------------- --------------- -----------------
DBS1.NET        HR              REGIONS                    196660
DBS1.NET        HR              COUNTRIES                  196660
DBS1.NET        HR              LOCATIONS                  196660

注意:

Oracle以外のリモート・データベースに適用される変更についてのインスタンス化SCNを表示することができます。この問合せでは、この種のインスタンス化SCNは表示されません。これは、インスタンス化SCNが表示されるのは、APPLY_DATABASE_LINK列がNULLの場合のみであるためです。

ストリームでのLCRの追跡

ストリームでの論理変更レコード(LCR)の流れは通常、次のようになります。

  1. データベースの変更が取得され、LCRにフォーマットされてエンキューされます。取得プロセスまたは同期取得では、データベースの変更を暗黙的に取得できます。アプリケーションまたはユーザーは、LCRを構成およびエンキューして、データベースの変更を明示的に取得できます。

  2. 1つ以上の伝播によって、LCRがOracle Streams環境内の他のデータベースに送信されます。

  3. 1つ以上の適用プロセスによって、LCRがデキューおよび処理されます。

DBMS_STREAMS_ADMパッケージのSET_MESSAGE_TRACKINGプロシージャを使用して、ストリームでのLCRの流れを追跡できます。このプロシージャを使用すると、現行セッションで生成される各LCRの一部として追跡ラベルを指定できます。この追跡ラベルを使用してV$STREAMS_MESSAGE_TRACKINGビューを問い合せると、ストリームでLCRを追跡し、LCRが各Oracle Streamsクライアントによって処理された状況を確認できます。

LCRの追跡は、1つ以上の適用プロセスでLCRが正しく適用されていない場合に役立ちます。この場合、LCRを追跡することによって、ストリーム内のLCRの停止場所を判断し、その場所で発生している問題に対応できます。

取得プロセスまたは同期取得でLCRを取得する場合、取得されるデータベースの変更を行ったセッションに対して追跡ラベルが設定されていると、LCRに自動的に追跡ラベルが含まれます。ユーザーまたはアプリケーションがLCRを構成する場合、LCRを構成するセッションに対して追跡ラベルが設定されていると、LCRに自動的に追跡ラベルが含まれます。

ストリームでLCRを追跡するには、次の手順を実行します。

  1. SQL*Plusで、セッションを開始します。取得プロセスまたは同期取得によって取得されるデータベースの変更に対して追跡ラベルを使用する場合は、取得プロセスまたは同期取得のソース・データベースに接続します。

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  2. メッセージの追跡を開始します。

    BEGIN
      DBMS_STREAMS_ADM.SET_MESSAGE_TRACKING(
        tracking_label => 'TRACK_LCRS',
        actions        => DBMS_STREAMS_ADM.ACTION_MEMORY);
    END;
    /
    

    LCRの追跡には、任意のラベルを使用できます。この例では、TRACK_LCRSというラベルを使用しています。

    また、この例では、actionsパラメータにDBMS_STREAMS_ADM.ACTION_MEMORYを指定しています。この値を指定すると、LCRに関する情報がメモリーで追跡され、V$STREAMS_MESSAGE_TRACKING動的パフォーマンス・ビューにLCRに関する情報が移入されます。現在、actionsパラメータに指定可能な値は、ACTION_MEMORYのみです。

  3. セッションでメッセージの追跡が設定されていることを確認するには、追跡ラベルを取得します(オプション)。

    SET SERVEROUTPUT ON SIZE 4000
    DECLARE
      tracking_label  VARCHAR2(4000);
    BEGIN
      tracking_label := DBMS_STREAMS_ADM.GET_MESSAGE_TRACKING();
      DBMS_OUTPUT.PUT_LINE('Tracking Label: ' || tracking_label);
    END;
    /
    

    手順2で指定した追跡ラベルが、GET_MESSAGE_TRACKINGファンクションによって戻されます。

  4. 取得プロセスまたは同期取得によって取得される変更をソース・データベースに対して行い、取得プロセスまたは同期取得でストリームを開始するか、または追跡するLCRを構成およびエンキューします。通常、これらのLCRはテスト用としてのみ使用します。たとえば、表に多数の仮行を挿入した後で、それらの行を変更できます。テストが完了したら、これらの行は削除できます。

  5. Oracle Streams環境全体を監視してLCRを追跡します。これを行うには、LCRを処理する各データベースでV$STREAMS_MESSAGE_TRACKINGビューを問い合せます。

    たとえば、手順2で指定したTRACK_LCRSラベルを持つLCRを追跡するには、各データベースで次の問合せを実行します。

    COLUMN COMPONENT_NAME HEADING 'Component|Name' FORMAT A10
    COLUMN COMPONENT_TYPE HEADING 'Component|Type' FORMAT A12
    COLUMN ACTION HEADING 'Action' FORMAT A11
    COLUMN SOURCE_DATABASE_NAME HEADING 'Source|Database' FORMAT A10
    COLUMN OBJECT_OWNER HEADING 'Object|Owner' FORMAT A6
    COLUMN OBJECT_NAME HEADING 'Object|Name' FORMAT A10
    COLUMN COMMAND_TYPE HEADING 'Command|Type' FORMAT A7
    
    SELECT COMPONENT_NAME,
           COMPONENT_TYPE,
           ACTION,
           SOURCE_DATABASE_NAME,
           OBJECT_OWNER,
           OBJECT_NAME,
           COMMAND_TYPE
       FROM V$STREAMS_MESSAGE_TRACKING
       WHERE TRACKING_LABEL='TRACK_LCRS';
    

    この問合せによって、各データベースでのLCRの処理状況が表示されます。LCRが接続先データベースに適用されていない場合は、ストリーム内のLCRの停止場所が表示されます。

    たとえば、同期取得によるソース・データベースでの出力は、次のようになります。

    Component  Component                Source     Object Object     Command
    Name       Type         Action      Database   Owner  Name       Type
    ---------- ------------ ----------- ---------- ------ ---------- -------
    CAPTURE    SYNCHRONOUS  Create      HUB.NET    HR     EMPLOYEES  UPDATE
               CAPTURE
    CAPTURE    SYNCHRONOUS  Rule evalua HUB.NET    HR     EMPLOYEES  UPDATE
               CAPTURE      tion
    CAPTURE    SYNCHRONOUS  Enqueue     HUB.NET    HR     EMPLOYEES  UPDATE
               CAPTURE
    

    適用プロセスによる接続先データベースでの出力は、次のようになります。

    Component  Component                Source     Object Object     Command
    Name       Type         Action      Database   Owner  Name       Type
    ---------- ------------ ----------- ---------- ------ ---------- -------
    APPLY_SYNC APPLY READER Dequeue     HUB.NET    HR     EMPLOYEES  UPDATE
    _CAP
    APPLY_SYNC APPLY READER Dequeue     HUB.NET    HR     EMPLOYEES  UPDATE
    _CAP
    APPLY_SYNC APPLY READER Dequeue     HUB.NET    HR     EMPLOYEES  UPDATE
    _CAP
    

    V$STREAMS_MESSAGE_TRACKINGビューで追加の列を問い合せると、詳細情報を表示できます。たとえば、ACTION_DETAILS列では各アクションに関する詳細情報が提供されます。

  6. 現行セッションでメッセージの追跡を停止するには、SET_MESSAGE_TRACKINGプロシージャでtracking_labelパラメータをNULLに設定します。

    BEGIN
      DBMS_STREAMS_ADM.SET_MESSAGE_TRACKING(
        tracking_label => NULL,
        actions        => DBMS_STREAMS_ADM.ACTION_MEMORY);
    END;
    /
    

注意:

message_tracking_frequency取得プロセス・パラメータを使用すると、LCRを自動的に追跡できます。


参照:

message_tracking_frequency取得プロセス・パラメータの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

Oracle Streamsレプリケーション環境でのフラッシュバック問合せの実行

Oracle Flashback Queryを使用すると、履歴データを表示および修正できます。特定の時刻またはシステム変更番号(SCN)におけるデータベースに問合せを実行できます。単一ソースのOracle Streamsレプリケーション環境では、レプリケートされたデータベース・オブジェクトが同じであると予測する過去の時点のソース・データベースと接続先データベースでフラッシュバック問合せを使用できます。

ソース・データベースと接続先データベースで対応するSCNに対して問合せを実行すると、ソース・データベースで実行されたレプリケート・オブジェクトへのすべての変更が、接続先データベースに適用されているかどうかを判断できます。接続先データベースに適用エラーが発生している場合、フラッシュバック問合せによって、エラー発生時のレプリケート・オブジェクトの状態が表示されます。この情報は、エラーの原因と、エラーの最適な訂正方法を判断するために役立ちます。

各データベースでフラッシュバック問合せを実行すると、表の対応するSCNに特定の行が存在するかどうかを確認することもできます。対応するSCNの表データが一致しない場合、レプリケーション環境に問題があります。

問合せを実行するには、Oracle Streamsレプリケーション環境が次の条件を満たしている必要があります。

Oracle Streamsレプリケーションは非同期であるため、フラッシュバック問合せで過去の時間を使用することはできません。ただし、DBMS_STREAMS_ADMパッケージのGET_SCN_MAPPINGプロシージャを使用することによって、ソース・データベースのSCNに対応する接続先データベースのSCNを判断することができます。

次の手順では、ソース・データベースでのフラッシュバック問合せのSCNがわかっていると想定しています。このSCNを使用して、接続先データベースでのフラッシュバック問合せの対応するSCNを判断できます。この問合せを実行するには、次の手順を実行します。

  1. 接続先データベースで、フラッシュバック問合せ対象のおおまかな時間のアーカイブREDOログ・ファイルがデータベースで使用可能であることを確認します。GET_SCN_MAPPINGプロシージャを実行する場合、このREDOログ・ファイルが使用可能である必要があります。

  2. SQL*Plusで、Oracle Streams管理者として接続先データベースに接続します。

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  3. GET_SCN_MAPPINGプロシージャを実行します。この例では、ソース・データベースのSCNが52073983であり、ソース・データベースからの変更を適用する適用プロセスの名前がstrm01_applyであると想定しています。

    SET SERVEROUTPUT ON
    DECLARE
      dest_scn   NUMBER;
      start_scn  NUMBER;
      dest_skip  DBMS_UTILITY.NAME_ARRAY;
    BEGIN
      DBMS_STREAMS_ADM.GET_SCN_MAPPING(
        apply_name             => 'strm01_apply',
        src_pit_scn            => '52073983',
        dest_instantiation_scn => dest_scn,
        dest_start_scn         => start_scn,
        dest_skip_txn_ids      => dest_skip);
      IF dest_skip.count = 0 THEN
        DBMS_OUTPUT.PUT_LINE('No Skipped Transactions');
        DBMS_OUTPUT.PUT_LINE('Destination SCN: ' || dest_scn);
      ELSE
        DBMS_OUTPUT.PUT_LINE('Destination SCN invalid for Flashback Query.');
        DBMS_OUTPUT.PUT_LINE('At least one transaction was skipped.');
      END IF;
    END;
    /
    

    有効な接続先SCNが戻されたら、手順4に進みます。

    適用プロセスで1つ以上のトランザクションがスキップされたために、接続先SCNがフラッシュバック問合せで有効ではない場合は、適用プロセス・パラメータcommit_serializationnoneに設定され、非依存トランザクションが順不同で適用されています。戻されたdest_instantiation_scnの後に接続先データベースでコミットされたsrc_pit_scnより小さいソース・コミットSCNを持つトランザクションが1つ以上存在しています。したがって、指定したソースSCNのソース・データベースと接続先データベースの表は異なる可能性があります。別のソースSCNを選択して、手順1から再度実行できます。

  4. ソースSCNを使用して、ソース・データベースでフラッシュバック問合せを実行します。

  5. 手順3で戻されたSCNを使用して、接続先データベースでフラッシュバック問合せを実行します。

  6. 手順4と手順5の問合せの結果を比較し、必要な操作を実行します。


参照:

  • フラッシュバック問合せの詳細は、『Oracle Database概要』および『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。

  • GET_SCN_MAPPINGプロシージャの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。