跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

如何管理RAC数据库实例_srvctl start/stop database集群控制

srvctl start database 启动失败本质是实例未真正启动,因srvctl仅执行startup不校验状态;常见原因有SPFILE路径错误、ASM磁盘组未挂载、监听未启致归档失败。 srvctl start database 启动失败,报
CRS-2674
ORA-01078
本质是数据库实例没起来,但
srvctl
以为该起的都起了——它只管调用
sqlplus / as sysdba
执行
startup
,不校验实际状态。常见原因是:spfile 路径不对、asm 磁盘组没挂载、监听没启导致归档失败。
srvctl status database -d
先看整体状态,再用
srvctl status instance -d -i
定位具体哪个实例卡住 进对应节点,手动跑:
sqlplus / as sysdba
startup nomount
,观察真实报错;
show parameter spfile
确认 SPFILE 是否指向 ASM(如
+DATA//spfile.ora
) 如果 SPFILE 在 ASM,确保该磁盘组已在线:
crsctl stat res -t | grep -i asm
,再查
asmcmd lsdg
srvctl stop database 不杀进程,实例还在 running
srvctl stop database
默认走的是
shutdown immediate
,但如果某个会话正执行长事务或被锁住,Oracle 就会 hang 住,
srvctl
超时后返回成功,其实实例还活着。 加
-o abort
强制终止:
srvctl stop database -d -o abort
,等价于
shutdown abort
,但注意这会导致下次启动需要实例恢复 更稳妥的做法是先查阻塞:
ps -ef | grep pmon | grep
看进程是否存在,再结合
crsctl stat res -w "TYPE = ora.database.type"
确认 CRS 认为的状态是否同步 别依赖
ps
结果判断“已停”——CRS 可能已标记资源 offline,但 PMON 进程残留,需手动
kill -9
并清理
/proc//fd/
下的 ASM 文件句柄(极少数情况) srvctl add database 时指定的
-r
-s
参数影响实例启动顺序和角色
-r
(role)决定数据库在 Data Guard 中的角色(
PRIMARY
PHYSICAL_STANDBY
),
-s
(start option)控制启动时是否自动 open(
open
)还是只到 mount(
mount
)。这两个参数不光影响 DG 切换逻辑,也决定
srvctl start database
的最终行为。 主库必须设
-r PRIMARY -s open
,否则启动后是 mounted 状态,应用连不上 备库若设
-r PHYSICAL_STANDBY -s mount
,启动后自动进入 MOUNT + managed recovery,符合 DG 最佳实践 改错后不能直接
srvctl modify database
更新角色——得先
srvctl remove database
再重新
add
,否则 CRS 注册信息和实际 DB 角色不一致,切主时可能失败 集群内多个数据库共用监听,srvctl start listener 失败但数据库能连 这是因为
srvctl start listener
启的是 CRS 管理的监听资源(比如
ora..LISTENER.lsnr
),而 Oracle 数据库可能用的是本地
tnsnames.ora
指向非 CRS 管理的监听(如手工启的
lsnrctl start
)。两者监听名、端口、协议可能重叠但互不感知。 查监听资源名:
srvctl config listener
,确认是否启用了
-l
指定的监听名;默认是
LISTENER
,但 RAC 中常配成
LISTENER_SCAN
或自定义名 检查监听配置文件:
$ORACLE_HOME/network/admin/listener.ora
,重点看
ENDPOINT_LIST
是否包含
IPC
TCPS
地址,CRS 只认它声明的地址 别用
lsnrctl status
判断 CRS 监听状态——它只显示本地监听进程,应改用
crsctl stat res -t | grep listener
RAC 实例管理里最易被忽略的不是命令怎么敲,而是 CRS 资源状态、数据库实际状态、ASM 磁盘组状态三者之间存在延迟和不一致。一次看似成功的
srvctl start
后,务必交叉验证三处输出。

相关文章