LogMiner配置使用手册.docx
- 文档编号:8706929
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:22
- 大小:493.69KB
LogMiner配置使用手册.docx
《LogMiner配置使用手册.docx》由会员分享,可在线阅读,更多相关《LogMiner配置使用手册.docx(22页珍藏版)》请在冰豆网上搜索。
LogMiner配置使用手册
LogMiner配置使用手册
1Logminer简介
1.1LogMiner介绍
OracleLogMiner是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的DML和DDL语句。
该工具特别适用于调试、审计或者回退某个特定的事务。
LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成,它作为Oracle数据库的一部分来发布是8i产品提供的一个完全免费的工具。
但该工具和其他Oracle内建工具相比使用起来显得有些复杂,主要原因是该工具没有提供任何的图形用户界面(GUI)。
1.2LogMiner作用
在Oracle8i之前,Oracle没有提供任何协助数据库管理员来读取和解释重作日志文件内容的工具。
系统出现问题,对于一个普通的数据管理员来讲,唯一可以作的工作就是将所有的log文件打包,然后发给Oracle公司的技术支持,然后静静地等待Oracle公司技术支持给我们最后的答案。
然而从8i以后,Oracle提供了这样一个强有力的工具--LogMiner。
LogMiner工具即可以用来分析在线,也可以用来分析离线日志文件,即可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。
总的说来,LogMiner工具的主要用途有:
1、跟踪数据库的变化:
可以离线的跟踪数据库的变化,而不会影响在线系统的性能。
2、回退数据库的变化:
回退特定的变化数据,减少point-in-timerecovery的执行。
3、优化和扩容计划:
可通过分析日志文件中的数据以分析数据增长模式
1.3使用详解
1.3.1安装LogMiner
在使用LogMiner之前需要确认Oracle是否带有进行LogMiner分析包,一般来说Windows操作系统Oracle10g以上都默认包含。
如果不能确认,可以DBA身份登录系统,查看系统中是否存在运行LogMiner所需要的dbms_logmnr、dbms_logmnr_d包,如果没有需要安装LogMiner工具,必须首先要运行下面这样两个脚本:
1、$ORACLE_HOME/rdbms/admin/dbmslm.sql
2、$ORACLE_HOME/rdbms/admin/dbmslmd.sql.
这两个脚本必须均以DBA用户身份运行。
其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。
第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。
创建完毕后将包括如下过程和视图:
类型
过程名
用途
过程
Dbms_logmnr_d.build
创建一个数据字典文件
过程
Dbms_logmnr.add_logfile
在类表中增加日志文件以供分析
过程
Dbms_logmnr.start_logmnr
使用一个可选的字典文件和前面确定要分析日志文件来启动LogMiner
过程
Dbms_logmnr.end_logmnr
停止LogMiner分析
视图
V$logmnr_dictionary
显示用来决定对象ID名称的字典文件的信息
视图
V$logmnr_logs
在LogMiner启动时显示分析的日志列表
视图
V$logmnr_contents
LogMiner启动后,可以使用该视图在SQL提示符下输入SQL语句来查询重做日志的内容
1.3.2 创建数据字典文件
LogMiner工具实际上是由两个新的PL/SQL内建包((DBMS_LOGMNR和DBMS_LOGMNR_D)和四个V$动态性能视图(视图是在利用过程DBMS_LOGMNR.START_LOGMNR启动LogMiner时创建)组成。
在使用LogMiner工具分析redolog文件之前,可以使用DBMS_LOGMNR_D包将数据字典导出为一个文本文件。
该字典文件是可选的,但是如果没有它,LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的。
例如,下面的sql语句:
INSERTINTOdm_dj_swry(rydm,rymc)VALUES(00005,'张三');
LogMiner解释出来的结果将是下面这个样子:
insertintoObject#308(col#1,col#2)values(hextoraw('c30rte567e436'),hextoraw('4a6f686e20446f65'));
创建数据字典的目的就是让LogMiner引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。
数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建。
如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。
另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。
创建数据字典文件之前需要配置LogMiner文件夹:
1CREATEDIRECTORYutlfileAS'D:
\oracle\oradata\practice\LOGMNR';
2altersystemsetutl_file_dir='D:
\oracle\oradata\practice\LOGMNR'scope=spfile;
创建字典文件需要以DBA用户登录,创建到上面配置好的LogMiner文件夹中:
1CONNLOGMINER/LOGMINER@PRACTICEASSYSDBA
2EXECUTEdbms_logmnr_d.build(dictionary_filename=>'dictionary.ora',dictionary_location=>'D:
\oracle\oradata\practice\LOGMNR');
1.3.3加入需分析的日志文件
Oracle的LogMiner可以分析在线(online)和归档(offline)两种日志文件,加入分析日志文件使用dbms_logmnr.add_logfile过程,第一个文件使用dbms_logmnr.NEW参数,后面文件使用dbms_logmnr.ADDFILE参数。
1、创建列表
1BEGIN
2dbms_logmnr.add_logfile(logfilename=>'D:
\oracle\oradata\practice\REDO03.LOG',options=>dbms_logmnr.NEW);
3END;
4/
2、添加其他日志文件到列表
1BEGIN
2dbms_logmnr.add_logfile(logfilename=>'D:
\oracle\oradata\practice\ARCHIVE\ARC00002_0817639922.001',options=>dbms_logmnr.ADDFILE);
3dbms_logmnr.add_logfile(logfilename=>'D:
\oracle\oradata\practice\ARCHIVE\ARC00003_0817639922.001',options=>dbms_logmnr.ADDFILE);
4END;
5/
1.3.4使用LogMiner进行日志分析
Oracle的LogMiner分析时分为无限制条件和限制条件两种,无限制条件中分析所有加入到分析列表日志文件,限制条件根据限制条件分析指定范围日志文件。
1、无限制条件
EXECUTEdbms_logmnr.start_logmnr(dictfilename=>'D:
\oracle\oradata\practice\LOGMNR\dictionary.ora');
2、有限制条件
通过对过程DBMS_LOGMNR.START_LOGMNR中几个不同参数的设置(参数含义见表1),可以缩小要分析日志文件的范围。
通过设置起始时间和终止时间参数我们可以限制只分析某一时间范围的日志。
参数
参数类型
默认值
含义
StartScn
数字型
0
分析重作日志中SCN≥StartScn日志文件部分
EndScn
数字型
0
分析重作日志中SCN≤EndScn日志文件部分
StartTime
日期型
1998-01-01
分析重作日志中时间戳≥StartTime的日志文件部分
EndTime
日期型
2988-01-01
分析重作日志中时间戳≤EndTime的日志文件部分
DictFileName
字符型
字典文件该文件包含一个数据库目录的快照。
如下面的例子,我们仅仅分析2013年6月8日的日志,:
EXECUTEdbms_logmnr.start_logmnr(
DictFileName=>dictfilename=>'D:
\..\practice\LOGMNR\dictionary.ora',
StartTime=>to_date('2013-6-800:
00:
00','YYYY-MM-DDHH24:
MI:
SS')
EndTime=>to_date(''2013-6-823:
59:
59','YYYY-MM-DDHH24:
MI:
SS'));
也可以通过设置起始SCN和截至SCN来限制要分析日志的范围:
EXECUTEdbms_logmnr.start_logmnr(
DictFileName=>'D:
\..\practice\LOGMNR\dictionary.ora',
StartScn=>20,
EndScn=>50);
1.3.5观察分析结果(v$logmnr_contents)
到现在为止,我们已经分析得到了重作日志文件中的内容。
动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。
SELECTsql_redoFROMv$logmnr_contents;
如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户LOGMINER对表EMP所作的一切工作。
SELECTsql_redoFROMv$logmnr_contentsWHEREusername='LOGMINER'ANDtablename='EMP';
序号
名称
含义
1
SCN
特定数据变化的系统更改号
2
TIMESTAM
数据改变发生的时间
3
COMMIT_TIMESTAMP
数据改变提交的时间
4
SEG_OWNER
数据发生改变的段名称
5
SEG_NAME
段的所有者名称
6
SEG_TYPE
数据发生改变的段类型
7
SEG_TYPE_NAME
数据发生改变的段类型名称
8
TABLE_SPACE
变化段的表空间
9
ROW_ID
特定数据变化行的ID
10
SESSION_INFO
数据发生变化时用户进程信息
11
OPERATION
重做记录中记录的操作(如INSERT)
12
SQL_REDO
可以为重做记录重做指定行变化的SQL语句(正向操作)
13
SQL_UNDO
可以为重做记录回退或恢复指定行变化的SQL语句(反向操作)
需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。
这是因为所有的LogMiner存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。
最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,分析结果也随之不再存在。
2数据同步Oracle数据库设置
Oracle数据使用LogMiner查看执行SQL语句,其中需要进行如下四步骤是指:
1、设置数据库为归档模式;
2、设置LogMiner字典文件路径等;
3、创建数据同步用户(如用户名为LOGMINER,该用户拥有DBA权限);
4、验证配置是否成功;
2.1设置数据库为归档模式
2.1.1查看数据库是否为归档模式
使用SqlPlus或者命令行界面连接数据库(以下以命令行界面操作)
--进入SqlPlus程序
sqlplus/nolog
--使用DBA用户登录到源数据库中
connsystem/system@practicassysdba
--查看PRACTICE数据库是否处于归档模式
1SELECTdbid,name,log_modeFROMv$database;
2或者
3ARCHIVELOGLIST;
如果显示数据库显示为归档模式,则设置数据库为归档模式可跳过;如果显示数据库为非归档模式则需要进行以下设置。
上图显示数据库未进行归档,需要进行归档设置。
2.1.2设置归档模式
创建ARCHIVE文件夹,ARCHIVE文件夹路径根据所在服务器进行设置,在下面操作中设置为"D:
\oracle\oradata\practice\ARCHIVE"
--设置归档日志文件路径
ALTERSYSTEMSETlog_archive_dest="D:
\oracle\oradata\practice\ARCHIVE";
--日志文件名称格式:
ALTERSYSTEMSETlog_archive_format="ARC%S_%R.%T"SCOPE=SPFILE;
--修改完毕后,关闭数据库,以MOUNT方式启动
1SHUTDOWNIMMEDIATE;
2STARTUPMOUNT;
--设置数据库为归档模式
ALTERDATABASEARCHIVELOG;
(注意:
如果重启数据失败,请参考第4章节异常问题处理)
2.1.3验证归档是否设置成功
--查看PRACTICE数据库是否处于归档模式
1SELECTdbid,name,log_modeFROMv$database;
2或者
3ARCHIVELOGLIST;
--验证参数设置是否起作用
SELECTdest_id,status,destinationFROMv$archive_destWHEREdest_id=1;
--在参数文件设置已经起作用,打开数据库
ALTERDATABASEOPEN;
2.2LogMiner设置
2.2.1创建LogMiner文件夹
创建LOGMNR文件夹,路径为"D:
\oracle\oradata\practice\LOGMNR"
2.2.2设置LogMiner字典文件路径
--创建数据字典文件
1CREATEDIRECTORYutlfileAS'D:
\oracle\oradata\practice\LOGMNR';
2altersystemsetutl_file_dir='D:
\oracle\oradata\practice\LOGMNR'scope=spfile;
2.2.3开启LogMiner日志补充模式
--创建数据字典文件
alterdatabaseaddsupplementallogdata;
2.2.4重启数据库验证
--修改完毕后,关闭数据库,以MOUNT方式启动
1SHUTDOWNIMMEDIATE;
2STARTUP;
--查看Logminer文件夹是否设置
SHOWPARAMETERutl_file_dir;
2.3创建数据同步用户
在数据库创建LOGMINER用户,该用户需要具有DBA权限
--在源数据库创建LOGMINER用户,并赋予DBA权限
1CREATEUSERLOGMINERIDENTIFIEDBYLOGMINER;
2GRANTCONNECT,RESOURCE,DBATOLOGMINER;
3使用LogMiner读取日志例子
在使用LogMiner读取归档/在线日志需要按照第2章节进行设置,设置完毕后可以对归档和在线日志进行分析。
特别是需要开启LogMiner日志补充模式,如果没有开始LogMiner补充模式将无法查看DDL语句,按照测试结果看,只有开始LogMiner日志补充模式后,才能查看DDL语句,在此之前进行DDL将无法进行查看。
3.1使用LogMiner读取在线日志
3.1.1测试数据准备
--以LOGMINER用户登录(非DBA登录)创建AAAAA表(Oracle11g请注意用户名、密码大小写)
1CONNECTLOGMINER/LOGMINER@PRACTICE
2CREATETABLEAAAAA(field001varchar2(100));
3INSERTINTOAAAAA(field001)values('000000');
4INSERTINTOAAAAA(field001)values('0000010');
5commit;
3.1.2 创建数据字典文件
数据库对象发生变化,需要重新创建数据字典文件
--以LOGMINER用户(DBA权限)登录,生成字典文件
1CONNLOGMINER/LOGMINER@PRACTICEASSYSDBA
2EXECUTEdbms_logmnr_d.build(dictionary_filename=>'dictionary.ora',dictionary_location=>'D:
\oracle\oradata\practice\LOGMNR');
3.1.3确认当前处于联机状态的日志文件
--需要确认当前处于联机状态的日志文件
SELECTgroup#,sequence#,status,first_change#,first_timeFROMV$logORDERBYfirst_change#;
从上图可以看出在线日志REDO03处于ACTIVE状态中
3.1.4加入需分析的日志文件
--加入解析在线日志文件
1BEGIN
2dbms_logmnr.add_logfile(logfilename=>'D:
\oracle\oradata\practice\REDO03.LOG',options=>dbms_logmnr.NEW);
3END;
4/
3.1.5使用LogMiner进行分析
--启动LogMiner进行分析
EXECUTEdbms_logmnr.start_logmnr(dictfilename=>'D:
\oracle\oradata\practice\LOGMNR\dictionary.ora');
3.1.6观察分析结果
--查询相关操作日志
1SELECTsql_redo,sql_undo,seg_owner
2FROMv$logmnr_contents
3WHEREseg_name='AAAAA'
4ANDseg_owner='LOGMINER';
3.2使用LogMiner读取归档日志
3.2.1测试数据准备
--以LOGMINER用户登录(非DBA权限)创建EMP表(Oracle11g请注意用户名、密码大小写)
1CONNLOGMINER/LOGMINER@PRACTICE
2CREATETABLEEMP
3(EMPNONUMBER(4)CONSTRAINTPK_EMPPRIMARYKEY,
4ENAMEVARCHAR2(10),
5JOBVARCHAR2(9),
6MGRNUMBER(4),
7HIREDATEDATE,
8SALNUMBER(7,2),
9COMMNUMBER(7,2),
10DEPTNONUMBER
(2));
--插入EMP数据
1INSERTINTOEMPVALUES(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
2INSERTINTOEMPVALUES(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
3INSERTINTOEMPVALUES(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
4INSERTINTOEMPVALUES(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
5COMMIT;
--从v$log视图中找出日志文件的序号
1CONNECTsystem/system@practiceassysdba
2ALTERSYSTEMSWITCHLOGFILE;
3selectsequence#,FIRST_CHANGE#,NEXT_CHANGE#,namefromv$archived_logorderbysequence#desc;
3.2.2创建数据字典文件
确保按照2.2进行logMiner设置
--以LOGMINER用户(DBA权限)登录,生成字典文件
1CONNLOGMINER/LOGMINER@PRACTICEASSYSDBA
2EXECUTEdbms_logmnr_d.build(dictionary_filename=>'dictionary.ora',dictionary_location=>'D:
\oracle\oradata\practice\LOGMNR');
3.2.3 加入需分析的日志文件
--加入解析日志文件
1BEGIN
2dbms_logmnr.add_logfile(logfilename=>'D:
\oracle\oradata\practice\ARCHIVE\ARC00002_0817639922.001',options=>dbms_logmnr.NEW);
3END;
4/
3.2.4使用LogMiner进行分析
--启动LogMiner进行分析
1EXECUTEdbms_logmnr.start_logmnr(dictfilename=>'D:
\oracle\oradata\practice\LOGMNR\dictionary.ora');
3.2.5观察分析结果
--查询相关操作日志
1SELECTsql_redo,sql_undo
2FROMv$logmnr_contents
3WHEREseg_name='EMP'
4ANDs
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LogMiner 配置 使用手册