讲解Oracle数据库LogMiner工具的使用方法
|
Logminer(DBMS_LOGMNR和DBMS_LOGMNR_D)package,可以用来分析Oracle的重做日志文件。Logminer是oracle从8i开始提供的工具。 我们可以使用logminer分析其它instance(版本可不一致)的重做日志文件,但是必须遵循以下要求: 1.LogMiner日志分析工具仅能够分析Oracle 8以后的产品 2.LogMiner必须使用被分析数据库实例产生的字典文件,且安装LogMiner数据库的字符集必须和被分析数据库的字符集相同 3.被分析数据库平台必须和当前LogMiner所在数据库平台一样,且block size相同。 使用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 = (D:Oraclelogs) 重新启动数据库,使新加的参数生效,然后创建数据字典文件: SQL> EXECUTE dbms_logmnr_d.build( dictionary_filename => " logmn_ora817.dat", dictionary_location => " D:Oraclelogs "); 创建数据字典是让LogMiner引用涉及到内部数据字典中的部分时使用对象的名称,而不是系统内部的16进制的ID。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,就需要重新创建该字典。 3.添加要分析的日志文件 Logminer可以用来分析在线的重做日志文件和归档日志文件,但是我们一般建议使用归档的日志文件。 a.添加新的日志文件: SQL> EXECUTE dbms_logmnr.add_logfile( LogFileName=>" D:databaseoracleoradataora817archive ARC01491.001 ", Options=>dbms_logmnr.new); b.添加另外的日志文件到列表 SQL> EXECUTE dbms_logmnr.add_logfile( LogFileName=>" D:databaseoracleoradataora817archive ARC01491.002", Options=>dbms_logmnr.addfile); c. 移去一个日志文件 SQL> EXECUTE dbms_logmnr.add_logfile( LogFileName=>" D:databaseoracleoradataora817archive ARC01491.002", Options=>dbms_logmnr. REMOVEFILE); 创建了要分析的日志文件,就可以对其进行分析。 4. 进行日志分析 SQL> EXECUTE dbms_logmnr.start_logmnr( DictFileName=>" D:Oraclelogs logmn_ora817.dat "); 可以使用相应的限制条件: 时间范围:对dbms_logmnr.start_logmnr使用StartTime和EndTime参数 SCN范围:对dbms_logmnr.start_logmnr使用StartScn和EndScn参数 5.观察结果: 主要是查询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 VARCHAR2(32) SEG_NAME VARCHAR2(32) SEG_TYPE NUMBER SEG_TYPE_NAME VARCHAR2(32) TABLE_SPACE VARCHAR2(32) ROW_ID VARCHAR2(19) SESSION# NUMBER SERIAL# NUMBER USERNAME VARCHAR2(32) SESSION_INFO VARCHAR2(4000) ROLLBACK NUMBER OPERATION VARCHAR2(32) SQL_REDO VARCHAR2(4000) SQL_UNDO VARCHAR2(4000) RS_ID VARCHAR2(32) SSN NUMBER CSF NUMBER INFO VARCHAR2(32) STATUS NUMBER PH1_NAME VARCHAR2(32) PH1_REDO VARCHAR2(2000) PH1_UNDO VARCHAR2(2000) PH2_NAME VARCHAR2(32) PH2_REDO VARCHAR2(2000) PH2_UNDO VARCHAR2(2000) PH3_NAME VARCHAR2(32) PH3_REDO VARCHAR2(2000) PH3_UNDO VARCHAR2(2000) PH4_NAME VARCHAR2(32) PH4_REDO VARCHAR2(2000) PH4_UNDO VARCHAR2(2000) PH5_NAME VARCHAR2(32) PH5_REDO VARCHAR2(2000) PH5_UNDO VARCHAR2(2000) 通过字段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内存中,所有其他的会话是看不到它的,同时随着会话的结束而清除分析结果。 最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,PGA内存区域将被清除 源代码网供稿. |
