必须先停止所有oracle服务再卸载,否则易失败;用deinstall.bat比universal installer更彻底;注册表需清理三处关键路径;环境变量和残留目录须逐项清除。

停用所有Oracle服务再动手
不先停服务就删注册表或文件,大概率会失败或删不干净。Windows服务管理器里搜 Oracle,把所有状态为“正在运行”的都右键停止——尤其是 OracleServiceORCL、OracleOraDb11g_home1TNSListener、OracleDBConsoleorcl 这类名字。别漏掉 OracleJobSchedulerORCL 或带 ASM 的服务。如果某个服务显示“拒绝访问”,说明它被其他 Oracle 进程占用,先查任务管理器结束 oracle.exe、tnslsnr.exe、emagent.exe 等进程。
用deinstall.bat比Universal Installer更可靠
直接点开始菜单里的 Universal Installer → 卸载产品,容易漏掉监听器和数据库配置。正确做法是:以管理员身份打开命令行,进入 %ORACLE_HOME%\deinstall\ 目录,运行 deinstall.bat。它会自动识别监听名(如 LISTENER)、数据库名(如 ORCL)、诊断路径等,并提示你确认删除。关键点:是否继续 (y - 是, n - 否)? 一定要输 y 回车;前面所有括号里带默认值的步骤,直接回车就行;遇到卡住超过2分钟,关掉重跑一次即可。这一步能清掉 ORACLE_HOME 下大部分配置文件、监听配置、spfile、密码文件等,比手动删更安全。
注册表清理要覆盖三处关键路径
只删 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 是不够的。必须同步检查并删除以下三处:
-
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下所有以Oracle、Ora、Orcl开头的服务项(注意:CurrentControlSet是活动项,但ControlSet001和ControlSet002也得查,它们可能残留旧配置) -
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application下所有Oracle开头的子键(否则事件查看器里还会刷 Oracle 日志) -
HKEY_CLASSES_ROOT下以Ora、Oracle、Orcl、EnumOra开头的项(这些影响 COM 组件注册,PL/SQL Developer 或 ODBC 连接时可能报错)
删之前建议导出整个 ORACLE 键备份;不要用第三方“一键清理”工具,它们常误删系统级依赖项。
环境变量和残留目录最容易被忽略
PATH 里残留的 %ORACLE_HOME%\bin 路径会导致新装 Oracle 或其他数据库工具调用错 sqlplus.exe;ORACLE_HOME、TNS_ADMIN、CLASSPATH 这几个变量哪怕值为空,也要彻底从系统和用户级环境变量里删掉。验证方法:cmd 里执行 echo %ORACLE_HOME% 应返回空行,sc query OracleServiceORCL 应提示“服务不存在”。最后删目录时注意顺序:app 根目录(如 E:\app\username)→ %ORACLE_HOME%(如 E:\app\username\product\11.2.0\dbhome_1)→ C:\Program Files\Oracle → C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Oracle*。删不掉的文件,重启后再删——很多是被系统进程(如 svchost.exe 加载了 Oracle DLL)锁住了。











