ARTICLE DETAIL

资讯详情

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

Oracle 9i补丁包p4547809在Windows 64位环境下的安装与迁移指南

Oracle 9i补丁包p4547809在Windows 64位环境下的安装与迁移指南 简介针对仍运行早期数据库系统的企业和维护人员这份Windows 64位下的Oracle 9i补丁版安装包可用来在兼容硬件上完成数据库软件的部署、升级或组件修复适用于需要兼容老旧硬件与遗留应用的运维场景。整个压缩包共包含511个文件容量约360.8MB其中jar格式的Java组件数量最多配合nls语言资源、exe安装程序、dll运行库以及xml、properties等配置文件从数据库内核到客户端工具均有覆盖。包内还提供了html格式的阅读说明以及按安装逻辑划分的Disk1目录结构便于使用者按照官方文档与目录结构完成部署和配置同时也能依据目录结构快速定位要安装或修复的模块。Oracle 9i虽属经典版本但其数据仓库优化、自动存储管理、RAC集群等特性至今仍值得借鉴对维护旧系统的人员尤其有参考价值。目前已有173人学习下载对需要还原旧环境或研究该版本机制的技术人员来说是一份难得且可直接使用的离线资源。1. 旧补丁包 p4547809_92080_WINNT64.zip 还能用在今天的 Windows 上吗p4547809_92080_WINNT64.zip 是 Oracle 9i准确说是 9.2.0.8在 Windows 64 位环境下的补丁安装包文件后缀里的 WINNT64 已经点明了目标平台。很多还在维护老系统的 DBA 拿到这个 zip 后第一反应是“这玩意能装到 Server 2016 上吗”答案是可以但要做几个前置动作。这个包里不只有 setup.exe还有 addNode.bat、JavaAccessBridge.dll 以及 access_setup.bat涉及节点扩展、Java 辅助桥接和自动化安装。对仍然运行 Oracle 9i 的生产库来说这份资源的价值在于它能把历史遗留实例重新搬回可维护状态也能作为从 9i 迁移到新版数据库的中间介质。本文会拆解包内每个文件的实际作用给出在 64 位 Windows 上安装、建实例和验证补丁的完整操作最后聊聊老库迁移时如何用这个 zip 做最小化恢复。2. 解包先说文件p4547809 里每个组件是干什么的2.1 从文件名看补丁版本p4547809 与 92080 的含义Oracle 的补丁命名一般是 p补丁号版本平台.zip。这里的 p4547809 是 Oracle 内部补丁号92080 表示 9.2.0.8.0即 Oracle 9i 的最高基础版本。WINNT64 代表 Windows 64 位具体是 Itanium 还是 x64需要看包内的 readme 或解压后 setup.exe 的位数。如果下载后解压失败先检查 zip 头结构因为老补丁包使用 ZIP32 格式新系统自带解压器通常没问题但遇到“error read zip archive”时可以用包内的 unzip.exe 手工拉取。由此可看出这个 zip 并非完整数据库安装介质而是补丁集所以只包含增量文件setup.exe、addNode.bat、JavaAccessBridge.dll、orasrvm10.dll、WindowsAccessBridge.dll、JAWTAccessBridge.dll、orauts.dll、access_setup.bat。搞清楚每个文件的职责才能避免安装时把 DLL 覆盖错位置也不会在出现 ORA-12547 时误删关键库。2.2 包内文件职责一张表看懂文件名职责安装后去向setup.exe补丁安装主程序负责调用 Oracle Universal Installer 核心逻辑%ORACLE_HOME%\binaccess_setup.bat辅助安装脚本用于设置辅助功能相关组件和目录权限随脚本执行addNode.batRAC/集群节点扩展脚本向现有 Oracle Home 添加新节点%ORACLE_HOME%\binJavaAccessBridge.dllJava 辅助桥接库供 Oracle 管理工具与 Windows UI 交互%ORACLE_HOME%\binJAWTAccessBridge.dllJava 窗口工具包辅助库配合 JavaAccessBridge.dll 使用%ORACLE_HOME%\binWindowsAccessBridge.dllWindows Accessibility API 桥接负责 64 位系统下的跨位数调用系统目录或 Oracle Homeorasrvm10.dllOracle Resource Manager 服务管理库集群环境下管理资源%ORACLE_HOME%\binorauts.dllOracle 自动化测试工具库安装时不直接调用但影响后续补丁检查%ORACLE_HOME%\binunzip.exe自带的解压工具免去依赖第三方解压器临时目录表格中的 DLL 大多是 Java Access Bridge 相关。Oracle 9i 的管理工具如 Database Configuration Assistant基于 Java 2 运行Windows 64 位下的 JVM 与原生 UI 之间需要这座桥。如果你在启动 DBCA 时看到“Java Access Bridge 加载失败”说明这三个 DLL 的位数不匹配。Oracle 9i 本体是 32 位应用在 64 位 Windows 上需要同时注册 32 位和 64 位两个版本的桥接库而补丁包里的文件名没有区分位数安装时 OUI 会根据检测到的 JVM 自动选择。2.3 解压顺序和验证别上来就双击 setup.exe我一般会先建一个干净的目录例如C:\ora9i_patch再用 7-Zip 把 zip 解压到该目录。之所以不用 Windows 自带解压器是因为老 zip 中有些文件名包含非 ASCII 字符系统自带工具会静默改写文件名导致 setup.exe 找不到对应 DLL。解压后先做两步验证查文件大小是否与包内校验一致确认 unzip.exe 可执行。常见做法是cd C:\ora9i_patch unzip -t p4547809_92080_WINNT64.zip-t参数测试压缩档完整性。如果输出No errors再看文件时间戳。Oracle 补丁文件的时间戳一般是发布当天若显示 1980 年或者其他奇怪时间说明 zip 头被二次打包过这种包安装时很容易报setup.exe 0x2 error。逻辑上unzip.exe 是原始下载的一部分它用的解压算法是老式 DEFLATE对老补丁的兼容性比新版 7-Zip 还好。所以当 7-Zip 解压失败时回到 unzip.exe 往往能救场。另外别轻易尝试“zip压缩包密码破解工具”或“zip密码移除”来处理这个包Oracle 补丁包本身不带密码出现密码提示多半是下载站点二次压缩时附加的直接解压原始文件更安全。提示不要把 zip 解压到%ORACLE_HOME%内。补丁安装程序通常要求 staging 目录与 Oracle Home 分离否则磁盘空间计算会出错。3. 64 位 Windows 上安装 9i 补丁前的三个硬性准备3.1 注册表兼容视口与内存检测老安装程序的第一道坎Oracle 9i 的 setup.exe 在 Windows Server 2012 R2 及以上系统启动时安装程序会把它识别为不兼容因为 9i 在内存管理上不支持超过 2GB 的物理地址识别。虽然它能在 64 位系统上以 WOW64 模式运行但 Oracle Universal Installer 会读取TotalPhysicalMemory并与之比较内存大于阈值时直接终止安装。解决方式不是改 BIOS而是把安装程序设置为 Windows 7 兼容模式reg add HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers /v C:\ora9i_patch\setup.exe /t REG_SZ /d WIN7RTM /f执行后setup.exe 会被当作 Windows 7 程序运行绕过内存检查。注意这个注册表项默认写到 64 位注册表视图如果安装服务账户是 LocalSystem还需要同步写到HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers否则 32 位安装进程读取不到。参数说明/v指定目标 exe 路径/d WIN7RTM表示兼容层/f强制覆盖已有项。除此之外最好临时关闭 UAC否则addNode.bat在提升权限时会二次弹窗导致静默安装脚本挂起。3.2 用 access_setup.bat 预处理 Oracle Home 目录权限access_setup.bat这个名字容易误导它实际上是设置 Oracle Home 目录 ACL 的。补丁安装会在%ORACLE_HOME%\bin写入新的 DLL如果 Oracle 服务以 LocalSystem 运行而补丁安装用户不是管理员DLL 覆盖会失败。运行之前先看脚本内容type access_setup.bat脚本里通常包含类似icacls %ORACLE_HOME% /grant Oracle_User:(OI)(CI)M的命令行。如果没有这一行我会手动补上icacls D:\oracle\ora92 /grant NETWORK SERVICE:(OI)(CI)M /T icacls D:\oracle\ora92\bin /grant Authenticated Users:(OI)(CI)RX /T这里把 Oracle Home 完全控制权交给 NETWORK SERVICE因为 9i 的监听器服务OracleOraHome92TNSListener默认在此账户下运行。/T表示递归(OI)(CI)是对象继承与容器继承避免补丁安装过程中对bin目录的写操作被拒绝。如果这台机器的 Oracle 服务运行在自定义账户下把账户名换成实际的否则补丁写盘时会出现“拒绝访问”的弹窗。3.3 运行时库冲突orasrvm10.dll 到底该不该手动注册很多老教程说要把orasrvm10.dll复制到system32并执行regsvr32这是错误做法。orasrvm10.dll是以 Resource Manager 库的形式被 Oracle 服务加载的不是 COM 组件。手动注册会导致ORA-12547: TNS:lost contact或监听器无法启动。正确做法是等 setup.exe 完成后再确认文件位置。如果安装中途报“无法定位程序输入点 Orasrvm10 于 DLL 上”说明%ORACLE_HOME%\bin里的旧文件还在被进程占用。用 Process Explorer 查看谁加载了 orasrvm10.dll结束对应进程后重新运行补丁安装器而不是去系统目录翻文件。3.4 从命令行跑安装响应文件与静默安装生产环境一般不推荐交互式安装Oracle 9i 补丁支持用响应文件*.rsp静默安装。先从一个干净环境跑一次安装向导在结束时选择“保存响应文件”获得标准的 rsp 模板或直接用以下最小参数setup.exe -silent -responseFile C:\ora9i_patch\patch.rsp -nowelcomepatch.rsp中至少要包含ORACLE_HOME、ORACLE_HOME_NAME、INSTALL_TYPE和SHOW_README。9i 的 OUI 在静默模式下会把缺失的键直接跳过不会报错所以安装后要检查%ORACLE_HOME%\cfgtoollogs下的日志确认补丁是否进入Apply阶段。用-nowelcome跳过欢迎页面避免在服务器远程桌面上卡住。4. 建实例、打补丁、验证版本让 9i 真正跑起来4.1 DBCA 建库与 Java Bridge 的联动关系安装完补丁后建立实例通常用 Database Configuration AssistantDBCA。64 位 Windows 上第一次启动 DBCA 可能卡在“正在初始化 Java 虚拟机”界面。原因就是前面提到的 JavaAccessBridge.dll 没生效。验证方法echo %CLASSPATH% java -version C:\oracle\ora92\bin\dbca.bat如果java -version能显示 1.4.x而dbca.bat闪退检查环境变量ORACLE_HOME是否指向补丁更新后的目录。9i 自带的 JRE 版本是 1.4.2它在 64 位 Windows 上需要 32 位 JVM。若系统安装了 64 位 JDK 并排在 PATH 前面dbca.bat会加载 64 位 JVM 并崩溃。解决办法是把 Oracle 的 JRE 路径放到最前set PATHC:\oracle\ora92\jre\bin;%PATH%dbca.bat本质是调用 javaw 来启动 GUIJVM 位数不对时JavaAccessBridge 无法向 Windows 窗口管理器注册辅助功能钩子界面会一直停留在初始化的白色窗口。处理完 PATH 后最好删除%ORACLE_HOME%\cfgtoollogs下残留的 dbca 日志避免旧错误干扰后续判断。4.2 补丁版本验证的 SQL 与文件版本对照补丁是否真正安装成功不能只看 setup.exe 退出码。Oracle 9i 下用以下 SQL 查询补丁信息SELECT * FROM registry$history; SELECT version, status FROM product_component_version;第二句返回的VERSION应该是9.2.0.8.0STATUS为VALID。如果版本还停在9.2.0.1.0说明补丁只装了 OUI 组件没更新数据库内核。此时需要进入%ORACLE_HOME%\bin执行relink.exe ALL重新链接所有可执行文件然后重启实例。文件版本对照也是常用手段在命令提示符里执行wmic datafile where nameC:\\oracle\\ora92\\bin\\orasrvm10.dll get Version这个 DLL 的版本号应与补丁版本一致。如果还是旧版检查 Windows 文件保护是否拦截了覆盖并在%ORACLE_HOME%\bin中确认没有重复的orasrvm10.dll.bak文件。9i 补丁在覆盖 DLL 时如果杀毒软件后台扫描占用文件OUI 通常会生成带.bak_日期后缀的备份这是正常现象但.bak和当前版本混杂会导致加载器读取顺序错误。4.3 Reboot 之后监听器与服务启动顺序补丁安装完成后监听器的配置可能被重置因为orauts.dll会重写listener.ora。启动顺序不能随意变先启动监听再启动实例lsnrctl start LISTENER oradim -startup -sid ORCL -starttype inst -usrpwd pwdoradim是 9i 在 Windows 上管理实例的唯一正规方式。我在踩坑中发现补丁后第一次用oradim启动很可能出现ORA-12432原因是sqlnet.ora里的SQLNET.AUTHENTICATION_SERVICES (NTS)被补丁改成了空。检查并恢复该行即可解决。如果监听启动时提示TNS-01155: Incorrectly specified service多半是listener.ora中SID_LIST的GLOBAL_DBNAME与实例名大小写不一致。9i 对大小写敏感统一改成大写。启动完成后用tnsping测试别名再执行sqlplus / as sysdba验证本地连接。4.4 部署 Data Guard 或 RAC 时的快速校验如果你用这个补丁包维护的是 RAC 环境addNode.bat会比普通安装更常用。执行前先确认新节点与主节点时间偏差在 30 秒以内且 Oracle Home 路径完全一致。然后使用set ORACLE_HOMEC:\oracle\ora92 set ORACLE_SIDORCL2 call addNode.bat -silent -responseFile C:\ora9i_patch\rac_node.rsprac_node.rsp里要写清楚节点名、虚拟 IP 和集群私有网段。如果脚本在复制JavaAccessBridge.dll时报权限错误回头做 3.2 节提到的 ACL 授权。RAC 节点添加成功后用srvctl status database -d orcl看不到新节点需要手工把监听注册到新节点上9i 的srvctl不如 10g 以后版本自动化别指望addNode.bat一次完成全部配置。5. 老库最后一步从补丁包反向提取最小恢复工具集5.1 用 unzip.exe 和 access_setup.bat 做离线急救万一系统崩溃无法运行 setup.exe这个 zip 里的 unzip.exe 就是你的急救工具。把它解压到独立盘符的根目录再配合 access_setup.bat 恢复 Oracle Home 目录的可写状态c:\temp\unzip.exe -o p4547809_92080_WINNT64.zip -d d:\ora9i_restore d:\ora9i_restore\access_setup.bat D:\oracle\ora92这里的-o表示覆盖重名文件-d指定解压目标。access_setup.bat 后面跟的第一个参数是 Oracle Home 路径脚本内部会执行attrib -R和icacls把只读属性去掉避免恢复过程中DLL文件无法写入。我在多个 2003 迁移案例中用过这个组合比重新装一个 9i 快三个小时以上。需要注意急救恢复时不要覆盖init.ora、spfile.ora和tnsnames.ora只恢复bin目录和network/admin下的默认文件。5.2 用补丁号反查升级路线9208 到 11g/19c 的桥梁p4547809 提供的是 9.2.0.8这是 9i 的最终版也是升级到 10g/11g 的唯一受支持基线。如果你准备把库迁到 19c先在现有 9i 上做全库导出exp system/managerORCL filed:\backup\full.dmp logexp.log fully consistentyconsistenty保证导出期间不产生跨块一致性错误。然后在目标 11g/19c 上使用impdp导入。注意 9i 的 exp 版本太老无法直接用 impdp 读需要先导入到 11g 再expdp一次这个中转过程能避免字符集转换问题。补丁包内的 setup.exe 本身不能跨版本升级数据库只能把原库交付给 DataGuard 物理备库做滚动升级。5.3 下载保管建议别改了 zip 原始字节有 DBA 喜欢把补丁包里的setup.exe拷出来单存这其实是坏习惯。Oracle 补丁的 zip 有内部 CRC移动单个文件会让后续校验失败。即便是为了修复“error read zip archive”的错误也应保留原始 zip 文件并通过另存方式复制整个压缩包。7-Zip打开时如果提示“头部错误”不要点修复。一旦修复zip 内的文件时间戳会被修改安装程序会把它当成损坏包而拒绝执行。遇到这种情况直接用原始下载的 zip 重新解压。还有一点不要用“zip压缩大师”或“超人zip解密助手”这类工具去整理压缩包内部结构它们会重排压缩流OUI 在读取时会因偏移变化而中断。5.4 快速自检脚本确认 JAVA 桥与 DLL 版本一次到位最后给一个验证脚本片段存放为check9i.cmd把每项检查结果追加到report.txtecho off set OHC:\oracle\ora92 echo %date% %time% report.txt for %%f in (JavaAccessBridge.dll JAWTAccessBridge.dll orasrvm10.dll) do ( wmic datafile where name%OH:\\\%;\\bin\\%%f get version /format:csv | findstr /i valid report.txt ) sqlplus /nolog check.sql report.txt脚本核心是让wmic逐个检查关键 DLL 的版本是否处于可用状态findstr /i valid只保留正常输出行。check.sql内可以放select status from product_component_version;。这个组合能在一分钟内判断补丁是否被后续维护动作破坏比翻alert.log直观得多。如果脚本输出里orasrvm10.dll的版本缺失说明补丁文件没有被正确部署优先检查%ORACLE_HOME%\bin目录 ACL。本文还有配套的精品资源点击获取
返回列表