startup 出现的监听错误或者未初始化服务句柄,ORA-24324: 未初始化服务句柄,ORA-01041: 内部错误, hostdef 扩展名不存在

本文介绍了一种解决Oracle数据库启动失败的方法,通过重新连接并使用正确的命令启动数据库,避免了修改配置文件等复杂操作。

解决方法就是  重新quit  然后conn   重新登录sys,然后用startup  正常启动数据库。。

 

 

 


  Microsoft Windows [版本 5.2.3790]
  (C) 版权所有  1985-2003 Microsoft Corp.
  D:/Documents and  Settings/Administrator>SQLPLUS /nolog
  SQL*Plus: Release  10.2.0.1.0 - Production on 星期四 9月 24 11:59:43 2009
  Copyright (c) 1982, 2005, Oracle.  All rights reserved.
  SQL> conn sys/***@orcl as  sysdba

  已连接。

  SQL> shutdown normal

  数据库已经关闭。

  已经卸载数据库。

  ORACLE 例程已经关闭。

  SQL> startup mount

  ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

  SQL> startup mount

  ORA-24324: 未初始化服务句柄

  ORA-01041: 内部错误, hostdef 扩展名不存在

  SQL>

  ////这里一定要再连接一次,否则无法启动数据库!!!!!网上说什么更改监听文件或者sqlnet文件都是无济于事的!!!

  SQL> conn sys/fh123@orcl as sysdba

  已连接到空闲例程。

  SQL> startup

  ORACLE 例程已经启动。

你遇到的错误信息: ``` ORA-24324: service handle not initialized ORA-24323: value not allowed ORA-01089: immediate shutdown in progress - no operations are permitted ``` 表示你正在尝试执行 `SHUTDOWN IMMEDIATE`,但数据库已经处于**关闭过程中**(shutdown in progress),或者你的会话没有正确连接到数据库实例。 --- ### ✅ 错误原因分析 1. **ORA-01089: immediate shutdown in progress** 这是核心错误数据库**已经在关闭过程中**。Oracle 允许在关闭过程中再次执行 `SHUTDOWN` 命令或任何其他操作。 2. **ORA-24324 / ORA-24323** 这两个错误通常是由于客户端尝试使用一个已经失效或正确初始化服务上下文(service handle)进行通信。这通常是因为: - 实例已经开始关闭,后台进程正在终止。 - 客户端连接被中断或失效。 --- ### ✅ 正确处理方式 #### 情况 1:你刚刚执行了 `SHUTDOWN IMMEDIATE`,又运行了一次 ✅ **这是正常现象**。`SHUTDOWN IMMEDIATE` 是一个异步命令,一旦发出,数据库开始关闭进程。如果你快速按回车再次执行,就会看到这个错误。 👉 **解决方案**:无需操作,等待数据库完全关闭即可。 ```sql SQL> shutdown immediate; -- 等待,直到提示 Database closed. Database dismounted. ORACLE instance shut down. -- 要重复执行 ``` #### 情况 2:数据库卡住,无法关闭 有时 `SHUTDOWN IMMEDIATE` 执行后长时间无响应,可能因为: - 某些会话长时间断开。 - 存在长事务结束。 ##### 解决方案:强制关闭(最后手段) ```sql SQL> shutdown abort; ``` > ⚠️ 注意:`SHUTDOWN ABORT` 类似于断电,会做检查点或写数据文件,下次启动时需要实例恢复(Instance Recovery),但它是安全的(只要 redo log 完好)。 然后重新启动数据库以完成清理: ```sql SQL> startup; ``` --- ### ✅ 推荐的标准关闭流程 ```sql -- 1. 连接到数据库作为 DBA SQL> connect / as sysdba -- 2. 正常关闭 SQL> shutdown immediate; -- 3. 启动(如果需要) SQL> startup; ``` --- ### ✅ 如何确认数据库是否正在关闭? 你可以通过查看后台进程或告警日志来判断: ```bash # 查看 Oracle 进程是否存在 ps -ef | grep pmon ps -ef | grep smon ``` 如果没有 `pmon` 进程,说明实例已关闭。 或者查看告警日志(alert log): ```bash cd $ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace/ tail -f alert_$ORACLE_SID.log ``` 你会看到类似: ``` Shutting down instance (immediate) ... Instance terminated. ``` --- ### ✅ 总结 | 错误 | 含义 | 应对措施 | |------|------|----------| | ORA-01089 | 关闭中,禁止操作 | 等待或使用 `SHUTDOWN ABORT` 强制中断 | | ORA-24324/24323 | 服务句柄无效 | 通常是关闭过程中的副作用,无需处理 | ---
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值