Oracle Logminer使用方法
1.安装logminer:
要安装LogMiner工具,必须首先要运行下面这样两个脚本,
$ORACLE_HOME/rdbms/admin/dbmslm.sql
$ORACLE_HOME/rdbms/admin/dbmslmd.sql.
这两个脚本必须均以SYS用户身份运行。
2.创建数据字典文件
首先在init.ora初始化参数文件中,添加参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。如:
UTL_FILE_DIR = (/u1/oracle/admin/hisrun)
重新启动数据库,使新加的参数生效,然后创建数据字典文件:
SQL> dictionary_filename=>'/u1/oracle/admin/hisrun/dic_lzyy.ora',dictionary_location=>'/u1/oracle/logminer');
创建数据字典是让LogMiner引用涉及到内部数据字典中的部分时使用对象的名称,而不是系统内部的16进制的ID。
如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,就需要重新创建该字典
3. 操作步骤:
$ sqlplus /nolog
SQL>conn sys/lzyysys as sysdba
SQL> SPOOL /usr1/undo.sql 将结果保存成文档
(*) 分析离线日志文件
A.创建列表
SQL>execute dbms_logmnr.add_logfile('/u1/oracle/hisrunarchive/hisrun_0001_0000000335.arc',dbms_logmnr.new)
B.添加另外的日志文件到列表
SQL>execute dbms_logmnr.add_logfile('/u1/oracle/hisrunarchive/hisrun_0001_0000000334.arc',dbms_logmnr.addfile)
C.从列表中移除日志文件
SQL>execute dbms_logmnr.add_logfile('/u1/oracle/hisrunarchive/hisrun_0001_0000000334.arc',dbms_logmnr.removefile)
D. 查看分析SCN号范围
SQL>select low_time,high_time,low_scn,next_scn from v$logmnr_logs;
(*) 使用LogMiner进行日志分析
SQL>execute dbms_logmnr.start_logmnr(DictFileName=>'/u1/oracle/admin/hisrun/dic_lzyy.ora',options=>dbms_logmnr.committed_data_only,startscn=>116295629,endscn=>116685026);
(*)结束分析,清空v$logmnr_contents
SQL>execute dbms_logmnr.end_logmnr (结束会话,会自清除分析记录)
(*)观察分析结果(LogMiner的分析结果是放在v$logmnr_contents中)
A.SQL> select sql_redo from v$logmnr_contents where upper(sql_redo) like '%DELETE%;
在视图v$logmnr_contents中查找真实被删除的记录。
B.SQL> SELECT timeseg_name,sql_redo FROM v$logmnr_contents WHERE seg_name='MS_CF01' and sql_redo like '%DELETE%';
功能同A。
C.SQL> select sql_undo from v$logmnr_contents where seg_name='MS_CF01' and sql_redo like '%delete%' and rownum<10;
D.SQL> select sql_undo from v$logmnr_contents where seg_name='MS_CF01' and upper(OPERATION)='DELETE';
针对SQL_REDO重做记录重做指定行变化的SQL语句,所对应的反操作就是重做记录回退或恢复指定行变化的SQL语句。
select timestamp,sql_undo,sql_redo from v$logmnr_contents where seg_name='MS_CF01'
# 下面将就视图v$logmnr_contents的常用字段含义进行说明:
(其中operation指的是操作,sql_redo指的是实际的操作,sql_undo指的是用于取消的相反的操作)
名称 含义
----------------------- -------- --------------------------------------------
SCN 特定数据变化的系统更改号
TIMESTAMP 数据改变发生的时间
COMMIT_TIMESTAMP 数据改变提交的时间
SEG_OWNER 数据发生改变的段名称
SEG_NAME 段的所有者名称
SEG_TYPE 数据发生改变的段类型
SEG_TYPE_NAME 数据发生改变的段类型名称
TABLE_SPACE 变化段的表空间
ROW_ID 特定数据变化行的ID
SESSION_INFO 数据发生变化时用户进程信息
OPERATION 重做记录中记录的操作(如INSERT)
SQL_REDO 可以为重做记录重做指定行变化的SQL语句(正向操作)
SQL_UNDO 可以为重做记录回退或恢复指定行变化的SQL语句(反向操作)
注:SQL_REDO 列显示的是所做的操作(SQL 语句),SQL_UNDO 列显示的是要恢复该操作所需要的SQL语句
只要顺序执行SQL_UNDO的内容,就可以恢复到修改前的数据。