如何通过oradim命令在Windows系统上设置Oracle 19c数据库服务为自启动?
- 内容介绍
- 文章标签
- 相关推荐
本文共计883个文字,预计阅读时间需要4分钟。
相关专题
windows 上 oracle 19c 默认已注册为 windows 服务,无需手动用 oradim 配置自启动 —— 但必须确认服务启动类型是否设为“自动”,否则重启后数据库不会起来。
Oracle 19c 安装后自动生成哪些关键服务
安装完成时,Oracle 安装程序会自动调用 oradim 创建以下两个核心服务(名称取决于你设置的 ORACLE_SID,默认是 ORCL):
-
OracleServiceORCL:数据库实例服务,必须存在且设为“自动” -
OracleOraDB19Home1TNSListener:监听器服务,也需设为“自动”
其他如 OracleRemExecServiceV2、OracleVssWriterORCL 等非核心服务,不影响数据库自启,可保持“手动”或“禁用”。
检查并修改服务启动类型(GUI + 命令行双方式)
直接打开 services.msc 是最直观的方式,但容易漏看服务名细节;命令行更可靠,尤其批量管理时:
- 以管理员身份运行
cmd或powershell - 执行:
sc qc OracleServiceORCL查看当前配置,重点确认START_TYPE是否为DEMAND_START(手动)还是AUTO_START(自动) - 若不是自动,执行:
sc config OracleServiceORCL start= auto(注意start=后有空格) - 同样处理监听器:
sc config OracleOraDB19Home1TNSListener start= auto - 最后启动服务:
net start OracleServiceORCL和net start OracleOraDB19Home1TNSListener
为什么不用 oradim -new 重新创建服务
安装后已有服务,再用 oradim -new -sid ORCL -startmode auto 会报错 ORA-01031: insufficient privileges 或覆盖原有服务配置,导致:
- 数据库参数文件(
spfile)路径丢失或指向错误 - 密码文件(
orapwORCL)未被识别,/ as sysdba登录失败 - 监听器配置(
listener.ora)与新服务不匹配,远程连接中断
除非你明确删除了原服务(比如误执行 oradim -delete -sid ORCL),否则不要重建 —— 直接改启动类型更安全。
验证自启动是否生效的实操步骤
改完启动类型后,别急着重启机器,先模拟一次冷启动流程:
- 执行:
net stop OracleServiceORCL(先停库) - 再执行:
net stop OracleOraDB19Home1TNSListener(再停监听) - 然后:
net start OracleOraDB19Home1TNSListener(先启监听) - 最后:
net start OracleServiceORCL(再启库) - 连上验证:
sqlplus /nolog→conn / as sysdba→select status from v$instance;应返回OPEN
这个顺序不能反:监听器必须先于数据库启动,否则数据库启动时会报 ORA-12547: TNS:lost contact。
真正容易被忽略的是监听器和数据库服务的依赖关系 —— Windows 服务管理器里看不到它们的启动顺序依赖,全靠人工保证先后。一旦监听器没起来,数据库即使设了“自动”,也会因超时失败而停留在“启动中”状态,日志里却只写一句 TNS-12560,查起来费时间。
本文共计883个文字,预计阅读时间需要4分钟。
相关专题
windows 上 oracle 19c 默认已注册为 windows 服务,无需手动用 oradim 配置自启动 —— 但必须确认服务启动类型是否设为“自动”,否则重启后数据库不会起来。
Oracle 19c 安装后自动生成哪些关键服务
安装完成时,Oracle 安装程序会自动调用 oradim 创建以下两个核心服务(名称取决于你设置的 ORACLE_SID,默认是 ORCL):
-
OracleServiceORCL:数据库实例服务,必须存在且设为“自动” -
OracleOraDB19Home1TNSListener:监听器服务,也需设为“自动”
其他如 OracleRemExecServiceV2、OracleVssWriterORCL 等非核心服务,不影响数据库自启,可保持“手动”或“禁用”。
检查并修改服务启动类型(GUI + 命令行双方式)
直接打开 services.msc 是最直观的方式,但容易漏看服务名细节;命令行更可靠,尤其批量管理时:
- 以管理员身份运行
cmd或powershell - 执行:
sc qc OracleServiceORCL查看当前配置,重点确认START_TYPE是否为DEMAND_START(手动)还是AUTO_START(自动) - 若不是自动,执行:
sc config OracleServiceORCL start= auto(注意start=后有空格) - 同样处理监听器:
sc config OracleOraDB19Home1TNSListener start= auto - 最后启动服务:
net start OracleServiceORCL和net start OracleOraDB19Home1TNSListener
为什么不用 oradim -new 重新创建服务
安装后已有服务,再用 oradim -new -sid ORCL -startmode auto 会报错 ORA-01031: insufficient privileges 或覆盖原有服务配置,导致:
- 数据库参数文件(
spfile)路径丢失或指向错误 - 密码文件(
orapwORCL)未被识别,/ as sysdba登录失败 - 监听器配置(
listener.ora)与新服务不匹配,远程连接中断
除非你明确删除了原服务(比如误执行 oradim -delete -sid ORCL),否则不要重建 —— 直接改启动类型更安全。
验证自启动是否生效的实操步骤
改完启动类型后,别急着重启机器,先模拟一次冷启动流程:
- 执行:
net stop OracleServiceORCL(先停库) - 再执行:
net stop OracleOraDB19Home1TNSListener(再停监听) - 然后:
net start OracleOraDB19Home1TNSListener(先启监听) - 最后:
net start OracleServiceORCL(再启库) - 连上验证:
sqlplus /nolog→conn / as sysdba→select status from v$instance;应返回OPEN
这个顺序不能反:监听器必须先于数据库启动,否则数据库启动时会报 ORA-12547: TNS:lost contact。
真正容易被忽略的是监听器和数据库服务的依赖关系 —— Windows 服务管理器里看不到它们的启动顺序依赖,全靠人工保证先后。一旦监听器没起来,数据库即使设了“自动”,也会因超时失败而停留在“启动中”状态,日志里却只写一句 TNS-12560,查起来费时间。

