この例では、joedevo
というユーザーによって特定の時間範囲にデータベースに対して行われた変更をすべて表示する方法を示します。データベースに接続した後、次の手順を実行します。
LogMinerディクショナリ・ファイルを作成します。
LogMinerを使用してjoedevo
のデータを分析するには、joedevo
が使用する表に対して表定義の変更が行われる前にLogMinerディクショナリ・ファイルを作成するか、またはLogMiner起動時にオンライン・カタログを使用する必要があります。LogMinerディクショナリを作成する例は、「LogMinerディクショナリの抽出」を参照してください。この例では、REDOログ・ファイルに抽出されたLogMinerディクショナリを使用します。
REDOログ・ファイルを追加します。
joedevo
がデータベースに対して変更を行ったとします。分析するREDOログ・ファイルの名前は、次のように指定できます。
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( - LOGFILENAME => 'log1orc1.ora', - OPTIONS => DBMS_LOGMNR.NEW);
必要に応じて、次のようにREDOログ・ファイルを追加します。
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( - LOGFILENAME => 'log2orc1.ora', - OPTIONS => DBMS_LOGMNR.ADDFILE);
LogMinerを起動し、検索を指定した時間範囲に制限します。
EXECUTE DBMS_LOGMNR.START_LOGMNR( - DICTFILENAME => 'orcldict.ora', - STARTTIME => TO_DATE('01-Jan-1998 08:30:00','DD-MON-YYYY HH:MI:SS'), - ENDTIME => TO_DATE('01-Jan-1998 08:45:00', 'DD-MON-YYYY HH:MI:SS'));
V$LOGMNR_CONTENTS
ビューを問い合せます。
この時点で、V$LOGMNR_CONTENTS
ビューを問い合せることが可能です。ユーザーjoedevo
がsalary
表に対して行ったすべての変更を検索します。次のSELECT
文を実行します。
SELECT SQL_REDO, SQL_UNDO FROM V$LOGMNR_CONTENTS WHERE USERNAME = 'joedevo' AND SEG_NAME = 'salary';
SQL_REDO
列とSQL_UNDO
列の両方に対して、2つの行が返されます(データ表示の書式は画面では異なる場合があります)。joedevo
が2つの操作を要求したことがわかります。joedevoは、古い給与を削除した後、新しい昇給後の給与を挿入しました。これらは、この操作を元に戻すために必要なデータです。
SQL_REDO SQL_UNDO -------- -------- delete from SALARY insert into SALARY(NAME, EMPNO, SAL) where EMPNO = 12345 values ('JOEDEVO', 12345, 500) and NAME='JOEDEVO' and SAL=500; insert into SALARY(NAME, EMPNO, SAL) delete from SALARY values('JOEDEVO',12345, 2500) where EMPNO = 12345 and NAME = 'JOEDEVO' 2 rows selected and SAL = 2500;
LogMinerセッションを終了します。
LogMinerセッションを正常に終了するには、DBMS_LOGMNR.END_LOGMNR
プロシージャを使用します。
DBMS_LOGMNR.END_LOGMNR( );