网站首页 > 技术文章 正文
日志是数据库发生故障时,最有效率的定位工具,没有日志给我们输出的错误信息,遇到突发故障对于DBA来说确实一脸懵逼。
这里小编给大家分享数据库关键日志速查、真实踩坑案例、高可用架构排雷技巧,建议收藏转发防丢。
一、故障现场
张工!核心库CPU飙到99%了!王哥!主从延迟突然暴涨到半小时!
内部统计,80%的DBA排查故障时, 在错误日志里大海捞针,被海量监控指标绕晕, 忽略高可用架构的隐藏陷阱。
二、日志破案指南
1、Oracle日志
alert.log:该日志文件包含了数据库的所有警告和错误信息。查看该日志文件可以了解数据库的运行状况和异常情况。
listener.log:该日志文件记录了与Oracle监听器相关的信息,包括监听器启动、连接请求等。查看该日志文件可以了解监听器的运行情况和连接请求信息。
trace文件:Oracle数据库在遇到故障或某些特定操作时会生成trace文件,其中包含了详细的错误堆栈信息。查看trace文件可以帮助定位和解决数据库故障。
如需深入诊断复杂问题,建议结合AWR报告、ASH数据等性能工具进一步分析。
实时跟踪日志更新:
tail -f $ORACLE_BASE/diag/rdbms/<数据库名>/<实例名>/trace/alert_<实例名>.log
过滤关键错误信息:
# 提取所有Oracle错误代码
grep "ORA-" alert_<实例名>.log
# 按错误号筛选
grep "Error 7445" alert_<实例名>.log | more
分页查看历史日志:
# 支持上下翻页和搜索
less alert_<实例名>.log
统计错误频率:
grep "ORA-01555" alert_<实例名>.log | awk '{print $1}' | sort | uniq -c
ADRCI命令行工具:
show alert查看日志,支持按时间范围过滤:
adrci> show alert -p "message_text like '%ORA-00600%'" -term
EMCC搜索:
通过图形界面导航至“日志”选项卡,
可直观查看Alert日志,并支持时间范围筛选和关键字搜索
2、MySQL篇
错误日志:记录MySQL启动、运行、关闭过程中的错误及警告信息
慢查询日志:记录执行时间超过设定阈值(默认10秒)的SQL语句,用于性能优化。
二进制日志:记录所有数据变更操作(增删改),用于数据恢复、主从复制
通用查询日志:记录所有客户端连接和SQL操作(如用户登录、查询语句),适合审计和全链路追踪。
查案口诀就是:紧急情况看error log,性能问题锁slow log,死锁追踪用show engine innodb status
3、PostgreSQL篇
pgBadger:生成HTML报告,统计查询频率、耗时分布等
pg_stat_statements:扩展模块,记录SQL执行统计
pgAdmin:连接数据库后,在左侧导航栏选择服务器 → “日志”选项卡,支持实时查看、筛选时间范围及错误级别
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
# 记录执行超过1秒的慢查询
log_min_duration_statement = 1000
# 记录锁等待超过deadlock_timeout的查询
log_lock_waits = on
查看当前锁状态
# 查看所有锁
SELECT * FROM pg_locks;
# 查看阻塞会话
SELECT * FROM
pg_stat_activity
WHERE wait_event_type = 'Lock';
三、高可用架构日志排查
1、Oracle RAC
私网延迟的排查技巧:oradebug命令
脑裂现场的日志特征:cssd.log关键段落解析
2、MySQL主从
从库SQL线程卡住的3种征兆:Seconds_Behind_Master骗局
大事务引发的GTID黑洞:binlog内容解析
3、PostgreSQL流复制
同步备库假死的识别方法:pg_stat_replication
WAL堆积的雪崩效应:LSN计算速查公式
autovacuum风暴的识别与镇压
四、DBA的生存哲学
真正的高手不是从不宕机,而是能从日志的蛛丝马迹中,比业务方早10分钟发现隐患,在老板发火前给出根因分析,用一份故障报告赢得明年预算。
-- Oracle救命三连
SELECT * FROM v$session_wait
WHERE wait_class != 'Idle';
ALTER SYSTEM DUMP LOGFILE 'xxx';
-- MySQL死锁检测
SHOW ENGINE INNODB STATUS\G
-- PostgreSQL查杀利器
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity WHERE...
五、总结
日志作为数据库系统的“黑匣子”,通过记录运行状态、操作历史及异常事件,为故障排查提供关键线索。
日志通过结构化记录数据库全生命周期事件,使运维人员能够快速定位故障根因、优化性能瓶颈并保障数据安全。
作者丨詹姆斯邦德007
来源丨公众号:IT邦德(ID:jeamesDB)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
猜你喜欢
- 2025-08-01 Linux Systemd入门
- 2025-08-01 使用 Checkmk 监控 Oracle 服务器
- 2025-08-01 China's CETC Kingbase Unveils AI-Powered Database Appliances Amid Rising Demand for Intelligent Data Infrastructure
- 2025-08-01 Docker安装部署Oracle/Sql Server
- 2025-08-01 Oracle数据库安装 | 步骤详细
- 2025-05-09 Linux 安装Oracle11.2.0.4 (静默安装法)
- 2025-05-09 Oracle 10g安装64位图解流程(Oracle 10g安装64位图解流程图怎么画)
- 2025-05-09 Centos7命令行安装Oracle11g(centos7安装oracle11g数据库)
- 2024-07-23 Centos离线静默安装 oracle11g,步骤细验证成功
- 2024-07-23 Oracle与MySql知识汇总(oracle和mysql语句一样吗)
- 08-01Linux Systemd入门
- 08-01使用 Checkmk 监控 Oracle 服务器
- 08-01核心库CPU飙到99%了!我发现很多DBA都不会看日志……
- 08-01China's CETC Kingbase Unveils AI-Powered Database Appliances Amid Rising Demand for Intelligent Data Infrastructure
- 08-01Docker安装部署Oracle/Sql Server
- 08-01Oracle数据库安装 | 步骤详细
- 08-01基于Springboot + vue实现的社团管理系统
- 08-01前端开发如何用Mock.js进行数据接口模拟
- 1520℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 623℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 526℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 491℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 460℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
-
- Linux Systemd入门
- 使用 Checkmk 监控 Oracle 服务器
- 核心库CPU飙到99%了!我发现很多DBA都不会看日志……
- China's CETC Kingbase Unveils AI-Powered Database Appliances Amid Rising Demand for Intelligent Data Infrastructure
- Docker安装部署Oracle/Sql Server
- Oracle数据库安装 | 步骤详细
- 基于Springboot + vue实现的社团管理系统
- 前端开发如何用Mock.js进行数据接口模拟
- 使用vite为vue项目配置@别名
- 基于Springboot + vue3实现的教务管理系统
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- js~~ (67)
- node_modules怎么生成 (87)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)