首页 / 资讯中心 / 文章详情

Oracle 9i 在 64 位 Linux 上部署:p4547809_92080 补丁集实战指南

Oracle 9i 在 64 位 Linux 上部署:p4547809_92080 补丁集实战指南 ★ FEATURED ARTICLE
简介这是一份 Oracle 9i 的 Linux x86-64 平台补丁压缩包面向仍需维护或部署旧版数据库系统的人员可用于在 64 位 Linux 环境下完成数据库软件的安装配置。包体大小约四百六十四点六七兆字节内含安装说明文档与主要安装组件覆盖图形化安装引导、核心文件及初始化所需内容。该版本包含数据仓库优化、在线重定义与高级复制等特性安装时涉及环境变量、系统权限和网络参数设置资源对这些操作具有直接参考价值目前已有百余人学习下载。需要留意的是Oracle 9i 属于较老版本官方支持已终止可能不完全兼容现代安全规范更适合存量系统维护或技术研究场景使用前应仔细阅读包内文档确认系统版本、硬件与磁盘空间等前提条件并做好后续升级规划。1. Oracle 9i 的 64 位 Linux 部署没那么玄学p4547809_92080 这个 9.2.0.8 介质包就是答案某制造企业的核心报表库还在跑 Oracle 9i史前系统迁到 64 位 Linux 服务器后前后两任 DBA 装了三次都是半路崩溃。问题就出在没人认真拆过 p4547809_92080_Linux-x86-64.zip 这个 9.2.0.8 补丁集介质——它不是简单解压就能跑的安装盘而是带了一堆 64 位平台专属的兼容要求和安装顺序。这个包能解决的核心问题有三个在 AMD64/Intel x86-64 架构 Linux 上完整部署 Oracle 9i、把旧库的还原环境跑起来、以及给暂时迁不动数据的老业务系统兜底。适合接手旧系统维护的 DBA也适合需要在测试环境复现 9i 行为的技术人员。先提醒一句这个版本的安装流程和现代数据库差别不小坑集中在图形界面起不来、共享内存配置、字符集选择这三块下文逐个拆。2. 拆包先认清介质与组件Disk1 与 README.html 的用途和 64 位兼容边界2.1 压缩包里有什么Disk1 与 README.html 的用途文件名 p4547809_92080_Linux-x86-64.zip 承载的信息比想象中多。p4547809 是补丁集编号92080 对应 9.2.0.8Linux-x86-64 是平台标识。9.2.0.8 是 9i 第二版9.2的最后一个 patch set基本是 9i 在 Linux 上最成熟的介质。如果你手上还有早期安装介质还在 9.2.0.4 甚至 9.0.x 版本这个包相当于补票升级能顺带修复一批已记录的问题。解压后第一层通常就是 Disk1 子目录和 README.html。Disk1 里是安装主程序的内容包括 runInstaller、stage 目录、install 目录标准 Oracle 介质布局原本会分 Disk1、Disk2、Disk3但 9.2.0.8 在 Linux x86-64 上往往只给一个 Disk1大部分组件都装进去了后面几个盘的内容只在选装高级组件时才会提示。我一般先把包解压到一个固定目录方便后续反复调用mkdir -p /opt/oracle_media mv p4547809_92080_Linux-x86-64.zip /opt/oracle_media/ cd /opt/oracle_media unzip -q p4547809_92080_Linux-x86-64.zip解压命令本身没有技术含量但我会在解压前用zipinfo先看一眼包内文件结构确认 Disk1 目录是否完整、有没有 p4491726 之类的依赖补丁说明zipinfo p4547809_92080_Linux-x86-64.zip | head -20然后找到 README.html用浏览器打开。这份文档里写了系统需求、内核版本要求、已知问题和解决建议。9i 属于经常有前置补丁要求的版本README.html 相当于官方给的一份安装前检查清单。我踩过的最典型的坑就是跳过 README 直接开始装结果装到 48% 卡住回头翻文档才发现系统缺一个 x86-64 兼容库。2.2 让老 OUI 在 64 位 Linux 上活过来32 位库与 LD_ASSUME_KERNELOracle 9i 的图形安装程序 runInstaller 本质上是 32 位程序。虽然介质包名为 Linux-x86-64但 OUI 本身在 64 位系统上运行要靠 32 位兼容库撑着。这里的核心矛盾是9i 那个年代 Linux 发行版普遍是 32 位而现在的 64 位系统默认不装 32 位库导致 runInstaller 启动报错或直接闪退。常见做法是补装 glibc 的 32 位版本、libaio 的 32 位版本、libXp 的 32 位版本。在 RHEL 6 上我会执行yum install -y glibc.i686 glibc-devel.i686 libaio.i686 libXp.i686 libXt.i686 libXtst.i686参数说明glibc.i686 提供 32 位 C 运行库runInstaller 和 sqlplus 都要依赖它libaio.i686 是 32 位异步 IO 库Oracle 的 IO 进程会用到libXp.i686 是 X11 打印扩展库OUI 图形界面需要它绘制窗口。缺任何一个表现都是 OUI 启动时报error while loading shared libraries。还有另一个经典兼容开关LD_ASSUME_KERNEL。9i 时代 Linux 内核线程模型还是 NPTL 与 LinuxThreads 并存的过渡期9.2.0.8 在较新内核上偶尔出现核心进程崩溃我会在启动 runInstaller 前设置export LD_ASSUME_KERNEL2.4.19 ./runInstaller注意LD_ASSUME_KERNEL2.4.19是让动态链接器模拟老内核的行为强制采用旧线程模型能绕开 9i 与新版 glibc 的 NPTL 冲突。但这不是万能钥匙Red Hat 系的系统在新版本上如果 glibc 太新这个变量可能失效甚至引起段错误需要根据实际内核版本决定是否使用。2.3 内核参数与专用账户9i 的共享内存和信号量门槛Oracle 9i 对共享内存和信号量的要求比现代版本更刚性。64 位系统默认的kernel.shmmax经常只有 32MB而 Oracle 9i SGA 启动时至少要上百 MB两者直接冲突。我先把内核参数调整到位避免安装后实例起不来参数推荐值作用kernel.shmmax21474836482GB单个共享内存段上限决定 SGA 能否分配kernel.shmall536870912系统总共享内存页数上限kernel.sem250 32000 100 128信号量参数SEMMSL、SEMMNS、SEMOPM、SEMMNIfs.file-max65536文件句柄上限影响并发连接net.ipv4.ip_local_port_range1024 65000扩大端口范围避免连接数多时端口耗尽设置方式cat /etc/sysctl.conf EOF kernel.shmmax 2147483648 kernel.shmall 536870912 kernel.sem 250 32000 100 128 fs.file-max 65536 net.ipv4.ip_local_port_range 1024 65000 EOF sysctl -p创建专用账户也是安装前必做的动作。9i 不允许用 root 用户启动 OUI常规做法是建一个 oracle 用户和 dba 组groupadd dba useradd -g dba -d /home/oracle -m oracle passwd oracle然后编辑 /etc/security/limits.conf把 oracle 用户能打开的进程数和文件数调大oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536这一步的目的很直接数据库后台进程数多跑起来后每会话都要占用文件描述符不调大后面会遇到ORA-12518: TNS:listener could not hand off client connection或者进程 fork 失败。3. 跑通 runInstaller图形与静默两套流程把 Oracle Home 装进 64 位系统3.1 先别急着点下一步环境变量与 dba 组准备装 Oracle 前必须先把 oracle 用户的环境变量规划好。9i 不像 12c 以后那样有 OCI 自动配置ORACLE_HOME、ORACLE_SID、PATH、LD_LIBRARY_PATH 全手工指定。我习惯把环境变量写在 oracle 用户的.bash_profile里内容如下# oracle 用户的 .bash_profile export ORACLE_BASE/opt/oracle export ORACLE_HOME/opt/oracle/product/9.2.0/db_1 export ORACLE_SIDorcl export PATH$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:/lib:/usr/lib export LANGC umask 022每个变量各管一摊事ORACLE_BASE 是 Oracle 软件根目录ORACLE_HOME 指向实际的数据库软件安装位置ORACLE_SID 决定当前实例名后面建库、启库都要参考它LD_LIBRARY_PATH 保证 sqlplus、lsnrctl 这些工具能找到 libclntsh.so、libnnz9.so 这些运行库LANGC 是防止图形界面中文乱码。设置好之后让环境变量生效source ~/.bash_profile echo $ORACLE_HOME3.2 图形安装runInstaller 的安装步骤与输入项环境变量就绪后进入 Disk1 目录启动安装程序。我需要以 oracle 用户身份执行而且要在能显示 X 窗口的会话里cd /opt/oracle_media/Disk1 export LD_ASSUME_KERNEL2.4.19 ./runInstallerOUI 启动后是一套老式的 Java 图形向导我按实际经验把关键输入项列出来。第一个界面选择 Inventory 目录默认值是/opt/oracle/oraInventory这个目录记录已安装产品的清单权限必须归 oracle 用户随后选择 UNIX 组名填 dba。第二个界面是安装类型选 Enterprise Edition 完整版本接下来指定 ORACLE_HOME 路径必须与.bash_profile里配置一致。最后 OUI 会要求填 Unix 组名和运行安装的登录用户直接选 oracle。中间还会遇到一个 ORACLE_SID 与监听端口 的输入步骤SID 填 orcl监听端口用默认的 1521。字符集选择是很关键的一步9i 的字符集清单里没有 AL32UTF8我一般选 Unicode 标准 UTF-8 编码选错字符集后面建库会出现字符集不匹配的连锁问题。安装过程中 OUI 会提示以 root 执行两个脚本。先是在弹窗里让填 root 脚本路径我打开新终端执行su - root /opt/oracle/product/9.2.0/db_1/root.shroot.sh 会自动把 Oracle 二进制文件的属主改成 root同时把一些需要特权访问的目录权限设置正确还会生成/etc/oratab文件这个文件记录 ORACLE_HOME 与 ORACLE_SID 的对应关系。3.3 静默安装responseFile 一次跑完图形界面在批量部署时太痛苦生产环境我反而更常用静默安装。OUI 支持通过响应文件传入全部配置项。9i 的响应文件模板在 Disk1 的install目录下路径类似install/oracle/9.2.0/response。静默安装命令是cd /opt/oracle_media/Disk1 ./runInstaller -silent -responseFile /opt/oracle_response/install.rsp响应文件里必须改几个关键参数。我用一个简化版来说明# install.rsp 关键参数摘录 ORACLE_HOME/opt/oracle/product/9.2.0/db_1 ORACLE_HOME_NAMEOraHome92 ORACLE_SIDorcl COMPONENT_LANGUAGES{en,zh_CN} INSTALL_TYPEEE UNIX_GROUP_NAMEdba # 以下两个参数用于声明忽略系统依赖检查 FROM_DEFAULT_ORACLE_HOMEfalse SHOW_ALL_SW_AGREEMENTSfalseRUNINSTALL 参数含义-silent表示免交互执行-responseFile指向响应文件的绝对路径响应文件里 INSTALL_TYPEEE 对应 Enterprise EditionUNIX_GROUP_NAME 必须与创建 oracle 用户的组一致否则 OUI 会在权限检查处直接中断。静默安装最容易翻车的地方是 oracle 用户对响应文件的读权限。我处理的方法是把 install.rsp 复制到 oracle 用户家目录下并确保属主正确chown oracle:dba /opt/oracle_response/install.rsp chmod 600 /opt/oracle_response/install.rsp另外还要注意静默安装同样要求 root.sh 脚本被手动执行安装到结尾 OUI 会打印一个日志路径里面明确标注 Please execute /opt/oracle/product/9.2.0/db_1/root.sh。这一步不会自动完成漏掉就会留下一个半成品安装目录。4. 避坑排查从 OUI 起不来表到 DBCA 建库崩这几条血泪经验直接抄4.1 现象runInstaller 启动后界面一闪而过或报缺库最常见的场景执行./runInstaller后屏幕输出error while loading shared libraries: libXp.so.6: cannot open shared object file然后进程退出。原因就是 64 位系统缺少 32 位 X11 库OUI 这个 32 位程序找不到对应运行库。解决方式就是前面第 2.2 节里的库安装命令逐一把缺的库补上。我一般用ldd直接查看 runInstaller 的依赖关系精准定位缺哪个ldd /opt/oracle_media/Disk1/runInstaller | grep not found输出几行not found缺哪个装哪个比逐个乱试效率高得多。4.2 现象安装没问题但建库或启动时报 ORA-27102: out of memoryORA-27102 听起来像内存不够但实际往往不是物理内存不足而是内核共享内存参数有问题。我在某测试服务器上就遇到一次机器 8GB 内存SGA 才配 512MB照样报 ORA-27102。排查办法是查看当前共享内存上限sysctl kernel.shmmax如果返回值只有 3355443232MB那 SGA 根本分配不出来。解决方式就是按第 2.3 节的 sysctl.conf 配置改参数并执行sysctl -p然后重启数据库实例验证。4.3 现象启动时报 semget 失败ORA-27121: unable to determine size of shared memory segment这组报错和信号量参数不匹配有关。9i 的信号量要求包含 SEMMSL、SEMMNS、SEMOPM、SEMMNI 四个值前面表格里给的那组250 32000 100 128是经过验证的组合。如果 SEMMNS 太小数据库进程一多信号量就耗尽。先看当前生效值sysctl kernel.sem如果第二个数字SEMMNS小于 1000基本可以确定是这里的问题。把/etc/sysctl.conf里 kernel.sem 改成250 32000 100 128再sysctl -p。4.4 现象DBCA 建库时字符集下拉列表里找不到 AL32UTF8这是 9i 最容易踩的坑之一。AL32UTF8 是 10g 之后才支持的 Oracle 字符集名9.2.0.8 的 DBCA 里根本没有这个选项。如果我建库时选了 UTF-8 字符集后续数据迁移到新库时经常出现字符集转换的告警。我的习惯是在 9i 上统一选 UTF-8数据库字符集国家字符集选 AL16UTF16这样与 10g/11g 的兼容性最好。建库后验证一下当前字符集SELECT * FROM nls_database_parameters WHERE parameter NLS_CHARACTERSET;4.5 现象数据库装完重启服务器后实例起不来sqlplus 报 ORA-12547: TNS:lost contact这个报错大多不是监听挂了而是 root.sh 没执行干净或者/etc/oratab配置有问题。装完 9i 以后/etc/oratab里应该有一行类似orcl:/opt/oracle/product/9.2.0/db_1:N如果这行不存在监听和实例启动脚本都找不到数据库配置。排查办法是先看 oratab 内容cat /etc/oratab没有的话重新执行一次 root.sh。执行时要注意root.sh 在交互过程中会问是否把 oratab 里的条目启动标志改成 Y这取决于是否需要随系统自启动。5. 装完先验证再收工一套 5 分钟的 sqlplus 健康检查与回滚方案软件装完、数据库建好别急着注册服务先做一次最低限度的健康检查。我会花 5 分钟跑一遍下面这组命令# 切换 oracle 用户确认环境变量生效 su - oracle sqlplus / as sysdbaSQL*Plus 里依次执行三件套-- 1. 确认实例能启动 STARTUP; -- 2. 看数据库状态 SELECT instance_name, status FROM v$instance; -- 3. 看后台进程是否齐活 SELECT program FROM v$process WHERE program LIKE %DBW% OR program LIKE %LGWR%;正常输出应该是 instance_name 返回 orclstatus 为 OPENDBW0、LGWR 这些后台进程在列里。如果 STARTUP 卡住不动立刻去检查$ORACLE_HOME/network/log/listener.log和 alert 日志——9i 的告警日志默认在$ORACLE_HOME/admin/orcl/bdump/alert_orcl.log。健康检查通过后我没有立刻收工而是把三件套文件备份一份。9i 的配置一旦被误改恢复全靠这些文件cp $ORACLE_HOME/network/admin/listener.ora /opt/backup/listener.ora.bak cp $ORACLE_HOME/network/admin/tnsnames.ora /opt/backup/tnsnames.ora.bak cp $ORACLE_HOME/dbs/initORCL.ora /opt/backup/initORCL.ora.bak这三份文件分别控制监听、客户端连接解析、实例初始化参数。当初我在一个模拟项目 X 里就是没做这个备份某次改监听端口后把 listener.ora 写坏恢复无门白白浪费了一个晚上。从那以后我每次装完 9i这三件套都先复制到独立目录验证过内容再继续调业务。关于 9i 在 64 位 Linux 上的生产使用我的最终建议是这个版本能做历史数据的查询和报表支撑但新业务不要往里面写安全补丁和官方支持都已经停了尽量把它当成一个存量系统运行环境而不是新应用承载平台。如果你拿到的介质是 p4547809_92080 系列照着这套流程走解压、装库、验证三步都能落地。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站