使用Oracle LogMiner分析archived log

今日收了预警邮件,发生archived log增长过快的现象。无法确定问题原因,使用LogMiner对archived log进行了分析。操作过程纲要主要来源与网络,对我来说是个学习的过程,此文记录了其详细操作。

在操作之前,先大致了解LogMiner的用途:

日志文件中存放着所有进行数据库恢复的数据,记录了针对数据库结构的每一个变化,也就是对数据库操作的所有DML语句。

在Oracle 8i之前,Oracle没有提供任何协助数据库管理员来读取和解释重作日志文件内容的工具。系统出现问题,对于一个普通的数据管理员来讲,唯一可以作的工作就是将所有的log文件打包,然后发给Oracle公司的技术支持,然后静静地等待Oracle 公司技术支持给我们最后的答案。然而从8i以后,Oracle提供了这样一个强有力的工具--LogMiner。

LogMiner工具既可以用来分析在线,也可以用来分析离线日志文件,既可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。

总的说来,LogMiner工具的主要用途有:
1.跟踪数据库的变化:可以离线的跟踪数据库的变化,而不会影响在线系统的性能。
2.回退数据库的变化:回退特定的变化数据,减少point-in-time recovery的执行。
3.优化和扩容计划:可通过分析日志文件中的数据以分析数据增长模式。

问题表现:
$ ls -lth
total 729M
-rw-r----- 1 oracle oinstall 39M Aug  2 11:22 1_1937_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 11:20 1_1936_775334859.dbf
-rw-r----- 1 oracle oinstall 38M Aug  2 11:17 1_1935_775334859.dbf
-rw-r----- 1 oracle oinstall 38M Aug  2 11:15 1_1934_775334859.dbf
-rw-r----- 1 oracle oinstall 38M Aug  2 11:12 1_1933_775334859.dbf
-rw-r----- 1 oracle oinstall 40M Aug  2 11:09 1_1932_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 11:07 1_1931_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 11:05 1_1930_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 11:03 1_1929_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 11:00 1_1928_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 10:58 1_1927_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 10:56 1_1926_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 10:53 1_1925_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 10:51 1_1924_775334859.dbf
-rw-r----- 1 oracle oinstall 38M Aug  2 10:49 1_1923_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 10:47 1_1922_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 10:44 1_1921_775334859.dbf
-rw-r----- 1 oracle oinstall 38M Aug  2 10:42 1_1920_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug  2 10:39 1_1919_775334859.dbf
......

archived logs增长过快。

操作过程:

1.设置日期格式
SQL> show parameter nls_date_format;

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
nls_date_format                      string
DD-MON-RR
SQL> select sysdate from dual;

SYSDATE
---------------
02-AUG-12

SQL> alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile;

System altered.

SQL> 

2.添加补充日志

2.1 查看是否开启了补充日志
SQL> select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI from v$database;

SUPPLEMENTAL_LOG_DATA_MI SUPPLEMEN SUPPLEMEN
------------------------ --------- ---------
NO                       NO        NO

2.2 开启补充日志

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;

Database altered.

SQL> 

3.开启归档(生产环境是必须开启的,此处略过)

3.1 archive log 存放路径
SQL> show parameter log_Archive_dest_;

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
log_archive_dest_1                   string
LOCATION=/opt/archivelog
log_archive_dest_10                  string
......

4.安装LogMiner工具
LogMiner工具实际上是由两个新的PL/SQL内建包(DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四个V$动态性能视图(视图是在利用过程DBMS_LOGMNR.START_LOGMNR启动LogMiner时创建,即:v$logmnr_dictionary、v$logmnr_parameters、v$logmnr_logs、v$logmnr_contents)组成。在使用LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包将数据字典导出为一个文本文件。该字典文件是可选的,但是如果没有它,LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都将是16进制的形式,我们是无法直接理解的。
要安装LogMiner工具,必须首先要运行下面这样两个脚本,这两个脚本必须均以SYS用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。
$ORACLE_HOME/rdbms/admin/dbmslm.sql
$ORACLE_HOME/rdbms/admin/dbmslmd.sql
$ORACLE_HOME/rdbms/admin/dbmslms.sql 

SQL> @/opt/oracle/product/11.2.0/rdbms/admin/dbmslm.sql
Package created.
Grant succeeded.
Synonym created.

SQL>

SQL> @/opt/oracle/product/11.2.0/rdbms/admin/dbmslmd.sql
Package created.
Synonym created.

SQL> @/opt/oracle/product/11.2.0/rdbms/admin/dbmslms.sql
Package created.
No errors.
Grant succeeded.

SQL>

5.使用LogMiner工具

5.1、设置参数UTL_FILE_DIR

数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。

在ORACLE8I的时候,首先在init.ora初始化参数文件中,指定数据字典文件的位置,也就是添加一个参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。如:
SQL> show parameter UTL_FILE_DIR ;

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
utl_file_dir                         string

SQL>

SQL> alter system set UTL_FILE_DIR ='/tmp/test' scope=spfile;

SQL> shutdown immediate
SQL> STARTUP

ORACLE9I后,推荐使用SPFILE启动,可以动态调整参数:

SQL> show parameter spfile;

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
spfile                               string
/opt/oracle/product/11.2.0/dbs
/spfileDCGF.ora

SQL> show parameter utl_file_dir;

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
utl_file_dir                         string
/tmp/test
SQL> 

5.2创建数据字典文件

$ vi dbms_logmnr_d.build.txt

BEGIN
dbms_logmnr_d.build(
dictionary_filename => 'logminer_dict.ora',
dictionary_location => '/tmp/test');
END;
/
SQL> conn / as sysdba
Connected.
SQL> @dbms_logmnr_d.build.txt

PL/SQL procedure successfully completed.

SQL> 
5.3 创建要分析的日志文件列表
Oracle的重作日志分为两种,在线(online)和离线(offline)归档日志文件,我这里主要分析归档日志,在线日志原理一样。

----离线(offline)归档日志文件
SQL> BEGIN
    dbms_logmnr.add_logfile(
    '/opt/archivelog/1_1955_775334859.dbf',
    DBMS_LOGMNR.new );
    end;
    /

PL/SQL procedure successfully completed.

SQL> 

###说明:
dbms_logmnr.new --用于建一个日志分析表
dbms_logmnr.addfile --用于加入用于分析的日志文件
dbms_logmnr.removefile --用于移出,用于分析的日志文件

5.4启动LogMiner进行分析
5.4.1无限制条件
SQL> BEGIN
    dbms_logmnr.start_logmnr(
    dictfilename => '/tmp/test/logminer_dict.ora'
    );
    END;
    /

PL/SQL procedure successfully completed.

SQL> 

5.4.2 限制条件
BEGIN
dbms_logmnr.start_logmnr(
dictfilename => '/tmp/test/logminer_dict.ora',
StartTime => to_date('2012-08-02 16:40:26','YYYY-MM-DD HH24:MI:SS'),
EndTime => to_date('2012-08-02 16:44:41','YYYY-MM-DD HH24:MI:SS ')
);
END;
/

5.5 观察分析结果(v$logmnr_contents)

到现在为止,我们已经分析得到了重作日志文件中的内容。动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。
SQL> SELECT sql_redo FROM v$logmnr_contents; 

6.关闭LogMiner

可以把v$logmnr_contents视图的内容创建一个永久的数据库表将非常有帮助
SQL> create table logmnr_contents as select * from v$logmnr_contents;

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

SQL> execute dbms_logmnr.end_logmnr();

参考来源:

http://blog.csdn.net/yangzhawen/article/details/7525283

http://www.cnblogs.com/einyboy/archive/2012/06/16/2551972.html

你可能感兴趣的:(oracle11gR2,LOGMINER)