装Oracle这事,说难不难,说简单也真不简单。我见过不少运维老手,在CentOS上装MySQL跟玩似的,一碰到Oracle就抓瞎,为啥?因为Oracle的安装逻辑跟那些开源数据库完全不是一个路子,它更像是个挑剔的客人,你得先把房间收拾利索了,它才肯进门。今天咱就掰开揉碎了聊聊,在Linux上装Oracle到底要走哪几步,哪些坑是前人用头发换来的教训。

先得把环境准备当成头等大事。很多人一上来就下载安装包,结果跑到一半报错,回头一看,内存不够、swap没配、依赖包缺一堆。Oracle 11g往后的版本,官方要求至少2GB内存,但你要是真按最低标准来,跑起来能卡到你怀疑人生。我建议4GB起步,swap分区直接设成内存的两倍,这步千万别省。另外,你得确认Linux内核版本,Oracle 12c要求内核不低于3.8,CentOS 7默认是3.10,没问题,但你要是还在用CentOS 6,那内核2.6的底子,装12c就得费点周折,要么升级内核要么换版本。依赖包这块更是重灾区,binutils、compat-libstdc++、gcc这些一个都不能少,缺一个,安装程序就给你脸色看,而且报错信息还特别迷惑,查半天才发现是缺了个不起眼的小包。
接下来说用户和目录规划。Oracle打死不让用root直接装,你得建一个专门的用户,比如oracle,还得给它配个用户组,通常是oinstall和dba两个组。为啥这么麻烦?因为Oracle进程需要精细的权限控制,root权限太大,反而容易出安全事故。建好用户后,目录结构也得提前想好,比如/u01/app/oracle作为软件安装目录,/u01/app/oracle/oradata放数据文件,这些目录的所有权必须给oracle用户,否则安装时写不进去,又得返工。有个小技巧,用df -h先看看哪个分区空间充足,别把Oracle装在根分区上,万一根分区满了,整个系统都跟着遭殃,数据目录单独放一个大分区才是正经。
然后是最磨人的内核参数调优。安装Oracle之前,你得修改/etc/sysctl.conf文件,设置共享内存、信号量、文件句柄限制这些参数。比如kernel.shmall、kernel.shmmax这两个参数控制共享内存的大小,默认值往往不够用,你得根据实际内存大小算一下,shmmax设成物理内存的一半比较稳妥。还有fs.file-max,这个控制系统全局的文件句柄上限,Oracle跑起来会开很多文件,默认值肯定不够。改完参数还得sysctl -p让它生效,这步忘了的话,安装程序检测环境时直接给你红叉,说你的内核参数不满足要求,让你回去改,特别闹心。另外,limits.conf也得改,设置oracle用户的nofile和nproc限制,把软硬限制都调高,不然运行的时候报"ORA-12537: TNS:connection closed",你都不知道是这破事引起的。
环境变量这块,坑也不少。你得在oracle用户的家目录下编辑.bashprofile,设置ORACLEBASE、ORACLEHOME、ORACLESID这些变量,还有PATH和LDLIBRARYPATH。ORACLEHOME指向你解压后的安装目录,ORACLESID是数据库实例名,这个是你自己起的,比如orcl。很多人栽在LDLIBRARYPATH上,因为Oracle运行时要加载一些动态库,路径不对,sqlplus一启动就报找不到libclntsh.so,急得直跺脚。还有个容易忽略的,就是把$ORACLEHOME/bin加进PATH,不然你敲sqlplus命令,系统告诉你command not found,那叫一个尴尬。环境变量配好后,source一下让它生效,再echo $ORACLEHOME确认一下,别急着往下走。
安装过程本身倒是挺顺利的,只要前面的准备工作做到位了。你下载的Oracle安装包一般是两个zip文件,解压后得到一个database目录,然后用oracle用户登录图形界面,运行./runInstaller就能启动安装向导。图形界面需要X11转发,如果你用的是远程SSH连接,得用Xmanager或者MobaXterm这类工具,不然起不来图形界面,只能用静默安装模式,那又是另一种玩法。安装类型选"创建并配置数据库"还是"仅安装数据库软件",看你需求。如果是生产环境,我建议只装软件,后面再用DBCA建库,这样更灵活,出问题也好排查。安装过程中会让你填sys和system用户的密码,这俩密码一定要记牢,忘了可不好搞,得进单用户模式重置,麻烦得很。
安装完软件,还得跑两个脚本。Oracle会在安装结束时提示你用root身份执行root.sh和orainstRoot.sh,这俩脚本是设置一些系统级权限和目录属主的。很多人觉得这步无所谓,直接跳过,结果后面启动监听、启动数据库的时候各种权限报错。跑脚本的时候要注意看输出,root.sh会让你指定一个本地bin目录,一般默认的/usr/local/bin就行,不用改。跑完脚本,再用netca配置监听器,用dbca创建数据库,这两步虽然也是图形化向导,但逻辑要清楚:先有监听器,数据库才能对外提供服务;再有数据库实例,数据才有地方存。顺序别搞反了,不然监听器起来了没数据库可连,或者数据库建好了监听器没起来,客户端连不上,又得排查半天。
装好之后,启动和验证也得讲究方法。用lsnrctl start启动监听,用sqlplus / as sysdba进入数据库,然后startup启动实例,这个流程要熟练。验证的时候,别光看进程在不在,得实际执行一下select 1 from dual;看能不能返回结果,还得检查一下alert日志,看有没有报错。生产环境的Oracle,建议设置开机自启,用systemd写个服务单元文件,或者用Oracle自带的dbstart脚本配合rc.local,这个看你习惯。另外,备份策略从上线第一天就得想好,用RMAN做全备加归档日志备份,别等出了事故再拍大腿。
说句掏心窝子的话,Oracle在Linux上的安装,本质上是个环境工程,90%的时间花在准备环境上,真正点下一步的时间不到10%。很多人失败,不是安装步骤不对,而是前面的准备工作偷懒了。内存不够就硬上,依赖包缺了就跳过,内核参数用默认值,结果就是装到一半报错,然后开始漫长的排查。如果你能静下心来,把官方安装文档的前置检查清单逐条过一遍,一次装成功的概率非常大。装数据库这事儿,和做菜一个道理,火候到了,食材备齐了,剩下的就是水到渠成。


