Oracle的日志挖掘

Oracle的日志挖掘,第1张

日志挖掘(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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11407057.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存