装11g这事,说起来是个老手艺了。现在云数据库遍地都是,一键点击就给你弄好一个实例,但真到了某些内网环境、或者客户指定要Oracle 11g的场合,你躲都躲不掉。我见过太多人在这一步栽跟头,不是缺个依赖包就是内核参数没调对,卡在安装界面半天过不去。其实11g的安装流程并不复杂,难就难在准备工作做得细不细。这篇文章就把我这些年装11g踩过的坑、总结出来的步骤,从环境配置到最终部署,给你一步步捋清楚。

先说环境准备。11g对操作系统的要求挺挑剔,CentOS 6或者RedHat 6是它的黄金搭档,你要是拿CentOS 7去装,光依赖包就能把你整崩溃。我建议你直接装个CentOS 6.9,64位版本,内存至少给2G,硬盘空间留出20G以上。装系统的时候记得把开发工具包组勾上,还有"兼容性库"那个选项,不然后面编译的时候少个库文件,你哭都来不及。另外,主机名别用带下划线的,IP地址最好固定下来,DHCP那种动态IP在Oracle里就是个定时炸弹。
接下来是用户和组。Oracle不允许你用root直接装,这是硬性规定。你需要创建三个组:oinstall、dba、oper,再建一个oracle用户,主组设成oinstall,附加组加上dba和oper。密码别设置太复杂,免得到时候登录麻烦。这里有个小细节,很多人会忘记给oracle用户设置shell环境,默认可能是nologin,那样你su过去直接就被拒了。用usermod -s /bin/bash oracle这条命令改一下,省得后面折腾。创建完用户之后,记得在/home/oracle下建好目录结构,比如/app/oracle/product/11.2.0/dbhome1,这个路径后面安装的时候要用。
内核参数这块,是最多人在这一步翻车的。你需要在/etc/nf里添加一堆参数,比如kernel.sem、kernel.shmall、fs.file-max这些。我直接给你一组实测能用的值:kernel.shmall填2097152,kernel.shmmax填536870912,kernel.shmmni填4096,kernel.sem填250 32000 128,fs.file-max填6815744,net.ipv4.iplocalportrange填9000 65500,re.rmemdefault填262144,re.rmemmax填4194304,re.wmemdefault填262144,re.wmemmax填1048576。添加完执行sysctl -p让它生效。另外还要改/etc/security/nf,把oracle用户的nofile和nproc都设成65536,不然安装到一半提示文件句柄不够,那才叫欲哭无泪。
依赖包这一步,很多人觉得麻烦就跳过了,结果装到37%的时候报错说缺这个缺那个,又得回头补。CentOS 6.9安装光盘里自带了一堆rpm包,你要装的有binutils、compat-libstdc++、elfutils-libelf、gcc-c++、glibc-devel、libaio-devel、libgcc、libstdc++-devel、make、sysstat、unixODBC-devel,还有那个最坑的libXp和libXp-devel。用yum install一次装齐,别一个个装,浪费时间。装完之后用rpm -qa | grep compat检查一下,缺哪个补哪个。
现在到了下载安装包的时候。Oracle 11g R2有两个zip文件,加起来大概2G多。网上资源不少,但别随便找个链接就下,最好去Oracle官网下载,虽然需要注册个账号,但胜在安全稳定。下载完之后传到服务器上,用unzip解压。这里提醒一句,解压之前先确认一下磁盘空间够不够,解压完还要占用将近3G的空间。解压出来之后,你会看到database文件夹,里面有个runInstaller,这就是安装程序的启动脚本。
终于到了真正安装的环节。在运行runInstaller之前,记得先source一下oracle用户的环境变量,把ORACLEHOME和ORACLEBASE设置好。然后切换到oracle用户,进入database目录,执行./runInstaller。这时候会弹出图形界面,如果你用的是SSH连接,记得加上X11转发,或者用vncserver起个虚拟桌面。安装界面出来之后,第一步选择"Install database software only",别选创建数据库,那个事后面单独做。然后选单实例安装,语言选简体中文和英文都行,企业版就够用了。
安装过程中最关键的选项是Oracle Base和Oracle Home路径,默认是/u01/app/oracle,你可以改成自己规划好的目录。接下来会让你选择安装类型,选"Typical"就行,高级选项里别乱勾。环境检查那一步,如果显示有警告,比如swap分区不够,别慌,看看是不是可以忽略。我遇到过swap不足的警告,直接点忽略继续,后面也没出问题。真正安装过程大概需要20到30分钟,进度条走到100%的时候会提示你执行两个root脚本,一个是root.sh,另一个是orainstRoot.sh,用root身份去执行,别偷懒跳过去。
安装完之后,数据库实例还没建。你需要运行dbca命令来创建数据库。这里有个坑,如果你之前没有设置好环境变量,直接运行dbca会提示命令找不到。所以先source一下.bashprofile,确认ORACLEHOME和PATH都对了再执行。dbca界面出来之后,选创建数据库,模板选"General Purpose",全局数据库名和SID设成一样的,比如orcl。字符集这块,国内一般选ZHS16GBK,要是你处理的数据涉及多语言,那就选AL32UTF8。内存分配按照物理内存的一半来设,别贪心全占满,留点给操作系统用。
创建数据库的过程也要等个十几分钟,期间会执行一堆SQL脚本。看到"Database created successfully"这个提示,恭喜你,11g数据库就算真正跑起来了。不过别急着庆祝,还有几步收尾工作要做。先配置监听,用netca命令,默认配置就行。然后测试一下连接,用sqlplus sys/密码@orcl as sysdba,能进去就说明一切正常。设置开机自启动,把lsnrctl start dbstart加到/etc/里,或者用service脚本管理,这样服务器重启之后数据库能自己起来。
装完数据库,我还得提醒你几件小事。第一,防火墙和SELinux最好关掉,不然客户端连不上你都不知道是防火墙拦了还是监听没起来。第二,备份是个好习惯,装完之后做个冷备份,把数据文件和控制文件复制一份存到别处,万一后面配置出了问题还能恢复。第三,日志文件在$ORACLE_HOME/diag/rdbms/orcl/trace目录下,出了问题先去那里翻日志,比在网上瞎搜靠谱得多。
回头看看整个流程,11g的安装其实就是环境准备、内核调优、依赖补齐、软件安装、建库配置这五大步。每一步都有它的坑,但只要你按部就班来,别跳过任何一步,基本都能一次装成功。网上那些动不动就讲"避坑指南"的文章,大多是没踩过坑的人写出来的,真装过几套库的人心里都清楚,11g就是个磨性子的活,急不得。你把这套流程走一遍,后面再装12c、19c,你会发现思路都是相通的。第一次装可能得耗两三个小时,第二三次就快多了,四十分钟搞定。数据库这东西,装多了自然就熟了。


