Oracle 数据库自动化部署 Shell 脚本开源版解析与实战
项目概述与支持矩阵
针对 Oracle 数据库安装过程繁琐、系统依赖配置复杂的问题,一款名为 OracleShellInstall 的一键自动化部署脚本近期开放了其基础版本的源代码。该脚本旨在通过单行命令完成从操作系统参数调优、依赖安装到数据库实例创建的全流程,大幅降低部署门槛并减少人为操作失误。
目前开源版本主要支持单机及单机 ASM 架构,涵盖主流企业级 Linux 发行版,具体兼容矩阵如下:
| 操作系统环境 | 11gR2 | 12cR2 | 19c | 21c | 23ai |
|---|---|---|---|---|---|
| CentOS 6/7/8 全系 | 支持 | 支持 | 支持 | 支持 | 支持 |
| RHEL 6/7/8/9 全系 | 支持 | 支持 | 支持 | 支持 | 支持 |
| Oracle Linux 6/7/8 全系 | 支持 | 支持 | 支持 | 支持 | 支持 |
注意:开源版本脚本严格遵循 Oracle 官方认证的操作系统与数据库版本组合。对于非官方认证组合、RAC 集群架构、ARM 架构以及国产化操作系统的适配,需使用其商业授权版本。
环境初始化与前置准备
在执行自动化脚本前,需确保底层操作系统满足以下基础条件:
- 完成操作系统的基础安装(最小化安装或带 GUI 均可)。
- 正确配置网络接口与静态 IP 地址。
- 配置本地 YUM/DNF 源(挂载系统 ISO 镜像即可,脚本会自动处理依赖安装)。
- 创建统一的安装介质存放目录,并赋予相应权限。
- 将 Oracle 安装包、rlwrap 工具包及自动化脚本上传至该目录。
系统环境检查与介质挂载
以 CentOS 7.9 环境为例,首先确认系统版本与网络状态:
[root@ora-node-01 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
[root@ora-node-01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:ef:89:2e brd ff:ff:ff:ff:ff:ff
inet 10.0.1.51/24 brd 10.0.1.255 scope global noprefixroute eth0
挂载系统 ISO 镜像以构建本地软件源:
[root@ora-node-01 ~]# mkdir -p /media/cdrom
[root@ora-node-01 ~]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
[root@ora-node-01 ~]# df -h | grep cdrom
/dev/sr0 9.5G 9.5G 0 100% /media/cdrom
准备安装介质
创建专用目录并上传所需文件:
[root@ora-node-01 ~]# mkdir -p /u01/setup
[root@ora-node-01 ~]# cd /u01/setup
[root@ora-node-01 setup]# ls -lh
total 2.4G
-rwxr-xr-x. 1 root root 135K Jan 15 09:00 OracleShellInstall
-rwx------. 1 root root 1.3G Jan 15 09:00 p13390677_112040_Linux-x86-64_1of7.zip
-rwx------. 1 root root 1.1G Jan 15 09:00 p13390677_112040_Linux-x86-64_2of7.zip
-rwx------. 1 root root 315K Jan 15 09:00 rlwrap-0.44.tar.gz
[root@ora-node-01 setup]# chmod +x OracleShellInstall
核心参数解析
脚本通过命令行参数控制安装行为,无需修改脚本内部源码。常用参数说明如下:
-n:指定主机名,默认值为orcl。-o:指定 Oracle 数据库实例名(SID),默认值为orcl。-dp:指定 sys/system 用户密码。若包含特殊字符(如_,#,$),必须使用单引号包裹,例如'SecureP@ss#2025'。-pdb:用于 CDB 架构,指定 PDB 名称,支持传入多个,如-pdb pdb01,pdb02。-ds:指定数据库字符集,默认值为AL32UTF8。-dbs:指定数据库块大小,默认值为8192,可选2048|4096|8192|16384|32768。
实战演练一:CentOS 7 部署 Oracle 11gR2
在 CentOS 7.9 环境中部署单机版 Oracle 11gR2,执行以下命令:
[root@ora-node-01 setup]# ./OracleShellInstall -lf eth0 \
-n ora-node-01 \
-op oracle \
-d /u01/app \
-ord /u01/oradata \
-o prod_db \
-dp 'SecureP@ss2025' \
-ds AL32UTF8 \
-ns AL16UTF16 \
-redo 1024 \
-opd Y
执行后,脚本会提示选择安装模式(单机/单机ASM)及数据库版本。选择 si (单机) 和 11 (11g) 后,脚本开始自动化部署。可通过 tail 命令实时跟踪日志:
[root@ora-node-01 ~]# tail -f /u01/setup/print_shell_install_20250115091500.log
正在配置本地 YUM 源......已完成 (耗时: 1 秒)
正在解析操作系统版本......已完成 (耗时: 1 秒)
正在安装系统依赖包......已完成 (耗时: 45 秒)
正在禁用防火墙与 SELinux......已完成 (耗时: 2 秒)
正在配置内核参数 sysctl......已完成 (耗时: 1 秒)
正在配置用户限制 limit......已完成 (耗时: 1 秒)
正在安装 rlwrap 插件......已完成 (耗时: 8 秒)
正在解压 Oracle 安装包......已完成 (耗时: 22 秒)
正在安装 Oracle 软件......已完成 (耗时: 180 秒)
正在创建监听......已完成 (耗时: 2 秒)
正在创建数据库......已完成 (耗时: 260 秒)
正在优化数据库......已完成 (耗时: 95 秒)
恭喜!Oracle 一键安装执行完成 (耗时: 618 秒),现在是否重启主机:[Y/N]
安装后验证
主机重启后,切换至 oracle 用户并连接数据库进行验证:
[root@ora-node-01 ~]# su - oracle
[oracle@ora-node-01 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Wed Jan 15 10:30:00 2025
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SYS@prod_db SQL> SELECT name, open_mode FROM v$database;
NAME OPEN_MODE
--------- --------------------
PROD_DB READ WRITE
SYS@prod_db SQL> SELECT group#, bytes/1024/1024 AS size_mb, status FROM v$log;
GROUP# SIZE_MB STATUS
---------- ---------- ----------------
1 1024 INACTIVE
2 1024 CURRENT
3 1024 UNUSED
4 1024 UNUSED
检查脚本自动配置的定时备份任务:
[oracle@ora-node-01 ~]$ crontab -l
# Oracle Backup Jobs
00 02 * * * /home/oracle/scripts/cleanup_arch_prod_db.sh
00 00 * * 0 /home/oracle/scripts/backup_full_prod_db.sh
00 00 * * 1-6 /home/oracle/scripts/backup_incr_prod_db.sh
实战演练二:RHEL 8 部署 Oracle 19c
在 RHEL 8.10 环境中部署 Oracle 19c,操作逻辑与 11g 类似,仅需调整安装包与部分参数:
[root@ora-node-02 setup]# ./OracleShellInstall -lf eth0 \
-n ora-node-02 \
-op oracle \
-d /u01/app \
-ord /u01/oradata \
-o prod_db_19c \
-dp 'SecureP@ss2025' \
-ds AL32UTF8 \
-ns AL16UTF16 \
-redo 1024 \
-opd Y
选择安装模式为 si,版本为 19。脚本会自动处理 RHEL 8 特有的 AppStream 和 BaseOS 仓库配置,并完成 19c 软件的解压与静默安装。
安装后验证与网络配置检查
部署完成后,验证数据库状态及网络配置文件:
[root@ora-node-02 ~]# su - oracle
[oracle@ora-node-02 ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 15 11:45:00 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SYS@prod_db_19c SQL> SELECT name, open_mode FROM v$database;
NAME OPEN_MODE
------------ --------------------
PROD_DB_19C READ WRITE
查看脚本优化后的 sqlnet.ora 文件,确认兼容性参数已正确注入:
[oracle@ora-node-02 ~]$ cat $TNS_ADMIN/sqlnet.ora
# sqlnet.ora Network Configuration File
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
# Security Parameters
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8