Debian 上 Oracle 监控与维护实用手册
一 监控总览与告警阈值
- 系统层:持续观察 CPU、内存、磁盘 I/O、网络 等基础指标,建议设置通用阈值:CPU 持续高于 80%、可用内存低于 10%、磁盘使用率高于 80%、I/O 等待显著升高时触发告警。结合 Prometheus + Grafana 搭建可视化与阈值告警,配合 Node Exporter 采集主机指标,Oracle 侧使用 Oracle Exporter 暴露数据库指标,统一在 Grafana 展示与报警。对于关键业务,建议同时保留 Nagios/Zabbix 做可用性拨测与事件收敛。
- 数据库层:关注 会话数、活跃会话、长事务、锁等待、SQL 执行时间、表空间使用率 等关键指标;建议设置 表空间使用率 ≥ 80% 预警,及时扩容或清理;对 慢 SQL 建立常态化识别与优化机制(TOP SQL、执行计划、绑定变量等)。
二 日常巡检与即时诊断 SQL
SELECT a.tablespace_name,
ROUND(a.bytes/1024/1024,2) "总大小(MB)",
ROUND((a.bytes-b.bytes)/1024/1024,2) "已用(MB)",
ROUND((a.bytes-b.bytes)/a.bytes*100,2) "使用率%"
FROM (SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name;
SELECT s.sid, s.username, s.status, s.machine, sq.sql_text
FROM v$session s
JOIN v$sql sq ON s.sql_id = sq.sql_id
WHERE s.status = 'ACTIVE' AND s.username IS NOT NULL;
SELECT sql_id, sql_text,
elapsed_time/1000000 "耗时(秒)",
executions "执行次数"
FROM v$sql
ORDER BY elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;
- 监听状态与日志
- 检查监听:执行 lsnrctl status;动态生效配置:lsnrctl reload;实时查看日志:tail -f $ORACLE_HOME/network/log/listener.log。必要时启用跟踪定位复杂问题:lsnrctl trace start/stop。
三 日志与审计
- 日志位置与实时查看
- 数据库告警日志:$ORACLE_BASE/diag/rdbms///trace/alert_.log
- 监听日志:$ORACLE_HOME/network/log/listener.log
- 系统安全与系统事件:/var/log/auth.log、/var/log/syslog
- 建议对告警与监听日志使用 tail -f 实时跟踪,异常时联动告警。
- 日志轮转与集中化
- 使用 logrotate 控制 Oracle 及监听日志大小与保留份数,避免磁盘被撑满。
- 采用 ELK Stack(Elasticsearch、Logstash、Kibana) 或 Graylog 做集中采集、解析与可视化,结合 Logwatch/Fail2ban 做安全事件摘要与暴力登录拦截。
四 备份恢复与安全加固
- RMAN 备份策略与演练
- 制定周期性策略:建议 每周全量 + 每日增量;备份文件存放于 异地/安全位置;定期执行 恢复演练 验证可用性与完整性。
- 系统与数据库安全
- 资源与权限:为 oracle 用户配置 /etc/security/limits.conf 或 /etc/security/limits.d/30-oracle.conf(如 nofile 65536、nproc 16384),遵循最小权限原则分配数据库权限。
- 防火墙与端口:仅开放必要端口(如 1521/TCP),使用 ufw/iptables 实施白名单。
- 系统与软件更新:定期执行 apt update && apt upgrade;Oracle 补丁通过官方渠道及时更新。
- 认证与访问控制:启用 SSH 密钥登录、禁用 root 远程登录,对关键账户实施强口令与定期轮换。
五 性能优化与维护清单
- 操作系统与内核
- 调整 /etc/sysctl.conf 或 /etc/sysctl.d/98-oracle.conf:如 kernel.shmmax、kernel.shmall、fs.file-max、net.ipv4.ip_local_port_range;在 /etc/security/limits.conf 设置 oracle 用户资源上限;必要时优化文件系统挂载选项与异步 I/O。
- 数据库内存与 SQL
- 合理设置 SGA/PGA,在合适场景启用 自动内存管理(MEMORY_TARGET);对 TOP SQL 使用执行计划分析与索引优化,避免 **SELECT ***,使用 绑定变量 减少硬解析;对大表采用 分区 与必要的 并行度 提升吞吐。
- 例行维护
- 定期生成 AWR/ADDM 报告识别瓶颈;对 高碎片索引 执行重建或重组;持续监控 表空间 与 归档空间,提前扩容;结合 Prometheus/Grafana 建立容量与性能趋势面板,设置阈值告警。