数据库启动问题排查的一般流程
通过检查
1、告警日志:该文件记录了数据库启动、关闭、实例崩溃和其他重要事件⽇志是以xml⽂件的⽅式存储的 ;
2、trace文件: alert⽇志是以⽂本⽂件的形式存储的,命名规则为alert_<oracle_sid>.log,包含了详细的错误和诊断信息 ;
3、动态性能视图:V$SYSTEM_EVENT
、V$SESSION_WAIT
和V$PROCESS
包含了关于数据库运行时的信息, 分析数据库的性能和等待事件;
4、操作系统日志:如/var/log/messages
或/var/log/syslog
)可以提供硬件和系统级别的错误信息。
这些方法能迅速定位问题的根本原因,在采取相应的措施,如调整数据库参数、清理磁盘空间、检查网络连接和权限设置等。
案例
今天启动虚拟机的数据库报错ORA-03113
SYS@orcl> startup;
ORACLE instance started.
Total System Global Area 1653518336 bytes
Fixed Size 2253784 bytes
Variable Size 469765160 bytes
Database Buffers 1174405120 bytes
Redo Buffers 7094272 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 6154
Session ID: 125 Serial number: 5
1、查找错误原因
查看告警日志文件
[oracle@orcl:/u01/app/oracle/diag/rdbms/orcl/orcl/trace]$ ls | grep *.log
alert_orcl.log
[oracle@orcl:/u01/app/oracle/diag/rdbms/orcl/orcl/trace]$
[oracle@orcl:/u01/app/oracle/diag/rdbms/orcl/orcl/trace]$ tail -f alert_orcl.log
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_6289.trc:
ORA-16038: log 2 sequence# 12 cannot be archived
ORA-19502: write error on file "", block number (block size=)
ORA-00312: online log 2 thread 1: '/oradata/orcl/redo02.log'
ORA-00312: online log 2 thread 1: '/oradata/orcl/redo05.log'
USER (ospid: 6289): terminating the instance due to error 16038
System state dump requested by (instance=1, osid=6289), summary=[abnormal instance termination].
System State dumped to trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_diag_6259_20240722102731.trc
Dumping diagnostic data in directory=[cdmp_20240722102731], requested by (instance=1, osid=6289), summary=[abnormal instance termination].
Instance terminated by USER, pid = 6289
找到原因,告警日志显示, 日志文件无法归档并且写入文件时发生错误,给出了 在线重做日志文件的路径。
2、排查错误
我首先检查了一下系统空间,根目录下的空间满了,可能是因为这个问题导致日志无法归档
[oracle@orcl:/u01/app/oracle/diag/rdbms/orcl/orcl/trace]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/ol-root 10G 10G 24M 100% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 2.0G 9.0M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 1014M 135M 880M 14% /boot
/dev/mapper/ol-u01 75G 9.4G 66G 13% /u01
/dev/mapper/ol-tmp 10G 33M 10G 1% /tmp
tmpfs 396M 0 396M 0% /run/user/54321
3、解决方法
清除根目录下的没用文件,这里使用的是LVM,可以选择在线扩容。
这个环境的是自己电脑的虚拟机环境,我就把归档的日志都删了直接删了,生产可千万别这么干,生产硬盘应该也不会不足,哈哈
-- 查看参数文件归档路径
[oracle@orcl:/u01/app/oracle/product/11.2.0/db/dbs]$ cat spfileorcl.ora
*.log_archive_dest_1='location=/archivelog'
[oracle@orcl:/archivelog]$ rm *
[oracle@orcl:/archivelog]$ ll
总用量 0
[oracle@orcl:/archivelog]$
[oracle@orcl:/archivelog]$
[oracle@orcl:/archivelog]$
[oracle@orcl:/archivelog]$
[oracle@orcl:/archivelog]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/ol-root 10G 9.6G 461M 96% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 2.0G 9.0M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 1014M 135M 880M 14% /boot
/dev/mapper/ol-u01 75G 9.4G 66G 13% /u01
/dev/mapper/ol-tmp 10G 33M 10G 1% /tmp
tmpfs 396M 0 396M 0% /run/user/54321
成功启动数据库
SYS@orcl> startup;
ORACLE instance started.
Total System Global Area 1653518336 bytes
Fixed Size 2253784 bytes
Variable Size 469765160 bytes
Database Buffers 1174405120 bytes
Redo Buffers 7094272 bytes
Database mounted.
Database opened.