ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Oracle 19c完全卸载指南:彻底清理残留文件与注册表

Oracle 19c完全卸载指南:彻底清理残留文件与注册表 1. 卸载前心里先有个数Oracle到底在系统里埋了多少东西Oracle 19c安装时一路Next点到底很轻松卸载的时候却让很多人想把电脑砸了。这不是你一个人的问题我在不少环境里处理过Oracle残留最典型的表现就是重装时报错说检测到已经安装了Oracle、开机时有个服务一直失败、1521端口被莫名占用、C盘无声无息少了好几个G。这些十有八九都是卸载不干净惹的祸。Oracle在Windows上的默认安装路径是C:\app\用户名ORACLE_HOME是C:\app\用户名\product\19.0.0\dbhome_1。安装过程不仅仅把文件放在基目录里还会注册Windows服务、写注册表、改环境变量甚至在某些系统目录里留下日志和配置。你要是只删了文件夹那和没卸载几乎没有区别。Oracle官方确实给了一个deinstall工具但它不是万能药。我实测过很多次deinstall能删掉大部分文件和服务但经常有漏网之鱼最常见的就是注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE下的子键清理不干净、服务在services.msc里看不到了但注册表Services下的键还在、C:\Program Files\Oracle\Inventory里的中央清单不删、以及Oracle相关的ODAC组件残留。这些残留一旦存在重装时安装程序就会在环境检测阶段直接拦住你提示已有Oracle产品存在或者干脆装到一半报错。这篇文章的思路很简单先用官方工具把数据库和主程序卸载掉再手动清理文件、服务、注册表、环境变量最后给出一份验证清单和避坑记录。照着这个流程走基本能做到“查无此Oracle”。1.1 卸载前必做的准备工作不要一上来就开删先花十分钟把准备工作做好后面能省下不少气力。第一件事备份数据。如果你的库还需要用或者有测试数据想留个底一定要先用expdp导出或者直接把oradata目录拷贝到其他分区。DBCA删库之后数据库物理文件基本就没了卸载操作不可逆。哪怕你觉得自己暂时用不到这些数据我也建议老老实实导出一份dmp文件存到别的盘里真到了后悔那天你会感谢自己。第二件事找到自己的ORACLE_HOME。打开cmd输入set ORACLE_HOME set ORACLE_BASE先把这两个环境变量的值记下来后面卸载完需要手动清掉别到时候忘了原来的值是什么。第三件事导出网络配置。如果你配置过tnsnames.ora、sqlnet.ora或者有一堆远程连接字符串先拷贝一份放到系统盘之外。这个文件一般在ORACLE_HOME\network\admin目录下重装完把文件放回去连接配置就能直接用省得一个个重新敲。第四件事停掉所有Oracle服务。这一步看起来简单但漏掉任何一个服务都会让后面的文件删除失败。在服务管理器里找所有名字带Oracle的项逐个停止。或者用管理员权限运行PowerShellGet-Service | Where-Object {$_.Name -like Oracle*} | Stop-Service执行完后再执行一遍确认所有Oracle服务都已经是“已停止”状态。如果某个服务停止不了先别急着跳过常见问题部分会专门说怎么处置。2. 先走官方流程DBCA删库、deinstall删软件2.1 用DBCA把数据库实例删掉Oracle官方卸载的第一步永远是“删数据库实例”。原因很简单数据库实例在运行时占用了一堆文件句柄直接停服务或者删文件容易留下不完整的数据文件。DBCADatabase Configuration Assistant会在数据库正常关闭之后把数据文件、控制文件、重做日志、临时文件、参数文件这些数据库物理文件都删掉同时清理监听器里对应的配置条目。具体操作是在cmd里以管理员身份运行dbca打开图形界面后选择“配置数据库删除”Configure Database Deletion勾选你本机上的数据库实例比如ORCL输入sys口令安装时设置的SYS用户密码然后点击下一步。在确认警告信息后等待删除完成。删除过程中DBCA会先正常关闭数据库再逐项删除物理文件和归档日志。整个过程可能要几分钟取决于数据量大小。一个小细节如果DBCA图形界面打不开或者删库时报错说明数据库可能已经处于损坏状态此时可以考虑用deinstall连库带软件一起处理因为deinstall在删除时会尝试关闭数据库并清理文件。但如果数据库真的启动不了deinstall也可能卡住那种情况建议先手动删除oradata目录下的对应文件夹再用deinstall清理软件本体的文件。2.2 用deinstall.bat把软件主体删掉删完数据库后运行Oracle自带的deinstall工具。位置在ORACLE_HOME\deinstall\deinstall.bat。以管理员身份打开cmdcd到deinstall目录运行deinstall.bat工具会先扫描本地已安装的Oracle组件然后列出一份删除计划包括要删除的文件、服务和注册表信息。接着它会问几个问题基本都是确认性质的是否继续删除选中的组件输入y是否要删除中央清单里记录的内容输入y是否确认删除ORACLE_HOME目录下的所有文件输入y。这里有一个容易踩的坑deinstall在扫描阶段需要读取中央清单oraInventory也就是C:\Program Files\Oracle\Inventory。如果这个清单损坏或者不存在deinstall会直接报错退出。遇到这种情况它会提示找不到产品清单然后停止。解决办法是先手动重建Inventory或者干脆放弃deinstall直接按下一节的手动流程走。还有一个情况需要留意如果ORACLE_HOME路径里带了中文或空格deinstall也可能执行到一半报错。我建议遇到这类奇怪问题优先切换到手动清理思路别把时间耗在跟deinstall较劲上。deinstall跑完后它会自动删除不少东西。但千万别以为这就完事了。打开服务管理器看一眼、查一下注册表你大概率会发现Oracle相关的东西还有一大把。所以紧接着进入第三节。3. 手动清理残留文件、服务、注册表、环境变量3.1 文件和目录清理官方流程跑完后首要工作是把磁盘上的Oracle文件清理掉。下面这些目录按顺序检查存在即删C:\app\用户名这个就是Oracle基目录下面包含product、oradata、admin等子目录C:\Program Files\Oracle这个是中央清单oraInventory所在地也是deinstall最容易漏的地方C:\ProgramData\Oracle存放了一些全局配置和日志C:\Program Files (x86)\Oracle如果装了32位组件会出现C:\oracle\cfgtoollogs安装配置过程的日志目录临时目录下所有Ora开头的文件夹。删除顺序有讲究。我一般先删ORACLE_BASE对应的C:\app\用户名再删Program Files和ProgramData下的Oracle目录最后扫描各盘符下Ora开头的隐藏文件或文件夹。如果提示文件被占用说明还有进程锁着文件。先到任务管理器里看有没有oracle.exe、ora*.exe、sqlplus.exe、dbsnmp.exe之类的进程把Oracle相关进程全部结束。实在找不到的话用PowerShell结束所有名字带ora的进程Get-Process | Where-Object {$_.Name -like ora*} | Stop-Process -Force但这招要慎用先看看进程路径确认是Oracle相关再杀别把别的软件给误杀了。3.2 服务清理与端口检查文件删完之后检查服务列表。打开services.msc看还有没有名字带Oracle的服务。如果有先停止再删除。停止用net stop 服务名删除用sc delete 服务名例如net stop OracleServiceORCL sc delete OracleServiceORCL如果你的环境里服务名不规律可以用下面这个命令把所有Oracle相关服务一次性列出来wmic service where name like %Oracle% get name,state,pathname看到具体名字后再逐个删除。删除服务后还要去注册表里确认Services项下没有残留这是服务还能被系统识别的根源。服务清理完顺便检查一下端口。Oracle默认用1521端口如果卸载完还有别的东西占着这个端口重装时会报监听配置错误。检查命令netstat -ano | findstr :1521如果有输出拿到PID后去任务管理器看看是哪个进程。如果是Oracle的残留进程就结束掉如果是其他程序占用记下这个情况重装时配置监听换一个端口就行。3.3 注册表清理最容易留坑的地方注册表清理是整个手动环节里最重要的一块。Oracle在注册表里留下的痕迹分散在好几个位置你得逐个找过去。打开regedit按下面的路径逐个排查HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE是Oracle所有核心配置的注册表根键删除整个项。deinstall一般会删掉里面大部分子键但偶尔会剩下一些子项。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services里存放Windows服务配置。虽然你在services.msc里已看不到Oracle服务但这个位置可能还有对应的键。凡是键名带Oracle字样的整个删掉。HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products是一个非常隐蔽的地方很多残留坑都藏在这。Oracle安装包会在Products下创建带“Oracle”字样的键。如果不删重新运行Oracle安装程序时系统会认为本机已安装过Oracle产品直接拒绝安装或者要求先卸载旧版本。这也是“为什么我明明卸载干净了安装还是提示已存在”的头号原因。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下对应的是“程序和功能”里看到的卸载条目。如果有Oracle字样的残留键一并删除。在动手删除注册表之前建议先右键导出备份一份或者至少在关键节点用reg命令确认路径。删除操作可以用regedit图形界面也可以直接用命令例如reg delete HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE /f注意路径引用别删错项。还有一个细节注册表里某些Oracle键的删除权限是受限的右键删除时提示“无法删除”。解决办法是右键→权限→把当前用户设为完全控制再删。如果还是不行把所有者改成Administrators再给完全控制权限。最后是环境变量。右键“此电脑”→属性→高级系统设置→环境变量删除存在ORACLE_HOME、ORACLE_BASE这两个用户变量再在PATH中删除所有包含oracle\product\19.0.0的路径。PATH编辑时小心一点用“编辑文本”模式看清楚每条路径别误删其他条目。4. 卸载完成后的验证清单与避坑实录4.1 一条龙验证确保卸载干净验证要有点仪式感用命令说话。下面这几条命令每过一条就说明一步没问题。服务列表里没有Oracle相关项在PowerShell或cmd里执行Get-Service | Where-Object {$_.Name -like Oracle*}返回为空说明服务清理完成。注册表里没有Oracle根键执行reg query HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE如果提示“找不到指定的注册表项或值”说明Oracle主注册表项已经清干净了。环境变量里没有Oracle执行set ORACLE_HOME set ORACLE_BASE两个命令都返回空值说明环境变量已清除。文件系统里没有Oracle目录检查C:\app\用户名\product是否还存在。不存在说明ORACLE_HOME已删除。1521端口没有任何进程监听执行netstat -ano | findstr :1521输出为空说明端口已释放。以上四条都过一遍基本可以放心Oracle在系统里的存在感已经清空。最后再重启一次电脑确保之前被占用的文件句柄被释放也方便某些系统配置彻底刷新。4.2 deinstall跑不起来、文件删不掉、服务停不了的场景怎么办每个Oracle环境脾气都不一样我这里列几个最常见的坑都是实际操作里遇到过的。场景一deinstall.bat一打开就闪退或者报“无法加载产品清单”。这种情况通常是中央清单oraInventory损坏或者安装时改变了默认清单路径。解决办法是放弃deinstall直接按第三节手动删文件和注册表。只要数据库和软件目录删得足够干净手动流程同样能完成卸载。场景二某几个文件怎么都删不掉。优先怀疑是进程占用。打开任务管理器找到所有oracle.exe、ora*.exe进程右键结束。如果进程结束不了试试在安全模式下删除。安全模式能绕过大部分常驻服务和杀毒软件对文件的锁定实测非常好用。场景三服务停止时报“无法停止服务”。有时候Oracle服务虽然启动类型是“自动”但镜像文件已经损坏导致服务一直处于“正在停止”状态。处理手段是在管理员cmd里执行sc query OracleServiceORCL确认服务的PID然后taskkill /F /PID 这里的PID结束后再用sc delete删除服务。场景四重装时安装程序报“检测到已安装的Oracle”但本机明明已经没有Oracle服务了。这种基本都是Installer\Products注册表项残留按前面3.3里的方法删掉相应键值再重新检测即可。4.3 重装前的最后检查如果你的目标是重装一个新的Oracle 19c除了上面那些清理项我还有两个额外建议。第一清理安装包的临时释放目录。Oracle安装程序在运行时会临时解压文件到%TEMP%或者安装包目录下。如果上一轮安装中途失败这些临时目录可能残留有时会干扰新一轮安装。建议清理%TEMP%下所有Ora开头的文件夹。第二重新规划目录。有些老环境卸载后系统盘碎片化严重。既然重装建议把ORACLE_BASE放到空间大的分区比如D:\app避免系统盘越来越臃肿。这也是重装后最明显能感受到的体验提升。最后再分享一个习惯我在每次卸载Oracle之前都会花几分钟做一个环境清单——服务列表、注册表根键、环境变量原值、端口占用情况四样记录全了再动手。卸载本身不难难的是判断哪些是Oracle残留、哪些是你自己的环境配置。有了清单心里就有底了。这篇文章里的方法和命令我都实际跑过不止一遍。如果照着走完还有残留多检查一遍Program Files目录和Installer注册表项这两处是最容易漏的地方。
返回列表