第 1 章 Oracle 数据库日志文件分析 下面描述如何使用 Oracle LogMiner 工具完成对 Oracle 数据库日志文件的分析。更多 信息可以参考: https://docs.oracle.com/cd/B19306_01/server.102/b14215/logminer.htm#i1014763。 1.1. 配置 LogMiner 1.1.1. 设置 Oracle 归档模式 虽然 LogMiner 并不要求 Oracle 工作在归档模式下,但非归档模式没有归档日志文件, 只能对在线日志文件进行分析。 1. 检查数据库归档模式 SQL>archive log list; 非归档模式的显示结果: 数据库日志模式非归档模式 自动归档已禁用 USE_DB_RECOVERY_FILE_DEST 归档目标 1500 最早的联机日志序列 1502 当前日志序列 归档模式的显示结果: 数据库日志模式归档日志模式 自动归档已启用 USE_DB_RECOVERY_FILE_DEST 归档目标 1500 最早的联机日志序列 1502 当前日志序列 2. 修改归档模式 修改归档模式需要数据库运行在加载状态。 SQL>shutdown immediate; SQL>startup mount; SQL>alter database archivelog; SQL>alter database open; 1.1.2. 配置附加日志信息(Supplemental Logging) 默认情况下,Oracle 并不生成附加日志信息,这种情况下,LogMiner 无法对日志进 行分析。因此,需要为 LogMiner 配置最小的附加日志信息。 可以使用下面的命令检查附加日志的配置: SQL>select supplemental_log_data_min from v$database; 如果输出 YES 或 IMPLICIT,则表明已经配置了附加日志信息。否则,可以使用下面的 命令配置附加日志信息: SQL>alter database add supplemental log data; 1.2. 使用 LogMiner 分析日志 LogMiner 的所有操作都是通过 DBM_LOGMNR 和 DBMS_LOGMNR_D 这两个 PL/SQL 包完成的。LogMiner 使用 V$LOGMNR_CONTENTS 视图提取日志数据,具体的步骤包括: (1) 指定 LogMiner 字典。使用 DBMS_LOGMNR_D.BUILD 存储过程生成 LogMiner 字典。 (2) 指定分析的日志文件。使用 DBMS_LOGMNR.ADD_LOGFILE 存储过程添加日志 文件或者使用 LogMiner 自动生成分析的日志列表。 (3) 启动 LogMiner。使用 DBMS_LOGMNR.START_LOGMNR 存储过程启动 LogMiner。 (4) 从 V$LOGMNR_CONTENTS 视图中查询重做数据。 (5) 结束 LogMiner 过程。DBMS_LOGMNR.END_LOGMNR()。 1.2.1. LogMiner 数据字典和重做日志文件 LogMiner 共有三种使用数据字典的方式:在线目录(online catalog)、日志文件中 的数据字典、文本文件数据字典。 1.2.1.1. 在线目录 在线目录的方式需要 LogMiner 在源数据库(生成日志文件的数据库)中运行。它可 以根据参数自动生成需要分析的日志列表。 下面的示例表示提取'2016/08/14 20:16:00'从至'2016/08/14 20:20:00'的更新 SQL>alter session set nls_date_format = 'yyyy/mm/dd hh24:mi:ss'; SQL>execute dbms_logmnr.start_logmnr(starttime => '2016/08/14 20:16:00', endtime => '2016/08/14 20:20:00', options =>dbms_logmnr.dict_from_online_catalog + dbms_logmnr.continuous_mine); 1.2.1.2. 将数据字典提取到日志文件中 可以使用下面的命令将数据字典提取到日志文件中: SQL> execute dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_lo gs); 这种方式也不适用。因为每次从 Pad 传递日志文件到采集系统服务器时,日志文件都 会包含数据字典的内容,而 Pad 上数据库的数据结构不会发生变化,因此,也不需要每次 分析之前都将数据字典提取到日志文件中。 1.2.1.3. 使用文本文件(建议使用这种方式) 这种方式使用下面的命令将数据字典提取到一个文本文件中,它适用于源数据库的结 构没有变化的情况。 (1) 设置 UTL_FILE_DIR 参数 因为 PL/SQL 存储过程不能直接访问用户目录,因此,需要设置 UTL_FILE_DIR 参数。 例如,生成的数据字典文件放在目录 c:/app/guo/logmnr(目录必须存在)下,则使用下 面的命令修改参数 UTL_FILE_DIR 并重新启动数据库。 SQL>alter system set utl_file_dir='c:/app/guo/logmnr' scope = spfile; (2) 生成数据字典文件 下面的命令在目录 c:/app/logmnr 下生成文本数据字典文件 dict.ora。 SQL>execute dbms_logmnr_d.build('dict.ora', 'c:/app/guo/logmnr'); 注意:dbms_logmnr_d.build()中的目录参数必须与 UTL_FILE_DIR 的值相同。 1.2.2. 日志分析示例 LogMiner 既可以分析在线日志文件,也可以分析归档日志文件。下面的步骤演示了使 用数据字典文件完成一个归档日志的分析: (1) DML 操作 使用 OE 用户删除 orders 表中的一条记录: delete orders where order_id=2354; commit; (2) 归档日志 alter system switch logfile; (3) 查询最新归档日志 select name from v$archived_log wherefirst_time = (select max(first_time) from v$archived_log); 输出: C:\APP\GUO\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2016_08_09\O 1_MF_1_1508_CTM7H0HO_.ARC (4) 添加分析的日志文件 exec dbms_logmnr.add_logfile( 'c:/app/guo/flash_recovery_area/orcl/archivelog/2016 _08_09/o1_mf_1_1508_ctm7h0ho_.arc'); (5) 启动 LogMiner exec dbms_logmnr.start_logmnr( dictfilename=>'c:/app/guo/logmnr/dict.ora'); (6) 查询分析结果 SQL>SELECT OPERATION, SQL_REDO FROM V$LOGMNR_CONTENTS WHERE SEG_OWNER = 'OE' AND SEG_NAME = 'ORDERS' AND OPERATION = 'DELETE' AND USERNAME = 'OE'; 输出: DELETE delete from "OE"."ORDERS" where "ORDER_ID" = '2354' and "ORDER_DATE" = TO_TIMESTAMP_TZ('15-7 月 -08 06.18.23.234567 上午') and "ORDER_MODE" = 'direct' and "CUSTOMER_ID" = '104' and "ORDER_STATUS" = '0' and "ORDER_TOTAL" = '46257' and "SALES_REP_ID" = '155' and "PROMOTION_ID" IS NULL and ROWID = 'AAAR6OAAFAAAASdAAD'; SQL>SELECT OPERATION, SQL_UNDO FROM V$LOGMNR_CONTENTS WHERE SEG_OWNER = 'OE' AND SEG_NAME = 'ORDERS' AND OPERATION = 'DELETE' AND USERNAME = 'OE'; 输出: DELETE insert into "OE"."ORDERS"("ORDER_ID","ORDER_DATE","ORDER_MODE","CUSTOME R_ID","ORDER_STATUS","ORDER_TOTAL","SALES_REP_ID","PROMOTIO N_ID") values ('2354',TO_TIMESTAMP_TZ('15-7 月 -08 06.18.23.234567 上 午'),'direct','104','0','46257','155',NULL); 1、配置 logMiner(pad 端,pc 端); sqlplus sys/sys@orcl as sysdba ①、archive log list; 检查数据库归档模式,若是非归档模式进行以下设置: a、shutdown immediate; 若是无法卸载就修改 tnsnames.ora 例如: TEST331 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = itd-test-120)(PORT = 1521)) (CONNECT_DATA = (SERVER =DEDICATED) (SERVICE_NAME = test331) ) ) b、startup mount; 要是启动不成功: 方法一:http://blog.sina.com.cn/s/blog_4918fc090101qwbr.html 方法二: 修改 listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc)
logminer使用
编程开发 >
后端开发 >
其他 >
文档预览
7 页
2 下载
940 浏览
0 评论
1 收藏
3.0分
温馨提示:如果当前文档出现乱码或未能正常浏览,请先下载原文档进行浏览。