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

前
次

列の値に基づいたV$LOGMNR_CONTENTSの問合せ

LogMinerは、列の値に基づいた問合せを行うことができます。たとえば、hr.employees表に対して行われた、salaryを一定額より多く増額するすべての更新を示す問合せを実行できます。このようなデータは、システム動作の分析や監査タスクの実行に使用できます。

LogMinerによるREDOログ・ファイルからのデータ抽出は、DBMS_LOGMNR.MINE_VALUEおよびDBMS_LOGMNR.COLUMN_PRESENTという2つのマイニング関数を使用して実行されます。これらのマイニング関数に対するサポートは、V$LOGMNR_CONTENTSビューのREDO_VALUE列とUNDO_VALUE列によって提供されます。

次に、MINE_VALUE関数を使用して、hr.employees表に対して行われた、salary列を元の値の2倍より多く増額したすべての更新を選択する例を示します。

SELECT SQL_REDO FROM V$LOGMNR_CONTENTS
   WHERE
   SEG_NAME = 'EMPLOYEES' AND
   SEG_OWNER = 'HR' AND
   OPERATION = 'UPDATE' AND
   DBMS_LOGMNR.MINE_VALUE(REDO_VALUE, 'HR.EMPLOYEES.SALARY') >
   2*DBMS_LOGMNR.MINE_VALUE(UNDO_VALUE, 'HR.EMPLOYEES.SALARY');

この例で示したとおり、MINE_VALUE関数には2つの引数があります。

MINE_VALUE関数によって返されるNULL値の意味

MINE_VALUE関数がNULL値を返した場合は、次のいずれかを意味します。

  • 指定した列がデータのREDO部分またはUNDO部分に存在していない。

  • 指定した列は存在するが、その値がNULL。

この2つの場合を区別するには、DBMS_LOGMNR.COLUMN_PRESENT関数を使用します。この関数では、列がデータのREDO部分またはUNDO部分に存在している場合は、1が返されます。存在していない場合には、0が返されます。たとえば、salary列の値の増額および対応するトランザクション識別子を検索するとします。次のSQL問合せを発行します。

SELECT 
  (XIDUSN || '.' || XIDSLT || '.' || XIDSQN) AS XID,
  (DBMS_LOGMNR.MINE_VALUE(REDO_VALUE, 'HR.EMPLOYEES.SALARY') -
   DBMS_LOGMNR.MINE_VALUE(UNDO_VALUE, 'HR.EMPLOYEES.SALARY')) AS INCR_SAL
   FROM V$LOGMNR_CONTENTS
   WHERE
   OPERATION = 'UPDATE' AND
   DBMS_LOGMNR.COLUMN_PRESENT(REDO_VALUE, 'HR.EMPLOYEES.SALARY') = 1 AND
   DBMS_LOGMNR.COLUMN_PRESENT(UNDO_VALUE, 'HR.EMPLOYEES.SALARY') = 1;

MINE_VALUE関数およびCOLUMN_PRESENT関数の使用規則

MINE_VALUE関数およびCOLUMN_PRESENT関数には、次の使用規則が適用されます。

  • LogMinerセッション内でのみ使用できます。

  • V$LOGMNR_CONTENTSビューからの選択操作中に起動する必要があります。

  • LONGLONG RAWCLOBBLOBNCLOBADTまたはCOLLECTIONデータ型はサポートされません。

MINE_VALUEファンクションを使用してNCHAR値を取得する際の制限事項

DBMS_LOGMNR.MINE_VALUEファンクションを使用してデータベース・キャラクタ・セットに存在しない文字を含むNCHAR値を取得する場合、それらの文字は、データベース・キャラクタ・セットの置換文字(逆向きの疑問符など)として返されます。