☰
CentOS 7上使用Xmanager安装Oracle 11g并部署Tomcat全流程指南
2026/10/19 5:48:17 网站建设 项目流程

最近接到一个任务:在一台全新的CentOS 7服务器上,通过xmanager把Oracle 11g的图形安装器拉起来,装好数据库之后再部署Tomcat,跑通整个业务流程。说实话,Oracle 11g这套老家伙在CentOS 7上装起来并不轻松,坑一个接一个;而Tomcat相对简单,但要把两者串起来,中间有不少细节容易卡壳。这篇文章就是一份完整到可以直接照着操作的全流程记录,写给那些和我一样,手里既没有显示器、又不想折腾VNC的兄弟们。

如果你也在内网服务器上装过Oracle 11g,应该知道最头疼的不是命令本身,而是安装界面怎么弹出来。Xmanager在这个场景里算是比较顺手的方案:Windows客户端装Xmanager,远程通过X11协议把Oracle的图形界面拉到本地,配置比VNC简单,而且和Xshell配合得很舒服。这套流程跑下来,我前后花了大半天时间,其中一半耗在环境准备和各种诡异的报错上。下面的步骤我尽量把坑提前排掉,让你能少走弯路。

1. 为什么选Xmanager,以及这套方案的适用边界

1.1 这台服务器是什么情况

先说下我的环境。服务器是内网的一台戴尔机器,系统是CentOS 7.9 x86_64,CPU 4核,内存8G,磁盘给 /opt 分了50G。数据库版本选的是Oracle 11g R2 11.2.0.4,这个版本是11g系列里最成熟、网上资料最多的一个;Web容器用Tomcat 9,JDK用1.8。选这些组合的原因是业务系统比较老,很多兼容性问题只有这套组合能兜住。

如果你手里是一台2C4G的小机器,装Oracle 11g也能跑,但建议Swap给到4G,SGA别超过1.5G,否则后期DBCA建库很容易报错。内存8G是我认为比较舒服的底线,因为Oracle 11g安装器本身很吃内存,再加上Tomcat和系统本身,低于4G基本是折磨自己。

1.2 为什么不用VNC而用Xmanager

其实VNC也能干这事,但我在这次任务里选了Xmanager,原因有三个。

第一,VNC需要在服务器上装服务端、配桌面环境、设置systemd服务,还要处理登录认证。服务器没有装图形桌面,用VNC就得先装个GNOME或者Xfce,太重了。Xmanager只需要在Windows端装一个客户端,服务器端只要装好X11相关的xauth和字体包就行,不需要完整桌面。

第二,VNC走的是独立VNC协议,穿透防火墙和NAT要额外配置,Xmanager走的是SSH X11转发,只要22端口通,图形界面就能拉到本地。内网环境里这几乎零成本。

第三,Xmanager和Xshell来自同一家,手里本来就有Xshell管理服务器,再开个Xmanager非常自然。Xmanager开机后在Passive模式常驻,Xshell里勾上X11转发,运行图形程序时窗口直接跳到Windows桌面,体验和本地差不多。

当然,Xmanager是商业软件,需要授权。如果公司没有,用开源的VNC或者其他X Server也可以,底层逻辑一样。本文按Xmanager讲,但里面的原理和大多数坑是通用的。

1.3 版本组合与准备工作清单

在动手之前,先把需要用到的文件准备好:

角色版本/文件说明
操作系统CentOS 7.9 x86_64内核3.10,和11g兼容性全靠补依赖
数据库Oracle 11.2.0.4 Linux x64两个zip包,约2GB
客户端Windows 10 + Xmanager 7最好和Xshell配套
JDKOracle JDK 8u202Tomcat运行需要
Tomcatapache-tomcat-9.0.73长期支持版本
JDBC驱动ojdbc6.jar让Tomcat连Oracle用的

服务器端需要能联网,至少能访问内网yum源,因为安装过程中要装很多依赖包。如果服务器完全离线,就需要提前准备好依赖rpm。这个我放在第二章细说。另外,Oracle 11g在CentOS 7上并不是官方支持的组合——Oracle官方只支持到RHEL 6,所以下面的做法本质上是在“非官方环境”上强行跑,适合测试、准生产或内部系统。如果是银行、医疗之类的正经生产环境,建议要么换Oracle 12c以上,要么用Oracle Linux。

2. 系统底子不打好,后面步步是坑

2.1 网络与防火墙策略调整

Oracle安装过程要对外开发1521端口(监听器)和可能用到的其他端口;Tomcat要开发8080端口。为了不让防火墙成为排查变量,我直接把firewalld关掉了。

systemctl stop firewalld systemctl disable firewalld

同时SELinux也建议关掉。Oracle 11g安装器和CentOS 7默认的SELinux策略之间的问题很玄学,比如明明权限对了还是会报“ Permission denied”,查半天都查不出原因。既然是内网服务器,我直接修改/etc/selinux/config:

SELINUX=disabled

然后执行setenforce 0让当前会话立即生效。注意,如果只改了配置文件不重启,当前系统还是Enforcing模式;setenforce 0只是临时生效,重启后配置文件接管。装完Oracle和Tomcat之后再决定是否重新开启,本文按关闭讲。

2.2 依赖包一次性装齐

Oracle 11g的安装器要求一堆老掉牙的依赖包,CentOS 7默认仓库里有一部分,但有两个很容易缺:compat-libcap1和compat-libstdc++-33。另外,Oracle 11g虽然是64位软件,但安装过程里会调用大量32位的辅助程序,所以32位兼容库也是刚需。

我在命令行里直接执行:

yum install -y binutils compat-libcap1 compat-libstdc++-33 \ gcc gcc-c++ glibc glibc-devel libaio libaio-devel \ libgcc libstdc++ libstdc++-devel libXext libXtst libXau libXi \ libXrender make net-tools sysstat ksh

如果 yum 提示No package compat-libstdc++-33 available,说明你的源里没有这个包。CentOS 7的官方源里确实没有它,建议先安装epel源再试:

yum install -y epel-release

如果还是不行,就只能从网上下载老版本的rpm手动安装。这里有个小提醒:compat-libstdc++-33在64位系统上装64位版本就行,但有些机器会同时需要32位版本,报错时再补。

接下来是两个极易被忽略的包:

yum install -y xorg-x11-xauth xorg-x11-fonts-*

xorg-x11-xauth是X11认证必需的,没有它Xmanager的转发会报“Authorization required”。xorg-x11-fonts-*是字体包,远程X转发时如果缺字体,Oracle安装界面会出现一行行的方块或者乱码,看着非常头疼。

再补一组32位库。这一步是我在一台机器上踩坑后总结出来的:

yum install -y glibc.i686 libaio.i686 libXext.i686 libXtst.i686 \ ncurses-libs.i686 gcc-c++.i686

为什么强调这个?因为Oracle 11g安装器在链接阶段会调用32位的库,如果缺少,就会出现后面第四章那个经典的makefile 'all_no_orcl'报错。提前装上,能省一次返工。

2.3 内核参数、用户组和目录权限

安装Oracle必须创建专用用户,不能直接用root。我按Oracle官方的惯例来:

groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle

目录规划也很重要。我把所有Oracle相关文件放在/opt/oracle下:

mkdir -p /opt/oracle/oracle_home mkdir -p /opt/oracle/data mkdir -p /opt/oracle/install chown -R oracle:oinstall /opt/oracle

oracle_home是Oracle软件安装目录,data放数据文件,install放安装包和解压文件。实际生产中数据文件可能放在独立存储上,但这里先按单机磁盘来。

然后修改/etc/sysctl.conf,加入以下内容:

fs.aio-max-nr=1048576 fs.file-max=6815744 kernel.sem=250 32000 100 128 kernel.shmall=2097152 kernel.shmmax=536870912 kernel.shmmni=4096 net.core.rmem_default=262144 net.core.rmem_max=4194304 net.core.wmem_default=262144 net.core.wmem_max=1048576 net.ipv4.ip_local_port_range=9000 65500

保存后执行sysctl -p立即生效。这里重点解释一下kernel.shmmax和kernel.shmall。shmmax是单个共享内存段的最大字节数,我设了512M(536870912字节),如果物理内存是8G,这个值不要超过内存的一半。shmall是共享内存页总数,设成2097152页(默认页大小4K),等于8G。Oracle的SGA就是通过共享内存实现的,设小了会报ORA-27125或者无法分配共享内存。

同时修改/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是文件描述符限制,Tomcat连接Oracle时线程多、连接数多,如果限制太小会出现“Too many open files”。nproc是进程数限制,Oracle的ASM等进程很吃这个。改完后需要重新登录oracle用户才会生效,可以用ulimit -a验证。

2.4 hosts文件与主机名检查

这个坑必须要单独拿出来说。Oracle 11g的监听器对主机名解析有依赖,如果/etc/hosts里主机名和IP对不上,监听只监听在127.0.0.1上,远程永远连不上。

我先把主机名设置了:

hostnamectl set-hostname oratest

然后编辑/etc/hosts:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.100 oratest.example.com oratest

注意,主机名里不要带下划线,比如oracle_test这种,Oracle的安装器可能直接报错。同时还要保证hostname命令输出的内容和/etc/hosts里第二列保持一致。

检查方式很简单:

hostname ping $(hostname)

如果 ping 显示的是192.168.1.100而不是127.0.0.1,说明映射正确。这个步骤直接影响后面DBCA建库和远程连接,别跳过。

3. Xmanager图形会话建立:到底选Xstart还是Xshell的SSH隧道

3.1 Xmanager Passive模式与DISPLAY规则

Xmanager安装好之后,默认会有一个Xmanager - Passive的会话模式,只要启动它,你的Windows机器就会作为一个X Server在后台运行,理论上只监听本地回环地址,SSH转发时会自动把数据接过来。

很多新手不理解“DISPLAY”到底是什么,可以简单理解为:远程程序需要知道往哪块“屏幕”上画窗口。DISPLAY的值通常长这样localhost:10.0,表示X显示服务在本地6000端口上,编号10,显示器0。通过SSH X11转发时,SSH服务端会动态分配一个Display编号,从10开始往上排。你不需要自己手动设置,SSH会自动帮你配置好。

但有个前提:服务器的SSH配置必须允许X11转发。查看/etc/ssh/sshd_config,确保有这两行:

X11Forwarding yes X11UseLocalhost yes

改完要重启sshd:

systemctl restart sshd

3.2 用Xstart启动oracle用户图形环境

Xmanager自带的另一个工具叫Xstart,专门用来启动远程X应用。我的配置是这样的:

  • 协议:SSH
  • 主机:192.168.1.100
  • 端口:22
  • 用户名:oracle
  • 认证:Password
  • 执行命令:/usr/bin/xterm -ls

连接成功后,Windows桌面上会弹出一个xterm终端窗口。注意,这一步我没有直接启动runInstaller,而是先启动xterm,理由是安装Oracle时需要多次点击下一步、选择目录,如果在xterm里操作,环境变量和当前目录都保持着,比每次重新配置Xstart要方便得多。

连上后,在xterm里执行:

echo $DISPLAY

如果输出类似oratest:10.0,说明X11转发已经成功。如果你看到的是空输出或者DISPLAY not set,说明xauth或sshd配置没生效,回3.3排查。

这里再多说一句,Xstart里的“执行命令”也可以直接填xterm -ls -display 127.0.0.1:0之类,但在Passive模式下,没必要手动指定DISPLAY,SSH转发已经做了全套。手动指定反而可能因为X认证失败而连不上。

3.3 DISPLAY没生效的排查套路

我在第一次试验时遇到过窗口完全弹不出来的情况,报错是:

Xlib: connection to "localhost:10.0" refused by server Xlib: No protocol specified

这个问题的根子通常在“X11转发链路没打通”和“Windows防火墙拦了TCP 600x端口”。按顺序排查:

第一步,确认Xmanager处于Passive模式。看Windows右下角托盘有没有Xmanager的图标,如果没有,单独启动一下。

第二步,在服务器上安装xauth,很多精简系统没有这个包:

yum install -y xorg-x11-xauth

第三步,检查Windows防火墙是否允许Xmanager监听。如果你用的是SSH转发模式,理论上不需要开放6000端口,但如果你手动用DISPLAY指定了Windows IP,就必须放行。

第四步,用ssh -X手动测试:

ssh -X oracle@192.168.1.100 xterm

如果这个都弹不出来,那就是sshd配置或xauth的问题;如果这个能弹出来,说明Xstart配置有问题。

我那次问题出在/etc/ssh/sshd_config里多了一行X11UseLocalhost no,导致DISPLAY变成了远程主机名而不是localhost,X认证对不上。改成X11UseLocalhost yes就没问题了。这类玄学问题,最有效的验证方法就是把变量一减到底。

4. Oracle 11g安装器全流程实战

4.1 解压安装包和runInstaller的启动方式

把两个zip包上传到/opt/oracle/install后,先解压:

cd /opt/oracle/install unzip linux.x64_11gR2_database_1of2.zip unzip linux.x64_11gR2_database_2of2.zip

解压完成后,会生成一个database目录,里面就是安装器。记得把整个目录属主改成oracle:

chown -R oracle:oinstall /opt/oracle/install/database

然后切换到oracle用户:

su - oracle cd /opt/oracle/install/database ./runInstaller

很多人会用./runInstaller -ignoreSysPrereqs跳过环境检查,我建议先不加这个参数,让安装器自检一遍。如果前面依赖包装齐了,自检一般只会提示几个可忽略项。启动方式看似简单,但有一个前提:你必须在X11转发环境里执行,否则会直接报:

DISPLAY not set. Please set DISPLAY.

如果在xterm里执行,就不会有这个问题。

4.2 安装选项:从“仅安装数据库软件”到DBCA

runInstaller启动后,第一屏可能会问是否接收安全更新,网络环境不好的话直接跳过。接着要选安装类型:

  • “Install database software only” —— 只装数据库软件,不建库。
  • “Install database and configure” —— 软件和实例一起装。

我强烈建议选第一项“Install database software only”,然后用DBCA单独建库。理由是安装器自动建库时往往会探测监听状态、分配SGA,任何一个环节出问题都要从头跑;分开来做,每一步都可以单独验证,排查范围小很多。

之后选“Single instance database installation”,然后选语言。这里选English和Simplified Chinese都行,安装器界面的语言和你后续数据库字符集没有直接关系,数据库字符集是DBCA里单独配的。

再下一步是选择企业版。Oracle 11g只有企业版,这个没啥好纠结。接着填入Oracle基目录和Oracle主目录:

  • Oracle Base:/opt/oracle
  • Software Location:/opt/oracle/oracle_home

安装器会检查环境,如果有未通过的项,点击“Ignore All”继续。但如果你看到compat-libstdc++-33缺失,建议还是回去装上,硬着头皮继续很容易在最后阶段翻车。

4.3 关键配置:字符集、监听端口、内存管理

虽然安装软件阶段还不需要配置数据库字符集和内存,但有几个点现在想清楚,后面建库才不慌。

字符集这块,如果你的业务系统要存中文,数据库字符集一定要选AL32UTF8。很多老系统为了省空间用了ZHS16GBK,导致后续迁到云上变成乱码,非常痛苦。Oracle 11g的AL32UTF8支持完整Unicode,和Java应用对接也最顺手。

监听端口默认是1521。如果你机器的1521被占了或者想避开扫描,可以改1522,但后面所有连接串、防火墙规则都要跟着改。本文按1521讲。

内存管理方面,Oracle 11g支持自动内存管理(AMM),也就是MEMORY_TARGET参数。在8G内存的机器上,我建议给Oracle分配的SGA+PGA总量在3G到4G之间。如果设太大超过共享内存限制,DBCA建库会报ORA-27125,这里在第5章专门讲。

4.4 安装中段最常见的makefile报错与修复

软件安装到大约75%的位置,有相当高的概率会遇到这个报错:

Error in invoking target 'all_no_orcl' of makefile '/opt/oracle/oracle_home/rdbms/lib/ins_rdbms.mk'

错误日志里通常会跟着libnnz11.a或者libclntsh.so相关字样。别慌,这个不是Oracle许可证问题,也不是硬件问题,绝大多数是因为32位库没装齐。我当时在一台机器上补装了这些后重试就成功了:

yum install -y libaio.i686 glibc-devel.i686 ncurses-libs.i686

如果补了库之后,安装器还是卡在同一个位置,可以手工进入目录执行make命令来定位具体依赖:

cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk client_shared

它会直接打印缺失的符号或头文件。看到ld: cannot find -l...什么库,就装对应的包。这种手工make的方式在每次安装时都很有用,比反复重跑runInstaller快得多。

还有另一种情况是make时提示-lclntsh找不到,这通常是Oracle主目录的lib目录下连接库没创建。可以执行:

cd $ORACLE_HOME/bin ./relink all

重新链接所有Oracle命令,能解决不少玄学问题。

5. Oracle实例创建与Tomcat部署衔接

5.1 DBCA建库,字符集AL32UTF8如何选

软件安装完成后,回到xterm里运行dbca:

dbca

如果环境变量没配好,会提示找不到dbca命令。这时先确认$ORACLE_HOME/bin在PATH里,没有就手动执行:

export ORACLE_HOME=/opt/oracle/oracle_home export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib

DBCA弹窗后,我选择了“Create a Database”,数据库模板选“General Purpose”,这个模板适合大多数业务系统。然后设置:

  • Global Database Name:orcl.example.com,SID:orcl
  • 管理选项:取消Enterprise Manager配置,省得额外起一堆进程
  • 数据库口令:SYS和SYSTEM分别设置强密码
  • 存储类型:文件系统
  • 数据文件位置:/opt/oracle/data
  • 字符集:AL32UTF8,国家字符集:AL16UTF16

建库过程中,DBCA会启动实例,分配SGA,创建数据字典。这一步一般持续10到20分钟。完成后,DBCA会提示执行alter user sys account unlock之类的选项,按需处理。

建库完成后,先用sqlplus看实例状态:

sqlplus / as sysdba SQL> select status from v$instance;

如果返回OPEN,说明实例没问题。再确认监听:

lsnrctl status

看到 “Service 'orcl' has 1 instance(s)” 就说明监听也正常。

5.2 环境变量与开机自启脚本

安装好Oracle之后,必须把环境变量固化到oracle用户的配置里,否则每次登录都要手动source。编辑/home/oracle/.bash_profile,加入:

export ORACLE_BASE=/opt/oracle export ORACLE_HOME=/opt/oracle/oracle_home export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

NLS_LANG影响sqlplus显示中文的编码,如果不设置,查询中文数据可能出现乱码。AMERICAN_AMERICA.AL32UTF8是业界最常见的组合。

然后是开机自启。编辑/etc/oratab,把这一行的最后一个字段改成Y:

orcl:/opt/oracle/oracle_home:N

改成:

orcl:/opt/oracle/oracle_home:Y

接下来编辑/etc/rc.d/rc.local:

su - oracle -c "lsnrctl start" su - oracle -c "dbstart"

给rc.local执行权限:

chmod +x /etc/rc.d/rc.local

dbstart会读取oratab,启动标记为Y的实例。这里要注意,dbstart的日志在$ORACLE_HOME/startup.log,如果重启后没起起来,先看这个文件。

5.3 部署Tomcat:JDK版本和CORS、UTF-8这些细节

Tomcat部署和Oracle比起来轻松很多。把jdk和tomcat包解压到 /opt 下:

tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt tar -zxvf apache-tomcat-9.0.73.tar.gz -C /opt mv /opt/apache-tomcat-9.0.73 /opt/tomcat

设置JDK环境变量,修改/etc/profile或/home/tomcat/.bash_profile:

export JAVA_HOME=/opt/jdk1.8.0_202 export PATH=$JAVA_HOME/bin:$PATH export CATALINA_HOME=/opt/tomcat

我这次创建了一个专门的tomcat系统用户来跑Tomcat,没有直接用oracle用户。虽然oracle和tomcat放在同一台机器上,但数据库用户和应用容器用户分开管理更清爽,也避免一个用户权限过大。

useradd -r -s /bin/false tomcat chown -R tomcat:tomcat /opt/tomcat

Tomcat的内存参数编辑/opt/tomcat/bin/catalina.sh,在文件开头加:

JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m -Dfile.encoding=UTF-8"

关于编码,Tomcat 9默认已经是UTF-8,但老项目里可能在server.xml里配置过URIEncoding="GBK",必须改回来。打开/opt/tomcat/conf/server.xml,找到Connector节点,加上或确认:

URIEncoding="UTF-8"

如果应用服务器要接收POST参数,body编码也要在web.xml里配置CharacterEncodingFilter,这是应用层面的事,但Tomcat侧先保证能传输UTF-8。

5.4 让Tomcat能连上Oracle:JDBC驱动和连接池配置

先把ojdbc6.jar放到Tomcat的lib目录:

cp ojdbc6.jar /opt/tomcat/lib/

ojdbc6.jar对应JDK 8,如果你用的是ojdbc8.jar,也能连11g,但建议保持版本匹配。至于为什么不用ojdbc6之外的版本,因为Oracle 11g官方JDBC驱动就是ojdbc6,何必给自己加戏。

放好驱动后,我选择在/opt/tomcat/conf/context.xml里配置JNDI数据源,这样应用代码里不用写死连接地址,后期换库很方便。在<Context>节点内加入:

<Resource name="jdbc/orcl" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@//localhost:1521/orcl" username="tomcatuser" password="你的密码" maxTotal="20" maxIdle="10" maxWaitMillis="10000"/>

连接串里有两种写法,很容易搞混:

  • 服务名方式:jdbc:oracle:thin:@//localhost:1521/orcl
  • SID方式:jdbc:oracle:thin:@localhost:1521:orcl

DBCA默认创建的是服务名,所以用//localhost:1521/orcl。如果你用的是SID方式,用冒号分隔。

然后在数据库里创建业务用户:

create user tomcatuser identified by "你的密码"; grant connect, resource to tomcatuser;

如果应用不仅查数据还要建表,还需要额外grant unlimitted tablespace。这一步在DBCA权限最小化原则下需要按需授予。

应用代码里通过JNDI获取连接池数据源的方式:

Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/orcl"); Connection conn = ds.getConnection();

这样Tomcat就能通过连接池访问Oracle了。

6. 最后过一遍验证链路,以及我踩过的坑

6.1 从Tomcat到Oracle的完整验证

整套环境装完后,不能只看进程活着就算成功,必须从Tomcat访问Oracle,走一条完整的JDBC链路。

我为了方便快速验证,在/opt/tomcat/webapps/ROOT下放了一个test.jsp:

<%@ page import="java.sql.*" %> <%@ page contentType="text/html;charset=UTF-8" %> <% Class.forName("oracle.jdbc.OracleDriver"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@//localhost:1521/orcl", "tomcatuser", "你的密码"); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("select sysdate from dual"); while (rs.next()) { out.println(rs.getString(1)); } rs.close(); st.close(); conn.close(); %>

启动Tomcat:

/opt/tomcat/bin/startup.sh

然后在本机验证:

curl http://localhost:8080/test.jsp

如果输出当前数据库时间,说明Oracle监听、JDBC驱动、连接串、用户权限全部正常。

接着再验证远程访问。从Windows浏览器打开:

http://192.168.1.100:8080/test.jsp

如果访问不了,先确认Tomcat进程是否监听在0.0.0.0:8080:

ss -tlnp | grep 8080

如果显示127.0.0.1:8080,说明Tomcat只绑定在了本机。修改server.xml的Connector,把address="127.0.0.1"去掉,或者设置address="0.0.0.0",重启Tomcat。

6.2 回看几个容易让人崩溃的问题

这次实战里,几个最折磨人的问题我整理成了表格,方便你对照:

环节现象根因解决
安装器启动texttt{DISPLAY not set}Xstart没配置X11转发在xterm里运行runInstaller,先echo $DISPLAY确认
依赖检查缺少compat-libstdc++-33yum源里没有装epel源或用老rpm包
链接阶段Error in invoking target 'all_no_orcl'32位库缺失yum install libaio.i686 glibc-devel.i686 ncurses-libs.i686
DBCA建库ORA-27125/dev/shm不够增大shm或调小memory_target
Tomcat连接SQLRecoverableException: Connection refused监听没启动或连接串写错lsnrctl status确认服务,检查URL格式
JSP中文乱码参数乱码URIEncoding不对在server.xml中设置为UTF-8

还有一个在重启后才会暴露的坑:Oracle的监听器没有自启。很多教程只让你手动lsnrctl start,一重启机器就傻眼。所以别漏掉第5.2小节的rc.local配置。我用这套方案连续重启了两次,确认Oracle监听和Tomcat都能自己起来。

最后再说两个经验。第一个是安装Oracle 11g时千万不要在安装器自检时盲目勾选“Ignore All”,有些项确实可以忽略,但如果是缺少libaio、gcc这种基础库,后面报错时再回头来查,浪费时间不说,还容易把系统环境搞乱。第二个是养成先做快照的习惯。Oracle安装会往系统里写入一堆内核参数和用户配置,如果不满意想重来,直接恢复快照比手动清理干净得多。我在这次安装过程中就恢复过两次快照,每次恢复后按本文重新走一遍,效率反而更高。

如果你也要在CentOS 7上跑这套组合,强烈建议把每个阶段的验证命令都执行一遍,不要跳步。装完Oracle后再去调Tomcat的JDBC连接,如果失败,很难分清是哪一层的问题。按顺序来,每一步确认绿灯后再往下走,实际花费的时间反而最少。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询