配套笔记:《Oracle 26ai RAC 脚本方式部署指南》
本文档是图形界面步骤,适合第一次装、需要看着界面点的场景。
1. 环境信息
| 主机名 | IP | 用途 |
|---|---|---|
| ebsdb1 | 10.0.20.61 | 节点1 |
| ebsdb2 | 10.0.20.62 | 节点2 |
| ebsdb1-vip | 10.0.20.63 | 节点1 VIP |
| ebsdb2-vip | 10.0.20.64 | 节点2 VIP |
| ebs-scan | 10.0.20.65 | SCAN |
| ebsdb1-priv1 | 10.0.21.61 | 私网1 |
| ebsdb2-priv1 | 10.0.21.62 | 私网1 |
| ebsdb1-priv2 | 10.0.22.61 | 私网2 |
| ebsdb2-priv2 | 10.0.22.62 | 私网2 |
网络规划
| 接口 | 网段 | VirtualBox 模式 | 用途 | ebsdb1 IP | ebsdb2 IP |
|---|---|---|---|---|---|
| eth0 | 10.0.2.0/24 | NAT | 互联网访问 | 10.0.2.61/24 | 10.0.2.62/24 |
| eth1 | 10.0.20.0/24 | Host-Only | RAC public | 10.0.20.61/24 | 10.0.20.62/24 |
| eth2 | 10.0.21.0/24 | Internal Network | RAC private1 | 10.0.21.61/24 | 10.0.21.62/24 |
| eth3 | 10.0.22.0/24 | Internal Network | RAC private2 | 10.0.22.61/24 | 10.0.22.62/24 |
- eth0 网关:10.0.2.2,DNS:10.0.2.2
- 域名:
dehetu.com - 软件目录:
/bzebs/prod/26.0.0/grid(GI)、/bzebs/prod/db/26.0.0(DB) - ASM 磁盘组:OCR(10G×1)、OCRBACK(10G×1)、DATA(30G×4)、ARCH(20G×1)
- DB SID:BZCDB1 / BZCDB2
2. 宿主机:创建并挂载共享盘
VM 必须关机。PowerShell 以普通用户运行。
$VBOX = "D:\Oracle\VirtualBox\VBoxManage.exe"
$SharedDir = "D:\OracleVMs\ASM"
$VM1 = "ebsdb1"
$VM2 = "ebsdb2"
$CtrlName = "SATA"
$PortCount = 8
# 前置检查:VM 必须关机
$running = & $VBOX list runningvms
if ($running -match ('"' + [regex]::Escape($VM1) + '"|"' + [regex]::Escape($VM2) + '"')) {
throw "请先关闭 $VM1 / $VM2"
}
# 创建共享盘目录
if (-not (Test-Path -LiteralPath $SharedDir)) {
[IO.Directory]::CreateDirectory($SharedDir) | Out-Null
}
# 盘清单
$DISKS = @(
@{ Name = "OCR01"; SizeMB = 10240; Port = 1 },
@{ Name = "OCR02"; SizeMB = 10240; Port = 2 },
@{ Name = "DATA01"; SizeMB = 30720; Port = 3 },
@{ Name = "DATA02"; SizeMB = 30720; Port = 4 },
@{ Name = "DATA03"; SizeMB = 30720; Port = 5 },
@{ Name = "DATA04"; SizeMB = 30720; Port = 6 },
@{ Name = "ARCH01"; SizeMB = 20480; Port = 7 }
)
# 创建 Fixed VMDK(先清孤儿登记)
foreach ($d in $DISKS) {
$file = Join-Path $SharedDir ($d.Name + ".vmdk")
& $VBOX closemedium disk $file 2>&1 | Out-Null
if (Test-Path -LiteralPath $file) {
Write-Host "跳过:$($d.Name).vmdk"
continue
}
& $VBOX createmedium disk --filename $file --size $d.SizeMB --format VMDK --variant Fixed
if ($LASTEXITCODE -ne 0) { throw "createmedium 失败:$file" }
Write-Host "创建:$($d.Name).vmdk ($($d.SizeMB) MB)"
}
# 扩展现有 SATA 控制器端口数(关键!默认 PortCount=1 会静默拒绝 port 1+)
foreach ($vm in @($VM1, $VM2)) {
& $VBOX storagectl $vm --name $CtrlName --portcount $PortCount --hostiocache off
if ($LASTEXITCODE -ne 0) { throw "storagectl 失败:$vm" }
Write-Host "$vm $CtrlName PortCount=$PortCount, hostiocache=off"
}
# 挂载到双节点
foreach ($vm in @($VM1, $VM2)) {
foreach ($d in $DISKS) {
$file = Join-Path $SharedDir ($d.Name + ".vmdk")
& $VBOX storageattach $vm --storagectl $CtrlName --port $d.Port --device 0 `
--type hdd --medium $file --mtype shareable
if ($LASTEXITCODE -ne 0) { Write-Warning "attach 失败:$vm port $($d.Port)" }
else { Write-Host "OK $vm port $($d.Port) <- $($d.Name).vmdk" }
}
}
# 验收:两节点应各有 7 个 vmdk 挂载点
foreach ($vm in @($VM1, $VM2)) {
$n = (& $VBOX showvminfo $vm --machinereadable | Select-String '\.vmdk"').Count
Write-Host "$vm 共享盘挂载点:$n"
}
3. Guest OS 基线(ebsdb1 / ebsdb2 都执行)
3.1 关闭防火墙、SELinux、avahi
systemctl disable --now firewalld
systemctl stop avahi-daemon.socket && systemctl stop avahi-daemon
systemctl disable avahi-daemon.socket && systemctl disable avahi-daemon
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
setenforce 0
3.2 时间同步(chrony + 阿里云 NTP)
cat > /etc/chrony.conf <<EOF
server ntp.aliyun.com iburst
server cn.ntp.org.cn iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 10.0.0.0/16
local stratum 10
EOF
systemctl enable --now chronyd
chronyc sources -v
# 应看到 ntp.aliyun.com 状态为 ^*(已同步)
3.3 网卡配置(全部手工)
# ebsdb1
nmcli connection add type ethernet ifname eth0 con-name wan ipv4.method manual ipv4.addresses 10.0.2.61/24 ipv4.gateway 10.0.2.2 ipv4.dns 10.0.2.2
nmcli connection add type ethernet ifname eth1 con-name pub ipv4.method manual ipv4.addresses 10.0.20.61/24 ipv4.never-default yes
nmcli connection add type ethernet ifname eth2 con-name priv1 ipv4.method manual ipv4.addresses 10.0.21.61/24 ipv4.never-default yes
nmcli connection add type ethernet ifname eth3 con-name priv2 ipv4.method manual ipv4.addresses 10.0.22.61/24 ipv4.never-default yes
nmcli connection up wan; nmcli connection up pub; nmcli connection up priv1; nmcli connection up priv2
# ebsdb2
nmcli connection add type ethernet ifname eth0 con-name wan ipv4.method manual ipv4.addresses 10.0.2.62/24 ipv4.gateway 10.0.2.2 ipv4.dns 10.0.2.2
nmcli connection add type ethernet ifname eth1 con-name pub ipv4.method manual ipv4.addresses 10.0.20.62/24 ipv4.never-default yes
nmcli connection add type ethernet ifname eth2 con-name priv1 ipv4.method manual ipv4.addresses 10.0.21.62/24 ipv4.never-default yes
nmcli connection add type ethernet ifname eth3 con-name priv2 ipv4.method manual ipv4.addresses 10.0.22.62/24 ipv4.never-default yes
nmcli connection up wan; nmcli connection up pub; nmcli connection up priv1; nmcli connection up priv2
验收:
ping -c2 10.0.20.62 # ebsdb1 上
ping -c2 10.0.21.62 # priv1
ping -c2 10.0.22.62 # priv2
ip -br a
3.4 hostname 与 hosts
# ebsdb1
hostnamectl set-hostname ebsdb1.dehetu.com
# ebsdb2
hostnamectl set-hostname ebsdb2.dehetu.com
两台机器写入完全相同的 /etc/hosts:
cat >> /etc/hosts <<EOF
###HOSTIP###
10.0.20.61 ebsdb1.dehetu.com ebsdb1
10.0.20.62 ebsdb2.dehetu.com ebsdb2
###VIP###
10.0.20.63 ebsdb1-vip.dehetu.com ebsdb1-vip
10.0.20.64 ebsdb2-vip.dehetu.com ebsdb2-vip
###SCANIP###
10.0.20.65 ebs-scan.dehetu.com ebs-scan
###PRIVATEIP###
10.0.21.61 ebsdb1-priv1.dehetu.com ebsdb1-priv1
10.0.21.62 ebsdb2-priv1.dehetu.com ebsdb2-priv1
10.0.22.61 ebsdb1-priv2.dehetu.com ebsdb1-priv2
10.0.22.62 ebsdb2-priv2.dehetu.com ebsdb2-priv2
EOF
验收:
getent hosts ebsdb1 ebsdb2 ebs-scan
ping -c2 ebsdb2
3.5 预安装包与用户组
# 仓库
dnf install -y oraclelinux-release
dnf config-manager --set-enabled ol8_addons -y
# 预安装包
dnf -y install oracle-ai-database-preinstall-26ai.x86_64
# grid 的 limits(preinstall 默认只配 oracle)
/bin/cp /etc/security/limits.d/oracle-ai-database-preinstall-26ai.conf \
/etc/security/limits.d/grid.conf
sed -i "s/oracle/grid/g" /etc/security/limits.d/grid.conf
# sysctl 模板
[ -f /etc/sysctl.conf.26ai ] && /bin/cp -pr /etc/sysctl.conf.26ai /etc/sysctl.conf
# 清理旧版本 limits
cd /etc/security/limits.d/ && mkdir -p backup
mv *19* *21* *23* *ebs* backup/ 2>/dev/null || true
# 常用工具
dnf -y install epel-release
dnf config-manager --set-enabled powertools
dnf makecache
dnf -y install tree nmap dos2unix lrzsz nc lsof wget tcpdump htop iftop iotop sysstat nethogs rng-tools vim-enhanced gcc gcc-c++ psmisc net-tools bash-completion libaio cmake screen rlwrap bzip2 lftp telnet bind-utils tigervnc-server tigervnc kernel-headers kernel-devel make rsync lvm2 iperf3
# 清理旧用户/组
for u in oracle grid; do
id $u >/dev/null 2>&1 && userdel -r $u
done
for g in oinstall dba asmdba asmoper asmadmin oper backupdba dgdba kmdba racdba; do
getent group $g >/dev/null && groupdel $g
done
# 重建组
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 asmdba
groupadd -g 54324 asmoper
groupadd -g 54325 asmadmin
groupadd -g 54326 oper
groupadd -g 54327 backupdba
groupadd -g 54328 dgdba
groupadd -g 54329 kmdba
groupadd -g 54330 racdba
# 建用户
useradd -u 54321 -g oinstall -G dba,oper,asmdba,asmoper,backupdba,dgdba,kmdba,racdba oracle
useradd -u 54322 -g oinstall -G dba,asmadmin,asmdba,asmoper grid
# 密码
echo "oracle" | passwd --stdin oracle
echo "grid" | passwd --stdin grid
id oracle; id grid
3.6 目录与环境变量
# 软件目录
mkdir -p /bzebs/prod/26.0.0/grid
mkdir -p /bzebs/prod/grid
mkdir -p /bzebs/prod/db/26.0.0
chown -R grid:oinstall /bzebs
chown -R oracle:oinstall /bzebs/prod/db
# grid 环境变量(ebsdb2 的 ORACLE_SID 改 +ASM2)
cat > /home/grid/.bash_profile <<'EOF'
export ORACLE_BASE=/bzebs/prod/grid
export ORACLE_HOME=/bzebs/prod/26.0.0/grid
export ORACLE_SID=+ASM1
export PATH=$ORACLE_HOME/bin:$PATH
export DISPLAY=:0
EOF
chown grid:oinstall /home/grid/.bash_profile
# oracle 环境变量(ebsdb2 的 ORACLE_SID 改 BZCDB2)
cat > /home/oracle/.bash_profile <<'EOF'
export ORACLE_BASE=/bzebs/prod/db
export ORACLE_HOME=/bzebs/prod/db/26.0.0
export ORACLE_SID=BZCDB1
export PATH=$ORACLE_HOME/bin:$PATH
export DISPLAY=:0
EOF
chown oracle:oinstall /home/oracle/.bash_profile
3.7 SSH 等价
root / grid / oracle 三个身份都要在两节点间免密互访。
# grid
su - grid
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
ssh -o StrictHostKeyChecking=no ebsdb2 date
ssh-copy-id grid@ebsdb2
ssh ebsdb2 date
# oracle
su - oracle
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
ssh -o StrictHostKeyChecking=no ebsdb2 date
ssh-copy-id oracle@ebsdb2
ssh ebsdb2 date
# root
ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa
ssh -o StrictHostKeyChecking=no ebsdb2 date
ssh-copy-id root@ebsdb2
4. ASM 存储配置(ASMLib)
在 ebsdb1 上执行创建,ebsdb2 上只做 scandisks。
4.1 安装 ASMLib
yum install -y kmod-oracleasm oracleasm-support
rpm -ivh /tmp/oracleasmlib-3.1.3-1.el8.x86_64.rpm
4.2 确认盘与分区
lsblk
# sda=系统盘(100G),sdb~sdh=7 块共享盘
# 按大小:2×10G(OCR/OCRBACK) + 4×30G(DATA) + 1×20G(ARCH)
# 给每块共享盘建一个主分区
for d in sdb sdc sdd sde sdf sdg sdh; do
echo -e "n\np\n1\n\n\nw" | fdisk /dev/$d
done
partprobe /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh
4.3 配置 oracleasm 服务
oracleasm configure -i
# Default user: grid
# Default group: asmadmin
# Start on boot: y
# Scan on boot: y
# Max disks: 2048
# iofilter: y
systemctl enable oracleasm
systemctl restart oracleasm
systemctl status oracleasm
4.4 创建 ASM 盘标签
oracleasm createdisk -v OCR01 /dev/sdb1
oracleasm createdisk -v OCR02 /dev/sdc1
oracleasm createdisk -v DATA01 /dev/sdg1
oracleasm createdisk -v DATA02 /dev/sdf1
oracleasm createdisk -v DATA03 /dev/sde1
oracleasm createdisk -v DATA04 /dev/sdd1
oracleasm createdisk -v ARCH01 /dev/sdh1
oracleasm scandisks
oracleasm listdisks
# 应输出:ARCH01 DATA01 DATA02 DATA03 DATA04 OCR01 OCR02
4.5 第二节点扫描(ebsdb2)
partprobe /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh
oracleasm scandisks
oracleasm listdisks
# 应看到和 ebsdb1 完全相同的 7 个标签
4.6 验证
ls -l /dev/oracleasm/disks/
# 属主 grid:asmadmin,权限 0660
cd /dev/disk/by-label && ls -l
# ARCH01 -> ../../sdh1
# DATA01 -> ../../sdg1
# DATA02 -> ../../sdf1
# DATA03 -> ../../sde1
# DATA04 -> ../../sdd1
# OCR01 -> ../../sdb1
# OCR02 -> ../../sdc1
5. Grid Infrastructure 安装(gridSetup.sh)
5.1 前置准备
# root 执行:建 inventory 指针
cat > /etc/oraInst.loc <<EOF
inventory_loc=/bzebs/prod/oraInventory
inst_group=oinstall
EOF
chown grid:oinstall /etc/oraInst.loc
chmod 664 /etc/oraInst.loc
5.2 启动安装
# root 执行:允许图形界面
xhost +
# grid 用户执行
su - grid
cd /tmp/grid_home
./gridSetup.sh
5.3 步骤说明
| 步骤 | 界面 | 选择/填写 |
|---|---|---|
| 1 | Configuration Option | Configure Oracle Grid Infrastructure for a New Cluster |
| 2 | Cluster Configuration | Configure cluster to manage Oracle RAC databases |
| 3 | Grid Plug and Play | Create Local SCAN;Cluster Name=ebs;SCAN Name=ebs-scan;SCAN Port=1521 |
| 4 | Cluster Node Information | 已有 ebsdb1/ebsdb1-vip;点 Add → ebsdb2 / ebsdb2-vip;下方 SSH 互信:OS Username=grid,Password=grid,点 Setup,提示成功后 OK |
| 5 | Network Interface Usage | eth1 → Public;eth2 → ASM & Private;eth3 → ASM & Private |
| 6 | Storage Option | Use Oracle Flex ASM for storage;勾选 “Configure a separate disk group to store automatic backups of OCR” |
| 7 | Create ASM Disk Group | Disk Group Name=OCR;Redundancy=External;Disk Discovery Path 改成 ORCL:*;勾选 OCR01;再点 Create 建 OCRBACK:Disk Group Name=OCRBACK,External,勾选 OCR02 |
| 8 | ASM Password | Use same passwords;输入 Oracle_2026 |
| 9 | Automatic Self Correction | 勾选 Enable Automatic Self Correction |
| 10 | Failure Isolation | Do not use IPMI |
| 11 | Management Options | 不勾选 Register with EM Cloud Control |
| 12 | Operating System Groups | OSASM=asmadmin;OSDBA for ASM=asmdba;OSOPER for ASM=asmoper |
| 13 | Installation Location | Oracle Base=/bzebs/prod/grid;Software Location=/bzebs/prod/26.0.0/grid |
| 14 | Create Inventory | Inventory Directory=/bzebs/prod/oraInventory;oinstall group |
| 15 | Root Script Execution | 勾选 Automatically run;选 Use root credential;输入 root 密码 |
| 16 | Prerequisite Checks | 实验环境点 Ignore All(警告不影响);Next |
| 17 | Summary | 核对配置,点 Install |
等待安装完成(20~40 分钟),root 脚本自动执行。
5.4 安装后验证
crsctl check crs
crsctl stat res -t
asmcmd lsdg
srvctl config asmnetwork
6. ASM 磁盘组创建(asmca)
6.1 启动
su - grid
asmca
6.2 创建磁盘组
| 磁盘组名 | Redundancy | 选择磁盘 |
|---|---|---|
| DATA | External | DATA01, DATA02, DATA03, DATA04 |
| ARCH | External | ARCH01 |
点 Create,确认两个磁盘组都是 MOUNTED(2 of 2)。
7. DB 软件安装(runInstaller)
7.1 启动
# root 执行
xhost +
# oracle 用户执行
su - oracle
cd /tmp/db_home
./runInstaller
7.2 步骤说明
| 步骤 | 界面 | 选择/填写 |
|---|---|---|
| 1 | Configuration Option | Set Up RAC Software Only |
| 2 | Installation Type | Oracle Real Application Clusters database installation |
| 3 | Node Selection | 勾选 ebsdb1、ebsdb2;SSH 互信:OS Username=oracle,Password=oracle,点 Setup |
| 4 | Database Edition | Enterprise Edition |
| 5 | Installation Location | Oracle Base=/bzebs/prod/db;Software Location=/bzebs/prod/db/26.0.0 |
| 6 | Operating System Groups | OSdba=dba;OSoper=oper;OSbackup=backupdba;OSdgdba=dgdba;OSkmdba=kmdba;OSracdba=racdba |
| 7 | Root Script Execution | 勾选 Automatically run;Use root credential;输入 root 密码 |
| 8 | Prerequisite Checks | Ignore All |
| 9 | Summary | 核对后点 Install |
等待安装完成(15~30 分钟)。
8. 建库(dbca)
8.1 启动
su - oracle
dbca
8.2 步骤说明
| 步骤 | 界面 | 选择/填写 |
|---|---|---|
| 1 | Database Operation | Create Database |
| 2 | Creation Mode | Advanced Configuration |
| 3 | Database Type | Oracle RAC database |
| 4 | Deployment Type | Admin Managed;Database Name=BZCDB;勾选 ebsdb1、ebsdb2 |
| 5 | Database Identification | Global Database Name=BZCDB;Prefix=BZCDB |
| 6 | Storage Option | Use ASM |
| 7 | ASM Disk Groups | Data Files → +DATA;Recovery Area → +ARCH |
| 8 | Fast Recovery Area | +ARCH;大小 20G |
| 9 | Network Configuration | 默认 LISTENER |
| 10 | Data Vault | 不启用 |
| 11 | Configuration Options | 内存自动管理;字符集 AL32UTF8 |
| 12 | Management Option | 不注册 EM Express |
| 13 | Operating System Groups | 默认 |
| 14 | Summary | 核对后点 Finish |
等待建库完成(30~60 分钟)。
9. 验证
# 集群状态
crsctl stat res -t
# 数据库状态
srvctl status database -d BZCDB
srvctl status asm
# 实例状态
sqlplus / as sysdba
SELECT instance_name, status FROM gv$instance;
# 应看到 BZCDB1 和 BZCDB2 都 OPEN

徐万新之路

