22
Oracle8i Core Tech Seminar 99/06/25 1 Oracle8i Core Tech Seminar LogMiner The Database for Internet Computing

LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

1

Oracle8i Core Tech Seminar

LogMinerThe Database for Internet Computing

Page 2: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

2

2 99/06/25 Oracle8i Core Tech Seminar

Agenda• LogMinerLogMinerLogMinerLogMiner概要概要概要概要

• OracleOracleOracleOracleのトランザクション管理のトランザクション管理のトランザクション管理のトランザクション管理

• OracleOracleOracleOracleののののREDOREDOREDOREDOロギングの仕組みロギングの仕組みロギングの仕組みロギングの仕組み

• 使用するための前提条件使用するための前提条件使用するための前提条件使用するための前提条件

• LogMinerLogMinerLogMinerLogMinerの操作の操作の操作の操作– LogMiner使用の準備

– ディクショナリファイルの作成

– LogMinerへのREDOログファイルの登録

– LogMinerの初期化と終了

• REDOREDOREDOREDOログ分析の例ログ分析の例ログ分析の例ログ分析の例

• 活用のための活用のための活用のための活用のためのTipsTipsTipsTips

• まとめまとめまとめまとめ

Page 3: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

3

3 99/06/25 Oracle8i Core Tech Seminar

LogMiner概要概要概要概要

LogMinerLogMinerLogMinerLogMinerとは・・・とは・・・とは・・・とは・・・

REDOREDOREDOREDOログファイルに含まれる、ログファイルに含まれる、ログファイルに含まれる、ログファイルに含まれる、DBDBDBDBに対する操作のログを分析するツールに対する操作のログを分析するツールに対する操作のログを分析するツールに対する操作のログを分析するツール

SQL> select operation, sql_redo, sql_undo

2> from v$logmnr_contents;

OPERATION SQL_REDO SQL_UNDO

---------- ---------------------------- ----------------------------

START set transaction read write;

UPDATE update EMP set SAL = 1000 wh update EMP set SAL = 800 whe

ere ROWID = 'AAAAp3AABAAAD4J re ROWID = 'AAAAp3AABAAAD4JA

AAA'; AA';

LogMinerは、オンラインREDOログファイル、アーカイブREDOログファイルに

含まれる、データベースに対する操作のログを分析するツールです。

LogMinerでは、初期設定の後、V$LOGMNR_CONTENTS表を検索すること

によって、ログ情報を分析します。V$LOGMNR_CONTENTS表の1行は、基本的に1つのREDOレコード(データベースへの変更のログの単位)に対応します。V$LOGMNR_CONTENTS表の列には、そのREDOレコードの生成された時刻、SCN番号(System Change Number)、データベースに加えられた変更の内容、等の情報が示されます。例えば、SQL_REDOという列には、そのREDOレコードのREDO操作をSQL文で表したものが示されます。また、SQL_UNDO列にはSQL_REDO列の操作をROLLBACKするための操作が示されます。V$LOGMNR_CONTENTS表を検索した例をスライドに示します。

LogMinerは、DBMS_LOGMNR、DBMS_LOGMNR_Dの2つのパッケージと、いくつかのV$ビューで構成されます。

DBMS_LOGMNR_Dパッケージは、LogMinerによるログの分析において、オ

ブジェクト名の解決に使用される、ディクショナリファイルを作成するためのパッケージです。DBMS_LOGMNRパッケージはログを分析する際に使用するパッケージです。このパッケージで初期化を行った後で、V$LOGMNR_CONTENTS表を検索

することによって、ログファイル内の情報を読み出します。

Page 4: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

4

4 99/06/25 Oracle8i Core Tech Seminar

LogMiner概要概要概要概要

分析対象分析対象分析対象分析対象DBREDOログファイルログファイルログファイルログファイル (分析対象分析対象分析対象分析対象)

・・・・・・・・・・・・ OBJ#:10713, COL#:2 ・・・・・・・・・・・・

10713 EMP 10713 ENAME2

……

……

ディクショナリファイルディクショナリファイルディクショナリファイルディクショナリファイル

UPDATE EMP SET ENAME=・・・・・・・・・・・・

……

V$LOGMNR_CONTENTS表表表表

スライドは、LogMinerがREDOログファイルを分析する様子を示したものです。まず、分析対象DBからは、用意されたプロシージャによって、ディクショナリフ

ァイルを取得します。ディクショナリファイルには、オブジェクト番号、カラム番号と、実際のオブジェクト名、カラム名の対応等、オブジェクト名の解決に必要なディクショナリ情報が格納されています。REDOログファイル中には、オブジェクト番号、カラム番号などの番号しか記録されていないので、LogMinerは、これらの番号から、ディクショナリファイルの

情報をもとに、オブジェクト名、カラム名を割り出します。この結果を用いて、SQL文などの有用な情報を作成しV$LOGMNR_CONTENTS表に格納してい

ます。

Page 5: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

5

5 99/06/25 Oracle8i Core Tech Seminar

ロールバックセグメントロールバックセグメントロールバックセグメントロールバックセグメント

TX Table Slot TX Table Slot TX Table Slot TX Table Slot

①①①①

②②②②Undo Undo Undo Undo レコードレコードレコードレコード((((New!)New!)New!)New!)

ITLITLITLITL

③③③③行データ行データ行データ行データ ( ( ( (New!)New!)New!)New!)

データセグメント(表、索引)データセグメント(表、索引)データセグメント(表、索引)データセグメント(表、索引)

RBSRBSRBSRBSヘッダーブロックヘッダーブロックヘッダーブロックヘッダーブロック

UNDOUNDOUNDOUNDOブロックブロックブロックブロック

セグメントヘッダーセグメントヘッダーセグメントヘッダーセグメントヘッダー

ブロックブロックブロックブロック

データブロックデータブロックデータブロックデータブロック

Oracleのトランザクション管理のトランザクション管理のトランザクション管理のトランザクション管理

スライドは、1つのトランザクション中で、データベースに対する変更操作が発行されたときのOracleの動作を表したものです。

Page 6: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

6

6 99/06/25 Oracle8i Core Tech Seminar

ロールバックセグメントロールバックセグメントロールバックセグメントロールバックセグメント

TX Table Slot TX Table Slot TX Table Slot TX Table Slot

①①①①

Undo Undo Undo Undo レコードレコードレコードレコード

Undo Undo Undo Undo レコードレコードレコードレコード

②②②②

Undo Undo Undo Undo レコードレコードレコードレコード((((New!)New!)New!)New!)ITLITLITLITL

③③③③行データ行データ行データ行データ ( ( ( (New!)New!)New!)New!)

データセグメント(表、索引)データセグメント(表、索引)データセグメント(表、索引)データセグメント(表、索引)

RBSRBSRBSRBSヘッダーブロックヘッダーブロックヘッダーブロックヘッダーブロック

UNDOUNDOUNDOUNDOブロックブロックブロックブロック

セグメントヘッダーセグメントヘッダーセグメントヘッダーセグメントヘッダー

ブロックブロックブロックブロック

データブロックデータブロックデータブロックデータブロック

Oracleのトランザクション管理のトランザクション管理のトランザクション管理のトランザクション管理

スライドは、変更トランザクションが開始された後の、データベースに対する変更操作を行うときのOracleの動作を表したものです。

Page 7: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

7

7 99/06/25 Oracle8i Core Tech Seminar

OracleののののREDOロギングの仕組みロギングの仕組みロギングの仕組みロギングの仕組み

RBSRBSRBSRBSヘッダブロックのヘッダブロックのヘッダブロックのヘッダブロックの

変更の変更の変更の変更のREDOREDOREDOREDOログログログログ

((((必要なら必要なら必要なら必要なら))))

RBSRBSRBSRBSヘッダブロックのヘッダブロックのヘッダブロックのヘッダブロックの

変更変更変更変更

((((必要なら必要なら必要なら必要なら))))

UNDOUNDOUNDOUNDOブロックのブロックのブロックのブロックの

変更の変更の変更の変更の

REDOREDOREDOREDOログログログログ

UNDOUNDOUNDOUNDOブロックのブロックのブロックのブロックの

変更変更変更変更

データブロックのデータブロックのデータブロックのデータブロックの

変更の変更の変更の変更の

REDOREDOREDOREDOログログログログ

データブロックのデータブロックのデータブロックのデータブロックの

変更変更変更変更

CHANGE VECTORCHANGE VECTORCHANGE VECTORCHANGE VECTOR

1111REDOREDOREDOREDOレコードレコードレコードレコード

データデータデータデータブロックブロックブロックブロック

REDOログログログログ

Oracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対する操作」を、1つの「REDOレコードレコードレコードレコード」としてREDOログファイルに記録します。

1つのREDOレコードは、通常複数のCHANGE VECTORから成ります。CHANGE VECTORは、1つのブロック(UNDOブロック、RBSヘッダーブロックも含む)に対する1回の操作のログです。前ページで説明した各ブロックへの操作が、全てCHANGE VECTORとして順に記録されます。よって、1つのREDOレコードは、次のようなCHANGEVECTORから成ります。

① もし、RBSヘッダーブロックに対する変更があれば、そのCHANGEVECTOR② UNDOブロックに対する変更のCHANGE VECTOR③ データブロックに対する変更のCHANGE VECTOR各CHANGE VECTORがREDOログバッファ上に生成されるタイミングは、各ブロックに対する変更の直前です。(ディスク上のREDOログファイルには、別のタイミング(コミット等)で書き出されます。)RBA (Redo Byte Address)RBAはREDOレコードのアドレスです。RBAは、次の3つの番号の組みで表され、1つのスレッド中での、1つのREDOレコードを識別します。・ ログ順序番号・・スレッド中の、REDOログファイルの順序番号です。・ ブロック番号・・REDOログファイル中のブロック番号です。・ バイト・オフセット・・ブロック中でREDOレコードが始まるバイト・オフセットです。例えば、RBA 189.11.248は、ログ順序番号189のREDOログファイルの、11番目のブロックの248Byte目から始まるREDOレコードを表しています。

Page 8: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

8

8 99/06/25 Oracle8i Core Tech Seminar

ログを作成したログを作成したログを作成したログを作成したDBDBDBDBと、分析すると、分析すると、分析すると、分析するDBDBDBDBは、は、は、は、以下の関係を満たす必要があります以下の関係を満たす必要があります以下の関係を満たす必要があります以下の関係を満たす必要があります

•データベースのプラットフォームが同一データベースのプラットフォームが同一データベースのプラットフォームが同一データベースのプラットフォームが同一

•データベースのキャラクタセットが同一データベースのキャラクタセットが同一データベースのキャラクタセットが同一データベースのキャラクタセットが同一

•ディクショナリファイルはディクショナリファイルはディクショナリファイルはディクショナリファイルはREDOREDOREDOREDOログファイルログファイルログファイルログファイルを作成するを作成するを作成するを作成するDBDBDBDBと同一のと同一のと同一のと同一のDBDBDBDBで作成するで作成するで作成するで作成する

使用するための前提条件使用するための前提条件使用するための前提条件使用するための前提条件ログを作成したログを作成したログを作成したログを作成したDBと分析すると分析すると分析すると分析するDBの関係の関係の関係の関係

LogMinerを実行するデータベースは、REDOログファイルを作成したデータベ

ースと同じである必要はありません。以下の条件を全て満たしていれば、別のデータベースでREDOログファイルを分析できます。

・データベースのプラットフォームが同一

・データベースのキャラクター・セットが同一

また、当然ですが、ディクショナリファイルは、分析対象となるREDOログファイ

ルを作成するデータベースと同一のデータベースで作成する必要があります。

Page 9: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

9

9 99/06/25 Oracle8i Core Tech Seminar

LogMinerLogMinerLogMinerLogMinerの使用のためには、の使用のためには、の使用のためには、の使用のためには、以下の条件を満たす必要があります以下の条件を満たす必要があります以下の条件を満たす必要があります以下の条件を満たす必要があります

•分析される分析される分析される分析されるREDOREDOREDOREDOログファイルはログファイルはログファイルはログファイルはOracle8Oracle8Oracle8Oracle8Release 8.0.3Release 8.0.3Release 8.0.3Release 8.0.3以降で生成されていること以降で生成されていること以降で生成されていること以降で生成されていること

•データベースの起動状態はデータベースの起動状態はデータベースの起動状態はデータベースの起動状態はNOMOUNTNOMOUNTNOMOUNTNOMOUNT以上以上以上以上((((MOUNTMOUNTMOUNTMOUNT以上を推奨以上を推奨以上を推奨以上を推奨))))

•ディクショナリファイル作成のためには、ディクショナリファイル作成のためには、ディクショナリファイル作成のためには、ディクショナリファイル作成のためには、UTL_FILE_DIRUTL_FILE_DIRUTL_FILE_DIRUTL_FILE_DIR初期化パラメータの設定が必要初期化パラメータの設定が必要初期化パラメータの設定が必要初期化パラメータの設定が必要

•マルチスレッドサーバー接続では使用できないマルチスレッドサーバー接続では使用できないマルチスレッドサーバー接続では使用できないマルチスレッドサーバー接続では使用できない

使用するための前提条件使用するための前提条件使用するための前提条件使用するための前提条件LogMiner使用のためのその他の条件使用のためのその他の条件使用のためのその他の条件使用のためのその他の条件

Oracle8 Release 8.0で生成されたログの読み込みについてで生成されたログの読み込みについてで生成されたログの読み込みについてで生成されたログの読み込みについて

LogMinerは、Oracle8 Release 8.0.3以降で生成されたログファイルを読み込むことができます。次のスクリプトをOracle8iのディレクトリからコピーして実行することにより、Release 8.0.xでも、DBMS_LOGMNR_Dパッケージを登録し、ディクショナリファイルを作成することができます。

・ $ORACLE_HOME/rdbms/admin/dbmslogmnrd.sql

データベースの起動状態についてデータベースの起動状態についてデータベースの起動状態についてデータベースの起動状態について

LogMinerはデータベースのインスタンスが起動していれば、使用可能です。つまり、NOMOUNT、MOUNT、OPENのいずれの状態でも使用できます。ただし、マルチバイトのキャラクタセットを使用している場合は、データベースをMOUNTしないとV$LOGMNR_CONTENTSの検索結果等に、文字化けが起こりますので、オブジェクト名、データ等に日本語を使用している場合は、データベースをMOUNTまたはOPENして使用することを

推奨します。

初期化パラメータ初期化パラメータ初期化パラメータ初期化パラメータ(UTL_FILE_DIR)の設定についての設定についての設定についての設定について

DBMS_LOGMNR_D.BUILDプロシージャでは、ディクショナリファイル作成のためのファイルへの書き込みに、UTL_FILEパッケージを使用しています。このため、ディクショナリファイルを作成するディレクトリは、初期化パラメータUTL_FILE_DIRに含めておく必要があります。他のプロシージャによるREDOログファイル、ディクショナリファイルの読み込みに関しては、UTL_FILEパッケージによるものではありませんので、UTL_FILE_DIRの設定は不要です。

マルチスレッドサーバー構成についてマルチスレッドサーバー構成についてマルチスレッドサーバー構成についてマルチスレッドサーバー構成について

LogMinerは、マルチスレッドサーバー接続で使用することはできません。これは、LogMinerがPGA(サーバープロセスごとのメモリ領域)からメモリを確保していて、マルチスレッドサーバー接続ではPGAの構成が、専用サーバー接続と異なることによります。LogMinerを使用するときは必ず専用サーバー接続を使用してください。ただし、これはマルチスレッドサーバー接続時に生成されたREDOログファイルが分析できないと

いう意味ではありません。

Page 10: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

10

10 99/06/25 Oracle8i Core Tech Seminar

•DBMS_LOGMNR_DDBMS_LOGMNR_DDBMS_LOGMNR_DDBMS_LOGMNR_Dパッケージ、パッケージ、パッケージ、パッケージ、DBMS_LOGMNRDBMS_LOGMNRDBMS_LOGMNRDBMS_LOGMNRパッケージをデータベースに登録しますパッケージをデータベースに登録しますパッケージをデータベースに登録しますパッケージをデータベースに登録します

–catproc.sqlの実行により、DBMS_LOGMNR_D、DBMS_LOGMNRパッケージがDBに登録されます

–パッケージの定義が入っているスクリプトは以下の3つです

– $ORACLE_HOME/rdbms/admin/dbmslogmnrd.sql– $ORACLE_HOME/rdbms/admin/dbmslogmnr.sql– $ORACLE_HOME/rdbms/admin/prvtlogmnr.plb

LogMinerの操作の操作の操作の操作LogMiner使用の準備使用の準備使用の準備使用の準備

DBMS_LOGMNR_D、DBMS_LOGMNRパッケージの定義は以下の3つのス

クリプト中にあります。

・ $ORACLE_HOME/rdbms/admin/dbmslogmnrd.sql

・ $ORACLE_HOME/rdbms/admin/dbmslogmnr.sql

・ $ORACLE_HOME/rdbms/admin/prvtlogmnr.plb

これらのスクリプトは、catproc.sqlを実行することによって呼び出され、パッケージの定義がデータベースに登録されますので、特にLogMinerのためにパッケ

ージの登録作業を行う必要はありません。

Page 11: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

11

11 99/06/25 Oracle8i Core Tech Seminar

•分析対象の分析対象の分析対象の分析対象のDBDBDBDBで、ディクショナリファイルを作成します

LogMinerの操作の操作の操作の操作ディクショナリファイルの作成ディクショナリファイルの作成ディクショナリファイルの作成ディクショナリファイルの作成

SQL> set serveroutput onSQL> execute dbms_logmnr_d.build( dictionary_filename =>'ora815dict.ora', dictionary_location => '/mnt1/app/oracle');LogMnr Dictionary Procedure started・

Procedure executed successfully - LogMnr Dictionary CreatedPL/SQLプロシージャが正常に完了しました。

まず、分析の対象となるREDOログファイルを生成するデータベースで、ディク

ショナリファイルを作成します。

DBMS_LOGMNR_D.BUILDプロシージャを実行することによって、データベ

ースの現在のディクショナリの情報を格納したディクショナリファイルが指定した名前で作成されます。

D I C T I O N A R Y _ F I L E N A M Eにはディクショナリファイルの名前を、DICTIONARY_LOCATIONには、ディクショナリファイルを作成するディレクト

リを指定します。

BUILDプロシージャは、ファイル入出力のために、内部でUTL_FILEパッケー

ジを使っています。従って、ディクショナリファイルを作成するディレクトリは、初期化パラメータUTL_FILE_DIRに含めておく必要があります。

ディクショナリファイルが作成されたら、必要に応じて、LogMinerを実行するデータベースのあるマシンにコピーするなど、分析を行う側のデータベースからディクショナリファイルにアクセスできるようにします。

Page 12: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

12

12 99/06/25 Oracle8i Core Tech Seminar

•LogMinerLogMinerLogMinerLogMinerに分析対象のに分析対象のに分析対象のに分析対象のREDOREDOREDOREDOログファイルをログファイルをログファイルをログファイルを登録します

LogMinerの操作の操作の操作の操作LogMinerへのへのへのへのREDOログファイルの登録ログファイルの登録ログファイルの登録ログファイルの登録

SQL> execute dbms_logmnr.add_logfile( options => dbms_logmnr.new,

logfilename => '/mnt1/app/oracle/admin/ora815/arch/1_4.dbf');

PL/SQLプロシージャが正常に完了しました。

SQL> execute dbms_logmnr.add_logfile( options => dbms_logmnr.addfile, logfilename => '/mnt1/app/oracle/admin/ora815/arch/1_5.dbf');

PL/SQLプロシージャが正常に完了しました。

次に、LogMinerを動作させるデータベースに移って、分析の対象となるREDOログフ

ァイルを登録します。

登録されたREDOログファイルのリストを見るにはV$LOGMNR_LOGS表を検索します

SQL> select thread_id,thread_sqn,filename from v$logmnr_logs;

THREAD_ID THREAD_SQN FILENAME

---------- ---------- -------------------------------------------

1 4 /mnt1/app/oracle/admin/ora815/arch/1_4.dbf

1 5 /mnt1/app/oracle/admin/ora815/arch/1_5.dbf

Page 13: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

13

13 99/06/25 Oracle8i Core Tech Seminar

LogMinerの操作の操作の操作の操作LogMinerの初期化の初期化の初期化の初期化

•ディクショナリファイルを指定して、ディクショナリファイルを指定して、ディクショナリファイルを指定して、ディクショナリファイルを指定して、LogMinerLogMinerLogMinerLogMinerを初期化しますを初期化しますを初期化しますを初期化します

SQL> execute dbms_logmnr.start_logmnr( dictfilename=>'/mnt1/app/oracle/ora815dict.ora', starttime => '98-11-01', endtime => '98-11-30')

PL/SQLプロシージャが正常に完了しました。

続いて、LogMinerを初期化してログの分析が可能な状態にします。

この際、前もって取得したディクショナリファイルを使用する場合は、そのフルパスをDICTFILENAME引数に指定します。STARTTIME、ENDTIMEを指定

して、分析するログの時間的な範囲を指定することもできます。

登 録 し た デ ィ ク シ ョ ナ リ フ ァ イ ル の 詳 細 を 見 る に は 、V$LOGMNR_DICTIONARY表を検索します。

SQL> select db_name,filename from v$logmnr_dictionary;

DB_NAME FILENAME

-------- --------------------------------------------------

ORA815 /mnt1/app/oracle/ora815dict.ora

以上で、LogMinerによるログの分析の準備は完了です。これで、V$LOGMNR_CONTENTS表に、目的に応じた検索を実行することに

よって、ログの分析を行うことができます。

Page 14: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

14

14 99/06/25 Oracle8i Core Tech Seminar

LogMinerの操作の操作の操作の操作LogMinerの終了の終了の終了の終了

•ログの分析が終ったら、ログの分析が終ったら、ログの分析が終ったら、ログの分析が終ったら、LogMinerLogMinerLogMinerLogMinerを終了し、を終了し、を終了し、を終了し、メモリを開放しますメモリを開放しますメモリを開放しますメモリを開放します

SQL> execute dbms_logmnr.end_logmnr

PL/SQLプロシージャが正常に完了しました。

ログの分析が終ったら、LogMinerが使用しているメモリを開放します。

Page 15: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

15

15 99/06/25 Oracle8i Core Tech Seminar

REDOログ分析の例ログ分析の例ログ分析の例ログ分析の例Query1: トランザクションのリストアップトランザクションのリストアップトランザクションのリストアップトランザクションのリストアップ

REDOREDOREDOREDOログファイル中に記録されたトランザクションをログファイル中に記録されたトランザクションをログファイル中に記録されたトランザクションをログファイル中に記録されたトランザクションをリストアップしますリストアップしますリストアップしますリストアップします

SQL> select distinct xidusn, xidslt, xidsqn, username

2> from v$logmnr_contents

3> where timestamp between '98-11-18' and '98-11-19';

XIDUSN XIDSLT XIDSQN USERNAME

---------- ---------- ---------- --------------------------------

0 0 0 SYS

3 4 2 SYS

3 5 2 SCOTT

4 2 2 SYS

Query1: トランザクションのリストアップトランザクションのリストアップトランザクションのリストアップトランザクションのリストアップ

ここからは、V$LOGMNR_CONTENTS表の活用法をSelect文の例を挙げて見

ていきます。

最初に、REDOログファイル中に記録されているトランザクションをリストアップ

してみましょう。

ここで見ることのできるトランザクションは、データベースに対して変更を加えたもののみです。なぜなら、Oracleは検索のみのトランザクションをREDOログに

記録しないからです。

トランザクションは、XIDUSN(ロールバックセグメント番号)、XIDSLT(スロット番号)、XIDSQN(Sequence番号)の3つの値の組み合わせで、一意に識別さ

れます。

以下のSelect文は、これらのトランザクションIDと、そのトランザクションを発行したユーザー名をリストアップします。where句でTIMESTAMP列に条件を付ける

ことにより、トランザクションが発行された期間を区切ることもできます。

Page 16: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

16

16 99/06/25 Oracle8i Core Tech Seminar

REDOログ分析の例ログ分析の例ログ分析の例ログ分析の例Query2: トランザクションの操作内容トランザクションの操作内容トランザクションの操作内容トランザクションの操作内容

指定したトランザクションの操作内容を見ます指定したトランザクションの操作内容を見ます指定したトランザクションの操作内容を見ます指定したトランザクションの操作内容を見ます

SQL> select operation,seg_owner,seg_name,table_space,username

2> from v$logmnr_contents

3> where xidusn=3 and xidslt=5 and xidsqn=2;

OPERATION SEG_OWNER SEG_NAME TABLE_SPACE USERNAME

---------- ---------- ---------- -------------------- ----------

START SCOTT EMP SYSTEM SCOTT

UPDATE SCOTT EMP SYSTEM SCOTT

DELETE SCOTT EMP SYSTEM SCOTT

INTERNAL SCOTT

INTERNAL SCOTT

INSERT SCOTT EMP SYSTEM SCOTT

UPDATE SCOTT EMP SYSTEM SCOTT

COMMIT SCOTT

Query2: トランザクションの操作内容トランザクションの操作内容トランザクションの操作内容トランザクションの操作内容

次に、Query1の検索結果のトランザクションの中から、SCOTTが発行している、XIDUSN:3、XIDSLT:5、XIDSQN:2のトランザクションに注目し、データベー

スに対し、どのような変更を行っているのか見てみましょう。

V$LOGMNR_CONTENTS表の1行は、基本的に1つのREDOレコードに対応しています。(例外あり。詳しくはQuery5で説明します。)

スライドのSelect文は指定したトランザクション内の各REDOレコードが、どんな

操作を表しているのかを示します。操作の対象となったオブジェクトの名前、スキーマ名、表領域名、操作を発行したユーザー名も同時に示しています。各REDOレコードは、操作が行われた順序で上から並んで表示されます。

スライドの検索結果から、このトランザクションが行った処理は、SCOTTの所有するEMP表へのUPDATE、DELETE、INSERT、UPDATEであることが分かり

ます。

INTERNALとは、Oracleが内部的に行う処理のことを指していますが、この検

索例では、何をしているのか明らかにはなりません。

Page 17: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

17

17 99/06/25 Oracle8i Core Tech Seminar

REDOログ分析の例ログ分析の例ログ分析の例ログ分析の例Query3: 操作対象オブジェクト操作対象オブジェクト操作対象オブジェクト操作対象オブジェクト

各操作の対象となったオブジェクトを見ます各操作の対象となったオブジェクトを見ます各操作の対象となったオブジェクトを見ます各操作の対象となったオブジェクトを見ます

SQL> select lo.operation, u.name owner, o.name, lo.username

2> from v$logmnr_contents lo, obj$ o, user$ u

3> where lo.data_obj#=o.obj#(+)

4> and o.owner#=u.user#(+)

5> and xidusn=3 and xidslt=5 and xidsqn=2;

OPERATION OWNER NAME USERNAME

---------- ---------- ---------- ----------

START SCOTT EMP SCOTT

UPDATE SCOTT EMP SCOTT

DELETE SCOTT EMP SCOTT

INTERNAL SCOTT PK_EMP SCOTT

INTERNAL SCOTT PK_EMP SCOTT

INSERT SCOTT EMP SCOTT

UPDATE SCOTT EMP SCOTT

COMMIT SCOTT

Query3: 操作対象オブジェクト操作対象オブジェクト操作対象オブジェクト操作対象オブジェクト

Query2では、INTERNALのOPERATIONが操作しているオブジェクトの名前は表示されませんでした。そこで、obj$表、user$表との結合によって、操作対

象オブジェクトのオブジェクト名、スキーマ名を表示してみましょう。

スライドの検索例では、Query2と同じトランザクションについて、INTERNALの操作対象オブジェクトも表示します。

ただし、この例は、REDOログファイルを作成したデータベースとLogMinerを実

行しているデータベースが同じであるときのみ有効です。

スライドの検索結果から、INTERNALの操作は、EMP表の変更に伴う、PK_EMP索引の変更であることが分かりました。

Page 18: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

18

18 99/06/25 Oracle8i Core Tech Seminar

REDOログ分析の例ログ分析の例ログ分析の例ログ分析の例Query4: SQL文の表示文の表示文の表示文の表示

各操作を表す各操作を表す各操作を表す各操作を表すSQLSQLSQLSQL文を見ます文を見ます文を見ます文を見ます

SQL> select operation, sql_redo, sql_undo, rollback

2> from v$logmnr_contents

3> where operation!='INTERNAL'

4> and xidusn=3 and xidslt=5 and xidsqn=2;

OPERATION SQL_REDO SQL_UNDO RB

---------- ---------------------------- ---------------------------- ---

START set transaction read write; 0

UPDATE update EMP set SAL = 1000 wh update EMP set SAL = 800 whe 0

ere ROWID = 'AAAAp3AABAAAD4J re ROWID = 'AAAAp3AABAAAD4JA

AAA'; AA';

Query4: SQL文の表示文の表示文の表示文の表示

各REDOレコードの操作内容に対応するSQL文を表示することもできます。以下の検索例では、REDOレコードの操作をそのままSQL文で表したSQL_REDO列と、SQL_REDOの操作を取り消す操作を表すSQL_UNDO列を見ています。O P E R A T I O Nが I N T E R N A Lのものは、S Q L _ R E D O、SQL_UNDOは空白になるので、where句で除いてあります。また、Rollbackコマンドによって、呼び出された操作かどうかを示す、ROLLBACK列も同時に

見ています。

スライドの検索結果から、このトランザクションがデータベースに対して行った変更の内容が、分かります。ここに示されるSQL文は、ユーザーが発行したそのままの形ではなく、Oracleの内部で変換され、最終的に実行された操作をSQL文で表したものであることに注意してください。データベーストリガーによって自動的に実行された操作や、ROLLBACKコマンドによって、実行された操作も、全てSQL_REDOに現れます。

ROLLBACKカラムは、ROLLBACKコマンドによって呼び出された操作のとき、値が1となります。

Page 19: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

19

19 99/06/25 Oracle8i Core Tech Seminar

REDOログ分析の例ログ分析の例ログ分析の例ログ分析の例Query5: トランザクションのトランザクションのトランザクションのトランザクションのSCN

Point-In-TimePoint-In-TimePoint-In-TimePoint-In-Time回復等のためにトランザクションに対回復等のためにトランザクションに対回復等のためにトランザクションに対回復等のためにトランザクションに対応する応する応する応するSCNSCNSCNSCNを見つけますを見つけますを見つけますを見つけます

SQL> select operation, scn, rbasqn, rbablk, rbabyte

2> from v$logmnr_contents

3> where xidusn=3 and xidslt=5 and xidsqn=2;

OPERATION SCN RBASQN RBABLK RBABYTE

---------- ---------- ---------- ---------- ----------

START 30123 5 2 16

UPDATE 30123 5 2 16

DELETE 30124 5 3 16

INTERNAL 30124 5 3 300

INTERNAL 30124 5 8 16

INSERT 30124 5 8 164

UPDATE 30124 5 8 396

COMMIT 30125 5 9 84

Query5: トランザクションのトランザクションのトランザクションのトランザクションのSCN

最後にデータベースの回復等で重要な役割を果たす、SCN番号について見てみまし

ょう。

SCN (System Change Number)は、データの変更によって変わっていく、データベース

全体のバージョンを表す値です。例えば、データベースを過去の指定された時点まで回復するPoint-In-Time回復でSCNを指定する必要があります。

スライドの検索例では、Query4までと、同じトランザクションに対して、SCNと、REDOロ

グファイル中の位置を検索しています。

上記の検索結果から、このトランザクションのコミットによって、SCNが30124から30125に上がったことが分かります。途中でSCNが30123から30124に上がっているのは、こ

のトランザクションと同時に実行されていた別のトランザクションが、このタイミングでコミ ッ ト さ れ た こ と に よ る も の と 考 え ら れ ま す 。 ( 詳 し く は 、 や は りV$LOGMNR_CONTENTSの検索によって調べることができます。)

Poin-In-Time回復の、recover database until change <SCN> コマンドで、このトランザクションまでを、データベースに反映したいときは、COMMIT時のSCN、30125より1多い、30126を指定します。すると、回復処理時には、30236以上のSCNがREDOログ中に発見されるとログの適用が終るので、30125までがデータベースに適用されます。30125を指定すると、このトランザクションは、データベースに適用されたあと、ロール

バックされてしまいます。

RBASQN、RBABLK、RBABYTEの3つの値は、REDOレコードのREDOログファイル

中の位置を表しています。

STARTの行と、次のUPDATEの行で、これらの値が同じであることから、この2行が、同じREDOレコードに対応する行であることが分かります。LogMinerは、トランザクションのスタートを表すために、例外的に1つのREDOレコードを2つの行で表します。

Page 20: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

20

20 99/06/25 Oracle8i Core Tech Seminar

登録された登録された登録された登録されたREDOREDOREDOREDOログファイルが連続していない場合、ログファイルが連続していない場合、ログファイルが連続していない場合、ログファイルが連続していない場合、欠落している欠落している欠落している欠落しているREDOREDOREDOREDOログファイルの行を表示しますログファイルの行を表示しますログファイルの行を表示しますログファイルの行を表示します

SQL> select thread_id,thread_sqn,filename from v$logmnr_logs;

THREAD_ID THREAD_SQN FILENAME

---------- ---------- --------------------------------------------------

1 4 /mnt1/app/oracle/admin/ora815/arch/1_4.dbf

1 5 Missing log file(s) for thread number 1, sequence

number(s) 5 to 6

1 7 /mnt1/app/oracle/admin/ora815/arch/1_7.dbf

活用のための活用のための活用のための活用のためのTips欠落した欠落した欠落した欠落したREDOログファイルの検出ログファイルの検出ログファイルの検出ログファイルの検出

LogMinerは初期化の際、登録されたREDOログファイルが連続しているかどう

か確認します。

REDOログファイルが連続していない(欠落しているREDOログファイルがある)場合は、V$LOGMNR_LOGS表に、REDOログファイルの欠落を示す行か示さ

れます。

欠落REDOログファイルの表示は、DBMS_LOGMNR.START_LOGMNRを実行すると有効になります。START_LOGMNRの実行前には登録されたREDOログファイルのみが表示さ

れます。

Page 21: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

21

21 99/06/25 Oracle8i Core Tech Seminar

活用のための活用のための活用のための活用のためのTipsCREATE TABLE AS SELECTの利用の利用の利用の利用

•LogMinerLogMinerLogMinerLogMinerははははV$LOGMNR_CONTENTSV$LOGMNR_CONTENTSV$LOGMNR_CONTENTSV$LOGMNR_CONTENTS表の検索時に表の検索時に表の検索時に表の検索時にREDOREDOREDOREDOログファイルの読み込みを行いますログファイルの読み込みを行いますログファイルの読み込みを行いますログファイルの読み込みを行います

•CREATE TABLE AS SELECTCREATE TABLE AS SELECTCREATE TABLE AS SELECTCREATE TABLE AS SELECTコマンドで、コマンドで、コマンドで、コマンドで、V$LOGMNR_CONTENTSV$LOGMNR_CONTENTSV$LOGMNR_CONTENTSV$LOGMNR_CONTENTS表のコピーを作成してから表のコピーを作成してから表のコピーを作成してから表のコピーを作成してから分析を行ったほうがパフォーマンスがよい分析を行ったほうがパフォーマンスがよい分析を行ったほうがパフォーマンスがよい分析を行ったほうがパフォーマンスがよいことがありますことがありますことがありますことがあります

LogMinerは、V$LOGMNR_CONTENTS表が検索される時に、REDOログファ

イル中のログの読み込みや、オブジェクト名の解決等を行います。

したがって、同じREDOログファイル列を繰り返し分析する場合は、CREATETABLE AS SELECTコマンドによってV$LOGMNR_CONTENTS表のコピーを作成して分析を行う方が、パフォーマ

ンスが良いことがあります。

Page 22: LogMinerotndnld.oracle.co.jp/deploy/maintenance/pdf/LOGMNR_815.pdfOracleは、前ページで説明した、「1つのデータブロック中の1行のデータに対 する操作」を、1つの「REDOレコード」としてレコード

Oracle8i Core Tech Seminar 99/06/25

22

22 99/06/25 Oracle8i Core Tech Seminar

まとめまとめまとめまとめ

• 本機能の製品出荷後の利用にあたっては、弊社サポートセンターの指示および支援が必要となる場合があることを前提としてください