2. Oracle自动化运维环境搭建

自动化运维的第一步不是写脚本,而是把“环境”变成可重复、可预测的对象。如果主机名、IP、目录、内核参数、存储挂载点每次安装都不同,那么后续的静默安装、脚本建库、批量巡检都会失去稳定基线。本章围绕四件事展开:Linux主机如何规划、Oracle软件如何静默安装、实例如何脚本化创建、网络与存储如何在安装前完成预配置。

一、Linux主机规划:先定“不变的东西”

主机规划的核心是确定一批在自动化流程中必须保持一致的参数。建议在安装前先形成一张主机基线表,至少包含:主机名、业务用途、操作系统版本、CPU/内存、系统盘、数据盘、公网/私网IP、VIP与SCAN规划、Oracle版本、实例名、字符集、时区、NTP源、YUM源。示例规划如下(属于教学示例,实际需按项目调整):

项目示例值说明
主机名orcl-node01 / orcl-node02RAC双节点,命名统一
操作系统Oracle Linux 7.9 x86_64与Oracle 19c认证版本匹配
内存/CPU64GB / 16C满足SGA与并发需求
公网IP192.168.10.11/12业务访问
私网IP10.10.10.11/12RAC心跳
VIP192.168.10.21/22故障漂移
SCAN192.168.10.30客户端统一入口
数据盘/dev/sdb 500GBASM或文件系统

主机规划完成后,应通过配置管理工具(如Ansible)或Kickstart统一落地,避免手工差异。关键动作包括:设置hostname、配置/etc/hosts、关闭SELinux与防火墙(或按规范放行端口)、配置NTP、创建oinstall/dba组与oracle用户、设置资源限制、配置内核参数。其中内核参数与资源限制是Oracle安装的前置条件,示例值如下:

# /etc/sysctl.d/99-oracle.conf
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmax = 68719476736
kernel.shmall = 16777216
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

# /etc/security/limits.d/99-oracle.conf
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768

这些参数不是“配了就行”,而是要在安装前用sysctl -p、ulimit -a验证生效。若kernel.shmmax小于SGA上限,实例启动会失败;若nofile过低,监听与后台进程可能报错。因此主机规划的输出物应是一份可执行的基线脚本,而不是一张静态表格。

二、网络与存储预配置:把依赖提前解决

网络预配置的重点是“名字能解析、地址能互通、端口能放行”。在RAC场景中,公网、私网、VIP、SCAN必须全部在DNS或/etc/hosts中可解析,且私网建议使用独立网卡并绑定冗余。存储预配置则决定后续是使用ASM还是文件系统。若使用ASM,需要先安装并配置ASMLib或使用udev绑定设备权限,确保grid与oracle用户能稳定访问磁盘。

以udev绑定为例,先通过/usr/lib/udev/scsi_id获取磁盘WWID,再写入规则文件:

# 获取WWID
/usr/lib/udev/scsi_id -g -u -d /dev/sdb
# 输出示例:36000c29a1b2c3d4e5f60718293a4b5c6

# /etc/udev/rules.d/99-oracle-asm.rules
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$name", RESULT=="36000c29a1b2c3d4e5f60718293a4b5c6", SYMLINK+="asm-data01", OWNER="grid", GROUP="asmadmin", MODE="0660"

执行udevadm control --reload-rules && udevadm trigger后,应能看到/dev/asm-data01且属主正确。这一步若跳过,ASM实例创建时会出现“磁盘不可访问”或权限错误。网络与存储预配置的验收标准是:ping各地址通、ssh互信通、crsctl check cluster前置条件满足、ASM磁盘可被grid用户读写。

三、Oracle软件静默安装:用响应文件替代交互

静默安装的本质是把图形界面的选择固化为响应文件。以Oracle 19c单实例为例,先准备db_install.rsp,关键字段包括:

oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true

执行安装前,先运行./runInstaller -silent -responseFile /home/oracle/db_install.rsp -ignorePrereq进行预检查。若预检查失败,优先解决内核参数、包依赖、磁盘空间三类问题。安装过程中会提示以root执行orainstRoot.sh和root.sh,这两个脚本必须执行且返回码为0。安装完成后,用$ORACLE_HOME/OPatch/opatch lspatches确认补丁状态,用sqlplus -V确认版本。静默安装的验收标准是:ORACLE_HOME目录完整、inventory注册成功、oracle用户可执行sqlplus。

四、实例创建脚本化:从DBCA到可重复执行

实例创建脚本化推荐使用DBCA静默模式,而不是手工执行CREATE DATABASE。先准备dbca.rsp,核心参数包括:

gdbName=orcl
sid=orcl
databaseConfigType=SI
policyManaged=false
createServerPool=false
templateName=General_Purpose.dbc
sysPassword=Oracle_123
systemPassword=Oracle_123
characterSet=AL32UTF8
nationalCharacterSet=AL16UTF16
totalMemory=4096
emConfiguration=NONE
datafileDestination=/u01/app/oracle/oradata
recoveryAreaDestination=/u01/app/oracle/fast_recovery_area

执行dbca -silent -createDatabase -responseFile /home/oracle/dbca.rsp。创建过程中可通过tail -f $ORACLE_BASE/cfgtoollogs/dbca/orcl/orcl.log观察进度。创建完成后,用lsnrctl status确认监听注册,用sqlplus / as sysdba执行select instance_name,status from v$instance;确认实例为OPEN。若失败,优先检查dbca日志中的ORA错误,常见原因包括:密码不符合复杂度、字符集与模板冲突、数据文件路径权限不足。

为了让实例创建可重复,建议把db_install.rsp、dbca.rsp、主机基线脚本统一纳入版本控制,并在脚本中加入幂等判断:若ORACLE_HOME已存在则跳过安装,若实例已存在则跳过创建。这样,同一套脚本可以在测试、预生产、生产环境重复执行,差异只体现在变量文件中。

Oracle自动化运维环境搭建:四层预配置与交付链 Linux主机规划 主机名 / IP / 角色 OS版本 / 内核参数 oinstall / dba / oracle NTP / YUM / 防火墙 输出:主机基线脚本 网络与存储预配置 公网 / 私网 / VIP / SCAN /etc/hosts 或 DNS udev绑定ASM磁盘 属主 grid:asmadmin 输出:可解析、可读写 Oracle软件静默安装 db_install.rsp runInstaller -silent orainstRoot.sh / root.sh opatch lspatches 输出:ORACLE_HOME就绪 实例创建脚本化 dbca.rsp dbca -silent 监听注册 v$instance OPEN 输出:可连接实例 验收链:每一步都有可观察结果 sysctl -p 生效 ping / ssh 互通 root.sh 返回0 v$instance OPEN lsnrctl status 常见失败点 内核参数未生效 → 实例启动失败 | udev权限错误 → ASM磁盘不可见 | 密码复杂度不足 → dbca中断 | 路径权限不足 → 数据文件创建失败

五、把四步串成一条可重复的交付链

主机规划、网络存储预配置、静默安装、脚本建库并不是四个孤立动作,而是一条有依赖顺序的交付链:主机基线决定内核与用户,网络存储决定连通性与磁盘可见性,静默安装决定ORACLE_HOME,脚本建库决定实例可用性。任何一步的验收不通过,都不应进入下一步。建议在自动化平台中把每一步封装为独立任务,并保留日志与返回码,这样当环境需要重建时,只需修改变量文件即可重新执行。

实践建议:把db_install.rsp、dbca.rsp、主机基线脚本、udev规则统一放入Git仓库,按环境分目录管理。每次变更后,先在测试环境执行一遍完整链路,确认v$instance为OPEN、监听注册正常、ASM磁盘可读写,再推广到生产环境。

完成本章后,你应能独立规划一台Oracle Linux主机、完成网络与存储预配置、用响应文件静默安装Oracle软件,并用DBCA脚本化创建实例。下一阶段将在此基础上引入批量管理工具,把单机操作扩展为多主机并行执行。