Linux 上重装 Oracle 11gR2 完整图解:依赖包、内核参数与 DBCA 建库避坑指南 简介这份文档面向具备一定Linux与数据库基础的IT运维及DBA人员系统讲解在Linux单机环境下安装Oracle 11g Release 2的完整流程。内容围绕前期package准备、Oracle用户与组创建、环境变量配置、runInstaller启动、安装类型与组件选择、Inventory目录指定、系统检查、root脚本执行以及netca监听配置和dbca建库等关键环节展开并给出分辨率调整、双盘解压、字符集选择UTF-8等实操细节与排错思路。资源包共1个doc文件约1.73MB以图文并茂的图解形式记录每一步操作界面与注意事项便于对照执行。目前已有132人学习适合需要快速上手Oracle 11gR2单机部署、减少安装踩坑的读者参考。1. 为什么今天还有人死磕 Linux 装 Oracle 11gR2上周帮一个做医疗信息化的朋友救火他们一套跑了七八年的老系统还在用 Oracle 11gR2结果原虚拟机磁盘挂了备份只剩数据文件没有可用的软件安装环境。新机器上重新装一遍他照着网上几篇残缺的教程折腾了两天卡在 runInstaller 图形界面出不来。我远程连上去二十分钟把依赖包补齐、环境变量理顺安装程序就正常起来了。这件事让我意识到Oracle 11gR2 虽然是个老版本但在不少存量业务系统里依然是核心底座运维和开发同学时不时就得在 Linux 上重装一遍。这份图解资源的价值就在这它把从系统准备到建库的完整链路拆成了可照做的步骤尤其适合需要在单机环境快速拉起一套可用实例的从业者。下面我按自己的实操习惯把这份资源里的关键环节重新梳理一遍补上原文没展开的参数和排错细节。2. 装之前把系统底子打好依赖包、内核参数与用户组2.1 依赖包到底装哪些怎么验证Oracle 11gR2 对 Linux 的依赖包要求比较死缺一个都可能在安装检查阶段报错。原文提到“主要是安装 package”但没列清单。我一般会按下面这组来装覆盖绝大多数 CentOS/Oracle Linux 6/7 环境# 以 root 身份执行安装 Oracle 11gR2 所需的基础依赖包 yum install -y binutils compat-libstdc-33 elfutils-libelf \ elfutils-libelf-devel gcc gcc-c glibc glibc-common glibc-devel \ glibc-headers ksh libaio libaio-devel libgcc libstdc libstdc-devel \ make sysstat unixODBC unixODBC-devel pdksh这里有几个点容易翻车。compat-libstdc-33在较新的源里可能已经改名或合并装不上时先yum provides查一下实际包名。pdksh和ksh二选一即可有些发行版只提供其中一个。装完后用rpm -q逐个核对别只看 yum 的“Complete”就放心。# 核对关键包是否真的装上了 rpm -q binutils gcc glibc libaio libstdc make sysstat如果输出里有 “not installed”说明那个包没装上安装检查阶段一定会报缺失。这一步偷懒后面就得返工。2.2 内核参数与用户组配置依赖包只是第一关内核参数不对runInstaller 的检查报告会直接标红。原文说“按照安装手册配置的系统环境所以没有遇到任何问题”但手册里的参数值需要根据机器内存调整。我一般会写进/etc/sysctl.conf# 追加到 /etc/sysctl.conf参数值按机器内存适当调整 fs.aio-max-nr 1048576 fs.file-max 6815744 kernel.shmall 2097152 kernel.shmmax 4294967295 kernel.shmmni 4096 kernel.sem 250 32000 100 128 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 1048576kernel.shmmax是最容易设错的一个它决定单个共享内存段的最大值。物理内存 8G 以内设成内存字节数的一半到三分之二比较稳妥内存更大时可以设成 4294967295 这个经典值。改完执行sysctl -p生效再用sysctl -a | grep shm确认。用户和组方面原文提到“配置用户组合 oracle 的环境变量”。标准做法是建oinstall和dba两个组再建oracle用户# 创建 Oracle 所需的组和用户 groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle然后给 oracle 用户配环境变量写进~/.bash_profile# oracle 用户的环境变量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:/lib:/usr/lib export NLS_LANGAMERICAN_AMERICA.AL32UTF8ORACLE_SID这里先定好后面 dbca 建库时服务名必须跟它一致否则监听和实例对不上。NLS_LANG设成 AL32UTF8 是为了支持中文原文也强调了字符集选 UTF-8这两处要呼应上。3. 跑 runInstaller从解压到执行 root 脚本的完整链路3.1 解压与启动安装程序原文特别提醒“两张盘要解压到同一个目录下”这是血泪经验。11gR2 的安装介质通常分linux.x64_11gR2_database_1of2.zip和2of2.zip如果分别解压到两个目录安装中途会报找不到文件。正确做法是# 以 oracle 用户操作两个压缩包解压到同一目录 mkdir -p /home/oracle/install cd /home/oracle/install unzip linux.x64_11gR2_database_1of2.zip unzip linux.x64_11gR2_database_2of2.zip # 解压后会合并成 database 目录 cd database ./runInstaller启动前确认 DISPLAY 变量指向可用的图形环境。原文提到“如果看不全屏幕调整分辨率到 1024*768”虚拟机里还要装 VMware Tools。我一般会先把分辨率设好再启动避免安装界面按钮被截断点不到。3.2 安装过程中的关键选择进入图形界面后原文列了十几个步骤我挑几个真正影响后续使用的说。第一步是配置更新选项直接跳过11gR2 的在线更新早就不可用了。接着选“只安装软件”原文写的是“选择只安装软件安装完毕后通过 DBCA 再创建数据库”这个选择很关键。它把软件安装和建库拆开出问题时排查范围更清晰也方便后续用 dbca 单独建多个库。安装类型选“单机安装”语言勾英文和简体中文版本选企业版。企业版包含分区、闪回等完整功能单机环境也建议选它避免后期功能缺失再重装。安装路径按环境变量里定的来ORACLE_BASE和ORACLE_HOME保持一致。Inventory Directory 默认在ORACLE_BASE/oraInventoryOS Group Name 选oinstall。到系统检查那一步原文说“如果有缺少的 package 或空间问题Oracle 会给你一个清晰的日志报告”。这个报告在/tmp下文件名类似oraInstall时间.err。内存或硬盘空间不足的警告可以忽略但缺包和内核参数的报错必须解决否则装完也可能起不来。3.3 root 脚本执行与监听配置安装文件复制完成后会提示用 root 执行两个脚本# 切换到 root 用户执行顺序不能反 /u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0/db_1/root.sh第一个脚本设置 inventory 目录权限第二个配置 root 用户可执行的环境。执行完回到图形界面点 OK软件安装就结束了。原文说“在 root 用户下执行 netca”这里要纠正一下netca 和 dbca 都应该用 oracle 用户执行root 下跑会因为权限问题写不了ORACLE_HOME里的配置文件。正确做法是切回 oracle 用户在图形界面下运行# 以 oracle 用户执行配置监听程序 netca监听配置基本一路默认协议选 TCP端口 1521服务名先不填。配完用lsnrctl status确认监听已起来。4. 用 DBCA 建库字符集、SID 与监听的三处对齐4.1 建库前的参数确认原文强调“填写数据库服务名的时候要跟之前配置 oracle 环境变量时 ORACLE_SIDXXX 一致”这是最容易出错的地方。dbca 启动后选“创建数据库”模板选“一般用途或事务处理”然后会要求填全局数据库名和 SID。这两个值都填环境变量里定的orcl不要一个填 orcl 一个填 orcl.example.com否则监听注册会出问题。字符集那一步原文说“选择 UTF-8 就可以该字符集支持汉字”。在 11gR2 的 dbca 里字符集选项叫“AL32UTF8”选它。如果选了默认的 WE8ISO8859P1中文会存成乱码后期改字符集非常麻烦。4.2 建库后的验证建库过程大概十几分钟完成后 dbca 会提示实例已启动。这时候用几个命令验证# 确认实例状态 sqlplus / as sysdba SQL select instance_name, status from v$instance; # 确认监听注册 lsnrctl status # 确认字符集 SQL select value from nls_database_parameters where parameterNLS_CHARACTERSET;v$instance返回 OPEN 状态监听里能看到orcl的服务字符集查询返回 AL32UTF8这三项都对上一套可用的单机库就算立起来了。4.3 环境变量与建库参数的对应关系把前面几步的参数串起来看它们之间是有依赖链的配置项设置位置建库时的对应不一致的后果ORACLE_SID~/.bash_profile全局数据库名/SID监听注册失败连不上实例ORACLE_HOME~/.bash_profile安装路径dbca 找不到软件无法建库NLS_LANG~/.bash_profile字符集 AL32UTF8中文乱码需重建库监听端口netca默认 1521客户端连接串要同步改这张表建议建库前对着核一遍比装完再排查省事得多。5. 避坑与排查安装过程中最常见的五个翻车点5.1 runInstaller 图形界面出不来现象执行./runInstaller后没反应或者报 “Cant connect to X11 window server”。原因DISPLAY 变量没设或者当前用户没有图形环境权限。解决确认在图形终端里执行echo $DISPLAY有值。如果是 SSH 连过去的需要图形转发支持或者直接在虚拟机控制台操作。虚拟机里分辨率不够就装 VMware Tools 调分辨率。5.2 安装检查报缺包但明明装了现象检查报告里标红说某个包缺失但rpm -q显示已安装。原因装的是 32 位版本Oracle 需要 64 位或者包名在新源里变了。解决用rpm -q --queryformat %{NAME}-%{VERSION}-%{ARCH}\n看架构确保是 x86_64。缺的包用yum provides找实际包名再装。5.3 执行 root.sh 报错现象root.sh 执行到一半报 “Failed to create directory” 或权限错误。原因oracle 用户对 ORACLE_BASE 目录没有写权限或者目录属主不对。解决chown -R oracle:oinstall /u01/app/oracle再重新执行 root.sh。执行前确认 orainstRoot.sh 已经跑过。5.4 dbca 建库到一半卡住现象建库进度条长时间不动日志里报 “ORA-27102: out of memory”。原因kernel.shmmax设得太小或者/dev/shm空间不足。解决调大kernel.shmmax和kernel.shmallsysctl -p生效后重跑 dbca。建库前用df -h /dev/shm确认共享内存文件系统有足够空间。5.5 建完库连不上报 ORA-12514现象sqlplus 本地能连客户端连报 “listener does not currently know of service”。原因建库时 SID 和环境变量里的 ORACLE_SID 不一致监听没注册上。解决lsnrctl status看服务列表如果没有目标库检查$ORACLE_HOME/network/admin/listener.ora和tnsnames.ora确认 SID 拼写。必要时alter system register;手动注册。6. 装完之后把安装过程固化成可复用的检查清单装完一套库不算完我习惯把这次用到的参数和步骤整理成一份检查清单下次换机器直接照着走。这份清单里最值钱的部分不是命令本身而是每个参数背后的取值逻辑。比如kernel.shmmax我现在的习惯是先看物理内存free -b | grep Mem拿到字节数取一半写进去比死记 4294967295 更稳。再比如字符集只要业务涉及中文AL32UTF8 是唯一选择没有商量余地。还有 ORACLE_SID我在建用户阶段就把它定死后面所有配置都引用同一个变量避免手误。# 我常用的安装前自检脚本片段 echo 内存字节数: $(free -b | awk /Mem/{print $2}) echo 共享内存上限: $(sysctl -n kernel.shmmax) echo ORACLE_SID: $ORACLE_SID echo ORACLE_HOME: $ORACLE_HOME rpm -q binutils gcc glibc libaio libstdc make sysstat | grep -c not installed最后一行返回 0 才继续否则先补包。这个习惯帮我省掉了至少三次装到一半返工的麻烦。从那以后我每次装 Oracle不管多急都强制走一遍这份自检清单确认依赖、内核参数、环境变量三样都对上再碰 runInstaller。希望这份梳理能帮到同样在跟 11gR2 打交道的人少走点弯路。本文还有配套的精品资源点击获取