Oracle RAC 19c 部署详解
Oracle RAC 19c 部署详解
适用版本:Oracle Database 19c 文档版本:v1.0 / 2026-07
1. 概述
Oracle RAC 提供高可用与扩展性[1]:
组件:
- Grid Infrastructure
- Oracle RAC 软件
- 共享存储
- 集群网络
详细见:Oracle RAC 部署实战、Oracle GI 19c 安装详解。
2. 架构
┌─────────────────────────────────────────┐
│ Client │
└─────────────┬───────────────────────────┘
│ SCAN
┌─────────────▼───────────────────────────┐
│ SCAN Listener (3) │
└─────────────┬───────────────────────────┘
│
┌──────┴──────┐
│ │
┌──────▼─────┐ ┌─────▼──────┐
│ Node 1 │ │ Node 2 │
│ Instance1 │ │ Instance2 │
│ RDBMS │ │ RDBMS │
└──────┬─────┘ └─────┬──────┘
│ │
└──────┬──────┘
│
┌──────────▼──────────┐
│ Shared Storage │
│ (ASM) │
│ - DATA │
│ - FRA │
│ - OCR/Voting │
└─────────────────────┘
3. 网络规划
3.1 IP 规划
| 用途 | rac1 | rac2 |
|---|---|---|
| Public IP | 192.168.1.10 | 192.168.1.11 |
| Private IP | 10.0.0.10 | 10.0.0.11 |
| Virtual IP | 192.168.1.12 | 192.168.1.13 |
| SCAN | 192.168.1.20-22 | - |
3.2 /etc/hosts
127.0.0.1 localhost
192.168.1.10 rac1.example.com rac1
192.168.1.11 rac2.example.com rac2
192.168.1.12 rac1-vip.example.com rac1-vip
192.168.1.13 rac2-vip.example.com rac2-vip
10.0.0.10 rac1-priv.example.com rac1-priv
10.0.0.11 rac2-priv.example.com rac2-priv
192.168.1.20 rac-scan.example.com rac-scan
192.168.1.21 rac-scan.example.com rac-scan
192.168.1.22 rac-scan.example.com rac-scan
3.3 SCAN DNS
- 推荐 DNS
- 单 /etc/hosts 仅 1 IP
4. 存储
4.1 LUN
| LUN | 大小 | 用途 |
|---|---|---|
| OCR1 | 1GB | OCR/Voting |
| OCR2 | 1GB | OCR/Voting |
| OCR3 | 1GB | OCR/Voting |
| DATA | 100GB | 数据 |
| FRA | 50GB | 归档/备份 |
4.2 ASMLib
oracleasm createdisk OCR1 /dev/sdb1
oracleasm createdisk OCR2 /dev/sdc1
oracleasm createdisk OCR3 /dev/sdd1
oracleasm createdisk DATA /dev/sde1
oracleasm createdisk FRA /dev/sdf1
# 节点 2 扫描
oracleasm scandisks
oracleasm listdisks
详细见:Oracle ASM 详解。
5. 预安装
5.1 OS
dnf install -y oracle-database-preinstall-19c
5.2 用户
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54328 asmadmin
groupadd -g 54329 asmdba
groupadd -g 54330 asmoper
useradd -u 54331 -g oinstall -G asmadmin,asmdba,asmoper,dba grid
useradd -u 54321 -g oinstall -G dba,asmdba oracle
passwd oracle
passwd grid
5.3 内核
# /etc/sysctl.d/99-oracle.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 16777216
kernel.shmmax = 68719476736
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
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
sysctl --system
详细见:Oracle-Linux8 配置详解。
6. SSH 互信
6.1 grid
su - grid
ssh-keygen -t rsa -b 4096
ssh-copy-id rac1
ssh-copy-id rac2
# 验证
ssh rac1 date
ssh rac2 date
6.2 oracle
su - oracle
ssh-keygen -t rsa -b 4096
ssh-copy-id rac1
ssh-copy-id rac2
7. GI 安装
7.1 解压
su - grid
mkdir -p ******
cd /u01/app/19.0.0/grid
unzip /tmp/LINUX.X64_193000_grid_home.zip
7.2 CVU 预检
./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -fixup -verbose
7.3 响应文件
oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v19.0.0
INVENTORY_LOCATION=/u01/app/oraInventory
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.gpnp.scanName=rac-scan.example.com
oracle.install.crs.config.gpnp.scanPort=1521
oracle.install.crs.config.clusterName=rac-cluster
oracle.install.crs.config.clusterNodes=rac1:rac1-vip,rac2:rac2-vip
oracle.install.crs.config.networkInterfaceList=ens33:192.168.1.0:1,ens34:10.0.0.0:2
oracle.install.asm.SYSASMPassword=******
oracle.install.asm.diskGroup.name=OCR
oracle.install.asm.diskGroup.redundancy=NORMAL
oracle.install.asm.diskGroup.AUSize=4
oracle.install.asm.diskGroup.disks=/dev/oracleasm/disks/OCR1,/dev/oracleasm/disks/OCR2,/dev/oracleasm/disks/OCR3
oracle.install.asm.monitorPassword=******
7.4 静默安装
./gridSetup.sh -silent -responseFile /tmp/grid_install.rsp -applyRU /tmp/ru
7.5 root 脚本
# 节点 1
su -
/u01/app/oraInventory/orainstRoot.sh
/u01/app/19.0.0/grid/root.sh
# 节点 2
/u01/app/oraInventory/orainstRoot.sh
/u01/app/19.0.0/grid/root.sh
详细见:Oracle GI 19c 安装详解。
7.6 验证
crsctl stat res -t
crsctl check cluster -all
8. ASM Disk Group
8.1 创建
asmca -silent -createDiskGroup -diskGroupName DATA -diskList /dev/oracleasm/disks/DATA -redundancy EXTERNAL
asmca -silent -createDiskGroup -diskGroupName FRA -diskList /dev/oracleasm/disks/FRA -redundancy EXTERNAL
8.2 验证
asmcmd lsdg
9. RAC DB 软件安装
9.1 解压
su - oracle
mkdir -p ******
cd /u01/app/oracle/product/19.0.0/dbhome_1
unzip /tmp/LINUX.X64_193000_db_home.zip
9.2 响应文件
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
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=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba
oracle.install.db.CLUSTER_NODES=rac1,rac2
oracle.install.db.isRACOneInstall=false
oracle.install.db.rac.serverpoolCardinality=0
oracle.install.db.config.starterdb.type=
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.config.starterdb.characterSet=
9.3 安装
./runInstaller -silent -responseFile /tmp/db_install.rsp -applyRU /tmp/ru
9.4 root
# 两节点
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
10. DBCA 建库
10.1 静默
dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbName orcl \
-sid orcl \
-databaseConfigType RAC \
-nodelist rac1,rac2 \
-createAsContainerDatabase true \
-numberOfPDBs 1 \
-pdbName orclpdb \
-pdbAdminPassword Oracle123 \
-sysPassword Oracle123 \
-systemPassword Oracle123 \
-storageType ASM \
-diskGroupName +DATA \
-recoveryGroupName +FRA \
-characterSet AL32UTF8 \
-totalMemory 4096 \
-databaseType OLTP
10.2 验证
srvctl status database -db orcl
srvctl config database -db orcl
11. 管理
11.1 集群
crsctl stat res -t
crsctl check cluster -all
crsctl start cluster -all
crsctl stop cluster -all
11.2 数据库
srvctl status database -db orcl
srvctl start database -db orcl
srvctl stop database -db orcl
srvctl status instance -db orcl -n rac1
11.3 实例
sqlplus / as sysdba
SQL> SELECT instance_name, host_name, status FROM v$instance;
SQL> SELECT inst_id, name, open_mode FROM gv$database;
12. SCAN 配置
12.1 SCAN Listener
srvctl status scan_listener
srvctl config scan
12.2 客户端
# tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
13. 服务
13.1 创建
srvctl add service -db orcl -service oltp -preferred orcl1 -available orcl2
srvctl start service -db orcl -service oltp
13.2 TAF
EXEC DBMS_SERVICE.MODIFY_SERVICE(
service_name => 'oltp',
failover_method => 'BASIC',
failover_type => 'SELECT',
failover_retries => 180,
failover_delay => 5
);
14. 补丁
14.1 滚动
# 节点 1
srvctl stop instance -db orcl -n rac1
$ORACLE_HOME/OPatch/opatch apply /tmp/ru
srvctl start instance -db orcl -n rac1
# 节点 2
srvctl stop instance -db orcl -n rac2
$ORACLE_HOME/OPatch/opatch apply /tmp/ru
srvctl start instance -db orcl -n rac2
详细见:Oracle Patch RU 详细操作。
14.2 datapatch
cd $ORACLE_HOME/OPatch
./datapatch -verbose
15. 验证
15.1 集群
crsctl stat res -t
crsctl check cluster -all
15.2 ASM
asmcmd lsdg
asmcmd lsdsk
15.3 数据库
SELECT instance_name, status FROM gv$instance;
SELECT name, open_mode FROM v$database;
15.4 OCR/Voting
ocrcheck
crsctl query css votedisk
16. 常见坑与排错
16.1 节点加入失败
- SSH 互信
- 时间同步
- 网络互通
16.2 ASM Disk 不可见
oracleasm scandisks
oracleasm listdisks
16.3 SCAN 无法连接
- DNS
- SCAN Listener
- 防火墙
16.4 Voting 丢失
crsctl replace votedisk +NEW_DG
17. 最佳实践
- DNS SCAN:客户端
- 私有网络独占:性能
- Normal OCR:3 票
- ASM 存储:现代
- SSH 互信:必要
- CVU 预检:完整
- 静默安装:自动化
- RU 最新:稳定
- 滚动补丁:零停
- 服务 TAF:高可用
18. 参考资料
[1] Oracle Grid Infrastructure Installation Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/cwlin/