deinstall.bat 不能一键卸载Oracle,必须先停服务、确认ORACLE_HOME路径并用-checkonly校验;它不清理注册表、环境变量、ODBC及用户配置,这些需手动清除才能避免重装失败。

deinstall.bat 能清掉当前 ORACLE_HOME 下的数据库实例、监听器、服务配置和大部分文件,但它不是“一键卸载”,漏掉前置动作或路径错误,脚本会直接跳过关键项,甚至报错退出。
必须先停服务并确认 ORACLE_HOME 路径
deinstall.bat 只作用于它所在目录所属的 ORACLE_HOME,不会跨目录扫描。如果 cd 进错了路径(比如进了另一个旧版本的 home),它可能检测不到你的 19c 实例,直接说“未发现可卸载组件”。
- 打开
services.msc,手动停止所有以OracleService、OracleOraDB19Home1、TNSListener开头的服务 - 右键每个服务 → “属性” → 启动类型改为「手动」或「禁用」(避免卸载中途被自动拉起)
- 用
echo %ORACLE_HOME%确认环境变量指向正确路径,再cd进入该路径下的deinstall子目录(典型路径:C:\app\oracle\product\19.0.0\dbhome_1\deinstall) - 首次运行务必加
-checkonly参数:deinstall.bat -checkonly,看输出里是否列出你的数据库名(如ORCL)和监听器名(如LISTENER)
执行时别跳过交互确认,尤其注意监听器和数据库实例选项
deinstall.bat 是交互式脚本,每一步都需你输入 y 或回车确认。它默认只清理软件,不删数据文件(oradata)、快速恢复区(fast_recovery_area)和诊断目录(diag)。但如果你选了删除监听器或数据库实例,它会连带删掉对应配置文件(listener.ora、tnsnames.ora、spfile 等)。
- 出现
Do you want to continue (y - yes, n - no)? [n]时,确认无误再输y - 当提示
Remove Oracle Database instance(s),输入y才会真正删掉ORCL实例及其控制文件、数据文件(除非你提前手动挪走了) - 提示
Remove Oracle Listener configuration时,选y才会清空listener.ora和注册的服务项
deinstall.bat 不碰注册表、环境变量和用户目录
脚本跑完后,系统里还留着大量硬依赖项:注册表里的 HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\OraDB19Home1、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleServiceORCL、HKEY_CLASSES_ROOT\OraOLEDB,还有 PATH 里的 Oracle 路径、ORACLE_HOME 和 TNS_ADMIN 环境变量,以及 C:\Users\ 下的客户端配置。
- 注册表必须手动删四类位置:
SOFTWARE\Oracle、SYSTEM\CurrentControlSet\Services(Oracle 开头的服务项)、SYSTEM\CurrentControlSet\Services\EventLog\Application(Oracle 日志源)、CLSID(含 OraOLEDB、OraOLEDB19 的项) - 环境变量里删掉
ORACLE_HOME、TNS_ADMIN,从PATH中移除所有 Oracle 相关路径(如C:\app\oracle\product\19.0.0\dbhome_1\bin) - 用户目录下
AppData\Roaming\Oracle和AppData\Local\Oracle建议一并清空,否则重装时 PL/SQL Developer 可能读到旧连接配置
卸载后残留检查比卸载本身更重要
很多人以为 deinstall.bat 跑完就干净了,结果重装时报 INS-35955(主目录已被占用)或监听器启动失败。这是因为 Windows 服务名、注册表 CLSID、ODBC 数据源名(DSN)这些没被清理,新安装程序会拒绝覆盖。
- 运行
sc query | findstr Oracle检查是否还有 Oracle 开头的服务残留 - 在
ODBC 数据源管理器(64位)和ODBC 数据源管理器(32位)里确认没有 Oracle ODBC 驱动条目 - 用
regedit搜索关键词OraDB19Home1、OracleService、OraOLEDB,确保无结果 - 删除原
ORACLE_HOME目录(如C:\app\oracle\product\19.0.0\dbhome_1)前,再确认里面没被其他程序引用(比如某些 IDE 的数据库插件缓存路径)
真正决定能否干净重装的,从来不是 deinstall.bat 是否执行成功,而是注册表里那几个 CLSID 键值有没有被手动点掉。











