十二、dbms_logmnr(分析重做日志和归档日志)
1、概述
作用:通過使用包DBMS_LOGMNR和DBMS_LOGMNR_D,可以分析重做日志和歸檔日志所記載的事務變化,最終確定誤操作(例如DROP TABLE)的時間,跟蹤用戶事務操作,跟蹤并還原表的DML操作.
2、包的組成
1)、dbms_logmnr.add_logfile
作用:用于為日志分析列表增加或刪除日志文件,或者建立日志分析列表。
語法:dbms_logmnr.add_logfile(LogFileName in varchar2,Option in binary_integer default addfile);
其中LogFileName指定要增加或刪除的日志文件名稱,Option指定選項(dbms_logmnr.new建立日志分析列表,dbms_logmnr.addfile增加日志文件,dbms_logmnr.removefile刪除文件)
2)、dbms_logmnr.start_logmnr
作用:用于啟動logmnr會話
語法:dbms_logmnr.start_logmnr(startscn in number default o,endscn in number default 0,
starttime in date default '01-jan-1988',endtime in date default '01-jan-2988',
dictfilename in varchar2 default '',option in binary_integer default 0);
其中startscn指定日志分析的起始scn值,endscn指定日志分析的結束scn值,starttime指定日志分析的起始時間,endtime指定日志分析的結束時間,
dictfilename指定日志分析要使用的字典文件名,option指定logminer分析選項。
3)、dbms_logmnr.end_logmnr
作用:結束logminer會話
語法:dbms_logmnr.end_logmnr
4)、dbms_logmnr.mine_value
作用:用于返回要摘取的列信息,該函數在啟動logminer之后調用。
語法:dbms_logmner.mine_value(sql_redo_undo in raw,column_name in varchar2 default '') return varchar2;
其中sql_redo_undo用于指定要摘取的數據(redo_value或undo_value),column_name用于指定要摘取的列(格式:schema.table.column);
5)、dbms_logmnr.column_present
作用:用于確定列是否出現在數據的redo部分或undo部分
語法:dbms_logmnr.column_present(sql_redo_undo in raw,column_name in varchar2 default '') return number;
其中如果列在redo或undo部分存在,則返回1,否則返回0。
6)、dbms_logmnr_d.build
作用:用于建立字典文件
語法:dbms_logmnr_d.build(dictionary_filename in varcahr2,dictionary_location in varchar2,options in number);
其中dictionary_filename指定字段文件名,dictionary_location指定文件所在位置,options指定字典要寫入位置(store_in_flat_file:文本文件,store_in_redo_log2:重新日志)
7)、dbms_logmnr_d.set_tablespace
作用:用于改變logminer表所在的表空間
語法:dbms_logmnr_d.set_tablespace(new_tablespace in default varchar2,dict_tablespace in default varchar2,spill_tablespace in default varchar2);
其中new_tablespace指定logminer表所在的表空間,dict_tablespace指定字典表所在表空間,spill_tablespace指定溢出表所在表空間。
3、綜合例子
首先建表temp,然后執行dml操作和日志切換操作,生產歸檔日志。
sqlplus /nolog connect system/manager@test create table temp(cola number,colb varchar2(10)); alter system swith logfile; insert into temp values(9,'A'); update temp set cola=10; commit; alter system switch logfile; delete from temp; alter system switch logfile;?
1)、建立字典文件
說明:字典文件用于存放表及對象ID號之間的對應關系。從9i開始,字典信息既可被摘取到字段文件中,也可被摘取到重做日志中。摘取字典信息到字典文件方法如下:
(1)、設置字典文件所在目錄
alter system set utl_file_dir="g:\test"
scope=spfile;
(2)、重啟Oracle Server
sqlplus /nolog
conn sys/test@test as sysdba
shutdown immediate
startup
(3)、摘取字典信息
begin
dbms_logmnr_d.build(dictionary_filename=>'dict.ora',dictionary_location=>'g:\test\logminer');
end;
2)、建立日志分析列表
(1)、停止Oracle Server并裝載數據庫
sqlplus /nolog
conn sys/test@test as sysdba
shutdown immediate
startup mount
(2)、建立日志分析列表
begin
dbms_logmnr.add_logfile(options=>dbms_logmnr.new,logfilename=>'g:\test\arc1\test1.arc');
end;
(3)、增加其他日志文件(可選)
begin
dbms_logmnr.add_logfile(option=>dbms_logmnr.addfile,logfilename=>'g:\test\arc1\test12.arc');
end;
3)、啟動LogMiner分析
begin
dbms_logmnr.start_logmnr(dictfilename=>'g:\test\logminer\dict.ora',
starttime=>to_date('2004-04-03:10:10:00','YYYY-MM-DD:HH24:MI:SS'),
endtime=>to_date('2004-04-03:15:30:00','YYYY-MM-DD:HH24:MI:SS'));
end;
4)、查看日志分析結果
說明:日志分析結果只能在當前會話查看。
(1)、顯示DML分析結果
select operation,sql_redo,sql_undo from v$logmnr_contents where seg_name='TEMP';
(2)、顯示DDL分析結果
select to_cahr(timestamp,'yyyy-mm-dd hh23:mi:ss') time,sql_redo from v$logmnr_contents where sql_redo like '%create%' or sql_redo like '%create%';
(3)、顯示在用字典文件
select db_name,filename from v$logmnr_dictionary;
5)、結束LogMiner
execute dbms_logmnr.end_logmnr;
轉載于:https://www.cnblogs.com/champaign/p/9468610.html
總結
以上是生活随笔為你收集整理的十二、dbms_logmnr(分析重做日志和归档日志)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net 获得域名,端口,虚拟目录
- 下一篇: JS语言的基本构成、变量、数据类型