简介:面向具备Linux与Oracle数据库基础的技术人员,这份PDF聚焦Oracle EBS R12.1.1至R12.1.3在生产环境中的部署与升级,解决从系统准备到应用服务器上线的问题。内容以Oracle Linux安装配置起步,涵盖ssh、vnc、vsftpd服务配置、IP与主机域名网络设置、硬盘自动挂载及防火墙处理,再进入EBS安装与版本升级、数据库升级、Oracle Application Server 10g部署,并附各环节常见问题的处理思路。包内共1个PDF文件,约844KB,目录按操作系统、数据库、应用服务器分章编排,篇幅紧凑但层次清晰,便于按阶段查阅对照。已有953人学习。读者可从中获得一套可复用的实施顺序、关键步骤的注意事项与排错方向,降低真实生产环境反复试错的成本。
1. 一套 R12.1 生产环境,真正的门槛在第一个补丁之前
接手一套 Oracle EBS R12.1 的生产环境,最难受的时刻往往不是打补丁到凌晨,而是发现三年前装机时主机名里带了个下划线。Rapid Install 当时装得上,后面每一次 autoconfig、每一次克隆都会给你脸色看。这套流程要解决的就是从零到能交付:先用 Oracle Linux 装出一台参数合规的机器,再装 R12.1.1,顺着补丁链升到 R12.1.3,把 10.1.2 的库用 DBUA 推到 11.2.0.4,换掉 AS 10g,最后做预克隆留退路。Linux 系统安装和数据库升级这两段最耗时间,也最容易埋雷。适合手上有一台空机器、要在内网独立交付一套 EBS 的运维。想先搞清 EBS 是什么的,看到第二节的 sysctl 参数多半就会关掉页面。
2. Oracle Linux 6.8 底座:从裸机到能跑 Rapid Install 的若干项配置
EBS 装不上,九成原因不在 EBS 本身,而在 OS 层。这一章做的事看着琐碎,但后面每一个报错回溯回去,几乎都能指到这里某一项。整套底座围绕四件事:磁盘怎么切、远程怎么进、内核参数给多少、用户和安装介质怎么摆。
2.1 磁盘布局:/u01 单独切 300G 起的理由
R12.1 的安装会把 APPL_TOP、ORACLE_HOME、数据库文件、归档日志全塞在同一个挂载点下,默认路径是/u01/oracle/...。我一般按最小 300G 给/u01,因为后面 9239090 补丁链加中文语言包,光补丁日志和 adpatch 的临时文件就能吃掉六七十 G,再加上 preclone 生成的阶段目录,空间不够时 adpatch 会在跑到 80% 的时候挂掉,重来一次又是大半天。
# 假设 /dev/sdb 是数据盘,先确认盘符再动手 fdisk -l /dev/sdb # 交互分区: n -> p -> 1 -> 回车 -> +100G(根) # n -> p -> 2 -> 回车 -> +32G(swap,内存 32G 时给 1 倍即可) # n -> p -> 3 -> 回车 -> 回车(剩余全给 /u01) fdisk /dev/sdb # 格式化。OL6 内核默认认 ext4,xfs 要额外装 kmod,生产上没必要折腾 mkfs.ext4 -L root /dev/sdb1 mkswap -L swap /dev/sdb2 mkfs.ext4 -L u01 /dev/sdb3fdisk里的三次n是按扇区顺序切,第三段直接回车表示把剩余空间全给/u01,这样后面加盘不用重算偏移。格式化完不要急着mount /dev/sdb3 /u01写进/etc/fstab——设备名会随插槽顺序变化,用blkid取 UUID 更稳。
blkid /dev/sdb1 /dev/sdb2 /dev/sdb3 cat >> /etc/fstab <<'EOF' UUID=<sdb1的UUID> / ext4 defaults 1 1 UUID=<sdb2的UUID> swap swap defaults 0 0 UUID=<sdb3的UUID> /u01 ext4 defaults,noatime 1 2 EOF mount -a && df -h /u01noatime是我习惯加的,EBS 的并发管理器会疯狂读写请求输出文件,关掉访问时间戳能省一点 IO。mount -a之后必须df -h确认挂上了,我见过 fstab 写错 UUID 导致机器起不来、只能进救援模式的场面,那真的是血泪经验。
2.2 root 密码、ssh 与远程通道
生产装机阶段基本都是机房一台 KVM 或者 IPMI,敲命令效率极低,所以第二步就是把远程通道打通。Oracle Linux 6.8 装完默认开着 sshd,但两个参数不改,登录会卡十几秒:UseDNS yes会让服务端反查客户端域名,内网没 DNS 就一直等到超时;GSSAPIAuthentication yes在纯密码认证环境里也是纯负担。
# /etc/ssh/sshd_config 里改这两行,然后重启 sed -i 's/^#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config sed -i 's/^GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config service sshd restart改完用ssh -v erpapp看握手过程,如果debug1: Authentication succeeded之后还停两三秒,多半是sshd里的MaxStartups或者反向解析没关干净。这一步不解决,后面装 VNC、传安装介质全是被拖慢的。
VNC 在图形化装 Rapid Install 时是刚需,虽然也可以用静默响应文件,但第一次装我建议还是看一眼图形界面,很多选项的默认值只有肉眼扫一遍才知道对不对。
yum -y install tigervnc-server # 给 applmgr 配一个 5902 的会话 su - applmgr vncserver :2 -geometry 1440x900 -depth 24 # 首次会提示设密码,密码文件落在 ~/.vnc/passwd-geometry 1440x900不是随便写的,Rapid Install 的向导窗口最小宽度就接近 1200,分辨率给小了按钮会被截掉,只能靠 Tab 盲点。-depth 24保证颜色正常,16 位色下某些 Java 界面会渲染成黑块。
至于忘记 root 密码这件事,OL6 上不需要 Live CD:启动时在 GRUB 菜单按e,在内核行末尾加single或init=/bin/bash,进单用户后passwd改完exec /sbin/init。改完记得touch /.autorelabel,否则 SELinux 上下文不对,sshd 起不来——这个坑我在一台测试机上踩过,现象是密码明明改对了却死活登不上。
2.3 sysctl.conf 与 limits.conf:EBS 装不上第一查这里
如果说整套底座有哪一节最值得逐行核对,就是这里。EBS R12.1 对共享内存段、信号量、文件句柄、临时端口范围都有硬要求,任何一项不达标,表现可能只是 Rapid Install 跑到某个百分比卡住,日志里一句话都不给你。
下面这份是我在 32G 内存机器上的起手值:
# /etc/sysctl.conf # shmmax 取物理内存的一半,32G -> 16G = 17179869184 kernel.shmmax = 17179869184 # shmall = shmmax / 4096 kernel.shmall = 4194304 # 信号量:每组的信号量数 / 系统级最大值 / 单次调用最大值 / 信号量组数 kernel.sem = 256 32000 100 142 fs.file-max = 6815744 fs.aio-max-nr = 1048576 # 关键:临时端口范围必须避开 EBS 自己占用的端口段 net.ipv4.ip_local_port_range = 10000 65000 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_fin_timeout = 30kernel.sem的第四位 142 是信号量组数,这个值调小了,数据库起多实例或者并发管理器开几十个 worker 时会报ORA-27154: semget failed。ip_local_port_range改成 10000 起,是因为 EBS 的 FNDFS、FNDSM 等服务会占用一批固定端口,如果临时端口从 32768 起,看起来不冲突,但某些组件用的是 10000 附近的端口,冲突了就表现为“应用服务全绿、附件打不开”这种玄学故障。
limits.conf单独配,因为sysctl管的是内核全局,limits管的是进程级:
# /etc/security/limits.conf applmgr soft nproc 2047 applmgr hard nproc 16384 applmgr soft nofile 4096 applmgr hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 4096 oracle hard nofile 65536写完还要确认/etc/pam.d/login里有session required pam_limits.so,否则整个文件就是摆设。另外一个 OL6 特有的坑:/etc/security/limits.d/90-nproc.conf里有一条* soft nproc 1024,通配符的优先级比具体用户名高,会把上面配的 2047 覆盖回 1024。改完用su - applmgr -c "ulimit -u"验证实际生效值,别只看文件。
最后sysctl -p加载,sysctl -a | grep shmmax复核。
2.4 EBS 用户、oraInventory 与系统包
R12.1 至少要两个 OS 用户:oracle管数据库层,applmgr管应用层,两个都在oinstall和dba组里。用户 ID 和组 ID 不用纠结具体数字,但一旦定了,克隆环境必须保持一致,否则 adcfgclone 跑完文件属主全是错的。
groupadd -g 500 oinstall groupadd -g 501 dba useradd -u 500 -g oinstall -G dba -d /home/oracle -s /bin/bash oracle useradd -u 501 -g oinstall -G dba -d /home/applmgr -s /bin/bash applmgr passwd oracle passwd applmgr # oraInventory 必须提前建好并写 oraInst.loc,否则 runInstaller 会去 /etc 下乱找 mkdir -p /u01/oracle/oraInventory chown -R oracle:oinstall /u01/oracle chmod -R 775 /u01/oracle cat > /u01/oracle/oraInventory/oraInst.loc <<'EOF' inventory_loc=/u01/oracle/oraInventory inst_group=oinstall EOF chmod 664 /u01/oracle/oraInventory/oraInst.locoraInst.loc这个文件看着不起眼,但 AS 10g 和 DB 11.2 的安装程序都会读它决定中央清单放哪。两台机器上这个文件指向不同目录,后面打补丁时就会看到“补丁认为没装过这个产品”的诡异提示。
系统包这块,OL6 自带oracle-validated或者 11gR2 的 preinstall 包可以一把装齐,但那套清单是针对单机数据库的,EBS 还需要额外的 32 位兼容库和 Motif 库:
yum -y install make binutils gcc gcc-c++ glibc glibc-devel glibc-common \ compat-libstdc++-33 libstdc++ libstdc++-devel libaio libaio-devel \ libXp libXt libXtst openmotif21 sysstat unixODBC unixODBC-devel \ compat-db-4.3.29 elfutils-libelf-devel # 32 位兼容库必须单独点名,EBS 的部分表单程序还是 32 位的 yum -y install glibc.i686 libaio.i686 compat-libstdc++-33.i686 \ libXp.i686 libXtst.i686compat-db-4.3.29就是后面 Rapid Install 报libdb-4.3.so找不到的根源,提前装上省一次返工。装完ldconfig刷一遍缓存,再用ldd抽查几个关键 so 的依赖是否齐全。全部就绪后关掉防火墙和 SELinux,这两项不关,EBS 的登录页能打开但表单连不上,排查起来非常耗时。
3. R12.1.1 首次安装:主机名定死之后,再谈 rapidwiz 的选项
底座铺好,接下来是 Rapid Install。这一步其实没有太多“技巧”,有的是对几个不可逆决定的敬畏:主机名、域名、端口池、字符集。装完之后想改其中任何一个,代价都远大于重装。这一章按安装前后拆成三段。
3.1 主机名、IP 与 hosts:一次定死,后面别动
EBS 在安装时会把主机名和域名写进 context 文件,生成类似APPSerpapp_erp.local.env这样的环境变量文件,还会把域名嵌进数据库的DB_DOMAIN、工作流的通知地址、甚至并发管理器的节点定义里。装完再改主机名,等于要把这些地方全部手工对齐一遍,比重新装还费劲。
规则很具体:主机名全小写、不含下划线、不含大写、能被/etc/hosts正向和反向解析、FQDN 至少两段。
hostname erpapp cat > /etc/sysconfig/network <<'EOF' NETWORKING=yes HOSTNAME=erpapp EOF # FQDN 写法和 IP 要对应,/etc/hosts 里两个名字都要有 cat >> /etc/hosts <<'EOF' 192.168.10.21 erpapp.erp.local erpapp EOF hostname -f # 必须返回 erpapp.erp.local,返回空或返回 erpapp 都不合格 ping -c 1 erpapp.erp.localhostname -f返回的如果是短名,说明/etc/hosts里只写了一列,Rapid Install 走到“检查主机名”那一步会直接拒绝继续。/etc/resolv.conf里如果配了外部 DNS,hosts行的优先级要放在files前面,否则解析可能被 DNS 抢答成另一个地址。
域名定下来之后还有一个容易被忽略的地方:/etc/sysconfig/network里的HOSTNAME和hostname命令的当前值必须一致,改完要重启网络或者重启机器。装之前用hostname、hostname -f、ping、nslookup四个命令交叉验一遍,这一步花五分钟,能省后面五小时。
3.2 解压安装介质与 rapidwiz 的关键选项
R12.1.1 的介质一般是一个startCD加若干张盘,几十 G,解压时注意两点:一是目标分区剩余空间要留够,解压过程本身要占一份和压缩包等大的空间;二是解压工具用unzip而不是jar,某些版本的jar对长文件名处理有问题。
mkdir -p /stage12 cd /stage12 # 介质名按实际下载的来,这里只是示意 unzip -q V29856-01_1of2.zip unzip -q V29856-01_2of2.zip # 确认 startCD 结构 ls /stage12/startCD/Disk1/rapidwiz进入向导后,几个决定要提前想清楚:
| 选项 | 建议值 | 说明 |
|---|---|---|
| Wizard operation | Install Oracle Applications Release 12.1.1 | 不是 Upgrade,升级那个入口是给 11i 用的 |
| Database type | Fresh database | 全新装,不复用已有库 |
| Port pool | 0 | 会自动分配 0-99 段的一批端口,和后面.dbc文件强绑定 |
| Language | 只勾 American English | 中文单独打语言包,一起勾会让安装时间翻倍 |
| Base directory | /u01/oracle | 必须和预建的 oraInventory 在同一挂载点 |
| Apps password | 强密码但别改 | 后面所有 adpatch、adadmin 都要用 |
端口池选 0 之后,EBS 会占用 8000 附近的 Web 端口、1521 的数据库监听、还有一批表单服务端口。装完可以用netstat -tlnp全扫一遍,把这批端口记下来,后面和网络组开通策略时要用。
如果不想守着图形界面,Rapid Install 支持响应文件:
cd /stage12/startCD/Disk1/rapidwiz ./rapidwiz -responsefile /u01/oracle/conf_erpapp.txt -silent响应文件里最关键的是s_hostname、s_domainname、s_basepath三项,改动这三项之外的内容基本都会导致静默安装失败。第一次装不建议上静默,先在测试环境用图形界面走一遍,明白每一步在问什么,再把向导生成的响应文件拿来做模板。
安装过程通常两三个小时,其中数据库创建阶段最慢。这个阶段不要去做别的事,尤其不要动/u01下的文件。跑到最后会有几个“post-install checks”,如果全绿,说明主体装完了。
3.3 安装后的环境变量与启停脚本
装完第一件事不是急着登录,先把环境变量理清。EBS 的环境变量不在.bash_profile里手写,而是由安装程序生成一个.env文件,路径类似$APPL_TOP/APPS<CONTEXT_NAME>.env。手写环境变量的后果是某次 autoconfig 之后路径变了,你的.bash_profile还指向老路径。
# /home/applmgr/.bash_profile 只放这一行,别把 .env 的内容抄进来 . /u01/oracle/VIS/appl/APPSerpapp_erp.local.env # /home/oracle/.bash_profile 对应数据库层 export ORACLE_HOME=/u01/oracle/VIS/db/tech_st/10.1.2 export ORACLE_SID=PROD export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib.env文件里定义了APPL_TOP、ADMIN_SCRIPTS_HOME、CONTEXT_FILE、TWO_TASK等一堆变量,source完之后echo $ADMIN_SCRIPTS_HOME应该指向$APPL_TOP/admin/scripts。注意这个文件是 autoconfig 生成的,不要手改,改了下一次 autoconfig 会被覆盖。
启停统一走adstrtal.sh和adstpall.sh:
cd $ADMIN_SCRIPTS_HOME # 启动全部服务:数据库、监听、并发管理器、表单、Web ./adstrtal.sh apps/<apps密码> # 停止全部 ./adstpall.sh apps/<apps密码> # 起来之后核验端口 netstat -tlnp | grep -E ':(8000|8010|1521|7000)'adstrtal.sh会依次拉起数据库、监听器、应用服务,任何一步失败都会中断并打印服务名。常见的是数据库还没起完就去连监听,表现为ORA-01034: ORACLE not available,等两分钟重跑即可。全部起来之后,浏览器访问http://erpapp.erp.local:8000/OA_HTML/AppsLogin,能看到登录页说明主链路通了。
这里补一句:装完、验完、还没打任何补丁的这一刻,务必做一次冷备。这是整套流程里最值钱的一份后悔药,后面 9239090 打到一半失败、DBUA 中途报错,都可以回滚到这一步重来,比在残局上修要快得多。
4. 补丁链与库升级:9239090、DBUA 11.2.0.4 与 AS 10.1.3.5 的先后顺序
从 R12.1.1 到 R12.1.3,再到底层数据库换到 11.2.0.4,顺序错了会很麻烦。正确的顺序是:先把 AD 工具升到 AD.C.7,再打 9239090 升到 12.1.3,编译 APPS schema,然后升数据库,最后换 AS 10g。跳过 AD 升级直接打 9239090,adpatch 会以“AD 版本过低”拒绝执行;先升数据库再打 12.1.3 补丁,会遇到 12.1.3 的补丁脚本还不认 11g 优化器行为的情况。
4.1 AD.C.7 与维护模式:补丁链的地基
AD 是 EBS 的补丁工具集,版本号用字母表示,AD.C.7 对应的补丁号是 9239089。它必须先于 9239090 打上,因为 12.1.3 的补丁里用到了 AD.C.7 才有的adop相关逻辑(虽然 12.1 还是用 adpatch,不走 adop)。
打之前先确认当前 AD 版本:
-- 查 AD 的版本,返回 12.1.0 之类说明还是老版本 SELECT release_name FROM apps.fnd_product_groups WHERE 1=0; SELECT patch_name, last_update_date FROM apps.ad_patch_driver_minipatches WHERE rownum < 5; -- 更直接的方式:看 adpatch 自己的版本 -- $AD_TOP/bin/adpatch 启动时会在第一行打印 AD 版本然后进维护模式。维护模式的意义是把应用层锁住,防止用户在补丁过程中提交请求、改数据,导致补丁脚本读到不一致的状态。入口在 adadmin 的菜单里,也可以直接查状态:
-- 返回 MAINT 表示已开启维护模式,返回空串表示正常模式 SELECT fnd_profile.value('APPS_MAINTENANCE_MODE') FROM dual;开启方式是adadmin→ 选5. Change Maintenance Mode→Enable Maintenance Mode,然后按提示停应用服务再重启。这里有个细节:adadmin 会要求你先停掉应用服务,但数据库要保持运行,很多新手把数据库一起停了,结果 adadmin 连不上库。
维护模式开完之后,还要处理一个 11g 上的参数:
-- 加入 spfile,重启库生效 ALTER SYSTEM SET "_disable_fast_validate"=TRUE SCOPE=SPFILE;这个下划线参数看着像黑匣子,但它是官方 Doc ID 里明确要求的。11g 的 fast validation 在某些 EBS 补丁场景下会触发ORA-00600内部错误,补丁打到一半挂在那里,日志里只有一堆 trace 文件。关掉之后走的是慢路径,代价是补丁时间长一点,但稳定。也可以直接写进initPROD.ora,两种方式等价,写文件的好处是重启之后不会被 spfile 覆盖。
4.2 923909
本文还有配套的精品资源,点击获取