ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Linux 下 Oracle 11gR2 单机数据库安装流程及避坑全记录

Linux 下 Oracle 11gR2 单机数据库安装流程及避坑全记录

简介:面向 Linux 运维与数据库管理人员的 Oracle 11gR2 安装图解文档,聚焦单机环境部署全流程,适合有一定 Linux 操作基础的 IT 人员作为实战参考。文档从预装 gcc、binutils、kernel-headers、glibc-devel 等依赖包开始,逐步说明创建 Oracle 用户与组、配置 ORACLE_HOME、PATH、LD_LIBRARY_PATH 等环境变量,随后演示如何启动 runInstaller、选择安装类型与企业版组件、指定 Inventory 目录和 OS Group,并详细讲解安装前检查、root 脚本执行、netca 监听程序配置以及 dbca 创建数据库等收尾步骤。资源为单个 doc 文档,压缩包约 1.73MB,目前已有 132 人学习。文档的最大价值在于把安装中容易踩坑的地方逐一提炼出来,比如界面显示不全时调整分辨率或安装 VMware Tools、两张安装盘需解压到同一目录、缺少依赖包时的日志分析与忽略策略、数据库服务名须与 ORACLE_SID 保持一致,以及选择 UTF-8 字符集以支持中文等。配合图解说明,可以帮助读者减少重复试错,按图索骥地完成从环境准备、软件安装到监听配置与建库的全过程。

1. 安装流程长了才发现,真正的坑都在安装前

在 Linux 上安装 Oracle 11gR2,很多人以为解压完介质、跑一下runInstaller就能一路 Next 到底,真正动起手来才发现坑基本都埋在安装开始之前。用户组没建对、环境变量少写一行、两张安装盘没解压到同一个目录,每一件都能让你在整个流程的后半段反复折腾。这篇文章把我操作过的单机 11gR2 安装流程完整过一遍:从建用户组、配环境变量、装依赖包,到runInstaller的每一步选项,再到netca配监听、dbca建库,顺带把那些官方文档不给你写清楚、但一定会在某个环节让你翻车的细节全部摊开。适合准备在测试环境或开发机上搭一套 Oracle 11gR2、又不想走弯路的工程师。

2. 前期配置:用户组、环境变量与内核参数一起备齐

单机安装 Oracle 11gR2 的系统准备工作,核心是三件事:建用户组、写环境变量、装依赖包和调内核参数。这三件事看似是体力活,但顺序错了会影响整个安装检查。比如用户组不对,安装器在写 oraInventory 时会卡住;环境变量里的ORACLE_SID和后面建库时不一致,监听起来也注册不上。所以我把这部分单独展开说。

2.1 用户与组:oinstall 和 dba 各管什么

安装 Oracle 不能用 root 用户直接跑runInstaller,这是硬性要求。通用做法是创建一个叫oracle的专用系统用户,同时准备两个用户组:oinstall和dba。

oinstall是 Oracle Inventory 的属主组,管的是软件安装的元数据,也就是记录“哪些组件装到了哪里”的目录;dba是数据库管理员组,拥有sysdba这类管理权限的用户必须在这个组里。单机环境通常把oracle用户的主组设为oinstall,附加组设为dba,这样安装和后续管理权限都齐了。

# 创建组和用户,RPM 系发行版通用 groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle echo "oracle:ChangeMe123" | chpasswd

逻辑说明:-g oinstall指定主组,-G dba指定附加组。主组影响新建文件的默认属组,附加组决定用户能进入哪些权限组。后面的chpasswd是从标准输入读口令,你也可以直接用passwd oracle交互设置。注意口令别太简单,生产环境还要考虑密码策略。

这里有一个常见误解:有人只建一个dba组,把用户主组也设成dba。单机测试可能没问题,但后续如果你要跑runInstaller升级补丁或加组件,oinstall组缺失会导致 oraInventory 路径权限异常,表现为“无法写入 Inventory 目录”之类的报错。我在第一次装的时候就图省事只建了dba,结果装完软件后补打一个 patch 就翻车了,最后只能新建用户重装。

2.2 环境变量:ORACLE_HOME、PATH、LD_LIBRARY_PATH 配置要点

环境变量放在 oracle 用户的~/.bash_profile里,不要放在系统级/etc/profile,否则其他用户登录也会加载,容易造成路径污染。重点变量是下面这几个:

# 切换到 oracle 用户后编辑 ~/.bash_profile export ORACLE_BASE=/opt/oracle export ORACLE_HOME=/opt/oracle/product/11.2.0/dbhome_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib umask 022

参数说明:ORACLE_BASE是软件安装的根目录,ORACLE_HOME是具体版本目录,安装时界面里填的路径必须和这里完全一致,否则dbca建库阶段会出现“环境变量与 oraInventory 记录不一致”的告警。ORACLE_SID是实例名,后面用dbca建库填库名/SID 时要一致,监听注册靠的就是这个。PATH把$ORACLE_HOME/bin放前面,是为了优先使用 Oracle 自带的sqlplus、lsnrctl,避免系统里其他版本的工具抢先。LD_LIBRARY_PATH指向 Oracle 的 lib 目录,少了它,客户端工具可能报libclntsh.so找不到。umask 022保证创建的文件默认权限不是 600/700,否则实例进程可能因为权限问题起不来。

这里要提醒一下:如果你在同一台机器上装了两个 Oracle 版本,LD_LIBRARY_PATH千万不能写多个 Oracle 版本的 lib 路径,否则版本混用会让进程加载到错误的库,一些诡异的 ORA- 错误就是这么来的。建议只保留当前版本的路径。

2.3 依赖包与内核参数:官方清单和实操的差异

Oracle 11gR2 的官方安装手册里列了一长串依赖包,典型的有gcc、binutils、glibc、glibc-devel、libaio、libaio-devel、make、sysstat等。实操中和手册有差异的地方在于:手册基于当年某个 Linux 大版本的包名,现代发行版的包可能改名或者被拆成多个子包,逐个对号入座很费劲。

我的习惯是先按清单装一遍,再用rpm -qa交叉检查:

# 查看关键依赖包是否已安装 rpm -qa | grep -E 'libaio|glibc-devel|gcc|binutils|make|sysstat' # 如果缺失,直接用包管理器安装,RPM 系通用 yum install -y gcc binutils make glibc-devel libaio libaio-devel sysstat

逻辑说明:rpm -qa | grep只是快速摸底,真正权威的结果是runInstaller检查阶段的日志。如果你在比较新的发行版上装,很可能遇到包名对不上,比如某些兼容库被拆分成了compat-libcap1和compat-libstdc++这样的名字,这是正常现象,按runInstaller报错信息逐个补就行。

内核参数方面,需要调的是共享内存、信号量、端口范围、文件句柄这些。官方建议值我整理成了一张表,可以直接对照写入/etc/sysctl.conf:

参数常见建议值作用
kernel.sem250 32000 100 128信号量,影响并发进程数
fs.file-max6815744系统级文件句柄上限
net.ipv4.ip_local_port_range9000 65500本地可用端口范围
net.core.rmem_max4194304接收缓冲区上限
net.core.wmem_max1048576发送缓冲区上限
fs.aio-max-nr1048576异步 IO 请求数上限

改完执行sysctl -p让参数生效。注意kernel.sem的四个值分别代表“每个信号集最大信号数、系统最大信号集数、每个信号的最大操作数、系统最大信号集标识符数量”,后面的进程数上限和 Oracle SGA 大小有关系。把这些参数放在一个专门的/etc/sysctl.d/文件里管理更清晰,但要注意目录里的加载顺序。

还有一个很多人忽略的点是/dev/shm。11gR2 的 AMM(自动内存管理)依赖/dev/shm作为共享内存文件系统,如果它的挂载大小比SGA_TARGET小,启动实例时可能报ORA-00845: MEMORY_TARGET not supported on this system。测试环境经常是这个分区是默认大小只有几百 MB,建库后一启动就报错。我在遇到这个报错时,常见做法是在/etc/fstab里把/dev/shm调大,然后mount -o remount,size=4G /dev/shm,大小按实际物理内存定,不要超过物理内存。这一步不提前做,等建库完再折腾很被动。

3. runInstaller 安装流程:单机环境的选项与检查

准备做完,进入图形化安装。11gR2 的runInstaller界面相比老版本变化不小,但单机流程不复杂,核心是选对“仅安装软件”和“单实例”这两个选项,其他很多界面直接默认就能过。这一章把介质准备、图形界面启动和关键选项串起来讲。

3.1 介质准备:两张盘必须解压到同一目录

11gR2 的 Linux x64 介质通常是两个 zip 包,分别对应第一张盘和第二张盘的内容。安装前要把它们解压到同一个目录,因为runInstaller在安装过程中会按相对路径去第二张盘的内容里找文件,比如stage目录下的组件包,两张盘分开解压必然导致“找不到文件”的报错。

# 统一解压到 /tmp/ora_install 下 mkdir -p /tmp/ora_install && cd /tmp/ora_install unzip -q linux.x64_11gR2_database_1of2.zip unzip -q linux.x64_11gR2_database_2of2.zip # 确认解压后存在 database 目录,且里面有 runInstaller ls -la /tmp/ora_install/database/runInstaller

逻辑说明:-q是为了安静模式解压,减少输出干扰。解压完成后,database目录下应该能看到runInstaller可执行文件和stage子目录。如果只解压了第一个 zip,stage目录内容不完整,安装到一半会报file not found。另外一个细节是解压后的目录所有者最好改成oracle用户,避免权限问题导致安装器无法创建临时文件。

3.2 图形界面启动:分辨率、虚拟机增强工具与 X 转发

runInstaller是图形界面的脚本,没有 X 环境就跑不起来。如果你是在一台带桌面的 Linux 机器上直接操作,分辨率建议至少调到 1024x768,否则界面下方按钮会被截掉,看不到“下一步”。在虚拟机里安装时要装虚拟机增强工具,否则分辨率上不去,窗口拖不动,点不到按钮,非常别扭。

远程环境用 SSH 转发是常见做法。本地有 X 服务的条件下,用ssh -X登录后启动,DISPLAY 会自动设置;没有的话要手动指一下。

# 远程启动图形安装时,先确认 DISPLAY 可用 ssh -X oracle@目标主机 # 如果 DISPLAY 为空或不对,手动指定 export DISPLAY=:0.0 cd /tmp/ora_install/database ./runInstaller

参数说明:DISPLAY=:0.0表示连接本机 0 号显示器的 0 号屏幕,这个值不是固定的,取决于你在哪个图形会话里。如果设不对,runInstaller会报DISPLAY相关的错误或者直接闪退。实际排错可以先在终端跑一个xclock试试,窗口能弹出来就说明 X 转发正常,再启动安装器。

如果是纯命令行环境没有 X 服务,还有一个思路是装虚拟 X 服务跑 VNC 方案,但那属于另一套流程,操作上重一些,测试环境不太建议折腾,直接把机器接到显示器上最省事。

3.3 安装选项走向:仅装软件、企业版与安装检查

安装界面逐步走下去,最需要留意的其实是前几步的选项。官方原文里强调“只安装软件,安装完毕后通过 DBCA 再创建数据库”,这个选择比直接“安装并建库”更可控,因为安装过程如果同时建库,一旦某个参数不对,软件要回滚重来;拆成两步,软件装好了再慢慢调建库选项,出问题也能定位。

我的操作路径基本固定:

  1. 配置安全更新界面:取消勾选“我希望通过 My Oracle Support 接收安全更新”,点 Next,弹窗问是否确认不提供邮箱时选 Yes。
  2. 安装选项:选“仅安装数据库软件”。
  3. 安装类型:选“单实例数据库安装”,这一步对应单机环境,RAC 和 Data Guard 场景不要选这个。
  4. 产品语言:勾选英文和简体中文,主要影响后续工具和消息显示。
  5. 数据库版本:选企业版,功能完整,测试环境也建议直接企业版,省得后续要某个特性时才发现组件没装。
  6. 安装位置:确认ORACLE_BASE和ORACLE_HOME和.bash_profile里一致。
  7. 操作系统组:主组选oinstall,操作组选dba。
  8. 安装检查:系统会列出一堆检查项,包括依赖包、内核参数、空间。

这里特别说一下安装检查阶段的两个经典现象。第一个是弹出一个“错误”提示,内容通常是图形库相关的警告,比如加载libawt.so失败。这个弹窗可以直接点 Yes 继续,不影响安装主线,原因是图形界面缺了某个 Java 图形库,软件本体安装没问题。第二个是检查列表里出现内存或硬盘空间不足的提示,如果只是轻微不足,也可以忽略继续,但要注意“轻微”是相对的,空间差太多时建库阶段一定会出问题。我的经验是,检查项里带红色警告的可以先记下来,等安装完再对照日志补,但如果是依赖包缺失,最好当场解决,因为后面链接 Oracle 二进制时会直接失败。

整个安装过程到Setup files结束后,系统会提示用 root 执行脚本,这是最后一步,执行完软件部分就完成了,先不急着建库。

4. 避坑记录:5 条安装期高频问题

这一章是我在多次安装和帮别人排查时遇到频率最高的几类问题,每一条都按“现象、原因、解决”展开。你如果严格按照前面两章的配置走,大部分问题不会出现,但万一碰到,直接照这个思路查。

4.1 图形界面白屏或闪退,runInstaller 起不来

现象:运行./runInstaller后界面不显示,或者弹出几秒就消失,终端只提示 DISPLAY 相关错误,有些情况下直接没有任何输出。

原因:DISPLAY变量没有指向当前图形会话,或者 X 转发的授权没生效,也可能是 Java 图形库缺失。

解决:先确认DISPLAY是否为空,再检查 X 转发是否可用。终端执行echo $DISPLAY,如果是空的,手动export DISPLAY=:0.0;如果是在 SSH 会话里,确认登录时用了-X参数。进一步验证可以运行xclock,窗口弹不出来就说明 X 通路有问题。补图形库的话,常见做法是安装libXtst、libXp这类兼容库,具体包名在不同发行版上有差异,按报错信息找。

4.2 安装中途提示找不到文件,进度卡住

现象:安装进度到某个百分比时弹出错误,提示找不到某个文件或者某个 jar 包,比如oracle.install组件下的内容缺失。

原因:两张安装盘没有解压到同一个目录,或者解压后的目录权限不对,安装器读不到第二张盘的一部分内容。我用unzip解压第一个 zip 后没检查就启动安装,就出现过这个问题。

解决:重新把两个 zip 解压到同一个目录,确认stage目录存在且有内容;然后检查目录所有者是否为oracle,用chown -R oracle:oinstall /tmp/ora_install修正。如果安装已经跑到一半,不要尝试直接覆盖目录继续,把残留的临时目录和安装日志清理干净再重新启动安装器,否则可能出现更奇怪的增量错误。

4.3 检查阶段提示缺包,但包确实已经装了

现象:runInstaller的检查清单里显示某个包“缺失”,用rpm -qa查询却能看到同名包,安装器就是不认。

原因:Oracle 的检查脚本对包名和架构都做了校验。64 位系统上,同一个包可能同时需要x86_64和i686两个架构版本,比如glibc-devel;也可能因为发行版的包拆分策略,导致包名版本号格式不完全匹配。

解决:先用rpm -qa | grep 包名看当前包版本,再对比官方要求。缺 32 位版本的话,用包管理器安装对应的 i686 版本,比如yum install -y glibc-devel.i686。注意有些包在这个安装场景下是必须同时存在两个架构的,不是装一个就够了。较新的发行版如果包名差异过大,可以查一下兼容包,比如compat-libstdc++这一类。

4.4 netca / dbca 点击后没有任何反应

现象:软件安装完成后,在桌面终端里运行netca或dbca,窗口闪一下就不见了,没有报错提示,或者报DISPLAY相关的异常。

原因:这两个工具也是 Java 图形程序,问题通常还是 DISPLAY 不对。常见情况是从 root 用户切到 oracle 用户后,环境变量没有重新加载,导致 DISPLAY 指向了错误的值;或者当前会话没有图形授权。

解决:确认当前登入用户是oracle,执行source ~/.bash_profile刷新环境变量,再检查echo $DISPLAY。如果 DISPLAY 无法确认,最简单的方式是退回本地图形终端操作,而不是通过远程 SSH。还有一点:netca和dbca的日志默认写在$ORACLE_HOME/cfgtoollogs下,窗口闪退后想看原因,翻这里的日志文件是最直接的。

4.5 监听起来了,远程却连不上实例

现象:lsnrctl status显示监听已启动,但远程客户端连接时报ORA-12514或ORA-12505,提示监听不识别服务名。

原因:监听只是一个网络入口,数据库实例必须注册到监听上才能被转发。测试环境最常见的原因是实例名没有成功注册,或者ORACLE_SID和dbca建库时的 SID 不一致,导致实例注册名对不上监听解析的名字。

解决:先确认ORACLE_SID和本地数据库 SID 一致,再确认监听配置文件里的主机名是否可解析。如果实例确实没注册,可以在sqlplus / as sysdba里执行alter system register;手动触发注册,然后lsnrctl status再看。还有一个容易踩的点是防火墙没放行 1521 端口,这个和 Oracle 本身无关,但排错时经常被忽略。

5. 安装后的基线检查:监听、实例与字符集一次确认

软件装好、数据库建完,不代表整套环境就真正能用了。我在每次安装结束后都会花十分钟做一次“基线检查”,把监听、实例进程、登入权限和字符集这几个关键项一次性确认清楚,避免后续使用中反复排查。

5.1 三步验证安装结果

# 1. 确认监听状态和已注册的服务 lsnrctl status # 2. 确认实例进程是否存活 ps -ef | grep pmon # 3. 本地登入测试,验证 sqlplus 可用 sqlplus / as sysdba

这些命令的执行逻辑很直接:lsnrctl status能显示监听的端口和当前已注册的服务名,如果列表里没有你的实例名,说明注册有问题;pmon进程是 Oracle 实例的后台进程之一,它存在说明实例已经启动;sqlplus / as sysdba能登入说明本地认证和环境变量都正常。这一步跑通了,远程连接的问题基本上就只剩网络和防火墙了。

5.2 建库时最容易忽略的两个一致性问题

第一个是服务名和 SID 的一致性。dbca建库时填写的全局数据库名和 SID 要与环境变量里的ORACLE_SID相同,否则监听注册会混乱。比如环境变量写orcl,建库时写orcl,这里不能凭感觉写,一定要对照检查。第二个是字符集。建库时字符集选择UTF-8(即AL32UTF8)即可,这个字符集支持汉字,后续导入导出不会出现乱码问题。

检查项检查方法一致/正确表现
环境变量 SID 与数据库 SIDecho $ORACLE_SID,对比dbca建库时的 SID完全一致
监听注册lsnrctl status看服务名列表存在对应实例服务
字符集sqlplus / as sysdba后执行select userenv('language') from dual;包含AL32UTF8

这里还可以补充一个习惯:确认完基线后,重启一次系统,再重复执行上面的三个命令。因为很多环境变量和内核参数是开机后才会被完整加载的,重启后能正常启动,才算这个环境真的稳定。从那以后,我每次装完 Oracle 都会强制走一遍这个检查流程,特别是字符集和 SID 的一致性,翻车一次的成本远比多花十分钟检查高。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进