ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

Oracle 11gR2 Linux 安装全攻略:从依赖包到建库验证的避坑指南

Oracle 11gR2 Linux 安装全攻略:从依赖包到建库验证的避坑指南

简介:这份文档面向具备一定Linux与数据库基础的IT运维和DBA人员,系统讲解在Linux单机环境下安装Oracle 11g Release 2的完整流程。内容涵盖前期依赖包安装、Oracle用户与组创建、环境变量配置,到runInstaller启动、安装类型与组件选择、Inventory目录指定、系统检查、root脚本执行,以及netca监听配置和dbca建库等关键环节,并给出分辨率调整、双盘解压、字符集选择等实操细节与常见报错处理思路。资源包为1个doc文档,大小约1.73MB,以图文并茂的图解方式呈现,便于对照操作。目前已有132人学习,适合需要快速上手Oracle 11gR2单机部署、排查安装问题的读者参考。

1. 为什么 11gR2 在 Linux 上装完总想重装一遍

装 Oracle 11gR2 这件事,我前后在不同机器上折腾过七八次,最玄学的一次是安装界面走到 15% 突然报“缺少文件”,查了半天发现是两张安装盘解压到了不同目录。11gR2 这个版本在 Linux 上属于“装之前嫌麻烦、装完之后真香”的典型:它不像 12c 之后那样对内核参数那么敏感,但前期依赖包、用户组、环境变量一个都不能少。很多人第一次装完发现监听起不来、DBCA 建库报 ORA-01034,回头一看全是环境变量或者 ORACLE_SID 没对齐。这篇笔记面向的是手头有一台 Linux 单机、想跑通 11gR2 单实例的开发者,从依赖包一路写到建库验证,中间踩过的坑我都标出来,你照着走能少重装两回。

2. 装之前先把依赖和用户组理清楚

2.1 确认系统版本和内存底线

11gR2 官方支持的 Linux 版本跨度很大,从 RHEL 4 到 RHEL 6、Oracle Linux 5/6 都在列,但实际部署里我一般会选 CentOS 6.x 或者 Oracle Linux 6.x,内核 2.6.32 那一代最稳。再新的系统比如 CentOS 7 也能装,但需要额外处理 systemd 和内核参数,新手容易卡在“安装检查过不去”那一步。内存方面,单实例最低 1GB 能跑起来,但图形化安装加上 DBCA 建库,我建议至少给 2GB,swap 按内存的 1.5 到 2 倍划。硬盘的话,企业版软件加一个种子库,15GB 是起步,想宽裕点给 30GB。

# 查看系统版本和内存,确认是否在支持列表里 cat /etc/redhat-release free -m df -h /u01

这三条命令分别看发行版、内存和挂载点空间。/u01是我习惯放 Oracle 软件的目录,你如果还没建,后面会讲到怎么规划。内存小于 1GB 的话,runInstaller 会在检查阶段直接报错,别硬扛。

2.2 用 yum 补齐依赖包

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

compat-libstdc++-33这个包在 64 位系统上容易被忽略,但 Oracle 的某些二进制依赖它,缺了会在安装后期报“libstdc++.so.5 not found”。libaio和libaio-devel是异步 IO 用的,DBCA 建库时如果缺了,建库过程会特别慢甚至卡住。sysstat提供 sar 和 iostat,后面排查性能问题用得上。装完可以用rpm -q逐个确认,比如rpm -q libaio。

2.3 创建 oinstall 和 dba 组、oracle 用户

Oracle 的权限模型依赖两个组:oinstall 管软件安装,dba 管数据库管理。我一般把 oracle 用户的主组设为 oinstall,附加组设为 dba:

groupadd -g 1000 oinstall groupadd -g 1001 dba useradd -u 1000 -g oinstall -G dba oracle passwd oracle

UID 和 GID 用 1000 开头是为了避开系统保留段,也方便多台机器保持一致。passwd oracle这一步别跳过,后面 su 到 oracle 用户装软件要用。有些教程会让你再建一个 oper 组,单机环境用不上,dba 组足够。

2.4 规划目录并授权

目录规划这件事,装之前想清楚比装完再挪强。我习惯把软件放/u01/app/oracle,Inventory 放/u01/app/oraInventory:

mkdir -p /u01/app/oracle mkdir -p /u01/app/oraInventory chown -R oracle:oinstall /u01 chmod -R 775 /u01

chown -R把整个/u01给 oracle 用户,是因为安装过程中 Oracle 需要往 Inventory 目录写东西。chmod 775保证同组用户也能读写。如果你之前/u01已经挂载了独立分区,记得确认挂载参数里没有noexec,否则 runInstaller 跑不起来。

2.5 配置内核参数和资源限制

这一步是安装检查阶段最容易亮红灯的地方。11gR2 对共享内存段和信号量有明确要求,我一般直接写进/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 = 1048576

kernel.shmmax设成 4GB 减 1 字节,是单实例的常用值,如果你内存特别大可以按物理内存的一半来调。kernel.sem四个值分别是信号量最小值、最大值、单次操作数和系统总数,Oracle 检查脚本会核对。写完执行sysctl -p生效。资源限制写/etc/security/limits.conf:

# 追加到 /etc/security/limits.conf oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240

nproc是进程数,nofile是打开文件数,stack是栈大小。这些值在安装检查里会逐项比对,差一点就报“maximum number of processes”之类的警告。改完 limits.conf 需要重新登录 oracle 用户才生效,别改完直接 su 就以为好了。

3. 配置 oracle 用户环境变量并启动安装

3.1 写 .bash_profile

环境变量是 11gR2 安装里最不能将就的一环,ORACLE_SID 写错后面 DBCA 建库直接对不上。我一般直接写进 oracle 用户的.bash_profile:

# 切换到 oracle 用户后编辑 ~/.bash_profile export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

ORACLE_BASE是根目录,ORACLE_HOME是软件安装路径,ORACLE_SID是实例名,这三个必须一致地贯穿安装和建库。LD_LIBRARY_PATH让系统能找到 Oracle 的动态库,NLS_LANG设成 AL32UTF8 是为了后面建库时字符集能对上。写完执行source ~/.bash_profile,然后echo $ORACLE_HOME确认一下。

3.2 解压安装包并启动 runInstaller

11gR2 的安装包通常是两个 zip,解压时必须解到同一个目录,否则安装中途会报“找不到文件”。我一般这么做:

# 在 oracle 用户下操作 cd /tmp unzip linux_11gR2_database_1of2.zip -d /tmp/oracle_install unzip linux_11gR2_database_2of2.zip -d /tmp/oracle_install cd /tmp/oracle_install/database ./runInstaller

-d指定同一个目标目录,两个包解压后会自动合并。如果是在虚拟机里装,分辨率调到 1024x768 以上,不然安装界面按钮会被裁掉。VMware 环境下如果界面显示不全,装一下 VMware Tools 再跑。启动后如果报“DISPLAY not set”,说明你是在纯命令行环境,需要先配好图形界面或者用 X11 转发。

3.3 安装向导里的关键选择

runInstaller 启动后,前面几步是邮箱和更新通知,直接跳过。到“Install Option”这一步,我强烈建议选“Install database software only”,也就是只装软件不建库。这样安装过程短,出问题也好排查,建库留给后面的 DBCA 单独做。接着选“Single instance database installation”,单机环境不要选 RAC。语言勾选 English 和 Simplified Chinese,字符集后面建库时再定。版本选 Enterprise Edition,Options 保持默认。

安装路径那一步,ORACLE_BASE 和 ORACLE_HOME 会自动带出你环境变量里的值,核对一下别手改。Inventory Directory 填/u01/app/oraInventory,OS Group Name 选 oinstall。到“Prerequisite Checks”这一步,Oracle 会逐项检查依赖包、内核参数、内存和空间。如果前面都按笔记配了,这里应该全绿。万一有内存或空间不足的警告,可以勾选忽略继续;但如果是 package 缺失或者内核参数不对,别忽略,退出去补完再回来。

3.4 执行 root 脚本

点 Finish 之后安装会跑一段时间,最后弹出一个窗口提示你用 root 执行两个脚本:

# 切换到 root 用户执行 /u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0/db_1/root.sh

第一个脚本设置 Inventory 目录的权限,第二个脚本配置 Oracle 的可执行文件权限并往/etc里写一些配置。执行 root.sh 时它会问你要不要覆盖某些文件,一般直接回车用默认值。两个脚本都跑完,安装才算真正结束。这时候$ORACLE_HOME/bin下应该有 sqlplus、netca、dbca 这些命令了。

4. 配置监听和建库:netca 与 dbca 实操

4.1 用 netca 配监听

监听程序是客户端连进来的入口,11gR2 里用 netca 配最直观。在 oracle 用户下、图形界面里执行:

netca

选“Listener configuration”,然后“Add”,监听名默认 LISTENER,协议选 TCP,端口用 1521。一路 Next 到底,最后它会提示监听已启动。配完可以查一下状态:

lsnrctl status

正常的话会显示监听已启动、端口 1521、服务名里暂时没有实例。如果报“TNS-12541: TNS:no listener”,说明监听没起来,检查/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora里的配置,常见原因是 ORACLE_HOME 路径写错或者端口被占用。

4.2 用 dbca 建库

建库这一步,DBCA 会引导你走完实例创建。在 oracle 用户下执行:

dbca

选“Create a Database”,模板用“General Purpose or Transaction Processing”。数据库名和服务名这里要特别注意:SID 必须和你环境变量里的ORACLE_SID=orcl一致,服务名可以同名也可以另起,但为了省事我一般也填 orcl。字符集选“Use Unicode (AL32UTF8)”,这个支持汉字,和前面 NLS_LANG 对得上。内存分配按机器实际来,2GB 内存的机器给 SGA 800MB 左右,PGA 200MB。账户密码那一步,我一般给 sys 和 system 设同一个密码方便记,生产环境当然要分开。

建库过程大概十几分钟,DBCA 会依次创建实例、数据文件、控制文件和重做日志。跑完之后它会提示数据库已创建,并问你要不要解锁示例账户,单机学习可以解锁 scott,生产环境跳过。

4.3 验证实例和监听是否对齐

建完库第一件事是确认实例起来了、监听能识别到:

sqlplus / as sysdba SQL> select instance_name, status from v$instance; SQL> select name, open_mode from v$database;

v$instance里 status 应该是 OPEN,v$database里 open_mode 应该是 READ WRITE。如果 status 是 MOUNTED,说明数据库没完全打开,执行alter database open;。然后退出 sqlplus,用lsnrctl status再看一眼,这次服务名里应该能看到 orcl 实例注册上来了。如果监听里没有实例,执行alter system register;手动注册一下。

5. 装完起不来?这几个坑我替你踩过了

5.1 现象:runInstaller 走到一半报“找不到文件”

原因:两张安装盘解压到了不同目录,或者只解压了第一张。11gR2 的安装包是分卷的,第二张盘里有 stage 目录下的组件文件,缺了就会在安装中途报错。

解决:把两个 zip 解压到同一个目录,确认database/stage/Components下有完整的组件目录。如果已经装了一半,删掉$ORACLE_HOME重新解压再跑一遍,别试图续装。

5.2 现象:安装检查报“maximum number of processes”或“semmni”错误

原因:/etc/security/limits.conf里的 nproc 或者/etc/sysctl.conf里的 kernel.sem 没生效。limits.conf 改完需要重新登录 oracle 用户,sysctl 改完需要sysctl -p。

解决:用ulimit -u在 oracle 用户下确认进程数限制,用sysctl kernel.sem确认信号量。如果值不对,检查是不是写在了错误的配置文件里,或者被其他配置覆盖了。

5.3 现象:DBCA 建库时报 ORA-01034 或 ORA-27101

原因:ORACLE_SID 和环境变量不一致,或者实例根本没启动。DBCA 建库时会用当前 shell 的 ORACLE_SID 去连实例,如果这个 SID 和实际实例对不上就报错。

解决:echo $ORACLE_SID确认值,然后ps -ef | grep pmon看实例进程在不在。如果实例没起来,先sqlplus / as sysdba执行startup,再重新跑 DBCA。

5.4 现象:监听起来了但客户端连不上,报 TNS-12541

原因:listener.ora 里的 HOST 写成了主机名但主机名没解析,或者防火墙挡了 1521 端口。

解决:把 listener.ora 里的 HOST 改成 127.0.0.1 或者实际 IP,然后lsnrctl stop再lsnrctl start。防火墙用iptables -L查一下,临时关掉测试或者放行 1521。

5.5 现象:sqlplus 能连但中文显示乱码

原因:NLS_LANG 和数据库字符集不一致,或者客户端终端编码不对。

解决:确认echo $NLS_LANG是AMERICAN_AMERICA.AL32UTF8,数据库字符集用select value from nls_database_parameters where parameter='NLS_CHARACTERSET';查,应该是 AL32UTF8。终端用locale看编码,设成 UTF-8 再试。

6. 装完怎么确认这套环境真的能跑

验证这件事,我一般分三层做:实例层、监听层、客户端层。实例层就是前面说的v$instance和v$database,确认状态是 OPEN 和 READ WRITE。监听层用lsnrctl status看服务名有没有注册,再用tnsping orcl测一下 TNS 解析通不通。客户端层最直接,开一个 sqlplus 用服务名连:

sqlplus system/你的密码@orcl SQL> select sysdate from dual;

能查出日期就说明整条链路通了。如果 tnsping 通但 sqlplus 连不上,多半是密码错或者服务名在 tnsnames.ora 里配得不对。tnsnames.ora在$ORACLE_HOME/network/admin下,确认里面的 SERVICE_NAME 和 DBCA 建库时填的一致。

再补一个我常用的检查习惯:建完库之后立刻做一次冷备份前的准备,确认归档模式和数据文件路径:

sqlplus / as sysdba SQL> archive log list; SQL> select name from v$datafile;

archive log list看归档是否开启,单机学习环境不开也行,但生产环境必须开。v$datafile列出所有数据文件路径,确认都在/u01/app/oracle/oradata/orcl下,没有跑到别的地方去。这两条查完,这套 11gR2 环境就算真正落地了。

从那以后我每次装完 11gR2,都会强制走一遍“实例状态 → 监听注册 → 服务名连接 → 数据文件路径”这四步,少一步都不放心。希望帮到你。

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

RELATED READING

延伸阅读

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