随着数据库规模的增长和复杂性的增加,管理和维护Oracle数据库变得越来越具有挑战性。
其中,日志分析是数据库管理和维护的重要部分之一,它可以帮助数据库管理员(DBA)识别和解决各种性能、安全和可用性问题。
本文将介绍Oracle日志分析的基本概念、方法和工具,并通过示例代码演示如何进行日志分析。
一、Oracle日志类型
Oracle数据库提供了多种类型的日志,以帮助DBA监控和诊断数据库的运行状况。其中,最常见的日志类型包括:
- 警告日志(Alert Log):记录数据库运行期间发生的重要事件、错误和警告信息。 Alert Log是数据库管理系统(DBMS)中的一个重要组件,用于记录数据库运行期间发生的重要事件、错误、警告和信息性消息。 通常存放在<ORACLE_BASE>/diag/rdbms/<dbname>/<instance_name>/alert目录下 2. 追踪文件(Trace Files):记录数据库进程的详细跟踪信息,用于诊断和调试问题。 3. 重做日志(Redo Log):记录数据库的变化,用于数据恢复和备份。 默认情况下,重做日志文件存储在数据目录下的datadir文件夹中 4. 归档日志(Archived Redo Log):是重做日志的归档版本,用于数据备份和恢复。 路径在数据库安装存放目录 日志举例
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分析重做日志
- 开启数据库归档日志
.--关闭所有节点
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);