数据库无法打开 / 无法访问
症状
无法连接到服务,出现 'connection refused',实例无法启动,listener 无响应。
1. 问题出在哪里:网络、服务还是实例
服务器是否可达(ping/ssh)?数据库进程/服务是否在运行(ps/systemctl/services.msc)?端口是否在监听(ss -ltnp / telnet host port)?这样可将问题定位到某一层:网络 / 服务 / 数据库实例。
2. 检查服务和 listener
若数据库进程未启动,尝试启动它;若已启动但连接失败,检查 listener/端口和认证层。
Oracle
-- OS: lsnrctl status (listener)
-- SQL*Plus: STARTUP; (if the instance is down)
SELECT status FROM v$instance;PostgreSQL
-- OS: systemctl status postgresql ; pg_isready -h host
-- Logs: the last lines tell why it did not startMySQL
-- OS: systemctl status mysqld ; mysqladmin pingSQL Server
-- Services / SQL Server Configuration Manager; SQL Server Error LogRedis
redis-cli ping # expect PONG3. 阅读日志——答案就在那里
若数据库无法打开,原因会写在日志中:alert log(Oracle)、postgresql.log / 启动日志、mysqld error log、SQL Server ERRORLOG、redis log。磁盘已满、文件损坏、权限、端口冲突、文件缺失——都会在这里体现。
4. 处理常见原因:磁盘、权限、端口、损坏
磁盘是否 100% 已满(最常见的原因)?数据目录权限是否被破坏?端口是否被其他进程占用?是否需要恢复(崩溃之后)?控制文件/redo log 是否损坏?根据日志中的信息逐一排查。
5. 恢复并保留事件记录
崩溃恢复通常会自动完成;请耐心等待。若存在损坏,从备份/PITR 恢复(参见“数据损坏”应急手册)。事后撰写根本原因分析(RCA):发生了什么、为什么发生、如何防止再次发生。