随着数据库规模的增长和复杂性的增加,管理和维护Oracle数据库变得越来越具有挑战性。

其中,日志分析是数据库管理和维护的重要部分之一,它可以帮助数据库管理员(DBA)识别和解决各种性能、安全和可用性问题。

本文将介绍Oracle日志分析的基本概念、方法和工具,并通过示例代码演示如何进行日志分析。

一、Oracle日志类型

Oracle数据库提供了多种类型的日志,以帮助DBA监控和诊断数据库的运行状况。其中,最常见的日志类型包括:

警告日志(Alert Log):记录数据库运行期间发生的重要事件、错误和警告信息。

Alert Log是数据库管理系统(DBMS)中的一个重要组件,用于记录数据库运行期间发生的重要事件、错误、警告和信息性消息。

通常存放在/diag/rdbms///alert目录下

2. 追踪文件(Trace Files):记录数据库进程的详细跟踪信息,用于诊断和调试问题。

3. 重做日志(Redo Log):记录数据库的变化,用于数据恢复和备份。

默认情况下,重做日志文件存储在数据目录下的datadir文件夹中

4. 归档日志(Archived Redo Log):是重做日志的归档版本,用于数据备份和恢复。

路径在数据库安装存放目录

日志举例代码语言:shell复制alter database backup controlfile to '/usr/openv/rman/ora12_arch_wjcdb1.cf'

Completed: alter database backup controlfile to '/usr/openv/rman/ora12_arch_wjcdb1.cf'

Tue Dec 12 14:58:27 2023

Thread 1 advanced to log sequence 291654 (LGWR switch)

Current log# 6 seq# 291654 mem# 0: +SYSDG/WJCDB/ONLINELOG/group06_1

Current log# 6 seq# 291654 mem# 1: +DATADG/WJCDB/ONLINELOG/group06_1

Tue Dec 12 14:58:31 2023

Archived Log entry 576970 added for thread 1 sequence 291653 ID 0xac7254c8 dest 1:

Tue Dec 12 15:03:09 2023

Thread 1 advanced to log sequence 291655 (LGWR switch)

Current log# 1 seq# 291655 mem# 0: +SYSDG/WJCDB/ONLINELOG/group01_1

Current log# 1 seq# 291655 mem# 1: +DATADG/WJCDB/ONLINELOG/group01_1

Tue Dec 12 15:03:11 2023

Archived Log entry 576972 added for thread 1 sequence 291654 ID 0xac7254c8 dest 1:

Tue Dec 12 15:26:25 2023

Thread 1 advanced to log sequence 291656 (LGWR switch)

Current log# 14 seq# 291656 mem# 0: +SYSDG/WJCDB/ONLINELOG/group14_1

Current log# 14 seq# 291656 mem# 1: +DATADG/WJCDB/ONLINELOG/group14_1二、日志分析工具

Oracle提供了多种工具来分析日志,其中最常用的工具包括:

LogMiner:用于分析重做日志和归档日志,提取数据变化和历史信息。Oracle Enterprise Manager(OEM):提供了一个集成的日志分析和管理平台,支持各种日志类型的分析和报告。Automatic Diagnostic Repository(ADR):用于收集、分析和报告数据库问题的诊断信息。三、日志分析示例:使用LogMiner分析重做日志

开启数据库归档日志代码语言:shell复制.--关闭所有节点

shutdown immediate;

--启动一个节点至mount状态

startup mount;

--修改数据库为archivelog mode

alter database archivelog;

--查看数据库归档状态

archive log list;

--打开当前实例数据库

alter database open;

--启动其他节点数据库

startup;打开数据库最小附加日志

在生成LogMiner分析的日志文件之前,必须启用附加日志记录。

启用附加日志记录时,需要在重做流中记录附加信息,以使重做日志文件中的信息更加详细。所以必须至少启用最少的补充日志记录

执行以下SQL:

代码语言:shell复制SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;创建测试数据

创建数据

代码语言:shell复制--使用普通用户shuaige创建测试数据

--创建测试表

SHUAIGE@orcl>

CREATE TABLE shuaige.test_tab

(

ID number(32),

NAME1 varchar2(30),

NAME2 varchar2(30),

NAME3 varchar2(30),

ins_time date DEFAULT SYSDATE

)

tablespace shuaige_dat;

Table created.

--添加表注释

SHUAIGE@orcl> COMMENT ON TABLE shuaige.test_tab IS '测试表';

Comment created.

--添加主键和索引

SHUAIGE@orcl>

alter table test_tab add constraint shuaige.pk_test_tab primary key(ID)

using index

3 tablespace shuaige_dat;

Table altered.

--创建更新数据时间触发器

SHUAIGE@orcl>

CREATE TRIGGER shuaige.test_tab_trigger

before INSERT OR UPDATE ON shuaige.test_tab

FOR EACH ROW

BEGIN

IF UPDATING then

:NEW.INS_TIME := SYSDATE;

END IF;

END;

9 /

Trigger created.

--批量插入数据

SHUAIGE@orcl>

begin

for i in 1 .. 10 loop

INSERT INTO "SHUAIGE"."TEST_TAB" ("ID", "NAME1", "NAME2", "NAME3")

VALUES (i, 'name1_'|| i, 'name2_' || i, 'name3_' || i);

end loop;

end;

/

SHUAIGE@orcl> commit;

Commit complete.启动LogMiner

代码语言:shell复制SYS@orcl>

EXECUTE DBMS_LOGMNR.START_LOGMNR(-

OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

PL/SQL procedure successfully completed.格式化输出SQL

代码语言:shell复制EXECUTE DBMS_LOGMNR.START_LOGMNR(-

OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + -

DBMS_LOGMNR.COMMITTED_DATA_ONLY + -

DBMS_LOGMNR.PRINT_PRETTY_SQL);