ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Windows彻底卸载Oracle 19c:手动清理注册表与服务残留全指南

Windows彻底卸载Oracle 19c:手动清理注册表与服务残留全指南 在Windows上卸载Oracle 19c这件事经历过的人应该都懂比安装还折磨人。Oracle 19c的安装程序自带卸载工具但走完官方流程后注册表残留、服务残留、环境变量残留依然一堆重新安装时各种莫名其妙的报错就会找上门来界面还没弹出就闪退、安装到一半提示“产品无法继续运行”、新建监听服务时说端口被占用……我这次花了一个下午把Oracle 19c手动卸载到“巨干净”的状态然后重新安装一次通过整个过程记录下来给同样被Oracle折磨的朋友一个参考。这篇内容不教你用“卸载-重装工具”而是纯手动操作一条命令一条命令地清一个注册表项一个注册表项地删。这样做的最大好处是每一步我都知道自己在干什么出了问题也能定位到具体环节。适合那些Oracle安装失败、想彻底清理后重装的入门DBA也适合电脑上残留过Oracle、想把系统恢复干净的开发者。1. 动手之前先做这三件事很多人一上来就删目录、清注册表结果装完新库发现旧数据没了或者生产环境被搞挂。卸载Oracle不是游戏里“删号重练”那么潇洒先花十分钟盘点和备份后面能省下大把救命的工夫。1.1 备份数据和关键配置文件如果你的数据库里还有业务数据哪怕只是测试库我也建议先把数据导出来。在能正常登录数据库的情况下用Oracle自带的数据泵导出是最稳妥的方案。以管理员身份打开命令行先创建备份目录sqlplus / as sysdba SQL create or replace directory BACKUP_DIR as D:\oracle_backup; SQL grant read, write on directory BACKUP_DIR to system; SQL exit;然后执行导出把整库的数据、表结构、存储过程、触发器都打包走expdp system/你的密码ORCL directoryBACKUP_DIR dumpfilefull_backup_$(date %Y%m%d).dmp fully logfilefull_backup_$(date %Y%m%d).log这里有个经验要分享expdp导出的dmp文件版本兼容性一定要提前考虑。如果你后面想把这些数据导入旧版本Oracle比如11g几乎是不现实的高版本导出的数据泵文件通常不能向下兼容别折腾这个方向。如果只是本次卸载后重新安装同版本Oracle那这个备份就能直接派上用场。导出数据之外还要把数据库的“皮肤”和“骨架”也备份下来参数文件SELECT value FROM v$parameter WHERE name spfile;查询spfile路径后复制一份。密码文件$ORACLE_HOME\database\PWDORCL.ora这个文件保存了sys用户的远程登录密码弄丢后远程登录会很麻烦。网络配置$ORACLE_HOME\network\admin\listener.ora、tnsnames.ora、sqlnet.ora这三个文件决定了监听和客户端连接方式重装后可以直接复用。如果记不清原始SID、端口、HOME路径用文本打开看一眼然后截图或抄在自己的笔记里。1.2 盘点Oracle装了什么、用了哪个用户动手卸载前先搞清楚当前机器上Oracle安装的“势力范围”。用命令行快速盘点sc query | findstr /i oracle这条命令会列出所有名称里带oracle的Windows服务。你需要记录下服务名和状态比如OracleServiceORCL、OracleOraDB19Home1TNSListener、OracleOraDB19Home1MTSRecoveryService等。这些服务是卸载时要优先处理的停服务、删服务都靠它们。接着查一下Oracle的安装主目录确认ORACLE_HOME和ORACLE_BASE到底是在哪里。默认安装情况下一般是ORACLE_HOMEC:\app\你的用户名\product\19.0.0\dbhome_1ORACLE_BASEC:\app\你的用户名用命令查看当前环境变量记录下来echo %ORACLE_HOME% echo %ORACLE_BASE% echo %ORACLE_SID% echo %TNS_ADMIN%这一堆路径记下来后后面清理的时候才有据可依。我再多说一句别嫌这些步骤啰嗦我见过太多人卸载卸到一半突然发现自己不知道Oracle装在哪个盘然后对着C盘和D盘干瞪眼。先把“领地”划清楚后面每一步就都不会迷路。1.3 停掉服务和进程这一步错了后面全是坑卸载前的最后一步是停服务和结束进程这个顺序非常重要。我的经验是先停监听再停实例服务最后停其他辅助服务。相当于先把汽车熄火再拔钥匙最后再开引擎盖。用管理员权限打开命令行依次执行net stop OracleOraDB19Home1TNSListener net stop OracleServiceORCL net stop OracleOraDB19Home1MTSRecoveryService服务名可能因为安装配置不同略有差异以你刚才查询到的为准。如果提示服务已经停止直接跳过如果有服务停不下来说明有进程还在占用执行taskkill /f /im oracle.exe强制结束然后继续。强烈建议在停完服务后再检查一遍是否有Oracle相关进程还活着tasklist | findstr /i oracle正常情况下应该没有任何输出。如果还有残留比如tnslsnr.exe、emagent.exe等逐个用taskkill /f /im 进程名结束。这一步的意义在于Windows下有些文件和服务是互锁的服务还在跑你下一步删目录的时候就会提示“文件被占用”轻则删除失败重则残留半截文件把系统搞得更脏。2. 删除数据库与安装目录从源头清掉“大头”服务和进程都停干净了现在可以开始动主目录了。这是耗时最长的一步也是决定卸载效果能否称得上“干净”的重要前提。核心思路是能登进数据库就先删数据库再删安装目录登不进去就直接删目录但顺序和范围要把握好。2.1 能登库的情况下用DBCA把库删掉如果你的数据库实例还能正常启动建议先用Oracle提供的DBCA工具删除数据库。这样做的好处是它会同步更新Oracle的“产品清单”inventory后续安装程序检测旧版本时会认为系统里没有残留的数据库不容易出现版本冲突。在命令行中执行数据库删除操作dbca -silent -deleteDatabase -sourceDB ORCL -sysDBAUserName sys -sysDBAPassword 你的密码这里-sourceDB后面填的ORCL是你的实例SID如果记不清可以登录数据库后执行select name from v$database;查询。执行过程中如果弹出类似“数据库不存在”或“连接失败”的情况多半是监听停了或TNS配置丢失可以用lsnrctl start临时启动监听再试一次。还有一种更简单的方式直接在Windows开始菜单里找到Database Configuration Assistant在图形界面里选择“删除数据库”按向导走。不过我个人更喜欢命令行因为输出信息完整出问题能看到具体日志不像图形界面弹个框就没了。2.2 直接删目录时哪些文件夹必须删DBCA删完后或者你的库已经起不来了、无法正常删除那就只能手动删目录了。这里我不推荐你打开资源管理器一个个右键删除一是慢二是容易漏三是路径太长时Windows会提示“源路径过长”。以管理员身份打开命令行先删除Oracle主目录rmdir /s /q C:\app\你的用户名\product\19.0.0\dbhome_1然后删除整个ORACLE_BASE目录rmdir /s /q C:\app\你的用户名这里要说清楚一个常见误区很多人以为只要删掉product目录里那个dbhome_1就够了实际上Oracle的安装文件分布在整个C:\app下其中oradata目录保存的是数据库的数据文件admin目录保存的是告警日志和跟踪文件cfgtoollogs目录保存的是各种配置工具日志diag目录更是堆积了大量诊断日志。这些目录不删干净重装时虽然不一定会报错但会让你的磁盘白白被吃掉好几个GB而且新库跑起来后日志可能和旧日志混在一起排查问题的时候容易看花眼。所以我的实操建议是确认C:\app下没有其他Oracle产品比如PeopleSoft、Hyperion后直接整个删掉C:\app\你的用户名目录。如果安装时选择了非默认位置那就按你记录的实际路径来处理。另外安装过程还会往临时目录写文件顺手检查这些位置有就一并删除rmdir /s /q %TEMP%\OraInstall* rmdir /s /q %TEMP%\deinstall* rmdir /s /q C:\Program Files\Oracle有些机器上C:\Program Files\Oracle目录确实存在里面可能是残留的卸载程序或共享组件。删除前先看一眼里面内容确认跟Oracle相关再下手。3. 注册表与服务的深度清理卸载干净的“胜负手”目录删完大块头没了但真正决定“巨干净”还是“假干净”的是接下来的注册表和服务清理。这一步是手动卸载的“胜负手”。很多人在官方卸载工具跑完后以为系统已经干净了结果重装时发现OUIOracle Universal Installer还是检测到旧版本或者新监听起不来很大概率就是注册表里还残留着旧信息。3.1 服务键的逐个清理刚才用sc query查询到的Oracle服务现在要连同它们在注册表里的服务键一起删掉。服务注册表项的位置在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services打开regedit在这个路径下找到所有以Oracle开头的键右键删除。常见的有OracleServiceORCL、OracleOraDB19Home1TNSListener、OracleOraDB19Home1MTSRecoveryService、OracleRemExecServiceV2等。这一步为什么重要因为重新安装Oracle时安装程序会尝试在Windows服务管理器里创建同名的服务。如果旧服务键还残留在注册表里安装程序可能直接跳过创建或者创建时因为“服务已存在”导致安装失败日志里就会报“产品无法继续运行。请重新安装应用程序”之类的诡异错误。你不用花时间去研究报错信息八成就是服务没清干净。当然如果系统服务管理器里服务还在你也可以直接用命令删除sc delete OracleServiceORCL sc delete OracleOraDB19Home1TNSListener sc delete OracleOraDB19Home1MTSRecoveryService但注意sc delete只会删除服务条目不会清理注册表里的EventLog等其他引用所以最保险的做法还是直接去注册表编辑器里检查一遍Services键。3.2 Oracle软件注册表主键清理服务键删完接着清理Oracle软件自身的主注册表项。这是整个清理流程里最关键的一步相当于把Oracle在这个系统里的“户口”注销掉。需要重点检查以下几个位置HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ORACLE HKEY_CURRENT_USER\Software\ORACLE其中HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE是最核心的Oracle的安装路径、HOME信息、版本信息都存在这里。在regedit中定位到该键后右键删除如果提示“无法删除”检查一下权限用管理员身份重新打开regedit。另外还有一个很容易被忽略的位置就是HKEY_CLASSES_ROOT\Installer\Products。Windows Installer会把已安装产品的GUID记录在这里Oracle的安装也会在这里生成记录。如果不清理某些检测软件甚至Oracle自身的安装程序还是能认出“系统里装过Oracle”。定位方式很简单打开HKEY_CLASSES_ROOT\Installer\Products在上方“查看”菜单里勾选“状态栏”然后用F3键快捷键搜索“Oracle Corporation”找到了确认是Oracle相关就删掉。这里搜索可能需要花几分钟因为Products键下面条目非常多要耐心翻。最后还有一个位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall。这是控制面板“程序和功能”列表的数据来源如果这里残留Oracle的卸载项控制面板里会一直显示Oracle的大名点卸载还会报错。清理时同样按F3搜索“Oracle”把相关项删除。这里的键有时不直接显示Oracle字样而是GUID命名所以要搜索键内的DisplayName值来确认。3.3 环境变量与PATH清理注册表清完环境变量也别漏掉。否则打开新命令行窗口ORACLE_HOME还会指向一个已经不存在的路径安装新库时可能会被误导。在“系统属性 - 高级 - 环境变量”中重点检查系统变量和用户变量里的这几项ORACLE_HOME指向旧数据库主目录删掉。ORACLE_BASE指向旧的C:\app\你的用户名删掉。ORACLE_SID旧的实例名删掉。TNS_ADMIN指向旧网络配置文件目录删掉。PATH变量中所有包含oracle或dbhome_1的路径段逐个删除。有个细节要提醒清理PATH时不要直接改写成一行空串而是把不需要的Oracle相关路径段去掉保留原有的其他路径。某些开发工具、Python、Java等都可能往PATH里写入自己的路径误删了会导致这些工具全部失灵。修改PATH时最好先把现有PATH复制到记事本里把各个路径用分号分隔开勾出Oracle相关的删掉再粘贴回去这样不容易手滑。环境变量清理完毕后关闭并重新打开命令行窗口执行echo %ORACLE_HOME%确认输出为空再执行set | findstr /i oracle确认没有Oracle相关环境变量。4. 桌面层与杂项清理让系统彻底“看不见”Oracle到这里目录、注册表、服务、环境变量都清完了理论上系统核心已经不认识Oracle了。但为了让“巨干净”名副其实还可以把桌面层和杂项残留一起收拾了。这一部分属于锦上添花但做完后整个系统会变得非常清爽重装时出现意外的概率也低很多。4.1 开始菜单、桌面快捷方式和计划任务安装Oracle时安装程序会在开始菜单和桌面创建一堆快捷方式包括SQL Plus、SQL Developer、Database Configuration Assistant等。卸载时这些图标不会自动消失尤其在开始菜单里残留的文件夹还可能会误导你“Oracle是不是没删干净”。手动清理吧开始菜单删除C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Oracle - OraDB19Home1整个文件夹。桌面删除所有Oracle相关快捷方式。当前用户开始菜单检查C:\Users\你的用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs下是否有Oracle相关项。计划任务也是Oracle经常会注册的地方。在命令行执行schtasks /query | findstr /i oracle如果有输出在任务计划程序里删除对应任务或者在C:\Windows\System32\Tasks目录下删除对应的任务文件。很多人的Oracle环境里会有OralogMonitor、OracleMTSRecoveryService等任务不清干净的话即使服务没了某些诊断进程还是会被定时拉起然后疯狂往日志里写错误记录看着就烦。4.2 系统目录里的Oracle残留文件接下来检查C:\Windows\System32和C:\Windows\SysWOW64下有没有Oracle相关文件。常见的残留文件是oracle*.ocx、oracle*.dll、oci.dll等。不过在动手删除前一定要先确认这些文件确实是Oracle相关的不要看到名字里带oracle就删。有些公共运行库比如MSVC运行时也被其他软件调用盲目删除可能导致其他应用崩溃。我的判断方法是右键文件查看属性切到“详细信息”或“数字签名”标签如果公司名是Oracle Corporation产品名里带Oracle字样那就可以放心删除。如果公司名是Microsoft Corporation但文件名里带oracle比如某些Oracle数据库在Windows系统目录里释放的驱动程序这种情况相对少见确认后也可以清理。稳妥起见删除前先把文件移到一个回收站文件夹里重启一次系统确认无异常后再彻底清空。这一步可以有选择地做。如果你的目标是重新安装Oracle系统目录里那些残留DLL可能会被新安装的OUI误加载导致安装界面刚启动就报“在要求的应用程序库或文件中检测到错误”。如果你只是想清理磁盘空间重点把注意力放在数据文件目录就够了。4.3 安装临时目录与缓存清理Oracle安装过程会在%TEMP%目录下生成大量临时文件例如OraInstall开头的目录、setup*日志文件等。这些文件一般不会自动删除时间长了会堆积好几个GB。卸载完Oracle后建议执行一次全集清理del /s /q %TEMP%\OraInstall* del /s /q %TEMP%\setup* rmdir /s /q %TEMP%\OraInstall*另外如果安装时把安装介质解压到了磁盘某个目录比如D:\Software\oracle19c安装完成后可以把解压目录中的install和stage子目录也清理掉避免下次误用出错的安装包。这里也要插一句安装介质一定要从官网或可信渠道下载完整包不要用网上来路不明的精简包。很多安装中途报“产品无法继续运行”的案例最后查下来是安装包本身不完整或被修改过跟系统干不干净其实没关系。5. 重新安装前的检查与一次成功的安装到这里手动卸载流程就完整走完了。在重新安装Oracle 19c之前我建议你做一次“干净度自检”确认系统真的没问题再启动安装程序。这一步能帮你避免前面白干一场也能让重装过程变得顺风顺水。5.1 卸载完成后如何自检“够不够干净”打开一个全新的命令行窗口按下面这个顺序逐项确认sc query | findstr /i oracle reg query HKLM\SOFTWARE\ORACLE echo %ORACLE_HOME% echo %ORACLE_BASE% dir C:\app\你的用户名四条命令分别检查服务、注册表、环境变量、目录。如果sc query的输出为空reg query HKLM\SOFTWARE\ORACLE提示“找不到指定的注册表项”echo %ORACLE_HOME%输出%ORACLE_HOME%dir提示“系统找不到指定的路径”那就说明系统基本干净了。此时再打开控制面板的“程序和功能”确认列表里也不再有Oracle相关条目。也可以用Windows自带的搜索工具搜一下“Oracle”关键词确认开始菜单、磁盘根目录下没有明显残留。不过要提醒一句如果你注意“搜什么都行”的方式可能会搜到不少无关文件比如其他软件自带的oracle JDBC驱动、oracle数据库连接组件这些不用管只要没有Oracle主安装目录和注册表键就行。5.2 重新安装时三个容易踩的坑重新安装Oracle 19c的时候有几个坑是很多人踩过千百遍的我直接列成速查表问题现象常见原因解决方案安装界面刚启动就报“在要求的应用程序库或文件中检测到错误产品无法继续运行。请重新安装应用程序”系统目录有残留Oracle DLL或安装程序被安全软件拦截确认系统目录无残留临时关闭杀毒软件和防火墙以管理员身份运行setup.exe安装到配置监听时提示1521端口被占用旧监听未清理干净或其它服务占用端口执行netstat -ano查端口占用找到PID后结束进程或改端口安装程序提出“检测到Oracle主目录已存在”注册表ORACLE_HOME键或目录残留回到第3章再检查一遍注册表和环境变量或者手动删除旧目录第一个坑尤其值得展开说。出现“在要求的应用程序库或文件中检测到错误”这个报错时很多人的第一反应是“那我把安装包重新下载一份吧”结果换了安装包还是一样的问题。实际上问题大多出在系统残留上。OUI启动时会校验一些动态库如果路径里加载到了损坏的旧版本DLL或者杀毒软件把安装生成的临时DLL隔离了就会直接罢工。我个人的习惯是在安装之前先把Windows Defender的实时防护暂时关闭装完后再打开能省掉很多莫名的报错。1521端口被占用也是个经典戏码。旧监听服务没删干净或者本机装过MySQL、Redis之类的软件占用了同一端口都会导致监听配置失败。处理方式很简单执行netstat -ano | findstr 1521看输出的PID是多少再打开任务管理器结束对应进程或者直接改Oracle监听端口为1522之类的其他端口。5.3 安装完成后的验证与常见问题新装完成后别急着庆祝先验证一下服务能否正常工作。用管理员身份打开命令行lsnrctl status如果监听正常会列出监听器名称和几个服务名。然后登录数据库验证sqlplus / as sysdba SQL select status from v$instance;显示OPEN就说明实例启动正常。如果登录时报“ORA-12560: TNS: 协议适配器错误”通常是监听没起来用lsnrctl start手动启动再试一次如果SQL*Plus提示权限不足检查sqlnet.ora里的SQLNET.AUTHENTICATION_SERVICES是否设置了(NTS)没有的话补上。等待新库创建完成后还可以观察一下SYSAUX表空间的占用情况。Oracle 19c在刚建库时SYSAUX会随着自动负载信息库、优化器统计信息等组件的初始化而快速增长这是正常现象不用太紧张。如果后续发现它涨得异常再考虑收缩或迁移表空间那就是另一个专题了。还有一个小建议安装前先把JAVA_HOME环境变量临时删掉或改名。OUI在安装过程中会用到自带的JDK如果检测到系统已安装的JDK版本不兼容可能弹出奇怪的错误。这个问题在Windows上出现过多次处理方式也很简单安装期间不设置JAVA_HOME或者把Oracle安装目录排除在杀毒软件扫描范围之外。写在最后的一个小提醒手动卸载Oracle 19c这件事说难是真不难每一步都是体力活但最考验人的是细致和顺序。目录、服务、注册表、环境变量一环扣一环漏了哪个重装的时候它都会跳出来给你“惊喜”。我把这次操作的经验总结成一句话顺序别乱确认再走别图快。每次删除操作前多看一眼路径每次清完注册表后重启一次电脑再继续花不了多少时间但能避免返工。最后再分享一个小技巧如果你想练手别拿生产机直接整。先在虚拟机里装一遍Oracle 19c再手动卸载一遍熟悉完整流程后再回到自己的电脑上操作。我在虚拟机里来回折腾了三四遍把各种报错都见了一遍回头处理真机时就从容很多。手动卸载最大的好处就是你对自己系统里每一处跟Oracle有关的东西都心里有数这种掌控感是任何一键清理工具都给不了的。
返回列表