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

Oracle 11gR2 Linux安装卡点:图形、介质、前置检查与监听

Oracle 11gR2 Linux安装卡点:图形、介质、前置检查与监听 ★ FEATURED ARTICLE
简介面向Linux平台数据库运维人员与Oracle初学者的图解式安装文档聚焦Oracle 11g Release 2单机环境部署中依赖检查、用户组与环境变量配置、安装向导选项判断等易错环节。文档以1个doc文件交付压缩包约1.73MB体积轻便便于在实施现场离线查阅与对照操作。内容围绕runInstaller启动、安装类型与组件选择、Inventory目录和OS组指定、系统安装检查、root脚本执行以及netca监听配置和dbca建库等流程展开并提示分辨率调整、双盘解压到同一目录、空间不足报错可忽略等实践细节。文中还强调数据库服务名需与ORACLE_SID保持一致、字符集可选UTF-8以支持中文等关键点可作为安装前检查清单和过程排错参考。已有134人学习适合需要按图解逐步完成单机部署并减少配置返工的读者。1. 装了三遍才明白11gR2 卡住人的地方不在点 Next第一次在 Linux 上装 Oracle 11gR2./runInstaller敲下去终端刷了两行就退回提示符了连个报错窗口都没留下。第二次界面出来了装到一半跳出“找不到某个文件”。第三次装完了sqlplus / as sysdba进去直接 ORA-01034。三次失败没有一次是因为点错 Next——全卡在图形环境、安装介质和前置配置上。Oracle 11gR2 在 Linux 上的安装流程本身不复杂难的是它把几乎所有配置错误都推迟到某个看似无关的步骤才暴露。这篇按故障类型拆每一类报错先讲触发条件再讲怎么查最后给能直接抄的命令。适合第一次在 Linux 上装 11gR2 被卡住的人也适合装过几次但每次都要重新翻手册的人。2. runInstaller 起不来DISPLAY、分辨率与乱码的排查顺序runInstaller是整套安装里第一个拦路虎也是最容易被误判的一步。它本质是个 Java 图形程序依赖 X11 通道。只要 X 通道不通它不会给你一个像样的错误提示而是打印几行堆栈就退出看上去像是“安装程序坏了”。判断顺序应该是先确认当前 shell 有没有可用的 DISPLAY再确认分辨率够不够放得下安装窗口最后才怀疑 Java 本身。2.1 敲完命令就退回先用 xdpyinfo 判断 X 通道典型现象是在 SSH 会话里执行./runInstaller终端输出类似java.lang.NoClassDefFoundError或者干脆只有Exception in thread main然后回到提示符。很多人第一反应是 JDK 版本不对、包没装全其实九成以上是 DISPLAY 没设或者 X 转发没开。排查不要靠猜按下面三条依次验证# 1. 当前 shell 里到底有没有 DISPLAY echo $DISPLAY # 正常输出形如 :0.0本机图形桌面或 192.168.1.20:10.0X 转发 # 2. X 通道是否真的可用能输出版本和分辨率就说明通 xdpyinfo | head -5 # 3. 如果是以 root 登录再 su 到 oracleX 授权需要显式放开 xhost 第一行是判断有没有设置第二行是判断设置得对不对。很多情况下echo $DISPLAY有值但xdpyinfo报unable to open display这说明显示变量存在、通道不存在——常见于用su oracle切换用户后环境变量被清掉或者 X 服务端没允许该用户连接。第三行的xhost 只是临时放开访问控制装完记得用xhost -收回别长期开着。如果确认安装在虚拟机里直接在虚拟机自带的图形桌面里打开终端跑runInstaller比折腾 X 转发省事得多。DISPLAY:0.0这种情况在本地桌面会话里几乎总是有效的。2.2 界面出来了但按钮点不到分辨率、VMware 与滚动第二个高频现象更隐蔽安装界面能弹出来但窗口比屏幕大底部的 Next 按钮被截在屏幕外鼠标滚轮也滚不动。Oracle 的 OUI 窗口写死了最小尺寸分辨率低于 1024×768 时就会出现这个问题。处理方式分两层。先在当前会话里临时改分辨率验证# 查看当前支持的分辨率模式 xrandr # 临时切到 1024x768验证是不是分辨率问题 xrandr -s 1024x768xrandr不带参数会列出所有可用模式带-s是立即切换。如果列表里根本没有 1024×768说明虚拟显卡驱动没装好这才是根因。在虚拟机里跑的场景装完 VMware Tools或对应的增强工具之后分辨率列表才会出现足够多的选项没装工具时通常只有 800×600 一档怎么调都不够。还有一个小技巧窗口拖不动的时候按住 Alt 再拖动鼠标左键可以把窗口整体往上推把底部按钮挪进可视区域。这招在临时救急时很好用但别指望它解决根本问题——分辨率不够时某些对话框的输入框会被挤压到无法输入装到一半还是会卡住。2.3 中文全是方块LANG、字体包与安装语言第三个现象是界面能显示但中文全是小方块或者安装过程中出现大量乱码。这不是 Oracle 的问题是系统缺中文字体或者 LANG 和实际字体不匹配。安装前可以先看一眼当前语言环境echo $LANG # 常见值en_US.UTF-8、zh_CN.UTF-8、C locale | head -3如果LANG是zh_CN.UTF-8但系统没装中文字体包Java 找不到对应字形就会渲染成方块。两种处理方式要么把语言切成英文再装要么补齐字体包。切英文最省事安装过程中选择“English”作为安装语言装完再按业务需要设字符集两者互不影响。这里有个容易被混淆的点安装界面语言和数据库字符集是两回事。界面选英文只是让 OUI 用英文显示最终建库时字符集仍然要选UTF-8准确说是AL32UTF8否则后面存中文会出问题。这两个设置在不同的步骤里别因为界面切了英文就以为字符集也变了。2.4 实在没有图形界面静默安装的响应文件有些环境确实给不了图形界面比如只有字符界面的测试机。这时候不要硬折腾 X直接走静默安装。核心是准备一份响应文件把原本在界面上点选的选项全部写进去# response/db_install.rsp 关键段落其余保持默认 UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oraInventory SELECTED_LANGUAGESen,zh_CN ORACLE_HOME/u01/app/oracle/product/11.2.0/db_1 ORACLE_BASE/u01/app/oracle oracle.install.optionINSTALL_DB_SWONLY INSTALL_DB_AND_CONFIGfalse ORACLE_EDITIONEE ORACLE_HOSTNAMEdb01.localdomainoracle.install.optionINSTALL_DB_SWONLY对应界面上的“只安装软件”装完再用 DBCA 单独建库和图形安装路径完全一致。ORACLE_EDITION填EE是企业版。ORACLE_HOSTNAME必须和hostname命令的输出一致不一致会在检查阶段报主机名解析失败。执行方式# 用响应文件静默安装日志会实时打印出错时看最后 50 行定位 ./runInstaller -silent -responseFile /home/oracle/response/db_install.rsp \ -ignorePrereq -waitforcompletion-ignorePrereq是跳过前置检查只在明确知道缺什么、且不影响安装的情况下用正常首次安装不要加。-waitforcompletion让命令阻塞到安装结束方便脚本里判断退出码不加的话它会后台跑容易误判成失败。3. 安装介质与路径INS-32025、找不到文件与 Inventory 权限图形界面走通之后第二个大坑在介质和目录上。11gR2 分两张盘很多人图省事只解压了第一张或者两张解到了不同目录安装进行到某个组件时突然报“找不到文件”。这类错误的特点是报错位置和真正的原因相隔很远看到报错时已经装了十几分钟。3.1 两张盘要解到同一个目录中途报“找不到文件”的根因安装程序在运行过程中会从stage/Components下按需读取组件包这些包分散在两份介质里。如果只解压了第一张第一阶段能顺利走完到选择组件时才开始报错日志里类似INS-32025或者直接抛出某个.jar路径不存在。正确的做法是把两张盘解压到同一个父目录让它们的内容合并# 建一个统一的解压目录 mkdir -p /u01/soft/database # 第一张盘解压进来 unzip linux.x64_11gR2_database_1of2.zip -d /u01/soft/database/ # 第二张盘解压到同一个目录遇到重复询问时选择覆盖目录结构 unzip linux.x64_11gR2_database_2of2.zip -d /u01/soft/database/ # 验证stage/Components 下应该有两张盘各自的组件目录 ls /u01/soft/database/database/stage/Components | wc -l第三个命令是验收动作。只解一张盘时这个数字会明显偏小解全之后组件目录数量会翻倍。安装前花十秒看一眼能省掉半小时重装。如果目录已经解错了不要试图删掉重解导致半途而废的安装——先把u01/app/oracle和u01/app/oraInventory清掉再重新解压、重新跑runInstaller。Oracle 的安装程序对残留目录很敏感上一次的半成品会让下一次报INS-32025: The chosen installation conflicts with software already installed in the given Oracle home。3.2 Inventory 目录与 oraInst.locoinstall 组、属主和权限安装走到第 12 步左右会要求填 Inventory Directory界面上的默认值通常是/u01/app/oraInventory。这个目录存的是 Oracle 软件的清单信息权限错了后面所有脚本都会失败。必须满足三条属主是oracle:oinstall目录权限 755 以上路径所在的分区有足够空间。检查命令# 建目录并设属主注意用 oracle 用户所属的主组 oinstall mkdir -p /u01/app/oraInventory chown -R oracle:oinstall /u01/app/oraInventory chmod -R 775 /u01/app/oraInventory # 确认 oraInst.loc 指向了正确的清单目录 cat /etc/oraInst.loc # 期望内容 # inventory_loc/u01/app/oraInventory # inst_groupoinstall/etc/oraInst.loc是个容易被忽略的文件。如果之前装过别的 Oracle 产品或者手工拷贝过环境这个文件可能指向一个已删除的旧路径安装程序读不到就会报权限错误或者直接跳过清单初始化。发现路径不对直接改这个文件两行内容改完再装。权限问题上还有一个细节/u01这一层如果是 root 建的、权限 755oracle 用户在里面创建子目录是没问题的但如果/u01被设成了750且属主不是 oracle 所属组第一步 mkdir 就会失败。遇到“无法创建目录”的报错往上逐层ls -ld看权限别只盯着最里层。3.3 ORACLE_BASE 与 ORACLE_HOME路径规划错了后面全是坑路径规划看着是小事实际上是后面所有问题的源头。11gR2 的标准分层是变量典型值用途ORACLE_BASE/u01/app/oracle所有 Oracle 产品的根目录ORACLE_HOME/u01/app/oracle/product/11.2.0/db_1本次安装的软件家目录ORACLE_SIDorcl实例名建库时必须一致oraInventory/u01/app/oraInventory软件清单与 BASE 同级关键约束是ORACLE_HOME必须位于ORACLE_BASE之下且路径里不要出现空格、中文、大小写混用。这一点在界面上不会强校验填错了照样能装完但后面dbca建库、netca配监听时会因为路径解析问题报各种莫名其妙的错。另一个常见误操作是把ORACLE_HOME直接设成/u01/app/oracle和ORACLE_BASE同名。这种配置在单实例下勉强能跑但一旦要装第二个实例或者打补丁清单会混乱到无法收拾。从第一次安装就按标准三层结构来不要图省事压平。4. 前置检查红叉包的缺失、内核参数与 root.sh 执行失败走到安装检查那一步界面上会列出十几项检查结果有的打勾有的打叉。这一屏是整场安装里信息量最大的地方但也是最容易被“先忽略试试”糊弄过去的地方。我的经验是红叉分两类一类可以忽略一类忽略之后一定在更靠后的步骤炸出来而且报错和原因完全对不上。4.1 先找到那份检查报告别对着界面猜OUI 界面上只显示一行简短描述完整原因在日志里。安装过程中会生成一个临时目录路径形如/tmp/OraInstall20240101_101010/里面有installActions*.log和oraInstall*.err。安装结束后同样的日志会被归档到oraInventory/logs下。# 找到本次安装的日志目录 ls -dt /tmp/OraInstall* | head -1 # 直接在日志里搜检查项PRVF 前缀的是前置检查 grep -i prvf\|check failed\|not found /tmp/OraInstall*/installActions*.log | head -20PRVF是 pre-requisite validation failure 的缩写打出这些行之后基本就能对上是缺包、缺内存还是参数不对。养成先看日志再动手的习惯比在界面上逐条猜快得多。4.2 package 缺失与 swap 不足哪些能忽略哪些不能11gR2 依赖的包不算多但漏一个就可能在检查阶段红一片。批量核对比逐个rpm -q高效# 逐个核对 11gR2 必需包MISS 的就是要补的 for pkg in binutils compat-libstdc-33 elfutils-libelf elfutils-libelf-devel \ gcc gcc-c glibc glibc-common glibc-devel libaio libaio-devel \ libgcc libstdc libstdc-devel make sysstat unixODBC unixODBC-devel; do rpm -q $pkg /dev/null 21 echo OK $pkg || echo MISS $pkg done输出里出现MISS的行用yum install -y 包名补齐即可。注意compat-libstdc-33在较新的发行版仓库里可能已经改名找不到时先yum search libstdc看看对应版本。swap 检查是另一个高频红叉。官方建议 swap 大小和物理内存挂钩内存 2G 到 8G 之间时 swap 建议等于内存大小。检查free -m # 看 Swap 那一行为 0 或者明显偏小时需要补如果机器上确实没配 swap检查会报错但允许忽略。我的建议是不要忽略因为 11gR2 的内存分配器在建库阶段会申请较大的共享内存段swap 太小容易在建库时直接 OOM 杀掉进程报错信息只有一句 ORA-27102排查起来很费劲。临时补一个 swap 文件# 建一个 4G 的 swap 文件并启用 dd if/dev/zero of/swapfile bs1M count4096 chmod 600 /swapfile mkswap /swapfile swapon /swapfile # 写入 /etc/fstab 保证开机生效 echo /swapfile swap swap defaults 0 0 /etc/fstab4.3 内核参数与 ORA-27125shmmax、sem 和 limits.conf内核参数是检查项里最容易被“忽略”按钮放过去、然后在建库阶段以 ORA-27125 形式炸出来的东西。ORA-27125 的完整信息是unable to create shared memory segment根因就是kernel.shmmax或kernel.shmall太小。推荐配置写进/etc/sysctl.conf# Oracle 11gR2 推荐值物理内存 8G 以内基本通吃 kernel.shmmax 4294967295 kernel.shmall 1073741824 kernel.shmmni 4096 kernel.sem 250 32000 100 128 fs.file-max 6815744 fs.aio-max-nr 1048576 net.ipv4.ip_local_port_range 9000 65500 net.core.rmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_default 262144 net.core.wmem_max 1048576改完执行sysctl -p生效。kernel.shmmax的单位是字节4294967295 约等于 4G 减 1是 32 位时代的经典值64 位机器上按物理内存的一半设置也可以但不要超过物理内存。kernel.sem四个数字分别是SEMMSL SEMMNS SEMOPM SEMMNI写成一行中间用空格分隔写错分隔符会直接导致 sysctl 加载失败。同时要配 oracle 用户的资源限制写进/etc/security/limits.conforacle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240这里有个细节limits.conf对通过 SSH 登录的会话生效但对su - oracle这种切换方式不一定生效——取决于 PAM 配置。判断方法是切过去之后执行ulimit -n看输出是不是 65536。如果不是说明限制没进去需要检查/etc/pam.d/su里有没有启用pam_limits.so。4.4 root.sh 执行报错与环境变量没生效安装到最后OUI 会弹出一个小窗口要求用 root 执行两个脚本oraInstRoot.sh和root.sh。路径通常在$ORACLE_HOME下。这一步的报错往往是环境问题导致的。# 用 root 执行注意顺序先 oraInstRoot.sh 再 root.sh /u01/app/oraInventory/oraInstRoot.sh /u01/app/oracle/product/11.2.0/db_1/root.shroot.sh执行时会提示输入ORACLE_HOME之外的本地 bin 目录直接回车走默认/usr/local/bin即可。它做的事情是把dbhome、oraenv、coraenv这几个脚本软链到系统路径并初始化/etc/oratab。失败最常见的原因是/usr/local/bin不可写或者之前装过 Oracle 残留了同名软链。环境变量这一块很多人是在当前 shell 里export一遍就开始装装完关掉终端全丢。正确做法是写进~/.bash_profile# ~/.bash_profile 追加注意 ORACLE_SID 要和后面建库时填的服务名一致 export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/11.2.0/db_1 export ORACLE_SIDorcl export PATH$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:$LD_LIBRARY_PATH export NLS_LANGAMERICAN_AMERICA.AL32UTF8改完source ~/.bash_profile然后执行env | grep ORA确认四个变量都在。LD_LIBRARY_PATH特别关键缺了它sqlplus会报error while loading shared libraries: libclntsh.so这个报错看上去像是库文件丢失其实就是路径没配。5. 装完连不上监听、建库与环境变量的避坑清单装完软件不代表能用。11gR2 把软件安装和数据库创建拆成了两步中间还夹着监听配置。这三步里任何一步的配置不一致表现出来的结果都是同一个sqlplus连不上。下面这几条是我和身边人反复踩过的按“现象 → 原因 → 解决”整理。5.1 ORACLE_SID 对不上dbca 建完库 sqlplus 也进不去现象dbca显示建库成功紧接着执行sqlplus / as sysdba报ORA-01034: ORACLE not available和ORA-27101: shared memory realm does not exist。原因dbca建库时填的“全局数据库名 / SID”和~/.bash_profile里的ORACLE_SID不是同一个值。sqlplus / as sysdba走的是操作系统认证它按ORACLE_SID去找共享内存段找不到就报 27101。这是最典型的“两个配置项各写各的”。解决建库前先把ORACLE_SID定死dbca里填写时逐字对照。建完用下面两条验证# 确认当前 shell 认的 SID echo $ORACLE_SID # 确认实例真的起来了 ps -ef | grep pmon # 输出里应该有一行 ora_pmon_orclorcl 必须和上面的 SID 一致如果pmon进程存在但sqlplus还是连不上多半是ORACLE_SID大小写问题——Oracle 的 SID 在多数场景下不区分大小写但在/etc/oratab和环境变量里混用会导致oraenv找错条目。5.2 netca 起不来监听1521 端口与 hosts 解析现象netca执行后走完向导lsnrctl status却报TNS-12541: TNS:no listener或者直接TNS-12560: TNS:protocol adapter error。原因通常有两个。一是/etc/hosts里没有把主机名解析到本机 IP监听器启动时要绑定地址解析不到就起不来二是 1521 端口被占用或者防火墙挡了外部访问本地lsnrctl status一般不受防火墙影响但客户端连不上会先怀疑监听。解决# 1. 确认主机名能解析到本机地址 hostname grep $(hostname) /etc/hosts # 期望有一行形如 192.168.1.20 db01.localdomain db01 # 2. 确认端口没被占 netstat -tlnp | grep 1521 # 3. 手动起监听并看详细输出 lsnrctl start lsnrctl statuslsnrctl status的输出里会列出监听地址和已注册的服务。如果服务列表是空的但监听是 running说明数据库实例还没注册上去等几十秒或者执行alter system register;手动注册。5.3 字符集选错中文写进去变成问号现象建库时字符集选了默认值之后往表里插中文查出来全是???。原因dbca建库向导里字符集那一屏如果没手动改默认可能是WE8MSWIN1252或WE8ISO8859P1这两个都不支持中文。安装时正文里明确写了要选 UTF-8对应到 11gR2 里就是AL32UTF8。解决如果库刚建、还没数据直接删库重来最省事。已经跑起来有数据的改字符集要通过ALTER DATABASE CHARACTER SET或者导出重建代价大得多。验证当前字符集-- 登录后查询数据库字符集 select parameter, value from nls_database_parameters where parameter in (NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET);NLS_CHARACTERSET应该是AL32UTF8。同时NLS_LANG环境变量要和它匹配结尾那段写成AL32UTF8两处一致才不会出现“库里存对了、客户端显示乱码”的情况。5.4 环境变量只写在当前 shell 里重开终端就丢现象装完之后一切正常第二天重新登录sqlplus提示 command not found。原因安装时是临时export的没有写进 shell 的启动文件或者写进了.bashrc但用的是非交互式登录su - oracle读的是.bash_profile。解决统一写进~/.bash_profile并且确认登录方式读的是这个文件。验证方法很直接——退出当前会话重新ssh登录一次执行which sqlplus能输出路径就说明生效了。如果输出空echo $PATH看有没有$ORACLE_HOME/bin没有就是启动文件没被读。5.5 装到一半中断怎么清干净再重装现象安装过程中断断网、磁盘满、手误关闭重新跑runInstaller报INS-32025或者卡在某个步骤无限等待。原因ORACLE_HOME和oraInventory里有上次的残留安装程序检测到非空目录就拒绝继续。解决彻底清空再重来。# 停掉可能残留的进程 ps -ef | grep -i oracle | grep -v grep # 确认没有 pmon/tnslsnr 之后删除安装目录 rm -rf /u01/app/oracle/product/11.2.0/db_1 rm -rf /u01/app/oraInventory # 如果有残留的 oraInst.loc一并处理掉再重新初始化 rm -f /etc/oraInst.loc /etc/oratab删除前务必确认这几个目录里没有别的东西尤其/etc/oratab如果被别的实例共用删掉会导致已有实例的oraenv失效。清理完重新解压介质、重新跑runInstaller不要在残留目录上强行续装。6. 快速定位两分钟判断卡在哪一层装到后面你会发现11gR2 的报错有个共同特点报错位置和真正原因相隔一到两个步骤。所以快速定位的核心不是记住所有错误码而是按层排除。我一般按这个顺序过一遍基本两分钟内能确定是哪一层的问题现象先查什么命令命令执行后立即退出X 通道echo $DISPLAY、xdpyinfo界面能开但按钮点不到分辨率xrandr、xrandr -s 1024x768装到中途报找不到文件介质完整性ls stage/Components | wc -l检查阶段大量红叉缺包rpm -q 包名、看installActions*.logORA-27125/ORA-27102内核参数sysctl kernel.shmmax、ipcs -lmORA-01034/ORA-27101SID 一致性echo $ORACLE_SID、ps -ef | grep pmonTNS-12541监听lsnrctl status、netstat -tlnp | grep 1521libclntsh.so找不到库路径echo $LD_LIBRARY_PATH搭配两个动作一起用。第一个是看pmon进程只要ps -ef | grep pmon的输出里有ora_pmon_实例名说明实例层面是活的问题在客户端连接或监听上没有这个进程问题在实例启动或 SID 配置上。第二个是看日志尾部安装阶段的日志在/tmp/OraInstall*/建库阶段的日志在$ORACLE_BASE/cfgtoollogs/dbca/出问题先tail -50比在界面上逐条点“忽略”有用得多。还有一个习惯值得养每改一处配置sysctl、limits.conf、.bash_profile改完立刻验证一遍再往下走。sysctl -p之后sysctl kernel.shmmax看一眼实际生效值source之后env | grep ORA看一眼变量——很多“明明配了还是报错”的情况都是配置文件写对了但没生效或者生效在另一个用户下。从那以后我每次装 11gR2跑runInstaller之前都会强制走一遍三件事确认xa通道、清点包缺失、核对 SID 和字符集。这三步花不了五分钟但能挡掉后面绝大多数返工。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站