必须先彻底停止并禁用所有Oracle服务,否则残留锁文件将导致清理失败、重装报INS-35955或监听器启动失败;需通过services.msc逐个停止OracleService等服务并设启动类型为手动或禁用,同步清理ControlSet001/002下重复项、注册表Services及EventLog中Oracle相关键、ODBC驱动、环境变量及临时目录。

停掉所有Oracle服务再动手
直接删文件或注册表前,必须确保所有Oracle服务已完全停止并禁用,否则残留锁文件会导致后续清理失败,重装时大概率报 INS-35955 或监听器启动失败。
打开 services.msc,找到以下命名规律的服务并逐个右键「停止」,再把「启动类型」改为「手动」或「禁用」:
-
OracleService(如OracleServiceORCL) -
OracleOraDB19Home1TNSListener(版本和Home名会变,认准OracleOraDB开头) -
OracleJobScheduler、OracleMTSRecoveryService
注意:ControlSet001 和 ControlSet002 下也可能存在重复服务项,需一并检查。
删注册表里硬编码的Oracle服务项
Windows服务一旦注册,即使卸载程序跑完,其注册表入口仍留在 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices 里。不手动清,新装同名服务会拒绝注册,报错 ORA-00600 或静默失败。
用 regedit 进入该路径,删除所有以下子项(仅删键名,不删整个 Services):
- 以
Oracle、Ora、Orcl开头的项(如OracleServiceORCL、OraDB19Home1TNSListener) -
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventLogApplication下所有Oracle开头的日志源(否则事件查看器持续报旧库错误) -
HKEY_CLASSES_ROOT下搜Ora、Oracle、EnumOra,删对应CLSID键(Java 应用连库时报ClassNotFoundException常因这个)
别漏掉ODBC驱动和环境变量残留
这两处不报错,但会让新装的 sqlplus、PL/SQL Developer 加载错版 oci.dll,出现 ORA-12154 或连接超时。
检查并清理:
-
HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INI:只保留Microsoft ODBC for Oracle,删掉所有其他含Oracle的驱动节(如Oracle in OraDB19Home1) - 系统环境变量
PATH和CLASSPATH:删掉所有含ORACLE_HOME、ojdbc、sqlplus的路径 -
C:ProgramDataOracle和C:Users\AppDataLocalTemp下残留的 Oracle 目录(尤其deinstall日志和临时解压包)
deinstall.bat 要带 -checkonly 先探路
官方 deinstall.bat 不是“一键卸载”,它只清理当前 ORACLE_HOME 下的实例和服务配置,且对路径极其敏感——进错目录就识别不出数据库。
执行前务必:
- 用管理员权限打开命令提示符
-
cd到真实安装路径下的deinstall目录(如C:pporacleproduct9.0.0dbhome_1deinstall) - 先运行
deinstall.bat -checkonly,确认输出中能识别出你的SID(如ORCL)和监听器名(如LISTENER) - 看到 “All checks passed” 再执行正式卸载,避免误删或跳过关键项
真正麻烦的从来不是删得多,而是删得不全——比如漏掉一个 ControlSet002Services 下的监听器项,或者 ODBCINST.INI 里多留一个驱动节,下次安装时问题就会以完全不同的错误形式冒出来,排查成本远高于一次性清干净。











