数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

OracleLogMiner学习和使用


发布日期:2023年09月06日
 
OracleLogMiner学习和使用

logmnr可以对用户发出的sql语句进行跟蹤例如由于某个管理员修改数据时错误地把张三的工资修改了这时使用logmnr可以知道张三的工资在修改前的值和修改后的值通过logmnr可以把张三的工资恢复到修改前的状态

安装LogMiner

$oracle_home/rdbms/admin/dbmslmsql用来创建dbms_logmnr包该包分析日志文件

$oracle_home/rdbms/admin/dbmslmdsql用来创建dbms_logmnr_d包创建数据字典文件

在运行这两个脚本的时候要以sys用户身份运行

LogMiner使用产生日志文件的服务器来分析重做日志文件重做日志文件来自当前数据库

LogMiner不解释重做日志的DDL语句如drop table这样的ddl语句

LogMiner将不会重构原始的无日志的sql操作如果在数据字典上的DML操作结果将被记录到日志文件里

使用LogMiner分析庞大数据的重做信息是一件非常耗费时间的事情

无论源数据还是被分析的数据库都必须同时使用相同的操作硬件平台系统都必须使用相同的字符集

LogMiner将显示未提交的事务因为重做日志包含提交的和未提交的数据

LogMiner分析重做日志文件的操作

使用LogMiner存储过程创建一个外部数据字典文件

然后使用另一个存储过程创建一个被分析的重做文件的列表

最后执行另一个存储过程来启动LogMiner

LogMiner重要的过程和视图

过程

dbms_logmnr_dbuild创建一个数据字典文件

dbms_logmnradd_logfile在列表中增加日志文件以供分析

dbms_logmnrstart_logmnr使用一个个可选的字典文件和前面确定要分析的日志文件来启动LogMiner

dbms_logmnrend_logmnr停止LogMiner分析

视图

v$logmnr_dictionary 显示用来决定对象ID名称的字典文件的信息

v$logmnr_logs在LogMiner启动时显示被分析的日志列表

v$logmnr_contentsLogMiner启动后可以使用这个视图在sql提示符下输入sql语句来查询重做日志的内容

执行任务

创建数据字典

产生确定数据字典的重要性LogMiner将使用这个文件将对象标识转化成一个为意义的名字它的信息保存到PGA内存区应该确保系统必须有足够的内存空间因为这种操作需要很大的内存如果没有数据字典则需要较少的PGA内存空间

sql> execute dbms_logmnr_dbuild(dictionary_filename => dictionaryora dictionary_location => c:\oracle\rman\ch);

产生数据库操作

比如对一个表进行增删查改的操作

这些操作语句的重做信息将被保存在当前联机重做日志文件中可以从v$log视图里面找出日志seq号然后进行一个强制日志切换使当前联机日志归档运行logMiner分析这个新归档的日志文件(如arc是新归档的日志文件)

sql> select sequence# from v$log where status = CURRENT

sql> alter system switch logfile;

为分析指定日志文件

LogMiner将分析一个指定的日志文件所以必须创建一个可供分析的日志文件列表增加的日志文件将显示在v$logmnr_logs视图里

sql> select db_name thread_sqnfilename from v$logmnr_logs;

前一个任务中sql所做的改变保存在序号为的日志文件里那么这里在logminer分析前添加这个日志文件和前面的两个文件

begin

dbms_logmnradd_logfile(logfilename => /oradata/dba/backup/ch/arc options => dbms_logmnrNEW);

dbms_logmnradd_logfile(logfilename => /oradata/dba/backup/ch/arc options => dbms_logmnrADDFILE);

dbms_logmnradd_logfile(logfilename => /oradata/dba/backup/ch/arc options => dbms_logmnrADDFILE);

end;

/

dbms_logmnrnew用于建一个日志分析表

dbms_logmnraddfile用于加入用于分析的日志文件

dbms_logmnrremovefile用于移出用于分析的日志文件

查看sql> select db_name thread_sqnfilename from v$logmnr_logs;

可以删除里面的文件arc没有包含我们想要的信息可以用REMOVEFILE选项来删除

sql> execute dbms_logmnradd_logfile(logfilename => d:\oradata\dba\archive\arc option => dbms_logmnrREMOVEFILE);

启动LogMiner

准备好字典文件和日志文件列表后就可以准备启动LogMiner了

execute dbms_logmnrstart_logmnr(dictfilename => c:\oracle\rman\ch\dictionaryora);

可以指定分析开始的SCN和或结束的SCN开始的时间和或结束时间

execute dbms_logmnrstart_logmnr(dictfilename => c:\oracle\rman\ch\dictionaryorastartime => to_date( ::yyyymmdd hh:mi:ss)endtime => to_date( ::yyyymmdd hh:mi:ss));

分析日志文件内容

检查数据库更改的细节sql> select operation timestampscn from v$logmnr_contents where seg_name = EMP and seg_owner=SCOTT and seg_type_name = TABLE;

select sql_redosql_undo from v$logmnr_contents where seg_name=EMP and seg_owner=SCOTT and seg_type_name = TABLE;

select usrnamen session_info from logmnr_contents where seg_name = EMP and seg_owner=SCOTT and seg_type_name=TABLE;

执行容量分析使用LogMiner不会降低运行时间而使用表审计则会导致运行时间性能开销过大

下面为分析数据库表上DML操作提供一些思路与方法

select operation to_char(timestampHH) hourcount(*) total from v$logmnr_contents where seg_name =DATE_LOG and seg_owner=TINA and seg_type_name=TABLE group by operation to_char(timestampHH);

寻找DDL命令的细节

select seg_nameoperationscntimestampcount(*) from v$logmnr_contents where operation=DELETE group by seg_nameoperationscntimestamp order by scn;

关闭LogMiner

可以把v$logmnr_contents视图的内容创建一个永久的数据库表将非常有帮助

sql> create table logmnr_contents as select * from v$logmnr_contents;

当完成了重做日志的检查运行dbms_logmnr 中的end_logmnr

execute dbms_logmnrend_logmnr();

上一篇:Oracle在基于Window操作系统的性能监控

下一篇:Oraclesql