プライマリ・コンテンツに移動
Oracle® Databaseユーティリティ
12cリリース1 (12.1.0.2)
B71303-09
目次へ移動
目次
索引へ移動
索引

前
次

例1: 指定した時間範囲でのREDOログ・ファイルのマイニング

この例は、「例4: REDOログ・ファイル内のLogMinerディクショナリの使用」と同様ですが、REDOログ・ファイルを明示的に指定しない点が異なります。この例では、REDOログ・ファイルに対して抽出されたデータ・ディクショナリを使用するものとします。

  1. データ・ディクショナリの先頭を含むREDOログ・ファイルのタイムスタンプを判別します。

    SELECT NAME, FIRST_TIME FROM V$ARCHIVED_LOG
        WHERE SEQUENCE# = (SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG 
        WHERE DICTIONARY_BEGIN = 'YES');
    
    NAME                                          FIRST_TIME
    --------------------------------------------  --------------------
    /usr/oracle/data/db1arch_1_207_482701534.dbf  10-jan-2012 12:01:34
    
  2. その時点までに生成されたすべてのREDOログ・ファイルを表示します。

    この手順は必須ではありませんが、手順4に示すとおり、CONTINUOUS_MINEオプションが予期したとおりに機能することを示すために含めています。

    SELECT FILENAME name FROM V$LOGMNR_LOGS
       WHERE LOW_TIME > '10-jan-2012 12:01:34';
    
    NAME
    ----------------------------------------------
    /usr/oracle/data/db1arch_1_207_482701534.dbf
    /usr/oracle/data/db1arch_1_208_482701534.dbf
    /usr/oracle/data/db1arch_1_209_482701534.dbf
    /usr/oracle/data/db1arch_1_210_482701534.dbf
  3. 使用するディクショナリおよびCOMMITTED_DATA_ONLYPRINT_PRETTY_SQLCONTINUOUS_MINEの各オプションを指定して、LogMinerを起動します。

    EXECUTE DBMS_LOGMNR.START_LOGMNR(-
       STARTTIME => '10-jan-2012 12:01:34', -
         ENDTIME => SYSDATE, -
         OPTIONS => DBMS_LOGMNR.DICT_FROM_REDO_LOGS + -
                    DBMS_LOGMNR.COMMITTED_DATA_ONLY + -
                    DBMS_LOGMNR.PRINT_PRETTY_SQL + -
                        DBMS_LOGMNR.CONTINUOUS_MINE);
  4. V$LOGMNR_LOGSビューを問い合せます。

    この手順は、予期したとおりCONTINUOUS_MINEオプションを指定したDBMS_LOGMNR.START_LOGMNRプロシージャに、この時点までに生成されたすべてのREDOログ・ファイルが含まれることを示します。(この手順の出力を手順2の出力と比較してください。)

    SELECT FILENAME name FROM V$LOGMNR_LOGS;
    
    NAME
    ------------------------------------------------------
    /usr/oracle/data/db1arch_1_207_482701534.dbf
    /usr/oracle/data/db1arch_1_208_482701534.dbf
    /usr/oracle/data/db1arch_1_209_482701534.dbf
    /usr/oracle/data/db1arch_1_210_482701534.dbf
  5. V$LOGMNR_CONTENTSビューを問い合せます。

    問合せによって返される行数を減らすため、SYSスキーマまたはSYSTEMスキーマで実行されたすべてのDML文を除外します。(この問合せでは、ディクショナリ抽出に関連したトランザクションを除外するタイムスタンプを指定します。)

    問合せで返される再構築SQL文は、すべて正しく変換されていることに注意してください。

    SELECT USERNAME AS usr,(XIDUSN || '.' || XIDSLT || '.' || XIDSQN) as XID, 
       SQL_REDO FROM V$LOGMNR_CONTENTS 
       WHERE SEG_OWNER IS NULL OR SEG_OWNER NOT IN ('SYS', 'SYSTEM') AND
       TIMESTAMP > '10-jan-2012 15:59:53';
    
    USR             XID         SQL_REDO
    -----------     --------    -----------------------------------
    SYS             1.2.1594    set transaction read write;
    SYS             1.2.1594    create table oe.product_tracking (product_id number not null,
                                modified_time date,
                                old_list_price number(8,2),
                                old_warranty_period interval year(2) to month);
    SYS             1.2.1594    commit;
    
    SYS             1.18.1602   set transaction read write;
    SYS             1.18.1602   create or replace trigger oe.product_tracking_trigger
                                before update on oe.product_information
                                for each row
                                when (new.list_price <> old.list_price or
                                      new.warranty_period <> old.warranty_period)
                                declare
                                begin
                                insert into oe.product_tracking values 
                                   (:old.product_id, sysdate,
                                    :old.list_price, :old.warranty_period);
                                end;
    SYS             1.18.1602   commit;
    
    OE              1.9.1598    update "OE"."PRODUCT_INFORMATION"
                                  set
                                    "WARRANTY_PERIOD" = TO_YMINTERVAL('+08-00'),
                                    "LIST_PRICE" = 100
                                  where
                                    "PRODUCT_ID" = 1729 and
                                    "WARRANTY_PERIOD" = TO_YMINTERVAL('+05-00') and
                                    "LIST_PRICE" = 80 and
                                    ROWID = 'AAAHTKAABAAAY9yAAA';
    OE              1.9.1598    insert into "OE"."PRODUCT_TRACKING"
                                  values
                                    "PRODUCT_ID" = 1729,
                                    "MODIFIED_TIME" = TO_DATE('13-jan-2012 16:07:03', 
                                    'dd-mon-yyyy hh24:mi:ss'),
                                    "OLD_LIST_PRICE" = 80,
                                    "OLD_WARRANTY_PERIOD" = TO_YMINTERVAL('+05-00');
    
    OE              1.9.1598    update "OE"."PRODUCT_INFORMATION"
                                  set
                                    "WARRANTY_PERIOD" = TO_YMINTERVAL('+08-00'),
                                    "LIST_PRICE" = 92
                                  where
                                    "PRODUCT_ID" = 2340 and
                                    "WARRANTY_PERIOD" = TO_YMINTERVAL('+05-00') and
                                    "LIST_PRICE" = 72 and
                                    ROWID = 'AAAHTKAABAAAY9zAAA';
    
    OE              1.9.1598    insert into "OE"."PRODUCT_TRACKING"
                                  values
                                    "PRODUCT_ID" = 2340,
                                    "MODIFIED_TIME" = TO_DATE('13-jan-2012 16:07:07', 
                                    'dd-mon-yyyy hh24:mi:ss'),
                                    "OLD_LIST_PRICE" = 72,
                                    "OLD_WARRANTY_PERIOD" = TO_YMINTERVAL('+05-00');
    
    OE              1.9.1598     commit;
  6. LogMinerセッションを終了します。

    EXECUTE DBMS_LOGMNR.END_LOGMNR();