
日志挖掘(LogMnr)
①在参数文件中设置utl_file_dir路径
②重启
③创建directory file 使用execute dbms_logmnr_d build()
④添加日志文件 使用dbms_logmnr add_logfile
或删除日志文件 使用dbms_logmnr removefile
⑤启动logmnr 使用dbms_logmnr start_logmnr
⑥查询 使用V$logmnr_contents(sqlredo/sqlundo)
设置utl_file_dir目录
alter system set utl_file_dir= D:\app\Leo\utl_file_dir scope=spfile
建立日志挖掘的数据字典
execute dbms_logmnr_d build( shwdict ora D:\app\Leo\utl_file_dir )//第二个参数要与参数utl_file_dir的设置完全匹配
无此包 则需执行@d:\oracle\ora \rdbms\admin\dbmslmd sql
创建分析的文件列表(可以是在线或归档日志)
execute dbms_logmnr add_logfile( D:\app\Leo\archivelog \ARC _ dbms_logmnr new)
execute dbms_logmnr add_logfile( D:\app\Leo\archivelog \ARC _ dbms_logmnr addfile)
execute dbms_logmnr add_logfile( D:\app\Leo\archivelog \ARC _ dbms_logmnr addfile)
option new 创建一个新的日志列表 addfile 向列表中添加日志文件
remove_logfile 删除
在视图v$logmnr_logs中可以看到添加的日志列表
select log_id filename from v$logmnr_logs
开始分析
execute dbms_logmnr start_logmnr(dictfilename=>D:\app\Leo\utl_file_dir\shwdict ora )
execute dbms_logmnr start_logmnr(dictfilename=>d:\oracle\shwdict ora startscn=>xxxxxx endscn=>xxxxx starttime=>to_date( : : yyyymmdd hh :mi:ss ) endtime=>to_date( : : yyyymmdd hh :mi:ss ))
没有建立数据字典 使用dbms_logmnr dict_from_online_catalog选项参数 则logminer期望在所指定的dbms_logmnr add_logfile或重做日志中找到数据字典
exec sys dbms_logmnr start_logmnr(options=>sys dbms_logmnr dict_from_online_catalog)
查询分析内容
select to_char(timestamp yyyy mm dd hh :mi:ss ) time sql_redo from v$logmnr_contents where seg_owner= SCOTT
结束分析
execute dbms_logmnr end_logmnr
部分日志归档不出的解决
①将数据库至于force logging模式
alter database force logging
select force_logging from v$database
②查看表是否处于归档模式
select table_name logging from user_tables
③查看数据库是否处于启用了补充日志(启动了 则每条update写redo时会附加列值唯一信息)
SQL>select supplemental_log_data_pk supplemental_log_data_ui from v$database
SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI
NO NO
SQL>alter database add supplemental log data (primary key unique index) columns
Database altered
SQL>select supplemental_log_data_pk supplemental_log_data_ui from v$database
SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI
lishixinzhi/Article/program/Oracle/201311/17087
Logminer(DBMS_LOGMNR和DBMS_LOGMNR_D)package 可以用来分析Oracle的重做日志文件 Logminer是oracle从 i开始提供的工具
我们可以使用logminer分析其它instance(版本可不一致)的重做日志文件 但是必须遵循以下要求
LogMiner日志分析工具仅能够分析Oracle 以后的产品
LogMiner必须使用被分析数据库实例产生的字典文件 且安装LogMiner数据库的字符集必须和被分析数据库的字符集相同
被分析数据库平台必须和当前LogMiner所在数据库平台一样 且block size相同
使用logminer
安装logminer
要安装LogMiner工具 必须首先要运行下面这样两个脚本 $ORACLE_HOME/rdbms/admin/dbmslm sql $ORACLE_HOME/rdbms/admin/dbmslmd sql
这两个脚本必须均以SYS用户身份运行
创建数据字典文件
首先在init ora初始化参数文件中 添加参数UTL_FILE_DIR 该参数值为服务器中放置数据字典文件的目录 如 UTL_FILE_DIR = (D:\Oracle\logs)
重新启动数据库 使新加的参数生效 然后创建数据字典文件 SQL>EXECUTE dbms_logmnr_d build( dictionary_filename =>logmn_ora dat dictionary_location =>D:\Oracle\logs )
创建数据字典是让LogMiner引用涉及到内部数据字典中的部分时使用对象的名称 而不是系统内部的 进制的ID 如果我们要分析的数据库中的表有变化 影响到库的数据字典也发生变化 就需要重新创建该字典
添加要分析的日志文件
Logminer可以用来分析在线的重做日志文件和归档日志文件 但是我们一般建议使用归档的日志文件
a 添加新的日志文件 SQL>EXECUTE dbms_logmnr add_logfile( LogFileName=>D:\database\oracle\oradata\ora \archive \ ARC Options=>dbms_logmnr new)
b 添加另外的日志文件到列表 SQL>EXECUTE dbms_logmnr add_logfile( LogFileName=>D:\database\oracle\oradata\ora \archive \ ARC Options=>dbms_logmnr addfile)
c 移去一个日志文件 SQL>EXECUTE dbms_logmnr add_logfile( LogFileName=>D:\database\oracle\oradata\ora \archive \ ARC Options=>dbms_logmnr REMOVEFILE)
创建了要分析的日志文件 就可以对其进行分析
进行日志分析 SQL>EXECUTE dbms_logmnr start_logmnr( DictFileName=>D:\Oracle\logs\ logmn_ora dat )
可以使用相应的限制条件
时间范围 对dbms_logmnr start_logmnr使用StartTime和EndTime参数
SCN范围 对dbms_logmnr start_logmnr使用StartScn和EndScn参数
观察结果
主要是查询v$logmnr_contents SQL>desc v$logmnr_contents
名称 空? 类型
SCN NUMBER TIMESTAMP DATE THREAD# NUMBER LOG_ID NUMBER XIDUSN NUMBER XIDSLT NUMBER XIDSQN NUMBER RBASQN NUMBER RBABLK NUMBER RBABYTE NUMBER UBAFIL NUMBER UBABLK NUMBER UBAREC NUMBER UBASQN NUMBER ABS_FILE# NUMBER REL_FILE# NUMBER DATA_BLK# NUMBER DATA_OBJ# NUMBER DATA_OBJD# NUMBER SEG_OWNER VARCHAR ( ) SEG_NAME VARCHAR ( ) SEG_TYPE NUMBER SEG_TYPE_NAME VARCHAR ( ) TABLE_SPACE VARCHAR ( ) ROW_ID VARCHAR ( ) SESSION# NUMBER SERIAL# NUMBER USERNAME VARCHAR ( ) SESSION_INFO VARCHAR ( ) ROLLBACK NUMBER OPERATION VARCHAR ( ) SQL_REDO VARCHAR ( ) SQL_UNDO VARCHAR ( ) RS_ID VARCHAR ( ) SSN NUMBER CSF NUMBER INFO VARCHAR ( ) STATUS NUMBER PH _NAME VARCHAR ( ) PH _REDO VARCHAR ( ) PH _UNDO VARCHAR ( ) PH _NAME VARCHAR ( ) PH _REDO VARCHAR ( ) PH _UNDO VARCHAR ( ) PH _NAME VARCHAR ( ) PH _REDO VARCHAR ( ) PH _UNDO VARCHAR ( ) PH _NAME VARCHAR ( ) PH _REDO VARCHAR ( ) PH _UNDO VARCHAR ( ) PH _NAME VARCHAR ( ) PH _REDO VARCHAR ( ) PH _UNDO VARCHAR ( )
通过字段sql_redo可以得到该日志文件中进行过的sql *** 作 通过sql_undo可以得到撤销的sql语句
还可以用这样的sql对日志文件中的所有的 *** 作分类统计 select operation count(*)from v$logmnr_contents group by operation
视图v$logmnr_contents中的分析结果仅在我们运行过程 dbms_logmrn start_logmnr 这个会话的生命期中存在 这是因为所有的LogMiner存储都在PGA内存中 所有其他的会话是看不到它的 同时随着会话的结束而清除分析结果
lishixinzhi/Article/program/Oracle/201311/18334
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)