24.12 一般的なLogMinerセッションのステップ

LogMinerを使用してデータを抽出およびマイニングできる一般的な方法について学習します。

24.12.1 LogMinerセッションの実行方法の理解

オンプレミスとOracle Autonomous Cloud Platform Services LogMinerセッションは似ていますが、異なるユーザーが必要です。

従来のLogMinerセッションでは、CDB$ROOTでLogMinerを実行する場合、SYSが所有するPL/SQLパッケージを使用してLogMinerを実行します。LogMinerを使用するには、LogMinerで使用するユーザー・アカウントに関する要件があります。

オンプレミスOracle DatabaseでLogMinerを実行する場合、CDB$ROOT取得抽出を作成して複数のPDBからデータを同時に取得するか、Oracle GoldenGateを使用して複数の個別のPDBログをマイニングし、それぞれが単一のPDBからデータを取得できます。ただし、CDB$ROOTにアクセスできないOracle Autonomous Database Cloud Platform Servicesの場合は、PDBごとの取得方法を使用する必要があります。このモードでは、事前定義済の権限セットを持つローカル・ユーザーを、ログを確認するソースPDBにプロビジョニングします。すべてのLogMiner処理は、このPDBのみに制限されます。

オンプレミスPDBでは、リソースで許可されている数のセッションを開始できます。ただし、クラウド構成では、CDB$ROOTで多くの同時セッションを開始できますが、LogMiner PL/SQLパッケージを使用して各PDBに対して開始できるセッションは1つのみです。

CDB$ROOTでLogMinerを実行するには、PL/SQLパッケージDBMS_LOGMNR.ADD_LOGFILEを使用し、ログ・ファイルを明示的に追加します。また、オンライン・カタログを使用せずにLogMinerディクショナリを抽出することを選択する場合は、DBMS_LOGMNR_Dパッケージも使用できます。

個々のPDBでLogMinerを実行する場合、プロシージャは若干異なります。DBMS_LOGMNR.ADD_LOGFILEを使用するかわりに、PDBのログ・ファイルを確認する期間を指定します。問い合せるログのSCN値をstartScnで指定し、endScnまたはstartTimeを選択した場合はendTimeで指定します。次に、DBMS_LOGMNR.START_LOGMNRを使用してLogMinerを起動します。DBMS_LOGMNR.START_LOGMNRは、分析するREDOログを自動的に追加します。

DBMS_LOGMNRパッケージには、LogMinerの初期化および実行に使用するプロシージャ(REDOログ・ファイルの名前、フィルタ基準、セッション特性を指定するためのインタフェースなど)が含まれます。DBMS_LOGMNR_Dパッケージは、現在のデータベースのデータベース・ディクショナリ表を問い合せてLogMinerディクショナリ・ファイルを作成します。

個々のPDBに対してLogMinerを実行するための要件

LogMinerを実行して個々のPDBを問い合せるには、プロシージャ・コールDBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGEを使用して、必要な権限をローカル・ユーザーにプロビジョニングする必要があります。また、GGADMIN権限を持つユーザーは、PDBごとの取得抽出を実行できます。

また、個々のPDBでは、マイニングするアーカイブ・ログを指定しません。かわりに、マイニングするPDBに接続し、dbms_logmnr_d.STORE_IN_REDO_LOGSを実行します。たとえば:

SQL> execute dbms_logmnr_d.build(option=>dbms_logmnr_d.STORE_IN_REDO_LOGS);

その後、PDBに接続してSCNを識別し、dbms_logmnr.start_logmnrを実行して、表示するPDBログ履歴の開始点システム変更番号(SCN)およびエンド・ポイントSCN (選択した場合)をログ・ファイルに問い合せられます。マイニングは、V$LOGMNR_CONTENTSビューに対する従来のLogMiner問合せと同様に、その時点で続行されます。ただし、使用できるのは、接続しているPDBに対して生成されたREDOのみです

ノート:

ExtractおよびLogMinerプロセスの実行中にPDBを停止すると、これらのプロセスは他のアクティブ・セッションと同様に終了します。PDBを再オープンしたら、Extractマイニングの再起動を通常どおり続行する必要があります。PDBを切断する場合、特別なアクションは必要ありません。ただし、PDBを切断した後に接続すると、PDBに以前存在していたすべてのLogMinerおよびCaptureセッションが削除されます。

SYSとして接続していない場合に従来のLogMinerセッションを実行するための要件

オンプレミス・ログ・マイニングでは、LogMiner PL/SQLパッケージはSYSスキーマによって所有されます。したがって、ユーザーSYSとして接続していない場合は、次の条件が必要になります。

  • コールにSYSを含める必要があります。たとえば:

    EXECUTE SYS.DBMS_LOGMNR.END_LOGMNR;
    
  • EXECUTE_CATALOG_ROLEロールを付与されている必要があります。

24.12.2 一般的なLogMinerセッション・タスク1: 追加ロギングの有効化

REDOログ・ファイルとともにLogMinerを使用できるようにするには、サプリメンタル・ロギングを有効にする必要があります。

REDOベースのアプリケーションでは、追加の列をREDOログ・ファイルに記録する必要がある場合があります。これらの追加の列を記録するプロセスは、サプリメンタル・ロギングと呼ばれますデフォルトでは、Oracle Databaseはサプリメンタル・ロギングが有効になっていません。少なくともLogMinerを使用するには、最小限のサプリメンタル・ロギングを有効にする必要があります。

例24-2 最小サプリメンタル・ロギングの有効化

サプリメンタル・ロギングを有効にするには、次の文を入力します。

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

24.12.3 一般的なLogMinerセッション・タスク2: LogMinerディクショナリの抽出

LogMinerを使用するには、LogMinerにデータベース・ディクショナリを提供するオプションを選択する必要があります。

次のいずれかのオプションを選択します。

  • LogMiner起動時にDICT_FROM_ONLINE_CATALOGオプションでオンライン・カタログの使用を指定。

  • REDOログ・ファイルにデータベース・ディクショナリ情報を抽出。

  • フラット・ファイルにデータベース・ディクショナリ情報を抽出。

24.12.4 一般的なLogMinerセッション・タスク3: 分析用のREDOログ・ファイルの指定

LogMinerを起動する前にDBMS_LOGMNR_ADD_LOGFILEを使用して、分析するREDOログ・ファイルを指定する必要があります。

オンプレミスのCDB$ROOTのログを問い合せるには、LogMinerを起動する前に、分析するREDOログ・ファイルを指定する必要があります。ログ・ファイルを指定するには、次のステップで示すとおり、DBMS_LOGMNR.ADD_LOGFILEプロシージャを実行します。REDOログ・ファイルは、任意の順序で追加および削除できます。

ノート:

個々のPDBのログを問い合せるには、若干異なる手順を使用します。PDBに接続した後、DBA_LOGMNR_DICTIONARY_BUILDLOGを問い合せてSTART_SCN値を特定し、DBMS_LOGMNR.START_LOGMNRでLogMinerを起動して、確認するログのSCN値を指定します。DBMS_LOGMNR.START_LOGMNRは、分析するREDOログを自動的に追加します。例は、「LogMinerを使用した個々のPDBの問合せ」を参照してください。
  1. データベースをマウントした状態またはマウントしていない状態で、SQL*Plusを使用してOracle Databaseインスタンスを起動します。たとえば、SQLプロンプトでSTARTUP文を入力します。
    STARTUP
    
  2. REDOログ・ファイルのリストを作成します。PL/SQLプロシージャDBMS_LOGMNR.ADD_LOGFILENEWオプションを指定して、新規リストの開始であることを指定します。たとえば、REDOログ・ファイル/oracle/logs/log1.fを指定するには、次のように入力します。
    EXECUTE DBMS_LOGMNR.ADD_LOGFILE( -
       LOGFILENAME => '/oracle/logs/log1.f', -
       OPTIONS => DBMS_LOGMNR.NEW);
    
  3. 必要に応じて、PL/SQLプロシージャDBMS_LOGMNR.ADD_LOGFILEADDFILEオプションを指定し、さらにREDOログ・ファイルを追加します。たとえば、REDOログ・ファイル/oracle/logs/log2.fを追加するには、次のように入力します。
    EXECUTE DBMS_LOGMNR.ADD_LOGFILE( -
       LOGFILENAME => '/oracle/logs/log2.f', -
       OPTIONS => DBMS_LOGMNR.ADDFILE);
    

    REDOログ・ファイルを追加する場合、OPTIONSパラメータの指定はオプションです。たとえば、次のように入力できます。

    EXECUTE DBMS_LOGMNR.ADD_LOGFILE( -
       LOGFILENAME=>'/oracle/logs/log2.f');
    
  4. 必要に応じて、PL/SQLプロシージャDBMS_LOGMNR.REMOVE_LOGFILEを使用してREDOログ・ファイルを削除します。たとえば、REDOログ・ファイル/oracle/logs/log2.fを削除するには、次のように入力します。
    EXECUTE DBMS_LOGMNR.REMOVE_LOGFILE( -
       LOGFILENAME => '/oracle/logs/log2.f');

24.12.5 LogMinerの起動

LogMinerの起動方法、およびREDOログ・ファイル、フィルタ基準、その他のセッション特性の分析に使用できるオプションを確認してください。

LogMinerディクショナリ・ファイルを作成し、分析するREDOログ・ファイルを指定した後、LogMinerを起動し、Oracle Databaseトランザクションを分析できます。
  1. LogMinerを起動するには、DBMS_LOGMNR.START_LOGMNRプロシージャを実行します。

    LogMinerディクショナリ・オプションを指定することをお薦めします。ディクショナリ・オプションを指定していない場合、LogMinerでは、内部オブジェクトの識別子とデータ型を、オブジェクト名と外部データ書式に変換できません。この結果、LogMinerから内部オブジェクトIDが返され、データはバイナリ・データとして表されます。また、ディクショナリがない場合、MINE_VALUE機能およびCOLUMN_PRESENT機能は使用できません。

    フラット・ファイルのLogMinerディクショナリの名前を指定する場合は、そのディクショナリ・ファイルに完全修飾されたファイル名を指定する必要があります。たとえば、/oracle/database/dictionary.oraを使用してLogMinerを起動するには、次の文を発行します。

    EXECUTE DBMS_LOGMNR.START_LOGMNR( -
       DICTFILENAME =>'/oracle/database/dictionary.ora');
    

    フラット・ファイルのディクショナリ名を指定しない場合は、OPTIONSパラメータを使用して、DICT_FROM_REDO_LOGSオプションまたはDICT_FROM_ONLINE_CATALOGオプションのいずれかを指定します。

    DICT_FROM_REDO_LOGSを指定した場合、LogMinerでは、DBMS_LOGMNR.ADD_LOGFILEプロシージャで指定したREDOログ・ファイルに、ディクショナリが含まれていると認識されます。ディクショナリが含まれているREDOログ・ファイルを判別するには、V$ARCHIVED_LOGビューを使用します。このタスクの例を確認するには、「REDOログ・ファイルへのLogMinerディクショナリの抽出」を参照してください。

    ノート:

    LogMinerの起動後にREDOログ・ファイルを追加した場合は、LogMinerを再起動する必要があります。LogMinerは、DBMS_LOGMNR.START_LOGMNRに対する前回のコールに含まれていたオプションを保持しないため、使用するオプションを再度指定する必要があります。ただし、DBMS_LOGMNR.START_LOGMNRの現在のコールでディクショナリを指定しない場合、LogMinerは、以前のコールのディクショナリ仕様を保持します。

  2. 必要に応じて、問合せをフィルタ処理またはフォーマットしたり、OPTIONSパラメータを使用してLogMinerセッションの特性を追加指定できます。たとえば、オンライン・カタログをLogMinerディクショナリとして使用して、V$LOGMNR_CONTENTSビューにコミット済トランザクションのみを表示できます。次のように入力します。
    EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => -
       DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + -
       DBMS_LOGMNR.COMMITTED_DATA_ONLY);
    

    DBMS_LOGMNR.START_LOGMNRプロシージャは、毎回異なるオプションを指定して、複数回実行できます。たとえば、V$LOGMNR_CONTENTSの問合せから必要な結果を取得できなかった場合、他のオプションを指定してLogMinerを再起動できます。LogMinerディクショナリを再指定する必要がないかぎり、DBMS_LOGMNR.START_LOGMNRに対する前回のコールでREDOログ・ファイルがすでに追加されている場合は、再度追加する必要はありません。

24.12.6 V$LOGMNR_CONTENTSの問合せ

LogMinerを起動した後、Oracle DatabaseのV$LOGMNR_CONTENTSビューを問い合せることができます。

たとえば:

SELECT (XIDUSN || '.' || XIDSLT || '.' || XIDSQN) AS XID, 
   USERNAME, SQL_REDO FROM V$LOGMNR_CONTENTS WHERE USERNAME != 'SYS' 
   AND SEG_OWNER IS NULL OR SEG_OWNER NOT IN ('SYS', 'SYSTEM');


XID         USERNAME  SQL_REDO

1.15.3045   RON       set transaction read write;
1.15.3045   RON       insert into "HR"."JOBS"("JOB_ID","JOB_TITLE",
                      "MIN_SALARY","MAX_SALARY") values ('9782',
                      'HR_ENTRY',NULL,NULL);
1.18.3046   JANE      set transaction read write;
1.18.3046   JANE      insert into "OE"."CUSTOMERS"("CUSTOMER_ID",
                      "CUST_FIRST_NAME","CUST_LAST_NAME",
                      "CUST_ADDRESS","PHONE_NUMBERS","NLS_LANGUAGE",
                      "NLS_TERRITORY","CREDIT_LIMIT","CUST_EMAIL",
                      "ACCOUNT_MGR_ID") values ('9839','Edgar',
                      'Cummings',NULL,NULL,NULL,NULL,
                       NULL,NULL,NULL);
1.9.3041    RAJIV      set transaction read write;
1.9.3041    RAJIV      insert into "OE"."CUSTOMERS"("CUSTOMER_ID",
                       "CUST_FIRST_NAME","CUST_LAST_NAME","CUST_ADDRESS",
                       "PHONE_NUMBERS","NLS_LANGUAGE","NLS_TERRITORY",
                       "CREDIT_LIMIT","CUST_EMAIL","ACCOUNT_MGR_ID") 
                       values ('9499','Rodney','Emerson',NULL,NULL,NULL,NULL,
                       NULL,NULL,NULL);
1.15.3045    RON       commit;
1.8.3054     RON       set transaction read write;
1.8.3054     RON       insert into "HR"."JOBS"("JOB_ID","JOB_TITLE",
                       "MIN_SALARY","MAX_SALARY") values ('9566',
                       'FI_ENTRY',NULL,NULL);
1.18.3046    JANE      commit;
1.11.3047    JANE      set transaction read write;
1.11.3047    JANE      insert into "OE"."CUSTOMERS"("CUSTOMER_ID",
                       "CUST_FIRST_NAME","CUST_LAST_NAME",
                       "CUST_ADDRESS","PHONE_NUMBERS","NLS_LANGUAGE",
                       "NLS_TERRITORY","CREDIT_LIMIT","CUST_EMAIL",
                       "ACCOUNT_MGR_ID") values ('8933','Ronald',
                       'Frost',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
1.11.3047    JANE      commit;
1.8.3054     RON       commit;

別の例を確認するには、「V$LOGMNR_CONTENTSに返されるデータのフィルタ処理および書式設定」を参照してください。

24.12.7 一般的なLogMinerセッション・タスク6: LogMinerセッションの終了

LogMinerセッションの終了。

LogMinerセッションを正常に終了するには、次に示すとおり、PL/SQLプロシージャDBMS_LOGMNR.END_LOGMNRを使用します。

EXECUTE DBMS_LOGMNR.END_LOGMNR;

このプロシージャを実行すると、すべてのREDOログ・ファイルがクローズされ、LogMinerによって割り当てられたすべてのデータベースとシステム・リソースを解放できます。

このプロシージャを実行しない場合、LogMinerは、コールを実行したOracleセッションが終了するまで、割り当てられたすべてのリソースを保持します。DDL_DICT_TRACKINGオプションまたはDICT_FROM_REDO_LOGSオプションのいずれかを使用した場合は、LogMinerセッションの終了に、このプロシージャを使用する必要があります。