当前位置:首页 > 技术 > 正文内容

Oracle 数据库自动化部署 Shell 脚本开源版解析与实战

访客 技术 2026年7月17日 1

项目概述与支持矩阵

针对 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

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。