​Oracle日志分析和工具介绍

2023-12-13 08:04:08 浏览数 (3)

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

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

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

一、Oracle日志类型


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

  1. 警告日志(Alert Log):记录数据库运行期间发生的重要事件、错误和警告信息。 Alert Log是数据库管理系统(DBMS)中的一个重要组件,用于记录数据库运行期间发生的重要事件、错误、警告和信息性消息。 通常存放在<ORACLE_BASE>/diag/rdbms/<dbname>/<instance_name>/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提供了多种工具来分析日志,其中最常用的工具包括:

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

三、日志分析示例:使用LogMiner分析重做日志


  1. 开启数据库归档日志
代码语言: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);

0 人点赞