应将OracleServiceORCL和OracleOraDb11g_home1TNSListener启动类型设为“手动”,以节省内存并加快系统启动;二者必须成对启停,顺序错误易导致连接异常或服务卡住。
OracleServiceORCL 和 OracleOraDb11g_home1TNSListener 这两个服务默认常被设为“自动”,但多数开发或测试场景下不需要开机自启——既占内存(默认吃掉约40%物理内存),又拖慢系统启动。直接在服务管理器里改成“手动”是最简单有效的方案。
怎么在 services.msc 里改启动类型
按 win + r,输入 services.msc 回车,定位到服务列表。用键盘按 o 可快速跳转到以 o 开头的服务。
重点找这两个:
-
OracleService<SID>(如OracleServiceORCL)——数据库实例本身 -
OracleOraDb<version>_home<n>TNSListener(如OracleOraDb11g_home1TNSListener)——监听器,没它远程连不上
右键 → 属性 → “启动类型”下拉选“手动” → 点“应用”。不用重启,改完立即生效。
其他服务如 OracleDBConsoleorcl、OracleJobSchedulerORCL 等非核心项,可一并设为“禁用”,它们对本地连接和基本 SQL 操作完全无影响。
为什么不能只改一个服务
只开 OracleServiceORCL 而不启动监听器,sqlplus /@orcl 或 JDBC 连接会直接报 ORA-12154: TNS:could not resolve the connect identifier specified;反过来,只开监听器没实例,连上也立刻断开,报 ORA-12514: TNS:listener does not currently know of service requested in connect descriptor。
所以手动启停必须成对操作:
- 启动顺序:
net start OracleOraDb11g_home1TNSListener→net start OracleServiceORCL - 停止顺序:
net stop OracleServiceORCL→net stop OracleOraDb11g_home1TNSListener
顺序反了容易卡住,尤其是停止时——实例还在跑,监听器先停,客户端连接可能 hang 住几秒。
批处理文件写法与编码坑
新建 startOracle.bat,内容必须是:
Windows 命令行编码与兼容规范。涵盖 GBK/UTF-8 编码、PowerShell/pwsh 互操作、Python/Node.js、Git 配置及代码生成规则。适用于 Windows 10/11 + MSYS2/Git Bash 环境下的所有命令行操作。
net start OracleServiceORCL net start OracleOraDb11g_home1TNSListener
注意:
- 文件保存为 ANSI 编码(不是 UTF-8),否则
net start读到中文或特殊字符会失败 - 服务名大小写不敏感,但空格、下划线、数字位置必须和
services.msc里显示的一致 - 加
@echo off和pause方便调试,但生产环境建议去掉pause,避免交互阻塞 - 如果用了非默认 Oracle Home(比如装了多个版本),
OracleOraDb11g_home1中的home1得换成实际值,比如home2
改完还是自动启动?检查注册表是否被绕过
极少数情况:你在 services.msc 里明明设了“手动”,重启后又变回“自动”。这通常是因为有人动过注册表,或者用 oradim 重建过服务但没带 -startmode manual 参数。
查注册表确认:
打开 regedit,导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleServiceORCL,看 Start 的 DWORD 值:
-
2= 自动 -
3= 手动 -
4= 禁用
如果这里仍是 2,而你又确定没在服务管理器里点错,那大概率是脚本或部署工具在后台重置了它——这类问题多见于企业批量镜像部署,得查自动化配置流程。
真正麻烦的是:服务登录账户设成了 LocalSystem,但实例依赖用户级环境变量(比如 ORACLE_HOME)。这时即使启动类型是“手动”,双击启动也会静默失败,日志里只留一行 Windows could not start the OracleServiceORCL service on Local Computer。这种得进服务属性 → “登录”页,换成本地账户并配好变量,不能图省事一直用系统账户硬扛。

















