Oracle 11g服务启动失败的首要原因是注册表中OracleMTSRecoveryService和OracleRemExecService的ImagePath路径错误,常见为残留dbhome_2而实际应为dbhome_1,导致系统找不到可执行文件。

Oracle 11g 安装后服务无法启动,不是配置没改对,而是注册表里服务路径写错了——OracleMTSRecoveryService 和 OracleRemExecService 的 ImagePath 值中常残留 dbhome_2,但实际安装路径是 dbhome_1,Windows 启动服务时直接找不到可执行文件,报“服务未响应”或“找不到指定文件”。
检查并修正 OracleMTSRecoveryService 注册表路径
这是最常见、最隐蔽的启动失败原因。Oracle 安装程序在多版本共存或卸载不彻底时,会把旧路径硬写进注册表,新服务根本启不动。
- 按
Win + R输入regedit打开注册表编辑器 - 导航到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services - 依次展开并找到
OracleMTSRecoveryService和OracleRemExecService - 双击右侧的
ImagePath,确认值是否包含类似dbhome_2的路径片段(例如"C:\app\Administrator\product\11.2.0\dbhome_2\BIN\oracleMTSRecoveryService.exe") - 若存在
dbhome_2,改为当前真实安装目录下的dbhome_1(如dbhome_1),保存退出
Server 服务未启用导致“无法访问临时位置”
Oracle 安装程序和部分服务依赖 Windows 的 Server 服务来访问共享临时路径(如 C$)。该服务默认可能被禁用,表现为安装时报 INS-30131,或安装后服务启动时卡在“正在启动…”。
- 按
Win + R输入services.msc,找到Server服务 - 右键 → 属性 → 启动类型设为
自动→ 点击启动 - 再打开
compmgmt.msc→ 共享文件夹 → 共享 → 确认存在C$共享;若无,手动新建,路径选C:,共享名必须填C$ - 必要时以管理员身份运行命令:
net share C$=C:\ /grant:everyone,full
监听器启动失败常因主机名不一致
服务能启动,但 lsnrctl start 报错或监听器状态显示 UNKNOWN,大概率是主机名改过但配置没同步。Oracle 11g 对 HOST 值极其敏感,哪怕只差一个字母或大小写,都会拒绝注册。
- 检查
$ORACLE_HOME\network\admin\listener.ora中HOST是否等于hostname命令输出(注意:不是localhost,也不是 IP) - 检查系统环境变量
ORACLE_HOSTNAME是否显式设置了错误值;如有,删掉它 - 在命令行执行
ping $(hostname),确认能解析且返回的是本机真实 IP;若失败,需修 hosts 文件或 DNS 设置 - 修改后务必先停监听:
lsnrctl stop,再删日志:del %ORACLE_HOME%\network\log\listener.log,最后重起
Java 路径含中文或空格引发静默崩溃
服务看似启动成功,但几秒后自动停止,事件查看器里只有 Application Error,模块名是 java.exe 或 jvm.dll——这通常是 JAVA_HOME 指向了含中文、空格或括号的路径(如 C:\Program Files (x86)\Java\...)。
- 确认
JAVA_HOME是纯英文路径,不含空格/中文/括号,推荐类似C:\Java\jdk1.7.0_80 - 检查
PATH中是否重复追加了%JAVA_HOME%\bin,导致多个 JDK 冲突 - 不要依赖 Oracle 自带 JRE;必须用外置
JDK 7u80或JDK 8u192(仅限 64 位),并确保java -version输出与预期一致 - 启动服务前,在 CMD 中先执行:
set JAVA_HOME=C:\Java\jdk1.7.0_80,再运行net start OracleServiceORCL测试
真正麻烦的不是某一项配置错,而是这几处问题常同时存在:注册表路径错、Server 服务关着、主机名没对齐、JDK 路径又带中文。挨个排查时,最容易忽略的是 Server 服务的状态——它不报错,但会让所有基于共享临时目录的操作无声失败。


















