Linux生产环境Oracle 19c+ASM部署全流程指南

Oracle 19cLinuxASM
于 2026-10-01 07:58:48 修改
·本内容遵循CC 4.0 BY-SA版权协议

我不是第一次在 Linux 上装 Oracle 数据库了,但每次拿到一套新的生产环境需求,从“要不要用 ASM”“磁盘怎么规划”“容器数据库还是非容器”一路磨到最终上线,还是有很多值得复盘的地方。这篇文章所对应的这套环境,就是我最近完成的一套生产级部署——Linux 上装 Oracle 19c,存储层走 Oracle 自家的 ASM(自动存储管理),从系统参数调整、Grid Infrastructure 安装、ASM 磁盘组创建,到数据库实例搭建、项目库表设计,再到备份恢复和日常运维,完整跑了一遍。标题里的 FGMT03 是我们内部项目命名,不重要,重要的是这条链路里踩过的坑、验证过的方案,值得系统性拆出来给同样在做数据库实施的同学参考。

网上关于 Oracle 19c 安装的教程并不少,但大多数停留在“图形界面点下一步”的演示层面,真正到了生产环境,要面对的往往是静默安装、磁盘权限、跨平台兼容、版本选择这类硬问题。所以这篇文章不会只讲“怎么点”,而是把每一步背后的为什么讲透,把你可能踩到的坑提前摆出来。适合的人群大概是:正在准备 Linux 环境下部署 Oracle 的 DBA、运维工程师,以及做数据库课程设计或项目实战的学生——尤其是那种“课设题目写着生产环境部署,但还没搞明白生产环境到底和测试环境差在哪”的同学。

1. 生产部署前的方案选型与环境规划

1.1 为什么选 Linux + Oracle 19c + ASM 这套组合

先说选型。生产环境选数据库技术栈,第一原则不是“最新”,而是“足够稳定、足够成熟、有人验证过”。Oracle 19c 属于 12.2 体系之后的长期支持版本,补丁支持周期长,功能上也稳定,是目前企业级环境里性价比很高的一代。相比起 18c 这种过渡版本,19c 更“抗造”,这算是我在实际项目中比较深的一个体会。

操作系统的选择上,Linux 在数据库承载场景里已经是绝对主流,无论 RHEL、CentOS 还是国产的麒麟等系统,内核层面都能满足 Oracle 的部署要求。相比 Windows 环境,Linux 在稳定性、资源利用率和远程运维方面优势明显,这也是生产环境大多选 Linux 的根本原因。

然后是 ASM。很多刚接触的人会问:现在 Linux 本身就有 LVM、有 ext4、xfs,为什么还要单独搞一个 ASM?我的理解是这样的:ASM 是 Oracle 自己的卷管理器和文件系统二合一方案,它把多块物理磁盘聚合成磁盘组,数据文件、控制文件、日志文件都由 ASM 来管理,等于把存储层完全收归数据库统一调度。它的核心价值在于三点:一是条带化与负载均衡,二是镜像冗余,三是扩展和管理方便。如果你用文件系统直接放数据文件,那么“文件系统满了”“跨主机迁移磁盘挂载乱了”“单块盘性能成了瓶颈”这些事就得自己一项一项去处理,而在 ASM 模式下,这些事都被收拢到数据库自治体系内。

我之前也做过用 ext4+ASM 组合的环境,起点只是“ASM 磁盘组放 OCR 和投票文件,数据文件放普通文件系统”,生产上后来发现跨主机迁移、备份恢复都特别别扭,因为文件系统层面的路径和 ASM 内部路径两套逻辑同时存在,管理成本直接翻倍。所以这轮部署我直接确定了一个原则:数据文件、控制文件、联机日志、归档日志、闪回日志全部放进 ASM,操作系统层面只保留软件安装目录和网络配置。

1.2 主机与磁盘分组规划

生产环境的规划阶段,最怕拍脑袋。我一般会先画一张“环境拓扑表”,把主机角色、OS 版本、内存、磁盘用途、IP 规划全部列清楚。下面是我这次部署用的一个简化模板,你可以直接套用:

项目 配置说明
主机角色 数据库单节点,运行 Grid Infrastructure + Oracle 19c
操作系统 RHEL 系 Linux(内核 3.10+),生产建议 7.x 或兼容版本;国产环境可用麒麟 V10
内存 至少 16 GB,建议 32 GB;生产按业务峰值评估
CPU 8 核以上
系统盘 120 GB SSD(/,/u01 分开挂载)
ASM 数据盘 数据盘 2 块(如 500G 每块)
ASM 恢复盘 恢复盘 1 块或 2 块(如 500G 每块)
网络 业务网、心跳网分离;生产建议多网卡绑定

磁盘组的规划是整个 ASM 设计的核心。Oracle 官方推荐的组合一般是这样:

磁盘组 用途 冗余策略 说明
OCR_VOTE 存储 Clusterware 的 OCR 和投票文件 Normal 冗余(至少 3 个盘) 单节点也建议建,避免单点故障
DATA 数据文件、控制文件、联机日志 Normal 冗余或 External 看你对数据冗余的要求
FRA 快速恢复区、归档日志、闪回日志 External 或 Normal 容量建议为数据库整体大小的 1.5 倍以上

不同人的规划习惯会有差异,但有几个原则是通用的:OCR/VOTE 所在的磁盘组不要和数据磁盘组混在一起,原因很直接——如果混在一个磁盘组,数据文件把空间占满了,OCR 的写入也会受影响,严重时可能导致集群资源异常;另外,同一磁盘组内的物理磁盘尽量保持同型号、同容量、同转速,不然 ASM 做条带化时性能会以最低的那块盘为短板。

1.3 系统分区与目录设计

目录规划说得直白一点就是“别让所有东西挤在一个分区”。Oracle 安装软件、Grid 安装软件、oracle 用户家目录、数据库文件(如果走文件系统调试)、共享存储挂载点,这些都应该尽量独立。我这次的环境是把 / 分区和 /u01 单独分开了,/u01 用来放 Oracle 软件和 Grid 软件,数据类文件全部交给 ASM。

推荐目录结构如下:

路径 用途
/u01/app/grid Grid Infrastructure 软件的 ORACLE_BASE
/u01/app/19.0.0/grid Grid 软件的 ORACLE_HOME
/u01/app/oracle Oracle 数据库软件的 ORACLE_BASE
/u01/app/product/19.0.0/dbhome_1 Oracle 数据库软件的 ORACLE_HOME
/u01/app/oraInventory Oracle 统一安装清单目录

为什么 ORACLE_BASE 和 ORACLE_HOME 要分开?因为这样做的最大好处是便于版本升级和回滚。如果未来要升级数据库软件,可以新装一个 ORACLE_HOME,切换环境变量即可,旧版本的原封不动留在原目录里。这一点在实际运维中非常重要,尤其是生产环境做小版本升级时,回滚方案往往就靠这个目录隔离来兜底。

2. Linux 基础环境与安装前检查

2.1 内核版本与依赖包检查

不管你是装 Grid 还是装 Oracle Database,安装前第一步永远是检查系统环境。Oracle 的安装程序(OUI)有预检查机制,但你绝不能等它检查才发现缺了几十个包。“先手动确认基础环境一次过”是省时间的关键。

系统版本检查,直接来看:

BASH
cat /etc/os-release
uname -r

如果你用的是 RHEL 7 或 CentOS 7 这类系统,Oracle 19c 官方要求的内核是 3.10.0 以上。国产化环境(如麒麟 V10)也是基于主流 Linux 内核做的,一般都能满足,但要注意架构是 x86_64 还是 ARM,Oracle 19c 对 ARM 架构的支持情况和 x86 不同,这一点提前确认清楚。

接下来是依赖包。Oracle 19c 的依赖包清单比 11g 时代精简了不少,但有几个包还是老面孔:binutils、gcc、gcc-c++、glibc、glibc-devel、ksh、libaio、libaio-devel、libX11、libXau、libXi、libXtst、libXrender、make、net-tools、sysstat。这些包一条命令装齐:

BASH
yum install -y bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ \
glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst \
libXrender libXrender-devel make net-tools sysstat smartmontools

有些老教程会提到 compat-libstdc++-33,19c 下不一定强制,但装了也不会有副作用。国产系统如果自带的软件源里缺这个包,可以从系统安装镜像的 packages 目录里找对应的 rpm 用 rpm -ivh 装上。我自己遇到过几次“卡在预检查缺包”的情况,基本都是这些老包版本名不一致导致的,解决办法就是在官方文档的对应系统版本章节找到精确包名,然后逐一安装。

2.2 用户、组与目录权限设计

Oracle 的权限模型很严格,Grid 和 Oracle Database 要分别用不同的操作系统用户来运行。最少需要两组用户:

用户名 所属组 用途
grid oinstall, asmadmin, asmdba, asmoper 运行 ASM 实例和 Clusterware
oracle oinstall, dba, oper, asmdba 运行数据库实例

这里有一个很多新手容易绕晕的点:为什么 oracle 用户也要加入 asmdba 组?因为数据库实例需要访问 ASM 磁盘组里的数据文件,而 ASM 实例对磁盘的访问权限是通过 asmdba 组来控制的。oracle 用户不在 asmdba 组里,数据库启动时就可能报 ORA-15077 或权限相关的错误。

创建用户和组的命令并不复杂:

BASH
groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin
groupadd asmdba
groupadd asmoper
 
useradd -g oinstall -G asmadmin,asmdba,asmoper grid
useradd -g oinstall -G dba,oper,asmdba oracle

目录权限方面,/u01 要求属主是 grid:oinstall,权限 755,然后 /u01/app/oraInventory 属主 grid:oinstall。安装软件时如果权限不对,OUI 会直接报“Inventory 目录不可写”之类的错误。生产环境建议安装前就建好目录并赋权:

BASH
mkdir -p /u01/app/grid
mkdir -p /u01/app/19.0.0/grid
mkdir -p /u01/app/oracle
mkdir -p /u01/app/product/19.0.0/dbhome_1
mkdir -p /u01/app/oraInventory
chown -R grid:oinstall /u01
chmod -R 775 /u01

2.3 内核参数与资源限制调优

Linux 内核参数直接关系 Oracle 能不能正常启动、能跑多稳。调优不是越多越好,关键参数到位即可。下面是我这次环境里的 /etc/sysctl.conf 核心配置:

BASH
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
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
vm.swappiness = 10
vm.dirty_background_ratio = 3
vm.dirty_ratio = 15

这些参数里最值得解释的是 kernel.sem 和 vm.swappiness。kernel.sem 的四个数字分别表示信号量集最大值、系统范围内信号量最大值、每个信号量集的信号量个数、系统范围内信号量的组数。Oracle 的进程间通信大量依赖信号量,这个值设小了,实例启动时可能报 ORA-27154 之类的问题。vm.swappiness 表示系统使用交换分区的“意愿”,数据库服务器建议调低到 10 以下,别让操作系统动不动就把进程换到 swap 里。

修改后记得执行:

BASH
sysctl -p

资源限制方面,/etc/security/limits.conf 里需要追加:

BASH
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768
 
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768

nofile 是文件描述符上限,nproc 是进程数上限。数据库在高峰期会同时打开大量数据文件和日志文件,文件描述符不够会产生“ORA-01116/ORA-01110”这种报错,排查起来会很烧脑。设置完成后,用 ulimit -n 和 ulimit -u 检查是否生效。

2.4 /dev/shm 与 tmpfs 的调整

/dev/shm 是 Linux 上的共享内存临时文件系统,Oracle 内存管理会用到。很多 Linux 默认的 /dev/shm 只有物理内存的一半,生产环境可能偏小。我在正式安装前会检查一下:

BASH
df -h /dev/shm

如果偏小,可以在 /etc/fstab 里修改 tmpfs 的大小,比如机器物理内存 32GB,给 /dev/shm 分配 16GB:

BASH
tmpfs /dev/shm tmpfs defaults,size=16G 0 0

这里提醒一下,如果数据库启用的是 AMM(Automatic Memory Management),并且 MEMORY_TARGET 设置得比较大,而 /dev/shm 不够大,实例启动时可能报 ORA-00845: MEMORY_TARGET not supported on this system。生产环境我更推荐使用 ASMM(Automatic Shared Memory Management),即只设置 SGA_TARGET 和 PGA_AGGREGATE_TARGET,让数据库在内部自动调 SGA 组件大小,而不是依赖操作系统共享内存文件系统来分配全部内存。这样在重启动、数据库迁移和内核参数调整时都更省心。

3. Grid Infrastructure 与 ASM 实例搭建

3.1 静默方式安装 Grid Infrastructure

拿到 Oracle 19c 的 Grid 安装包(一般是 linuxx64_19c_grid_home.zip),先解压到 /u01/app/19.0.0/grid 目录。Grid 的安装分两种典型路径:一种是用图形界面跑 gridSetup.sh,另一种是静默方式。生产环境我强烈推荐静默方式,原因很简单:图形界面在远程服务器上要么需要折腾 X11 转发,要么会因为缺图形库直接罢工。

静默安装需要准备一个响应文件,关键片段如下:

BASH
oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v19.0.0
oracle.install.option=CRS_CONFIG
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=/u01/app/19.0.0/grid
oracle.install.asm.OSDBA=asmdba
oracle.install.asm.OSOPER=asmoper
oracle.install.asm.OSASM=asmadmin
oracle.install.crs.config.scanName=
oracle.install.crs.config.gpnp.scanName=
oracle.install.crs.config.ClusterConfiguration=STANDALONE
oracle.install.crs.config.clusterName=
oracle.install.crs.config.clusterNodes=
oracle.install.crs.config.networkInterfaceList=
oracle.install.asm.SYSASMPassword=你的密码
oracle.install.asm.diskGroup.name=DATA
oracle.install.asm.diskGroup.redundancy=NORMAL
oracle.install.asm.diskGroup.AUSize=4
oracle.install.asm.diskGroup.disks=/dev/asm-disk1,/dev/asm-disk2
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/asm-*

需要说明的是,单节点部署时,ClusterConfiguration 选择 STANDALONE 即可,不需要配置 SCAN 和心跳网络。响应文件里的密码只是部署生成时用,生产环境后续应通过 orapwd 单独维护。

执行安装:

BASH
cd /u01/app/19.0.0/grid
./gridSetup.sh -silent -responseFile /home/grid/grid_install.rsp

安装过程中会有 root 脚本需要以 root 身份执行。这个脚本什么时候运行一般会有提示,常见的是在安装进度到 53% 左右会提示“执行 /u01/app/19.0.0/grid/root.sh”。用 root 执行:

BASH
cd /u01/app/19.0.0/grid
./root.sh

root.sh 执行时会创建 /etc/oracle 目录、配置 OCR 等关键资源,如果这一步漏了或者提前执行,后续 ASM 实例会起不来。

安装完成后,检查 Grid 服务状态:

BASH
crsctl check crs
crs_stat -t

如果输出显示 crsd、cssd、evmd 进程都处于 online 状态,说明集群资源这一层是健康的。

3.2 ASM 磁盘组创建与初始化

Grid 装完,并不意味着磁盘组已经建好了。这一步要决定 ASM 能“看到”哪些物理磁盘。两种常见的磁盘绑定方式是 asmlib 和 udev 规则。Linux 环境下 asmlib 需要额外安装 oracleasmlib 和 kmod-oracleasm 包,而 udev 是系统自带机制,更通用。我这次用的是 udev 方式。

udev 规则绑定磁盘的示例,放在 /etc/udev/rules.d/99-oracle-asm.rules 里:

BASH
KERNEL=="sdb", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sdc", OWNER="grid", GROUP="asmadmin", MODE="0660"

注意把盘符替换成你自己的实际设备名。绑定后重载规则并检查:

BASH
udevadm control --reload-rules
udevadm trigger
ls -l /dev/sdb /dev/sdc

随后用 asmca 或 sqlplus 的方式创建磁盘组。命令行下创建磁盘组也很方便:

SQL
CREATE DISKGROUP DATA NORMAL REDUNDANCY
DISK '/dev/sdb' NAME DATA01,
'/dev/sdc' NAME DATA02
ATTRIBUTE 'compatible.asm'='19.0', 'compatible.rdbms'='19.0';

创建时有两个兼容性参数很关键:compatible.asm 表示这个磁盘组能支持的最低 ASM 版本,compatible.rdbms 表示允许访问该磁盘组的数据库版本。如果这两个参数设得过高,低版本的数据库实例就无法使用这个磁盘组。同一个 ASM 实例下可以同时有不同兼容级别的磁盘组,这为混合版本环境提供了灵活性。

创建完成后,用 asmcmd lsdg 验证:

BASH
asmcmd lsdg

正常输出会列出磁盘组名称、冗余级别、总大小、空闲大小等。看到状态是 MOUNTED,再继续下一部分。

3.3 常用 ASM 运维命令速查

生产环境里你不可能总是打开 asmca 图形界面去看磁盘组状态,命令行才是常态。很多刚接触 ASM 的人一头雾水,不知道“怎么进 ASM 实例”。实际上进入 ASM 实例非常简单:

BASH
su - grid
. oraenv
# 提示输入 ORACLE_SID 时,输入 +ASM
sqlplus / as sysasm

注意,管理 ASM 实例要用 sysasm 权限,不是 sysdba。sysasm 权限级别高于 sysdba,是专门为 ASM 管理设置的。

asmcmd 命令行的常用操作:

BASH
asmcmd lsdg # 查看磁盘组信息
asmcmd lsdsk # 查看磁盘信息
asmcmd lspw # 查看密码文件信息
asmcmd lsct # 查看磁盘组客户端
asmcmd cp # 在 ASM 磁盘组与文件系统之间复制文件
asmcmd du # 统计目录空间使用

平时做巡检,我最常用的组合就是先 asmcmd lsdg 看空间使用率,再 asmcmd lsct 看哪些实例挂载了磁盘组,期间如果发现有磁盘组状态异常,再用 crsctl status res -t 去查集群资源的运行情况。ASM 实例的 alert 日志也值得日常多看一眼,路径一般在 $ORACLE_BASE/diag/asm/+asm/+ASM/trace/alert_+ASM.log。

3.4 监听器配置与检查

Oracle 的监听器是客户端连接数据库的第一道门。Grid 安装后一般会自动创建监听器,但有些环境会因为网卡名、主机名解析问题导致监听器异常。生产环境建议用 netca 的静默模式重新配置一下:

BASH
netca -silent -responsefile /home/grid/netca.rsp

配置完成后,检查监听状态:

BASH
lsnrctl status

如果监听正常,你会看到类似“Service RUNNING”的信息,并且至少有一个“DEDICATED”服务名。这里提醒一点:生产环境的监听日志默认是无限增长的,长时间不清会导致 /u01 或者对应日志目录被写满。建议在监听配置项里加上诊断日志轮转参数,或者定时任务定期按日期切割监听日志,这个细节很多环境都容易忽略。

4. Oracle 19c 数据库实例创建与项目库结构设计

4.1 安装 Oracle Database 19c 软件

Grid 环境健康运行后,第二步就是安装数据库软件本体。这步同样建议用静默方式。先将数据库安装包解压到目标目录,然后准备 db_install.rsp 响应文件:

BASH
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/product/19.0.0/dbhome_1
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

执行安装:

BASH
cd /u01/app/product/19.0.0/dbhome_1
./runInstaller -silent -responseFile /home/oracle/db_install.rsp

同样,会有一次 root 脚本需要执行:

BASH
cd /u01/app/product/19.0.0/dbhome_1
./root.sh

装完软件后,oracle 用户的环境变量要配置好。编辑 ~/.bash_profile:

BASH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/product/19.0.0/dbhome_1
export ORACLE_SID=PROD
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

这里 ORACLE_SID 的值取决于你要建的库名,通常和生产项目名对应。配置后 . ~/.bash_profile 让环境变量立即生效,然后验证:

BASH
sqlplus / as sysdba

如果出现 SQL*Plus 的提示符,说明软件安装成功,oracle 用户的环境是通的。

4.2 容器数据库还是非容器数据库的抉择

Oracle 19c 默认推荐的是 CDB/PDB 容器架构,但生产环境到底用不用 CDB,这真是个值得掰扯的问题。我的观点是:按业务场景来,别盲从。

对比项 容器架构(CDB/PDB) 非容器架构(传统)
管理粒度 多个 PDB 共享一个 CDB,补丁、备份可统一管理 一个实例一个数据库,管理独立
资源隔离 PDB 之间需要额外配置资源管理 天然隔离,互不影响
运维复杂度 需要理解 PDB 概念,部分运维脚本要适配容器 传统运维经验直接可用
适合场景 多套业务系统合并部署、云环境多租户 单业务系统强隔离、项目级独立库

这次项目里的业务就是一套相对独立的业务系统,没有多租户需求,我直接选择了非容器架构。创建命令参考:

BASH
dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname PROD \
-sid PROD \
-sysPassword '你的强密码' \
-systemPassword '你的强密码' \
-datafileDestination '+DATA' \
-recoveryAreaDestination '+FRA' \
-totalMemory 16384 \
-emConfiguration NONE \
-storageType ASM \
-characterSet AL32UTF8 \
-createAsContainerDatabase false

有个实践心得:dbca 的 -totalMemory 参数是总内存值,内部会自动分配 SGA 和 PGA。如果你对内存策略有更细致的诉求(比如 SGA 给多大、PGA 给多大),我建议 dbca 创建时先用一个初始值,建完库后再用 ALTER SYSTEM 调整,这样更精准。

4.3 关键初始化参数与内存策略配置

库建完之后,第一步就是检查核心初始化参数。用下面这条命令看当前值:

SQL
SELECT name, value, isdefault FROM v$parameter WHERE name LIKE '%memory%' OR name LIKE '%sga%' OR name LIKE '%pga%';

生产环境我一般这样设:SGA_TARGET 设为物理内存的 50% 左右,PGA_AGGREGATE_TARGET 设为物理内存的 15%~20%。例如 32GB 物理内存,SGA 给 16GB,PGA 给 6GB 左右。在这个基础上再往下调。

SQL
ALTER SYSTEM SET sga_target=16G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=6G SCOPE=SPFILE;

然后是归档模式。生产库必须开归档,这句话说了无数遍,但仍有环境因为图省事没开,结果数据出问题只能恢复到备份点。开启归档的方式:

SQL
-- 数据库需要先到 mount 状态
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

归档日志的位置我建议放在 +FRA 磁盘组,并设置合理的恢复区大小。默认 8GB 常常不够,尤其业务量大、归档产生快的时候。我先改大:

SQL
ALTER SYSTEM SET db_recovery_file_dest_size=500G;

另外,记得修改数据库兼容性参数。检查当前值:

SQL
SHOW PARAMETER compatible;

19c 的默认 compatible 就是 19.0,这没问题。但如果是跨版本升级上来的库,要确认它别停留在 11g/12c 的低版本,否则 Oracle 19c 的一些新特性用不了。

4.4 项目库表空间与用户设计

生产环境的业务库不能直接用 SYSTEM 表空间承载用户数据,这是原则问题。把业务表、索引、临时数据分开存放,既方便性能调优,也方便备份恢复时的粒度控制。

根据这次项目的业务模型,我设计了这样一组表空间:

表空间 用途 初始大小 自动扩展
PROD_DATA 业务表数据 10GB 8GB 每次,上限 100GB
PROD_INDEX 索引数据 5GB 4GB 每次,上限 50GB
PROD_UNDOTBS 事务回滚段(非系统) 4GB 2GB 每次,上限 20GB
PROD_TEMP 排序与临时段 2GB 不自动扩展,用临时表空间组管理

为什么索引和数据要分开?本质上是为了灵活控制 IO 和备份恢复粒度。如果你的存储层做了冷热数据分层,或者要针对大表做表空间级迁移,分开会方便很多。

创建表空间和业务用户的过程很简单,但密码策略和权限分配要留心。业务项目账号不应该一上来就 grant dba to 业务用户,按照最小权限原则,只 grant connect、resource 和业务需要的特定权限。创建用户的示例:

SQL
CREATE TABLESPACE prod_data DATAFILE '+DATA' SIZE 10G AUTOEXTEND ON NEXT 8G MAXSIZE 100G;
CREATE TABLESPACE prod_index DATAFILE '+DATA' SIZE 5G AUTOEXTEND ON NEXT 4G MAXSIZE 50G;
 
CREATE USER app_prod IDENTIFIED BY "强密码"
DEFAULT TABLESPACE prod_data
QUOTA UNLIMITED ON prod_data;
 
GRANT CONNECT, RESOURCE TO app_prod;

5. 项目实战:从部署到日常运维的完整链路

5.1 部署后验证与项目数据初始化装载

数据库建完,不是跑一句 select 1 from dual 觉得没问题就大功告成了。生产环境要做的验证清单远不止这些:

  • 监听器服务是否注册成功:lsnrctl status
  • ASM 磁盘组空间是否充足:asmcmd lsdg
  • 数据库 alert 日志有无异常报错:查看 $ORACLE_BASE/diag/rdbms/prod/PROD/trace/alert_PROD.log
  • 定时任务(cron/dbms_scheduler)是否正常
  • 备份任务是否已经配置并成功执行过

如果项目里有历史数据需要导入,通常会用到 Data Pump。生产环境导入时,我习惯加上并行和预估参数。比如从 dump 文件导入业务用户数据:

BASH
impdp directory=DATA_PUMP_DIR dumpfile=proj_data.dmp \
logfile=impdp_proj.log schemas=app_prod parallel=4 \
transform=segment_attributes:n

这里 transform=segment_attributes:n 是为了导入时不沿用导出端的表空间属性,而是落到当前环境默认表空间里,避免出现“目标表空间不存在”之类的错误。

数据导入完成后,别忘了收集统计信息:

SQL
EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'APP_PROD', cascade => TRUE, degree => 8);

统计信息老旧会导致优化器产生错误执行计划,表现为“数据量不大但 SQL 跑得极慢”,这类问题在导入后尤其常见。

5.2 备份恢复策略在 ASM 环境下的落地

ASM 环境下的备份方式和文件系统环境最大的区别是路径概念不同。文件系统下你写 /u01/oradata/PROD/datafile01.dbf,ASM 环境下你写 +DATA/PROD/DATAFILE/system.257.1175123456。RMAN 天生支持 ASM,操作上并没有增加难度,但要求你必须适应“文件号加创建号”这种路径表达。

基础备份脚本模板如下:

BASH
rman target / <<EOF
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '+FRA/%F';
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '+FRA/backup/%U';
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
EOF

DELETE INPUT 表示归档日志备份完成后删除原归档,避免恢复区被历史归档占满。DELETE OBSOLETE 则是按保留策略清理过期备份。

备份策略里还有一个容易被忽视的步骤:备份完成后做一次 crosscheck,确认备份片和 catalog 记录一致。如果你用的是控制文件作为 RMAN catalog,务必定时备份控制文件,或者至少确认自动备份控制文件已经打开。

恢复流程也要提前演练。不要等生产环境真的出了故障,才第一次去执行 restore 命令。我经历过一次因为不理解 ASM 磁盘组路径而手工指定错误恢复路径导致恢复失败的案例,教训就是:恢复操作一定要先在测试环境完整演练过,路径、恢复顺序、归档应用这些环节都要白纸黑字写进应急预案。

5.3 常见故障与报警处理

生产环境跑起来之后,日常巡检会发现若干“新手看不到但老手秒懂”的坑。这里挑几个最常见的展开讲。

第一类是 SYSAUX 表空间占用率异常升高。Oracle 19c 的 SYSAUX 里存放 AWR 快照、优化器统计信息历史、审计日志等。如果 AWR 快照保留时间过长,或者某张分析表的历史数据积累过多,SYSAUX 会膨胀到令人意外。排查方法:

SQL
SELECT owner, segment_name, segment_type, sum(bytes)/1024/1024 AS SIZE_MB
FROM dba_segments
WHERE tablespace_name = 'SYSAUX'
GROUP BY owner, segment_name, segment_type
ORDER BY SIZE_MB DESC;

找到占用高的段后,针对 AWR 可以调整快照保留策略:

SQL
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention => 21600,
interval => 30
);
END;
/

第二类是监听日志无限增长。这个前面提过,处理办法是定期切割归档日志文件。可以用 logrotate,也可以写一个按天归档的脚本放到 crontab 里。切完日志后重启监听器或者用 lsnrctl set log_status off/on 让它重新打开一个新日志文件,这一步很多脚本都没写对,导致旧日志没有被有效归档。

第三类是 ASM 磁盘组空间不足。业务增长导致 +DATA 或 +FRA 使用率到达 85% 以上时,ASM 会自动告警。早日发现磁盘组空间趋势,需要建立每日巡检脚本,把 asmcmd lsdg 的输出结果定期记录下来做趋势分析。遇到空间不足,优先清理过期归档和废弃备份,其次再考虑扩容物理磁盘并加入磁盘组。

第四类是归档日志写满恢复区。如果开归档后没有设置备份清理策略,恢复区很快会被写满。故障表现通常是数据库不能打开,应用连接直接报错。解决思路是:备份归档 + 删除已备归档,同时扩大 db_recovery_file_dest_size 作为缓冲。

5.4 安全加固与基线配置

生产库的安全加固是部署交付时的一项硬指标,不能只有数据库跑通了就算完。我给自己定了一个基线清单,每次新环境部署后逐项落实:

  • 修改所有默认密码,包括 SYS、SYSTEM、DBSNMP 等。
  • 设置密码策略:登录失败锁定次数、密码有效期、密码复杂度。例如:
SQL
ALTER PROFILE DEFAULT LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 1
PASSWORD_LIFE_TIME 90
PASSWORD_VERIFY_FUNCTION verify_function_11G;
  • 关闭非必要的数据库服务,比如 XDB 的 FTP/HTTP 端口监听。
  • 限制远端登录 IP,配置 sqlnet.ora 里的 TCP.VALIDNODE_CHECKING 白名单机制。这个参数曾被称为“明灯保护”,但现在它的意义是过滤恶意来源连接,仍然值得配置。
  • 定期检查 dba_users 里账户状态为 OPEN 的用户,确认无异常新增。

安全配置不是一次性的,每次发版、每次新增账号之后,都应该重新过一遍。我曾经见到一套数据库环境里残留了十几个没人知道的账号,其中还有 DBA 权限的空口令账号,这种问题比数据库本身的安全漏洞更致命。

6. 常见问题排查与经验总结

6.1 高频踩坑清单速查

现象 可能原因 快速处理
Grid 安装时找不到磁盘 udev 规则未生效或磁盘权限不对 检查 /dev/sd* 属主是否为 grid:asmadmin,重载 udev 规则
asmca 建组时报磁盘不可用 磁盘已被其它文件系统占用 确认磁盘未格式化、无分区表残留
实例启动报 ORA-00845 /dev/shm 不足 扩大 tmpfs 大小或改用 SGA_TARGET
监听正常但连接报 ORA-12514 tnsnames 或 service_name 不匹配 确认 SERVICE_NAME,检查监听注册信息
数据库打开后 SYSAUX 高 AWR 快照过多或统计信息过期 清理 AWR,重建相关表
RMAN 备份报 ORA-19809 恢复区空间不足 清理归档,增大 db_recovery_file_dest_size
ASM 磁盘组 DEGRADED 个别磁盘离线或故障 检查磁盘链路,替换故障盘

这张表是真实环境问题的浓缩版。很多时候生产环境的故障并不会有特别复杂的根因,往往是基础配置没做到位。比如“asmca 发现不了磁盘”这类问题,80% 都是权限和设备路径没弄对,排查时先往这些基础方向走,效率最高。

6.2 19c 备份文件能不能恢复到 11g

这个问题在社区里很常见,也很有代表性。“Oracle 19c 的备份文件能在 Oracle 11g 上恢复出来吗?”答案是:RMAN 物理备份不行,逻辑备份在一定条件下可以。

原因要去数据库文件格式层面理解。RMAN 备份的是数据文件、控制文件等物理结构,这些文件内部格式是跟数据库版本强相关的,高版本产生的数据文件,低版本连识别都做不到,更不要说恢复了。但如果你用的是 Data Pump(expdp/impdp)做的逻辑备份,那它是 SQL 层的数据导出,只要导出时使用了兼容版本参数,就可以导入到低版本数据库。

实操上,从 19c 导出再导入 11g 时,要加上版本参数:

BASH
expdp directory=DATA_PUMP_DIR schemas=app_prod dumpfile=exp_prod.dmp logfile=exp_prod.log version=11.2.0.4

然后再把 dump 文件拷贝到 11g 环境执行 impdp 导入。这个过程中还可能遇到字符集、类型映射等兼容问题,需要逐个调,但至少路径是通的。

所以,如果有人问“生产库升级前要不要保留 11g 能恢复的备份”,答案很清楚:物理层面不要指望跨大版本恢复,逻辑层面用 expdp 配上 version 参数定期导出一份,才是真正可用的降级预案。

6.3 Linux 环境下卸载与重装注意点

虽然文章主题是安装配置,但实际维护中你几乎一定会遇到“装坏了要重来”的场景,所以卸载这件事值得写清楚。

Linux 下卸载 Oracle 19c 和 Grid,不需要像 Windows 那样清理注册表,但也有一套标准顺序。第一步停掉数据库实例和监听,然后停掉集群资源,最后删目录和用户。停库和停集群的命令:

BASH
sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EXIT;
EOF
 
lsnrctl stop
 
crsctl stop crs

然后删除软件目录和用户组:

BASH
rm -rf /u01/app/oracle /u01/app/grid /u01/app/product /u01/app/oraInventory
userdel -r oracle
userdel -r grid
groupdel oinstall
groupdel dba

Windows 环境卸载 Oracle 19c 的流程则完全不同,它强调“停止服务 → 卸载产品 → 删除目录 → 清理注册表”,注册表路径主要在 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 以及 HKLM\SYSTEM\CurrentControlSet\Services 下的 Oracle 服务键。如果你在 Windows 上装过再卸,务必确认注册表清理干净,否则重装时经常会出现莫名的冲突。这一点虽然和本篇文章的 Linux 主题不同,但在跨平台项目里很常见,顺手提一下。

6.4 我的实操心得与建议

这一路部署下来,有几个体会想重点分享。

第一,静默安装是生产环境的唯一正道。图形界面给了新手安全感,但它也隐藏了太多细节。用静默安装,你被迫去理解每一个参数的含义,遇到问题也要从日志和响应文件里找答案,这个过程虽然难受,但成长速度最快。而且生产环境往往不允许随便开图形界面,习惯静默模式越早越好。

第二,磁盘规划前务必想清楚业务增长趋势。我见过不少环境是上线时磁盘空间看着充裕,半年后报警,追根究底是规划时没有考虑归档保留周期和备份文件体积。ASM 字段设计之初,把 FRA 的空间按“数据量 × 1.5 + 归档日志保留量“去估,至少预留一年的冗余空间。

第三,备份恢复不要只看备份成功日志。备份成功的 Job 不代表你的数据一定能恢复。定期做一次“破坏性恢复演练”,在一个不影响生产的测试环境上,把最近的一次备份完整地 restore 一遍。这个动作虽然耗时,但真的是生产环境最终极的底牌。

第四,运维手册和部署文档要边做边写。部署过程中的命令、响应文件、参数调整记录,都是后续排查问题时的宝贵资料。不要依赖记忆,也不要依赖聊天记录里的只言片语,把这些沉淀成一份完整的项目文档,是交付项目时最有价值的内容之一。

最后再分享一个小习惯:每次执行完一条关键 DDL 或者改掉一个数据库参数后,习惯性记录到一个变更清单里。生产环境出问题时,这份变更清单往往是第一个被翻出来核对的。它救过我很多次。

Oracle 19c Rac环境部署
本文详细介绍了Oracle 19c Rac环境的部署过程。包括软件包准备、配置信息(如IP地址规划、DNS服务端与客户端配置)、Linux操作系统配置及参数修改、共享存储及ASM磁盘配置、部署安装步骤,还涉及RAC环境下的归档和闪回配置以及集群测试等内容。
重新再次起航
2116
实战篇:Linux7 安装 Oracle 19C RAC 详细图文教程
本文提供了一篇详细的Linux7上安装Oracle 19C RAC的教程,涵盖系统规划、主机配置、Grid软件安装、数据库创建与优化等步骤,适合需要部署RAC环境的技术人员参考。
Lucifer三思而后行
14636
基于 vSphere 环境安装 Oracle19c RAC 详细过程
本文详细介绍了 Oracle 19c RAC 数据库的搭建过程,包括安装环境说明、配置规划、系统环境设置、参数文件修改、用户和目录创建、环境变量配置、节点互信配置、ASM 共享磁盘配置、Grid 和 Oracle 软件安装、数据库创建以及集群和数据库检查等步骤。
方先森有点懒
4331
Oracle 19c rac的搭建
本文详细介绍了在RHEL7.x上进行Oracle19c RAC集群的静默安装过程,包括环境准备、软件安装、配置文件编辑、磁盘初始化等关键步骤,适用于希望自动化部署Oracle数据库的IT专业人员。
AiDBA宝典
17279
Oracle database 19c 集群部署文档(RAC)
本文是Oracle Database 19c集群(RAC)部署文档。介绍了部署系统版本为ORACLE LINUX 7.8,涵盖资源规划、环境准备(包括主机环境、硬件检查、用户环境、共享配置等),还说明了grid软件和database软件的安装步骤,如解压文件、执行安装检查、安装rpm包等。
weixin_49599800
3135
【德哥说库系列】-ASM管理Oracle 19C单实例部署
本文介绍了如何在Linux环境中进行Oracle 19C的单实例部署,详细步骤包括环境准备、yum源配置、依赖安装、数据库预安装、目录权限设置、环境变量配置、GI用户创建、GI资源和磁盘组配置,以及Oracle软件安装、DBCA建库和日常管理。适合对Oracle数据库部署感兴趣的读者参考。
IT邦德
3081
部署Oracle 19C RAC
本文档详述了在CentOS 7.6环境下安装Oracle 19c Real Application Clusters (RAC)的全过程,包括网络、存储、操作系统配置、软件下载、用户和组设置、DNS配置、共享存储设置、数据库实例创建等步骤,以及安装过程中遇到的问题和解决方法。
z荒野求生
5106
阿里龙蜥8.10安装Oracle19C ASM+RAC
本文详细介绍了在阿里龙蜥8.10系统上部署Oracle 19C ASM+RAC集群的完整过程,涵盖环境准备、共享存储配置、Grid集群安装、Oracle软件部署及数据库创建。重点包括系统参数调优、SSH互信、udev磁盘绑定、依赖包处理以及常见安装问题排查,适用于Linux平台下的高可用Oracle数据库搭建。
左岸哥哥
1354
Linux安装Oracle Database 19c RAC
本文详细指导如何在CentOS 7.8环境下部署Oracle Database 19c RAC集群,涉及软件包准备、环境配置、网络规划、磁盘组管理、软件安装、用户权限设置、安全限制和系统优化,最终完成GRID和数据库的安装与验证。
willops
3517
oracle19c rac、nfs部署教程
该文详细介绍了如何在CentOS7.9环境下,利用NFS作为共享存储来部署Oracle19c的RealApplicationClusters(RAC)。首先进行了网络规划和配置,包括IP地址分配、主机名设置以及路由添加。接着,安装了必要的依赖包,创建了GRID和数据库用户组,设置了基础环境,包括内存管理、内核参数和系统限制。之后,为用户配置了环境变量,并在NFS服务器上设置共享存储。最后,进行了ASMLIB初始化,GridInfrastructure的安装,以及磁盘组的添加。
study_小达人
4272
Linux环境下Oracle19c RAC双节点集群实战部署
本文详细阐述在Linux环境下部署Oracle 19c双节点RAC集群的全流程,涵盖环境规划、系统调优、共享存储(ASM)配置、Grid Infrastructure与数据库软件安装、RAC数据库创建、集群管理及常见故障排查。重点包括OCR/Voting Disk与DATA/ARCH磁盘组配置、私网/公网网络设置、NTP时间同步、内核参数优化、ASM磁盘权限管理及CRS状态验证等核心技术要点。
weixin_30621959
407
Oracle 19c部署实战:从环境准备到生产级安装的完整指南
本文系统讲解Oracle 19c在Linux/Windows环境下的完整部署流程,涵盖系统环境评估、内核参数调优、依赖包安装、用户权限规划、图形化与静默安装、监听器配置、数据库启动验证及典型故障排查。重点强调生产环境所需的内存/磁盘/交换空间规划、字符集(AL32UTF8)选择、自动内存管理(AMM)、快速恢复区(FRA)配置及防火墙端口开放等关键技术点,确保部署稳定可靠。
weixin_34293246
447
Oracle Linux 8.9 一键安装 Oracle 19C 单机 ASM
本文详细描述了如何在OracleLinux8.9上使用OracleShellInstall脚本进行Oracle19C的单机ASM一键安装,包括环境准备、网络配置、挂载ISO镜像、安装步骤和后续验证。整个过程无需人工干预,适用于生产环境部署。
Lucifer三思而后行
756
超详细!Oracle 19c RAC双节点集群部署实战:RedHat/CentOS 从零搭建全流程 + 避坑指南
本文详细记录了在RedHat/CentOS系统上从零搭建Oracle 19c RAC双节点集群的全流程,涵盖操作系统准备、Grid Infrastructure安装、ASM磁盘组配置、RAC数据库图形化安装、DBCA建库、参数调优及归档启用等关键步骤,并重点说明SELinux禁用、透明大页关闭、udev多路径配置、OCR/ASM存储规划、时钟同步、hosts本地解析等核心避坑要点,适用于DBA和运维工程师实施高可用数据库集群。
sysrootsa
1270
VMware虚拟机上Oracle 19C RAC超详细静默安装部署流程(新手必看)
本文详细介绍了在VMware虚拟机上使用Oracle Linux 7.9部署Oracle 19C RAC的完整流程,涵盖系统、存储与网络规划,ISCSI共享存储配置,多路径及UDEV绑盘设置,Grid基础设施安装,ASM磁盘组创建,数据库软件部署及DBCA静默建库等关键步骤,突出安装前环境一致性与依赖配置的重要性。
Hoxy.R
2015
数据库教程FGMT03‑生产环境Linux+Oracle19c+ASM安装配置与项目实战
本文详细讲解Linux环境下Oracle 19c单机版基于ASM存储的生产级部署全流程,涵盖Grid Infrastructure(GI)静默安装、ASM磁盘组规划与创建(DATA/FRA)、UDEV磁盘权限固化、oracle用户组配置(asmdba/asmadmin)、dbca静默建库、Oracle Restart资源托管、监听配置及ASM扩容等核心操作。所有参数均适配64G内存/8CPU硬件规格,强调ASM实例与数据库实例依赖关系、权限隔离及生产巡检要点。
风哥教程
154
Oracle19c单机部署(本地静默安装方式)附网盘资源
本文详细介绍了在Linux系统上通过本地静默方式部署Oracle 19c单机数据库的完整流程,涵盖安装前检查(硬件、OS、内核参数、用户权限、存储)、系统配置(创建oracle用户与组、目录权限、limits.conf和sysctl.conf调优)、环境变量设置、响应文件定制、runInstaller静默安装、DBCA命令行建库,以及监听与数据库连接验证等关键步骤,适用于运维及DBA人员快速完成标准化部署。
晴天¥
1585
Oracle GoldenGate 19c生产环境部署与调优实战指南
本文详解Oracle GoldenGate 19c在生产环境中的全流程部署与性能调优,涵盖架构规划、静默安装、Manager/Extract/Replicat核心进程配置、链路验证、延迟监控、I/O与网络瓶颈优化、常见故障排查(如归档日志缺失、表结构不一致、持续延迟),以及高可用设计与自动化运维实践,聚焦事务级数据一致性保障与实时同步稳定性。
weixin_30321709
294
CentOS 7.5部署Oracle 19c RAC全流程:从环境准备到避坑实战
本文详细讲解在CentOS 7.5环境下部署Oracle 19c RAC集群的全流程,涵盖硬件与网络规划、Grid Infrastructure静默安装、ASM磁盘组配置、dbca建库参数链路,以及cluvfy检查、root.sh执行、SCAN解析、OCR/Vote File冗余等关键技术点。重点分析内核版本兼容性、cvuqdisk缺失、CSS启动失败、ASM磁盘头损坏、服务单节点注册等高频故障的根因与解法,适用于DBA及数据库工程师实施高可用生产环境。
weixin_33795806
397
【安装篇】- 基于 VMWARE Oracle Linux7.9 安装 Oracle19c RAC 详细配置方案
本文详述了在Linux 7.9系统上部署Oracle 19c RAC的全过程,包括虚拟机配置、网络规划、操作系统优化、SSH安全设置及共享存储配置等关键步骤,旨在指导读者成功搭建高性能数据库集群。
JiekeXu
16531
Oracle 19C RAC on linux 7.6
资源摘要信息:"Oracle 19C RAC on Linux 7.6 是一个关于在 Red Hat Enterprise Linux 7.6 操作系统上部署 Oracle 19c Real Application Clusters(RAC)的完整技术实践指南。该部署方案详细阐述了构建高可用性、可扩展性的 Oracle 数据库集群所需的关键步骤与配置要求,涵盖了从基础环境准备、网络规划、操作系统调优到 Grid Infrastructure 安装及数据库实例配置的全过程。标题明确指出技术栈的核心组件:Oracle 19c 版本数据库、RAC 架构以及运行平台 Linux 7.6;描述进一步确认了这是针对特定版本的操作系统和数据库进行的 RAC 部署任务。标签中列出的关键术语如 'Oracle RAC'、'Grid Infrastructure'、'SCAN IP'、'VIP配置'、'共享存储' 等,均为 RAC 架构中的核心技术点,表明文档聚焦于集群化数据库系统的实施细节。首先,RAC(Real Application Clusters)是 Oracle 提供的一种并行服务器架构,允许多个数据库实例同时访问同一个物理数据库,从而实现负载均衡和故障自动切换。其核心优势在于高可用性和横向扩展能力,适用于对业务连续性要求极高的企业级应用系统。在本案例中,使用的是 Oracle 19c —— 即 Oracle Database 19.0 版本,属于长期支持版本(Long Term Release),具备稳定性强、功能完善、安全机制健全等特点,广泛应用于生产环境。部署环境基于 Red Hat Enterprise Linux 7.6(RHEL 7.6),这是一个成熟的企业级 Linux 发行版,提供了良好的硬件兼容性与系统稳定性。为确保 Oracle 软件正常运行,必须满足官方文档所列的系统要求。根据部分内容中提供的链接,可以查证 Oracle 对 RHEL 7.x 的支持矩阵,包括内核版本、glibc、libstdc++、binutils 等关键软件包的最低版本要求。因此,在安装前需通过 yum 配置本地或远程软件源(如挂载光盘镜像至 /mnt 并建立 repo 文件)来安装必要的依赖 RPM 包,例如:compat-libcap1、compat-libstdc++、libaio-devel、ksh、numactl-devel、unixODBC、gcc-c++ 等,这些是 Oracle 安装过程中检查通过所必需的预装组件。网络规划是 RAC 成功部署的前提。文中给出的基础环境信息显示了两个节点 momdb1 和 momdb2,各自拥有 Public IP(对外服务)、Private IP(用于节点间高速通信,通常连接私有交换机以保证心跳稳定)、Virtual IP(VIP,用于客户端连接故障转移)以及 SCAN IP(Single Client Access Name,客户端通过此单一域名访问整个集群,由 DNS 或 GNS 解析到多个地址轮询)。这种四类 IP 地址的设计符合 Oracle 推荐的最佳实践。其中,Private IP 使用私有网段 192.168.32.x 连接专用网络接口,保障集群内部数据同步与缓存融合(Cache Fusion)的高效传输;而 SCAN IP 则指向 pgmomdb.fawscan.com 域名,应配置为三个浮动 IP 地址的轮循记录(round-robin DNS),以便负载分散。主机名配置方面,需通过 hostnamectl 命令永久设置每台服务器的主机名,并在所有节点的 /etc/hosts 文件中添加完整的 IP 与主机名映射关系,包括 Public、Private、VIP 和 SCAN 记录。这是因为在未配置 DNS 的情况下,RAC 依赖 hosts 文件完成节点解析。此外,SELinux 必须设置为 disabled 状态,因其强制访问控制策略可能干扰 Oracle 进程对文件系统的读写权限;同样地,firewalld 防火墙也需彻底关闭(stop + disable),避免阻塞 Oracle 所需端口(如 1521、CSSD 的 2013、ONS 的 6200 等),否则将导致集群无法启动或节点分裂。共享存储是 RAC 的基石,因为所有实例必须能并发访问相同的数据库文件。文中提到“共享磁盘 500G*4”,意味着存在四块大小为 500GB 的共享存储设备(可能是 ASM LUN 或 iSCSI/NFS 卷),用于构建 ASM(Automatic Storage Management)磁盘组。ASM 是 Oracle 自带的集群文件系统与卷管理器,专为 RAC 设计,能够提供高性能的数据分布与冗余保护。Grid Infrastructure 的安装会先于数据库软件,其包含 Clusterware(管理集群成员资格、资源调度)和 ASM 实例,负责启动和维护共享存储上的数据库文件结构。账户与密码策略方面,系统需创建 grid 用户(属 DBA 组)用于管理集群件,oracle 用户用于运行数据库实例,root 用户则执行特权操作。三者密码统一设为 J7_mom_db_0001,虽便于测试但不符合安全规范,实际生产环境中建议采用复杂且独立的密码策略。数据库层面 sys/system 密码相同,集群管理员 sysasm 及监控账号 ASMSNMP 也有指定密码,体现了多层级权限管理体系。综上所述,该资源是一份高度实用的技术实施方案,覆盖了从操作系统初始化、网络拓扑设计、安全策略调整、依赖包安装到最终集群软件部署的全流程,适合作为 Oracle DBA 在 RHEL 平台上搭建 19c RAC 的参考手册,尤其对于理解 VIP、SCAN、Private Interconnect、ASM 共享存储等核心概念具有重要指导意义。"
Comer
CentOS7.6安装Oracle19C RAC.docx
资源摘要信息: 本文档《CentOS7.6安装Oracle19C RAC.docx》是一份面向企业级数据库高可用架构实践的深度技术指南,系统性地阐述了在Red Hat系Linux发行版CentOS 7.6操作系统平台上,部署Oracle Database 19c Real Application Clusters(RAC)集群环境的全流程、全要素实施规范。该文档不仅涵盖基础环境准备与软件获取路径,更聚焦于RAC这一Oracle最核心、最复杂的高可用解决方案的技术内核——即多节点共享存储、并行实例协同、全局资源管理(GRM)、集群同步服务(CSS)、节点监控与故障自动接管等关键机制。文档以“实战”为定位,强调可操作性、可复现性与生产级严谨性,其内容结构严格遵循RAC部署黄金法则:先规划、后实施;先网络、再存储;先系统调优、再数据库安装;先用户与权限治理、再集群软件(Oracle Grid Infrastructure)与数据库软件(Oracle Database Software)分阶段部署。其中,“Oracle 19c”作为Oracle官方发布的长期支持版本(Long Term Release),引入了多项增强型RAC特性,包括但不限于:更智能的集群ware自愈能力(如OCR/Voting Disk自动修复)、基于Flex ASM的存储抽象层优化、对NVMe/SCM等新型高速存储介质的原生支持、增强的ADG(Active Data Guard)与RAC集成能力、以及全面兼容Oracle Cloud Infrastructure(OCI)混合云架构的部署弹性。而“RAC”本身并非简单意义上的双机热备,而是通过Oracle Clusterware(OCW)构建的分布式集群操作系统层,实现跨物理或虚拟节点的内存融合(Cache Fusion)、全局队列服务(GES)、全局资源目录(GRD)等底层协同机制,使多个Oracle实例可同时读写同一套共享数据库文件,并保证数据一致性与事务隔离性,从而达成真正的横向扩展(Scale-Out)与持续在线(24×7)服务能力。文档中反复强调的“CentOS 7.6”版本选择具有典型代表性:该版本内核为3.10.0-957,已完整支持Oracle 19c所依赖的cgroup v1、systemd服务管理、ASMLib替代方案(udev规则绑定裸设备)、以及关键内核参数(如sem、shmmax、file-max、net.core.somaxconn等)的精细化调优空间;同时,CentOS 7.6处于RHEL 7生命周期中期,具备稳定补丁支持与广泛的企业适配经验,规避了早期7.x版本中存在的时间同步(chronyd vs ntpd)、SELinux策略冲突、firewalld默认拦截VIP等历史坑点。尤为关键的是,文档详述的“网络规划”绝非仅配置IP地址,而是严格区分Public Network(客户端访问)、Private Interconnect(心跳与Cache Fusion专用私网,要求低延迟、高吞吐、无交换机STP干扰,推荐使用10GbE或InfiniBand)、以及SCAN(Single Client Access Name)虚拟名解析三层逻辑网络;其“IP规划”进一步细化为每个节点需配置Public IP、Private IP、Virtual IP(VIP)、以及SCAN IP(通常为3个,由DNS或/etc/hosts轮询解析),构成RAC对外服务的统一入口与内部通信的强隔离通道。在“存储规划”层面,文档深入剖析了ASM(Automatic Storage Management)作为RAC事实标准存储管理层的核心地位:它不仅是卷管理器与文件系统合一体,更内置冗余镜像(NORMAL/EXTENDED REDUNDANCY)、条带化(Striping)、自动负载均衡(ASM Rebalance)、以及与Oracle数据库深度集成的元数据感知能力;文档明确建议采用UDEV规则持久化绑定多路径(Multipath)设备(如/dev/mapper/mpatha),避免因设备名漂移导致ASM磁盘组无法识别,并指导创建OCR(Oracle Cluster Registry)与Voting Disk共用的高可用磁盘组(通常为+OCRVD),以及承载数据库文件的+DATA磁盘组,且必须确保所有RAC节点对同一ASM磁盘组具备完全一致的访问权限与发现路径。“hosts配置”与“Oracle用户配置”则直指RAC部署成败的权限基石:/etc/hosts必须精确映射所有节点的Public、Private、VIP、SCAN四类IP,禁用DNS解析以防单点故障;oracle与grid用户须同UID/GID跨节点统一,且均属oinstall与dba组,同时启用SElinux布尔值(如allow_ypbind=on)与关闭防火墙(或开放1521、1522、6200、6210等数十个Clusterware端口)。综上,该文档实为一份融合操作系统工程、网络架构设计、存储系统原理、集群中间件逻辑及Oracle数据库内核机制的综合性技术百科,是构建金融、电信、政务等关键业务系统高可用数据库底座不可或缺的权威参考。
Oracle 19.6+RAC+滚动升到19.8避坑手册
资源摘要信息: 本手册聚焦于Oracle 19c(具体为19.6.0.0.0版本)在Real Application Clusters(RAC)高可用架构下,执行滚动升级(Rolling Upgrade)至19.8.0.0.0版本的全流程实践与关键避坑指南。该升级并非全库停机式大版本迁移,而是依托Oracle RAC多节点并行运行能力,在保障业务连续性的前提下,逐节点、分阶段完成数据库软件(Database Home)、Grid Infrastructure(GI)及补丁集(DBRU)的在线升级。核心目标是实现零业务中断(Zero Downtime)或极短窗口内可接受中断(如仅秒级实例重启),同时规避因补丁依赖缺失、OPatch版本不兼容、补丁冲突未识别、操作系统内核参数不匹配、集群资源状态异常、OCR/Voting Disk权限异常、ASM磁盘组兼容性不足、数据库初始化参数变更滞后、监听器与SCAN配置漂移、GI与DB Home OPatch版本错配、补丁回退路径不可靠等数十类高频故障场景。手册严格遵循Oracle官方MOS(My Oracle Support)文档ID 2534742.1、2616080.1、2769451.1及19c Release Notes中关于DBRU滚动升级的强制约束,强调所有操作必须基于Red Hat Enterprise Linux 7.6(内核≥3.10.0-957.el7.x86_64)平台,且要求GI与DB Home均使用统一OPatch版本(推荐12.2.0.1.27及以上,严禁低于12.2.0.1.21),所有节点OS补丁(特别是glibc、libaio、kernel-headers)需同步更新至Oracle认证基线。升级前必须执行完整备份:包括RMAN全备+归档日志备份、OCR自动备份(ocrconfig -showbackup)、Vote Disk镜像备份、GI配置快照(crsctl query crs activeversion -f)、数据库SPFILE与PFILE双存、监听配置文件(listener.ora、tnsnames.ora、sqlnet.ora)校验与归档、以及所有自定义脚本(如crontab、shell监控、Data Guard Broker配置)版本固化。补丁冲突检查环节采用opatch prereq CheckConflictAgainstOHWithDetail指令深度扫描当前Oracle Home中已安装的所有one-off补丁、PSU、DBRU与Bundle Patch,识别潜在冲突(如p31281355与p31064025间可能存在的互斥关系)、缺失前置补丁(如必须先应用p30898773再安装DBRU)、以及版本越界风险(如19.6.0.0.0 GI Home无法直接接受19.8 DBRU)。手册特别警示:若OPatch版本过低(如12.2.0.1.18),将导致prereq命令返回假阴性结果,漏检严重冲突;必须先通过opatch auto -rollback方式卸载旧OPatch,再以opatch apply方式部署新OPatch,且需在所有RAC节点上逐个验证opatch version输出一致。DBRU补丁包p31064025_198000DBRU_Linux-x86-64.zip包含数据库软件二进制更新、SQL变更脚本(catbundle.sql)、数据字典升级逻辑(catupgrd.sql)、OLAP/CTX/OLS等组件补丁,并强制要求在升级后立即执行$ORACLE_HOME/perl/bin/perl catctl.pl -n 4 -l /tmp -i 19.8 catupgrd.sql完成字典升级,否则数据库将处于“UPGRADE”状态,无法正常OPEN。回退机制设计为三级防护:一级为opatch rollback快速撤回单个补丁;二级为GI与DB Home并行回滚至19.6完整Home(需提前制作软链接快照及tar包);三级为OCR还原+RMAN不完全恢复+DG Failover切换。手册还详述了滚动升级各阶段关键验证点:节点1升级后必须确认CRS资源(ora.crsd、ora.asm、ora.database)全部ONLINE、GIMR数据库(mgmtdb)状态正常、srvctl status database -d Jcoadb显示两节点实例状态一致、AWR快照生成无误、ADG传输延迟归零、监听器动态注册服务名完整可见、以及DBA_REGISTRY_HISTORY中记录19.8.0.0.0 DBRU安装时间戳。任何环节出现ORA-29516、ORA-600、ORA-7445、CRS-4639、CRS-2674等错误均须立即中止流程,依据MOS文档定位根因,严禁跳过校验强行推进。最终,该手册不仅是操作步骤罗列,更是融合Oracle底层架构原理(如Cluster Synchronization Services通信机制、CSSD心跳超时算法、ASM rebalance并发控制逻辑、DBWR写入路径变更影响)、补丁生命周期管理规范(Patch Lifecycle Policy for 19c)、企业级运维SLA保障体系(含升级窗口审批、变更评审委员会签字、灰度发布策略、熔断机制阈值设定)于一体的综合性技术白皮书,适用于大型金融、电信、政务系统中Oracle RAC生产环境的标准化升级治理。
CodeGolang
Linux安装Oracle指南[项目代码]
在Linux系统上安装Oracle 19c数据库是一项兼具技术深度与工程严谨性的核心任务,广泛应用于企业级应用开发、数据中台建设、金融核心系统部署及高校数据库课程实践等场景。本指南所涵盖的并非简单的图形化点击式安装,而是基于Red Hat Enterprise Linux(RHEL)或CentOS/Oracle Linux等主流发行版,在虚拟机环境中完成从零构建高可用Oracle数据库实例的全流程体系化操作。首先需明确:Oracle 19c是Oracle官方发布的长期支持(LTS)版本,兼容ACID事务、多租户架构(CDB/PDB)、自治优化器(Autonomous Optimizer)、JSON原生支持、In-Memory列式存储、透明数据加密(TDE)、Flashback Data Archive等数十项关键企业特性,其安装过程严格依赖底层操作系统内核参数、资源限制、用户权限模型与网络配置的协同调优。预安装阶段即已体现深度系统工程思维:必须创建专用oracle用户与oinstall、dba、asmadmin等系统组,严格遵循Oracle建议的UID/GID范围(如UID≥500),禁用SELinux(或配置为permissive模式),关闭防火墙(或开放1521、5500等端口),并调整/etc/security/limits.conf中nofile(文件描述符)、nproc(进程数)、stack(堆栈大小)等硬限制至Oracle官方推荐值(如nofile soft 65536、hard 65536)。同时需验证内核版本(≥4.14)、glibc版本(≥2.17)、内存(≥4GB物理内存,建议8GB+)、Swap空间(≥2GB或等于RAM)、磁盘空间(/u01挂载点至少需30GB用于软件安装,/u02需50GB以上用于数据文件),并执行sysctl -p永久生效vm.swappiness=1、kernel.shmall、kernel.shmmax、kernel.shmmni、kernel.sem等共享内存参数——这些并非可选配置,而是Oracle实例启动时强制校验的“健康基线”。安装包获取环节强调合规性与完整性:必须从Oracle官网(https://www.oracle.com/database/technologies/xe-prior-rel-downloads.html 或 Oracle Software Delivery Cloud)下载适用于Linux x86-64平台的两个主压缩包——linuxx64_193000_db_home.zip(数据库软件)与linuxx64_193000_db_home.zip(补丁集,若需最新RU/RU),上传至虚拟机后需使用unzip解压至/u01/app/oracle/product/19c/dbhome_1,并确保oracle用户对整个目录具备rwx权限。执行runInstaller前必须以oracle用户运行./grid/install/response/gridsetup.rsp模板生成静默响应文件,或启用图形界面(需配置X11转发或VNC)启动OUI(Oracle Universal Installer),此时将触发长达十余分钟的先决条件检查(Prerequisite Checks),任何一项失败(如DNS解析异常、hostname不合法、/etc/hosts未映射本地IP)均会导致安装中断。典型错误“IP address is not valid”实则源于/etc/hosts中127.0.0.1仅指向localhost而非主机全限定名(FQDN),必须修正为“127.0.0.1 your-hostname.your-domain.com your-hostname”,且hostname命令输出须与之完全一致;此非简单文本替换,而是影响Oracle监听器(lsnrctl)、数据库注册(DB Registration)、EM Express(5500端口)及后续RAC部署的根本性网络标识问题。安装完成后需执行root.sh脚本以配置内核模块、创建oratab条目、注册服务;随后通过dbca(Database Configuration Assistant)静默或交互式创建数据库实例,指定字符集(AL32UTF8为推荐通用编码)、国家字符集(AL16UTF16)、存储类型(文件系统或ASM)、归档模式(ARCHIVELOG)、内存分配(SGA_TARGET/PAGE_SIZE自动适配)、监听端口(默认1521)及密码策略(SYS/SYSTEM初始密码需符合复杂度要求)。环境变量配置是持续运维的关键:在~/.bash_profile中导出ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1、ORACLE_SID=ORCLCDB、PATH=$ORACLE_HOME/bin:$PATH,并执行source生效。登录验证需分层进行:sqlplus / as sysdba验证本地OS认证,sqlplus sys/oracle@localhost:1521/ORCLCDB as sysdba验证网络连接,再通过ALTER USER system IDENTIFIED BY NewPass123;修改密码。Navicat连接需新建OCI连接,驱动选择Oracle Instant Client(需另行下载并配置LD_LIBRARY_PATH),服务名填写ORCLPDB1(PDB名称),而非SID;若提示ORA-12154,需检查tnsnames.ora中是否正确定义了该服务别名及其对应HOST/PORT/SERVICE_NAME。此外,还需配置listener.ora启用动态注册、开启EM Express(exec dbms_xdb_config.sethttpsport(5500))、设置自动启动(oraenv + systemctl enable oracle-database)等延伸操作,方构成一个生产就绪(Production-Ready)的Oracle 19c Linux数据库环境。
Linux7.6+Oracle 19c+UDEV+ASM.pdf
通过文档中的详细步骤和操作指南,用户可以系统地学习和掌握在虚拟机环境下部署和管理Oracle数据库的全流程。
蚁库
308
oracle linux 7.6 下oracle 19c (19.3.0)静默安装.pdf
通过本文的解析,安装者应该能够掌握Oracle 19c在Oracle Linux 7.6上的静默安装技巧,进而实现高效、自动化地部署Oracle数据库环境。
雨季雪迁
4855
RHEL+7.6+安装Oracle19C+ASM+dataguard超强安装指南
RHEL 7.6 安装 Oracle 19C ASM Dataguard 超强安装指南本指南旨在指导用户在 RHEL 7.6 环境中安装 Oracle 19C ASM Dataguard,以实现高可用性和高性能的数据库环境
CodeGolang
329
阿里云ECS环境下CentOS-linux 7.6系统Oracle 19C RAC双节点集群安装部署-优化-维护手册.pdf
阿里云ECS环境下的Oracle 19C RAC双节点集群安装部署是一个复杂的过程,涉及到多个环节和系统配置。
Oracle原厂清洁工
874
RHEL 7环境下19c RAC安装之udev规则配置ASM共享存储.docx
在Oracle 19c RAC的ASM环境中,正确配置udev规则可以确保存储设备在不同节点间的透明性和一致性,避免因设备命名不一致导致的问题,从而提高系统的稳定性和可维护性。
1492
Oracle 19c RAC on Linux安装手册.docx
本文档提供了 Oracle 19c RAC on Linux 安装的详细指南,涵盖了从 OS 环境检查到安装 Oracle 19c RAC 的所有步骤,并提供了图形界面截图以便更好地理解安装过程。
你好我是李白
515