今日收了预警邮件,发生archived log增长过快的现象。无法确定问题原因,使用LogMiner对archived log进行了分析。操作过程纲要主要来源与网络,对我来说是个学习的过程,此文记录了其详细操作。
在操作之前,先大致了解LogMiner的用途:
日志文件中存放着所有进行数据库恢复的数据,记录了针对数据库结构的每一个变化,也就是对数据库操作的所有DML语句。在Oracle 8i之前,Oracle没有提供任何协助数据库管理员来读取和解释重作日志文件内容的工具。系统出现问题,对于一个普通的数据管理员来讲,唯一可以作的工作就是将所有的log文件打包,然后发给Oracle公司的技术支持,然后静静地等待Oracle 公司技术支持给我们最后的答案。然而从8i以后,Oracle提供了这样一个强有力的工具--LogMiner。
LogMiner工具既可以用来分析在线,也可以用来分析离线日志文件,既可以分析本身自己数据库的重作日志文件,也可以用来分析其他数据库的重作日志文件。
总的说来,LogMiner工具的主要用途有: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工具
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_DIRSQL> 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 创建要分析的日志文件列表
SQL> BEGIN dbms_logmnr.add_logfile( '/opt/archivelog/1_1955_775334859.dbf', DBMS_LOGMNR.new ); end; / PL/SQL procedure successfully completed. SQL>
###说明:
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