Linux部署Oracle 11g全流程:依赖配置、静默安装与排错指南

📅 发布时间:2026/9/19 3:01:36
Linux部署Oracle 11g全流程:依赖配置、静默安装与排错指南
记得第一次在Linux上装Oracle 11g我整整折腾了两个周末。不是卡在依赖包上就是被OUI界面频频报错搞到心态爆炸后来把整个流程从头到尾梳理了一遍才发现很多问题都是“顺序不对”造成的。这篇文章我就把Linux上安装Oracle 11g的完整过程、关键配置以及我踩过的坑一次性说清楚顺便把安装包下载渠道也一并交代明白希望能帮正在和Oracle 11g斗智斗勇的你少走弯路。Oracle 11g虽然是老版本但在国内政企、金融、制造等行业的存量系统里依然大量存在。很多新项目虽然已经转向12c、19c或者国产数据库但运维老系统、帮客户做数据迁移时还是绕不开在Linux上部署一套11g。这篇文章适合三类人第一类是要在测试环境快速搭一套Oracle 11g的研发或运维工程师第二类是正在备考OCP、需要用Linux环境练手的学习者第三类是接手了老项目被迫去维护Oracle 11g的“接盘侠”。我会从系统准备、依赖安装、静默部署、建库配置一直写到问题排查尽量把每个步骤背后的原因也解释清楚而不是简单地丢命令。1. 安装前必须想明白的三件事1.1 版本与操作系统的匹配关系Oracle 11g有两个大版本11.1.0和11.2.0目前在存量系统里最常见的是11.2.0.4这也是11g的最后一个小版本。之所以推荐11.2.0.4是因为它修复了大量早期版本的Bug而且对主流Linux发行版的支持也最完善。如果你在网上下载到的是11.2.0.1或11.2.0.2建议优先在My Oracle Support或第三方合法镜像里找到11.2.0.4的安装包再动手。操作系统方面Oracle官方文档里列出的支持列表是Red Hat Enterprise Linux 5、6以及Oracle Linux 5、6。但在实际项目中我见过很多CentOS 7、Rocky Linux甚至是Ubuntu上跑Oracle 11g的案例。这里要说明一下Oracle 11g官方并未声明支持CentOS 7因为CentOS 7的glibc版本更高systemd取代了init安装时会遇到一些小问题。不过通过修改参数和安装兼容库CentOS 7上跑11g是完全可行的后面我会说具体怎么处理。所以你要做的第一件事就是确认自己的Linux发行版和内核版本。执行下面的命令查看cat /etc/redhat-release uname -r cat /etc/os-release如果是Red Hat 6或CentOS 6那恭喜你默认兼容性最好。如果是CentOS 7或更高版本建议用--force参数安装依赖包时格外小心并且要留意pam_limits、systemd的配置方式变化。1.2 硬件与资源评估Oracle 11g对硬件的最低要求其实不高但真要在生产环境跑配置还是得留足余量。根据我的经验安装数据库的机器最好满足这些条件资源最低要求建议配置内存1GB8GB以上交换分区内存的1.5倍内存的2倍磁盘空间4.5GB以上100GB以上CPU1核4核以上内存不够的话OUI在安装时会直接报错提示Checking swap space: must be greater than 500 MB。如果你是在虚拟机上练习内存建议给到2GB以上同时swap给到3GB以上否则后面跑DBCA建库时会非常吃力。还需要特别注意的是Linux的/tmp目录空间。Oracle安装过程中会往/tmp写大量临时文件如果/tmp空间不足会出现类似Exception in thread main java.lang.OutOfMemoryError: Java heap space或者Error in invoking target install之类的诡异报错。建议/tmp至少要有1GB空间。如果你用df命令发现不够可以用mount -o remount,size2G /tmp临时扩容不过这只是权宜之计最好在安装前就规划好分区。1.3 下载安装包的正确姿势题主提到“提供安装包链接”这里我分享两个最省事的渠道。第一个是Oracle官方下载页。11.2.0.4的Linux x86-64版本在Oracle官网的下载地址是https://www.oracle.com/database/technologies/112060-linx8664soft.html打开后需要登录Oracle账号没有的话注册一个OTN账号就行完全免费。下载时你会得到两个Zip包文件名大概是linuxamd64_12102_database_1of2.zip和linuxamd64_12102_database_2of2.zip。注意Oracle 11g的官方下载链接偶尔会变动如果上面的地址失效可以去Oracle Software Delivery Cloud搜索Oracle Database 11g Release 2下载这个平台是Oracle官方的软件交付中心所有历史版本都能找到同样需要登录账号。第二个渠道是学校或企业内部软件站。很多高校的镜像站以及企业内部的软件库会缓存Oracle 11g的安装包下载速度比Oracle官网快很多。不过需要提醒一句尽量别从不知名的第三方博客或网盘下载安装包因为Oracle的zip包通常是几百MB甚至上GB网盘资源很容易被篡改或捆绑额外程序。我见过有人从网盘下载的Oracle安装包解压后里面多了个setup_extra.sh脚本一看就知道不对劲。安装包这种东西还是官方渠道最稳妥。2. 系统准备依赖、内核参数和用户环境2.1 依赖包到底缺哪些怎么一次装齐Oracle 11g安装过程中最让人崩溃的就是依赖包缺失。明明按照错误提示装了包再次运行runInstaller时又冒出新的缺失项。其实很多依赖没有真正失效只是版本不对或者32位和64位混淆了。在Red Hat / CentOS 6上可以直接用yum批量安装Oracle文档里列出的包。不同版本略有差别我整理了一份经过验证的清单适用于Oracle 11.2.0.4 64位安装yum -y install binutils compat-libcap1 compat-libstdc-33 gcc gcc-c glibc glibc-devel ksh libaio libaio-devel libgcc libstdc libstdc-devel libXext libXtst libX11 libXau libXi make sysstat unixODBC unixODBC-devel这些包中compat-libstdc-33在CentOS 7里已经不在默认源中需要单独处理。libaio-devel和unixODBC-devel在Oracle执行runInstaller时会进行硬性检查缺少任何一个都会在预检查阶段直接卡住。如果你用的是CentOS 7还需要额外安装lvm2等工具在安装前执行yum -y install lvm2CentOS 7上缺少compat-libstdc-33时可以通过以下方式获取rpm包并安装wget http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libstdc-33-3.2.3-72.el7.x86_64.rpm rpm -ivh compat-libstdc-33-3.2.3-72.el7.x86_64.rpm不过这个地址容易失效更简单的办法是找到CentOS 7的DVD镜像或已有的yum源搜索安装。实在找不到这个rpm也可以从CentOS 6的rpm包中提取但要注意依赖关系我倾向于建议你在安装时跳过OUI的“检查所需包”提示先安装完再逐个补齐。具体跳过方法后面讲。这里有个容易忽略的点Oracle 11g安装时需要ksh不是默认的bash。如果你在预检查阶段看到提示/bin/ksh: No such file or directory就是没有安装ksh。用yum -y install ksh装一下即可。还有sysstat不装的话后面用iostat、sar监控数据库服务器会不方便OUI也会报缺失。2.2 内核参数与资源限制的调整说明Oracle数据库对Linux内核参数有严格要求目的是让共享内存、信号量、文件描述符等资源满足数据库运行需要。这些参数需要写入/etc/sysctl.conf然后执行sysctl -p使配置生效。我常用的配置如下fs.aio-max-nr 1048576 fs.file-max 6815744 kernel.shmall 2097152 kernel.shmmax 2147483648 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定义了单个共享内存段的最大字节数Oracle SGA会使用共享内存如果这个值小于SGA大小数据库实例启动时很可能报ORA-27102: out of memory。kernel.shmall定义整个系统共享内存页的总数一般设置为kernel.shmmax / PAGE_SIZE在x86_64系统上PAGE_SIZE是4096字节所以2GB的shmmax对应shmall 524288但为了稳妥我会设置得更大。kernel.sem四个数字分别对应信号量数组的最大值、系统范围内最大信号量数、每个信号量集合的最大信号量数和系统范围内最大集合数Oracle官方推荐就是250 32000 100 128。fs.file-max是系统总文件句柄上限Oracle需要打开大量文件尤其在数据文件、日志文件较多时这个值不能太小。net.ipv4.ip_local_port_range设置本地TCP/UDP可用端口范围Oracle客户端连接监听时端口范围太窄会导致连接失败。改完后执行sysctl -p接着还要修改用户资源限制编辑/etc/security/limits.conf添加如下内容oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768这里nofile是文件打开数stack是栈大小nproc是用户进程数。不调这些限制数据库运行一段时间后可能出现无法创建新进程、文件打开失败等问题。对于CentOS 7和部分新版系统还需要确保/etc/pam.d/login中有session required pam_limits.so这行而且如果是用systemd启动的sshd服务需要在sshd.service中加上LimitNOFILE配置否则通过SSH登录时limits.conf可能不会生效。2.3 创建oracle用户和目录结构Oracle不允许用root用户直接安装数据库必须创建一个专门的oracle用户这是安全考虑也是安装过程的硬性要求。创建命令如下groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle这里把oracle用户的初始组设为oinstall附加组设为dba。oinstall是Oracle Inventory组用来管理Oracle软件安装清单dba是数据库管理员组用于操作系统身份认证的DBA权限。如果你还想让oracle用户具备asmadmin或oper等组权限可以根据需求额外添加。目录结构方面Oracle 11g的ORACLE_BASE和ORACLE_HOME是两个核心路径。我习惯按OFAOptimal Flexible Architecture标准来创建mkdir -p /u01/app/oracle mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1 chown -R oracle:oinstall /u01 chmod -R 775 /u01ORACLE_BASE通常是/u01/app/oracleORACLE_HOME则是/u01/app/oracle/product/11.2.0/dbhome_1。为什么要用/u01而不是直接装在/home/oracle下因为/u01多用于专门的数据存储分区避免把数据库软件和用户主目录混在一起便于管理也方便后续扩容。如果你的磁盘分区中根分区空间不大建议专门挂载一个/u01分区并且使用ext4或xfs文件系统。安装前务必用df -h /u01检查可用空间。创建好用户和目录后还需要在oracle用户的环境变量中写入以下内容。编辑/home/oracle/.bash_profileexport ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SIDorcl export PATH$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH$ORACLE_HOME/lib:/usr/lib64 export NLS_LANGAMERICAN_AMERICA.AL32UTF8 export TNS_ADMIN$ORACLE_HOME/network/adminORACLE_SID是数据库实例名这里用orcl是Oracle最常见的默认名称。NLS_LANG设置字符集和语言环境设置为AL32UTF8可以避免中文字符乱码。LD_LIBRARY_PATH必须包含$ORACLE_HOME/lib否则sqlplus启动时会报找不到libclntsh.so的错误。配置完成后用source ~/.bash_profile生效然后切换用户验证su - oracle id echo $ORACLE_HOME看到输出正常说明用户环境就绪。3. 安装过程实操从解压到建库3.1 安装包解压与静默安装模板下载回来的两个zip包需要先解压到同一个目录。假设zip包放在/opt/install下执行cd /opt/install unzip linuxamd64_12102_database_1of2.zip -d /opt/install/ unzip linuxamd64_12102_database_2of2.zip -d /opt/install/注意两个包解压后会自动合并到同一个database目录不需要手动合并。解压完成后确认database目录下有个runInstaller文件ls -l /opt/install/database/在Linux上安装Oracle 11g可选图形界面和静默安装两种方式。如果服务器有图形桌面且你通过VNC或直接终端登录了图形会话那么可以执行./runInstaller启动OUI图形安装但很多生产服务器没有图形环境或者X11转发配置麻烦所以我更推荐静默安装尤其是要写脚本批量部署的时候。静默安装需要准备一个response文件。Oracle安装包中自带了模板在database/response/目录下有db_install.rsp、dbca.rsp和netca.rsp。我们可以复制一份出来修改关键参数cp /opt/install/database/response/db_install.rsp /home/oracle/db_install.rsp chown oracle:oinstall /home/oracle/db_install.rsp然后编辑/home/oracle/db_install.rsp关键的几个参数如下oracle.install.optionINSTALL_DB_SWONLY UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oraInventory SELECTED_LANGUAGESen,zh_CN ORACLE_HOSTNAMEdb-server ORACLE_BASE/u01/app/oracle oracle.install.db.InstallEditionEE oracle.install.db.DBA_GROUPdba oracle.install.db.OPER_GROUPdba oracle.install.db.BACKUPDBA_GROUPdba oracle.install.db.DGDBA_GROUPdba oracle.install.db.KMDBA_GROUPdba oracle.install.db.CLUSTER_NODES ORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1 oracle.install.db.InstallEditionEE oracle.install.db.isCustomInstallfalse oracle.install.db.customComponents oracle.install.db.DBA_GROUPdba oracle.install.db.OPER_GROUPdba oracle.install.db.CLUSTER_NODES oracle.install.db.config.starterdb.typeGENERAL_PURPOSE oracle.install.db.config.starterdb.globalDBNameorcl oracle.install.db.config.starterdb.SIDorcl oracle.install.db.config.starterdb.characterSetAL32UTF8 oracle.install.db.config.starterdb.memoryLimit800 oracle.install.db.config.starterdb.password.ALLoracle123 oracle.install.db.config.starterdb.dbcontrol.enablefalse oracle.install.db.config.starterdb.installExampleSchemasfalse注意如果你只是先安装数据库软件不创建数据库把oracle.install.optionINSTALL_DB_SWONLY后面与starterdb相关的参数不用管。如果想全自动安装软件并创建数据库才需要写完整的dbca响应文件。静默安装命令是su - oracle cd /opt/install/database ./runInstaller -silent -responseFile /home/oracle/db_install.rsp -ignorePrereq-ignorePrereq就是前面提到的跳过预检查。如果你的系统是CentOS 7缺少某些官方支持列表中的包时加上这个参数可以强制继续。但不建议无脑跳过后面的问题还是得手动解决。安装过程中会卡在“完成”阶段提示你用root执行两个脚本/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0/dbhome_1/root.sh先用root运行第一个脚本它会修改中央Inventory的权限。第二个root.sh会在/etc/oratab中写入实例信息并创建dbhome相关目录。如果不执行这两个脚本后续监听器和数据库实例启动都会出问题。3.2 OUI图形安装的关键选项如果你有图形环境也可以直接运行./runInstaller走图形界面。这种方式交互比较友好但有几个选项我建议提前注意。在“Installation Type”界面上选“Create and configure a database”或“Install database software only”。如果只是学习或者准备手动建库选“Install database software only”更灵活避免OUI自动建库后一系列权限问题。后面用DBCA建库也是同样的效果。在“Select Configuration Type”界面如果选了“Enterprise Edition”就是企业版功能最全。标准版在某些功能上有限制比如RAC、分区、OLAP等选项不可用。在没有特殊需求时选“Enterprise Edition”。字符集选择上我建议直接选AL32UTF8。如果你的应用是老旧的GBK业务可能需要选ZHS16GBK这个要在安装前想清楚后期修改字符集非常痛苦甚至需要重建数据库。在数据库密码设置页注意密码复杂度要求Oracle 11g要求密码至少8位、必须包含大写字母和数字。服务端还有密码策略如果密码太简单点击下一步时会报错。图形安装最后同样会要求以root身份执行orainstRoot.sh和root.sh这一步永远躲不掉别偷懒。3.3 用DBCA创建实例以及监听配置如果前面选择只装软件创建数据库实例就要用DBCADatabase Configuration Assistant。命令非常简单su - oracle dbca图形环境下会弹出DBCA向导。如果服务器没有图形界面可以用静默方式创建实例。先准备一个dbca.rsp修改重点参数gdbName orcl sid orcl sysPassword oracle123 systemPassword oracle123 datafileDestination /u01/app/oracle/oradata characterSet AL32UTF8 memoryPercentage 40 templateName General_Purpose.dbc然后执行dbca -silent -responseFile /home/oracle/dbca.rsp等待几分钟后实例创建完成。如果看到日志中出现Database creation complete说明成功。此时你还需要手动配置监听器避免客户端连不上。Oracle 11g的监听器用netca命令配置netca /silent /responsefile /opt/install/database/response/netca.rsp执行完成后会生成listener.ora文件位于$ORACLE_HOME/network/admin/目录。用lsnrctl status查看监听状态lsnrctl status正常情况下可以看到Listening Endpoints Summary... (DESCRIPTION(ADDRESS(PROTOCOLtcp)(HOSTdb-server)(PORT1521)))如果监听未启动执行lsnrctl start手工启动。再把监听配置写入tnsnames.ora否则sqlplus里用orcl连接会提示ORA-12154: TNS:could not resolve the connect identifier specified。tnsnames.ora内容如下ORCL (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST your_host_ip)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) ) )配置完成后可以用以下命令测试连接sqlplus sys/oracle123orcl as sysdba如果提示Connected to an idle instance说明实例没有启动执行startup即可。这一步许多初学者会忘记只要实例状态是OPENsqlplus就能正常登录。4. 高频问题速查与排查笔录4.1 常见报错及解决方案我在多次安装中遇到过的坑按“高频程度”排个序给你直接当速查表用。报错信息常见原因解决方法Checking monitor: must be configured to display at least 256 colors图形界面不支持Oracle OUI显示使用静默安装或者安装xorg-x11-deprecated-libs并配置X11转发Exception in thread main java.lang.OutOfMemoryError/tmp空间不足或Java堆过小清理/tmp设置环境变量JAVA_OPTIONS-Xmx1024mError in invoking target install缺失libaio-devel或make版本不兼容检查libaio相关包重装binutils、gcc-cORA-27102: out of memorykernel.shmmax小于SGA调整kernel.shmmax并执行sysctl -pORA-12547: TNS:lost contactoracle用户没有执行root.sh或者oracle_home权限不对执行root.sh检查$ORACLE_HOME/bin/oracle的属主和权限ORA-01078: failure in processing system parametersinit.ora或spfile配置了不存在的参数使用默认pfile恢复或修正非法参数值ORA-12514: TNS listener does not currently know of service requested监听未注册实例执行alter system register;或重启监听并检查tnsnames.oralibclntsh.so: cannot open shared object fileLD_LIBRARY_PATH未设置在~/.bash_profile中增加LD_LIBRARY_PATH$ORACLE_HOME/lib/lib/ld-linux.so.2: bad ELF interpreter缺少32位glibc安装glibc.i686和相关32位兼容包第一个“Checking monitor”错误在无图形环境的服务器上非常常见。如果你非要图形界面可以用Xming或Xshell的X11转发但说实话静默安装更省心。我后来直接把图形安装作为一种备份方案主要流程全部改成了静默方式。第二个OutOfMemoryError有时候不是物理内存不足而是Java堆不够。你可以在运行runInstaller前加上export JAVA_OPTIONS-Xmx1024m但如果/tmp空间不足这个也不顶用。最好用df -h /tmp检查低于500MB就赶紧清理或重新挂载。4.2 安装后启动自启与备份建议安装完成后很多人以为数据库就能一直运行了。实际上服务器重启后Oracle实例和监听器默认是不会自动启动的需要通过/etc/oratab和启动脚本来管理。/etc/oratab文件是root.sh自动生成的内容大致为orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N最后的N表示重启时不自动启动。想启用自启把N改成Yorcl:/u01/app/oracle/product/11.2.0/dbhome_1:Y然后创建启动脚本。在CentOS 6里可以直接把dbstart和dbshut链接到rc*.d目录但CentOS 7用的systemd我更建议写一个systemd service文件。新建/etc/systemd/system/oracle.service内容如下[Unit] DescriptionOracle Database 11g Afternetwork.target [Service] Typeforking Useroracle Groupoinstall RemainAfterExityes ExecStart/u01/app/oracle/product/11.2.0/dbhome_1/bin/dbstart $ORACLE_HOME ExecStop/u01/app/oracle/product/11.2.0/dbhome_1/bin/dbshut $ORACLE_HOME [Install] WantedBymulti-user.target注意dbstart执行时需要读取/etc/oratab并且会默认启动监听。如果/etc/oratab中的SYSTEMID配置不对可能会启动失败。配置好后执行systemctl daemon-reload systemctl enable oracle systemctl start oracle备份方面开发测试环境可以忽略生产环境建议至少开启归档模式。一旦开启归档数据文件、控制文件、日志文件才有完整的恢复链。sqlplus / as sysdba shutdown immediate; startup mount; alter database archivelog; alter database open; archive log list;当然开启归档后要注意归档日志盘空间否则数据库会因为无法归档而挂起。我建议把归档目录设置到单独分区并配置DB_RECOVERY_FILE_DEST_SIZE。4.3 一些容易忽略的细节如果CentOS 7上安装11g时OUI预检查报错Checking OS requirements: Failed不建议直接忽略最好在CentOS 7上修改/etc/redhat-release中的版本号来骗过检查。这个操作只影响OUI的版本识别不影响系统本身但我不推荐在生产环境乱改系统文件。替代方案是在runInstaller参数里加上-ignorePrereq并在后续手动处理依赖包。还有/dev/shm的问题。Oracle 11g使用共享内存时如果/dev/shm太小可能导致实例启动后出现内存不足报错。默认/dev/shm通常是物理内存的一半可以执行df -h /dev/shm查看。如果觉得小可以修改/etc/fstab增加挂载大小或者在数据库中使用MEMORY_TARGET参数控制内存使用尽量避免耗尽/dev/shm。字符集乱码也是老问题。安装时选了AL32UTF8但客户端用ZHS16GBK连接中文就可能变成问号。这就需要在客户端设置NLS_LANGSIMPLIFIED CHINESE_CHINA.AL32UTF8保持两端一致。我的经验是数据库字符集和客户端字符集最好统一用AL32UTF8现在的应用基本都支持UTF-8尽量不要混用GBK和UTF-8。防火墙和SeLinux也是两个“隐形杀手”。安装前最好先执行setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config再关闭或放行防火墙端口systemctl stop firewalld systemctl disable firewalld如果坚持用防火墙需要放行1521端口firewall-cmd --permanent --add-port1521/tcp firewall-cmd --reload我的建议是在测试环境里直接关闭防火墙和SELinux能省掉很多莫名其妙的坑但生产环境请根据公司的安全规范处理不要为了省事把安全防线全关了。最后再分享一个我自己实际踩过的教训安装完毕后不要把Oracle安装包和解压目录随手删掉。因为后续如果要打补丁、添加组件或者排查某些问题需要回到安装介质重新运行相关工具。我一般会在服务器上保留一份/opt/install/database目录权限设为oracle:oinstall这样既不占太多空间又能应急。Oracle 11g在Linux上的安装其实并不难只要把依赖、内核参数、用户目录这三件事理顺再选对静默安装或图形安装的方式整个过程基本不会超过一个小时。但如果省略了这些准备步骤哪怕装上了后面也可能因为资源限制、监听器配置、字符集不一致等问题反复折腾。上面这些坑都是我一个字一个字敲出来的真实经验希望能让你少踩一次雷。