数据库日志分析详解:
ORACEL RAC 体系架构分析
Oracle RAC 包含GI(Grid Infrastructure) 集群软件与Oracle数据库组成。
GI包含两个最主要的组件:Clusterware集群软件和ASM存储软件,这两个软件提供数据库高可用能力。
Oracle数据库至少由一个数据库实例和一个数据库文件组成。数据库实例部分处理内存和进程,数据库文件则由数据文件、控制文件、日志文件等组成。
从集群架构解剖分析日志
获取GI集群管理软件的日志路径,使用grid 用户登入,执行如下命令:
[grid@db01 ~]$ adrci
ADRCI: Release 19.0.0.0.0 - Production on Wed Aug 16 17:14:12 2023
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
ADR base = "/u01/app/grid"
adrci> show log
Choose the home from which to view diagnostic logs:
1: diag/asm/+asm/+ASM1
2: diag/crs/db01/crs
3: diag/clients/user_grid/host_2827697755_110
4: diag/clients/user_root/host_2827697755_110
5: diag/tnslsnr/db01/asmnet1lsnr_asm
6: diag/tnslsnr/db01/listener_scan1
7: diag/tnslsnr/db01/listener
8: diag/asmcmd/user_grid/db01
9: diag/asmcmd/user_oracle/db01
10: diag/kfod/db01/kfod
获取GI 集群asm 的日志路径,使用grid 登入,执行如下命令:
[grid@db01 ~]$ sqlplus / as sysasm
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Aug 16 17:17:55 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> set line 500
SQL> set pagesize 500
SQL> col name for a30
SQL> col value for a100
SQL> select name,value from v$diag_info;
NAME VALUE
------------------------------ ----------------------------------------------------------------------------------------------------
Diag Enabled TRUE
ADR Base /u01/app/grid
ADR Home /u01/app/grid/diag/asm/+asm/+ASM1
Diag Trace /u01/app/grid/diag/asm/+asm/+ASM1/trace
Diag Alert /u01/app/grid/diag/asm/+asm/+ASM1/alert
Diag Incident /u01/app/grid/diag/asm/+asm/+ASM1/incident
Diag Cdump /u01/app/grid/diag/asm/+asm/+ASM1/cdump
Health Monitor /u01/app/grid/diag/asm/+asm/+ASM1/hm
Default Trace File /u01/app/grid/diag/asm/+asm/+ASM1/trace/+ASM1_ora_6871.trc
Active Problem Count 0
Active Incident Count 0
ORACLE_HOME /u01/app/19c/grid
12 rows selected.
获取oracle数据库的日志路径,使用oracle 登入,执行如下命令:
[oracle@db01 ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Aug 16 17:23:25 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> set line 500
SQL> set pagesize 500
SQL> col name for a30
SQL> col value for a100
SQL> select name,value from v$diag_info;
NAME VALUE
------------------------------ ----------------------------------------------------------------------------------------------------
Diag Enabled TRUE
ADR Base /u01/app/oracle
ADR Home /u01/app/oracle/diag/rdbms/db/db01
Diag Trace /u01/app/oracle/diag/rdbms/db/db01/trace
Diag Alert /u01/app/oracle/diag/rdbms/db/db01/alert
Diag Incident /u01/app/oracle/diag/rdbms/db/db01/incident
Diag Cdump /u01/app/oracle/diag/rdbms/db/db01/cdump
Health Monitor /u01/app/oracle/diag/rdbms/db/db01/hm
Default Trace File /u01/app/oracle/diag/rdbms/db/db01/trace/db01_ora_9977.trc
Active Problem Count 0
Active Incident Count 0
ORACLE_HOME /u01/app/oracle/product/19c/db
12 rows selected.
按应用属性分类,主要查看三项日志(alert、trace、redo):
Alert 日志:Alert log files--警报日志。
Trace 日志:主要记录了核心进程运行日志,主要需要关注的进程日志如下:
a) ohasd变为集群初始化的唯一始点,所有组件的守护进程和集群管理的资源统统被称为资源。
ocssd : 它的主要功能是节点监控(Node Monitoring)和组管理(Group Management),它是CRS的核心进程之一。节点监控是指监控集群中节点的健康状况,监控的方法是通过网络心跳(network heartbeat)和磁盘心跳(disk heartbeat)实现的,如果集群中的节点连续丢失磁盘心跳或网络心跳,该节点就会被从集群中驱逐,也就是节点重启。组管理导致的节点重启,我们称之为node kill escalation。重启需要在指定的时间(reboot time,一般为3秒)内完成。网络心跳: ocssd.bin进程每秒钟向集群中的各个节点通过私网发送网络心跳信息,以确认各个节点是否正常。如果某个节点连续丢失网络心跳达到阀值,misscount(检查数据库心跳超时,默认30s:/oracle/app/19.3.0/grid/bin/crsctl get cssmisscount),集群会通过表决盘进行投票,使丢失网络心跳的节点被主节点驱逐出集群,即节点重启。如果集群只包含2个节点,则会出现脑裂,结果是节点号小的节点存活下来,即使是节点号小的节点存在网络问题。 磁盘心跳:ocssd.bin进程每秒钟都会向所有表决盘(Voting File)注册本节点的状态信息,这个过程叫做磁盘心跳。如果某个节点连续丢失磁盘心跳达到阀值disk timeout(检查数据库IO超时,默认200s:/oracle/app/19.3.0/grid/bin/crsctl get css disktimeout),则该节点会自动重启以保证集群的一致性。另外,CRS只要求[N/2]+1个表决盘可用即可,其中N为表决盘数量,一般为奇数。
b) oclsomon:这个进程负责监控ocssd是否挂起,如果发现ocssd.bin存在性能问题,则重启该节点。
c) oprocd:这个进程只在Linux和Unix系统,并且第三方集群管理软件未安装的情况下才会出现。如果它发现节点挂起,则重启该节点。
d) evmd:(Event Manager事件管理器):当事情发生时生成事件,生成一个永久的子 evmlogger- Evmlogger,按需生成子级,扫描标注目录并调用标注。作为 Oracle 运行失败时自动重新启动
Redo 日志: 重做日志(记录数据库的更改)。
总结以上日志介绍,从oracle 方面有以下几个原因会触发重启。
ocssd 进程自检发现网络心跳异常或者磁盘性能延时过高会触发重启。
oclsomon 监控发现ocssd.bin进程异常会重启。
oprocd监控到系统异常就重启。