linux7 启动has服务报错:CRS-4124: Oracle High Availability Services startup failed

文章讲述了Linux服务器上ASM服务在重启后未自动启动的问题,原因是依赖的init.d与systemd不同。提供了解决方案包括手动执行命令、修改ohasd启动文件和启用ohas.service使其开机自启动。

 (1)情况说明

        linux7 单机asm 11gR2, 服务器重启之后,发现asm服务没有自动启动

        手动start has 也报错了,靠贝了真是

[root@oomcserver ~]# crsctl start has
CRS-4124: Oracle High Availability Services startup failed.
CRS-4000: Command Start failed, or completed with errors. 

 (2)查看日志

        

        查看grid启动的日志,进入grid用户,查看文件

        $ORACLE_HOME/log/主机名/alert主机名.log

        因为启动依赖的是init.d,而redhat 7及以上版本默认为systemd,两者的差异较大。导致redhat 7及以上版本启动crs的ohasd服务时会卡住一段时间且最后无法启动成功

(3)解决方法(3选1即可)

        1.打补丁

        别想了,我自己的电脑搭建的环境,也没买oracle服务,没有补丁,得了吧

        2.手动执行命令

        手动的方法:在执行crsctl start has后马上再新开一个终端执行

/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1

        但这种方法只是临时的,重启后集群服务还是无法自动起来。

        永久的解决方法:

vi /etc/init.d/ohasd

       修改这个启动文件命令, 在文件中找到如这部分,在里面添加红字部分:

  if [ -r $AUTOSTARTFILE ]
  then
    case `$CAT $AUTOSTARTFILE` in
      enable*)
        $LOGERR "Oracle HA daemon is enabled for autostart." 
        /bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1 &
        my_crsctl start has -nowait
        sleep 600
        ps -ef | grep dd| grep hasd|awk '{print $2}'|xargs kill -9

        ;;
      disable*)
        $LOGERR "Oracle HA daemon is disabled for autostart." 
        ;;
      *)
        $LOGERR "Oracle HA daemon is disabled by damaged install."
        $LOGERR "Unexpected settings found in $AUTOSTARTFILE."
        ;;
    esac
 

        3.ohas服务 enable

        之前我们自己配置的ohas.service服务(这里有2个ohas的服务,ohasd不是我们自己写的哦),这个服务也是启动ohasd的,把他设置成开机自启动就行

systemctl enable ohas.service

        这个文件在安装grid报错[client(5376)]CRS-2101:The OLR was formatted using version 3.时候配置的,当时没有配置自启动服务,所以再次启动就出现Oracle High Availability Services startup failed. 

        reboot重启,发现asm的服务都启动了,ok

你执行的命令: ```bash $GRID_HOME start crs ``` 出现了如下错误信息: ``` CRS-4640: Oracle High Availability Services is already active CRS-4000: Command Start failed, or completed with errors. ``` --- ### ✅ 错误解释: - **`CRS-4640: Oracle High Availability Services is already active`** 表示 Oracle 高可用服务HAS)已经处于运行状态,不需要再次启动- **`CRS-4000: Command Start failed, or completed with errors.`** 这是一个通用错误,表示命令执行失败或无法完成。在这里,它是因为 CRS 已经在运行,所以 `start crs` 命令被拒绝。 --- ### 🛠️ 正确操作方式 你应该先检查 CRS 的当前状态,而不是直接尝试启动它。 #### 1. 检查 CRS 状态(使用 root 用户) ```bash $GRID_HOME/bin/crsctl check crs ``` 该命令会输出类似: ``` CRS-4638: Oracle High Availability Services is online (running) CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online ``` 这说明 CRS 正在运行。 #### 2. 查看整个集群状态(OCR + 资源) ```bash $GRID_HOME/bin/crsctl stat res -t ``` 这个命令会显示所有集群资源的状态,比如数据库、监听器、VIP 等是否在线。 #### 3. 如果你确实需要重启 CRS(例如维护后),应该使用: ```bash # 停止 CRS(在每个节点上以 root 执行) $GRID_HOME/bin/crsctl stop crs # 再启动(通常自动启动,也可手动) $GRID_HOME/bin/crsctl start crs ``` > ⚠️ 注意:`crsctl start crs` 是底层命令,通常只在 HAS 被完全停止时才需要使用。如果 HAS 已激活,再执行 `start crs` 会报错--- ### 🔍 为什么 `$GRID_HOME start crs` 报错? 你写的是: ```bash $GRID_HOME start crs ``` 但这 **不是正确的语法**! 正确的方式是: ```bash $GRID_HOME/bin/crsctl start crs ``` 你漏掉了 `/bin/crsctl`,导致系统尝试把 `$GRID_HOME` 目录当作一个可执行程序来运行,这本身就会出错(除非你设置了别名或函数)。 > ❌ `$GRID_HOME start crs` → Shell 会尝试运行一个名为 `/u01/app/19.0.0/grid`(假设值)的命令,显然这不是可执行文件。 > > ✅ 正确路径是:`$GRID_HOME/bin/crsctl start crs` --- ### ✅ 正确流程总结: ```bash # 1. 检查 CRS 是否已运行 $GRID_HOME/bin/crsctl check crs # 2. 查看资源状态 $GRID_HOME/bin/crsctl stat res -t # 3. 只有当 CRS 停止时才启动 $GRID_HOME/bin/crsctl start crs ``` --- ### 💡 补充说明: - `crsctl start crs` 是在 **root 权限下**使用的命令,用于启动本地节点的 Oracle High Availability Services- 在集群环境中,建议使用 `crsctl` 统一管理。 - 如果你是想启动整个集群,应确保所有节点都正常启动 CRS---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值