2. Oracle自动化运维环境搭建
自动化运维的第一步不是写脚本,而是把“环境”变成可重复、可预测的对象。如果主机名、IP、目录、内核参数、存储挂载点每次安装都不同,那么后续的静默安装、脚本建库、批量巡检都会失去稳定基线。本章围绕四件事展开:Linux主机如何规划、Oracle软件如何静默安装、实例如何脚本化创建、网络与存储如何在安装前完成预配置。
一、Linux主机规划:先定“不变的东西”
主机规划的核心是确定一批在自动化流程中必须保持一致的参数。建议在安装前先形成一张主机基线表,至少包含:主机名、业务用途、操作系统版本、CPU/内存、系统盘、数据盘、公网/私网IP、VIP与SCAN规划、Oracle版本、实例名、字符集、时区、NTP源、YUM源。示例规划如下(属于教学示例,实际需按项目调整):
| 项目 | 示例值 | 说明 |
|---|---|---|
| 主机名 | orcl-node01 / orcl-node02 | RAC双节点,命名统一 |
| 操作系统 | Oracle Linux 7.9 x86_64 | 与Oracle 19c认证版本匹配 |
| 内存/CPU | 64GB / 16C | 满足SGA与并发需求 |
| 公网IP | 192.168.10.11/12 | 业务访问 |
| 私网IP | 10.10.10.11/12 | RAC心跳 |
| VIP | 192.168.10.21/22 | 故障漂移 |
| SCAN | 192.168.10.30 | 客户端统一入口 |
| 数据盘 | /dev/sdb 500GB | ASM或文件系统 |
主机规划完成后,应通过配置管理工具(如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_HOME,脚本建库决定实例可用性。任何一步的验收不通过,都不应进入下一步。建议在自动化平台中把每一步封装为独立任务,并保留日志与返回码,这样当环境需要重建时,只需修改变量文件即可重新执行。
db_install.rsp、dbca.rsp、主机基线脚本、udev规则统一放入Git仓库,按环境分目录管理。每次变更后,先在测试环境执行一遍完整链路,确认v$instance为OPEN、监听注册正常、ASM磁盘可读写,再推广到生产环境。
完成本章后,你应能独立规划一台Oracle Linux主机、完成网络与存储预配置、用响应文件静默安装Oracle软件,并用DBCA脚本化创建实例。下一阶段将在此基础上引入批量管理工具,把单机操作扩展为多主机并行执行。