
簡介本資源是一份面向Oracle DBA、Linux系統(tǒng)工程師及高可用架構學習者的實戰(zhàn)部署指南聚焦Oracle 19C RAC集群在Oracle Linux 7.9環(huán)境下的完整落地流程解決多節(jié)點協(xié)同、共享存儲配置、ASM磁盤組管理及集群服務啟動等核心難點。文檔以VMware Workstation Pro 16.1為實驗平臺覆蓋系統(tǒng)規(guī)劃主機/網(wǎng)絡/數(shù)據(jù)庫集群、環(huán)境配置防火墻、NTP、sysctl、limits、YUM源、iSCSI存儲服務、Grid Infrastructure安裝、數(shù)據(jù)庫實例創(chuàng)建及健康檢查全流程目錄結構清晰含30余項子模塊與命令驗證要點。資源為單個PDF文件共1個文件大小10.13MB內(nèi)容詳實圖文結合適合作為RAC部署操作手冊或故障排查參考。目前已有601人學習下載特別適合需從零搭建生產(chǎn)級RAC環(huán)境的中級以上技術人員。1. 為什么在 Linux 7.9 上裝 Oracle 19c RAC 不是“照著文檔點下一步”就能成的事你手頭有一臺剛配好的兩節(jié)點物理服務器內(nèi)核是3.10.0-1160.el7.x86_64標準的 CentOS/RHEL 7.9磁盤用的是 ASM UDEV 綁定的多路徑 SAN 存儲網(wǎng)絡是雙網(wǎng)卡綁定bond0 管理網(wǎng) bond1 心跳網(wǎng) bond2 SCAN VIP 網(wǎng)現(xiàn)在要部署 Oracle 19c RAC —— 這不是單機數(shù)據(jù)庫的安裝而是一場對操作系統(tǒng)底層、存儲可見性、網(wǎng)絡時序、Oracle 補丁兼容性、甚至 systemd 服務依賴順序的全棧壓力測試。很多團隊卡在第 3 步root.sh執(zhí)行到ohasd啟動失敗報CRS-4000: Command Start failed, or completed with errors.更多人栽在第 7 步srvctl start cluster后crsctl check cluster -all顯示一個節(jié)點UNKNOWN另一個節(jié)點ONLINE但ocrcheck報PROT-1錯誤最隱蔽的翻車點在第 12 步集群跑起來了業(yè)務連上后批量插入慢得像掛了磁盤 I/O查iostat -x 1發(fā)現(xiàn)await常超 200ms而asmcmd lsdg卻顯示磁盤組USERS的AU_SIZE是 1MB —— 這根本不是性能問題是建庫時沒強制指定--diskgroup參數(shù)導致 ASM 自動選了錯誤的 AU 大小。這不是玄學是 Linux 7.9 內(nèi)核與 Oracle 19c Grid Infrastructure 19.20 補丁之間那 0.3 秒的 udev 規(guī)則加載時序差、是oracle-rdbms-server-19c-preinstallRPM 對kernel.sem的默認設置漏改、更是gridsetup.sh圖形界面里那個被忽略的「Use Oracle ASM Filter Driver」復選框——它不開你就永遠繞不開ASMLIB的兼容性黑洞。本文不講理論模型只講你在機房里真實敲下的每一條命令、改的每一行配置、查的每一個日志段落以及為什么必須這么改。2. 準備階段從裸系統(tǒng)到 RAC 就緒這 7 類檢查缺一不可RAC 不是“先裝 Grid 再裝 DB”就能跑通的線性流程。它要求所有節(jié)點在root.sh執(zhí)行前就達到一種近乎苛刻的“狀態(tài)一致性”。我見過太多團隊跳過本章直接開裝結果在cluvfy stage -pre crsinst階段反復失敗最后花三天時間倒推補漏。以下檢查項全部來自生產(chǎn)環(huán)境血淚經(jīng)驗不是 Oracle 官方 checklist 的簡單翻譯而是每個條目背后都對應過至少一次真實故障。2.1 操作系統(tǒng)級硬約束驗證別信uname -r要信/etc/redhat-release和rpm -q kernelLinux 7.9 是一個泛稱實際包含 RHEL 7.9、CentOS 7.9、Oracle Linux 7.9UEK5 或 RHCK。Oracle 19c RAC僅官方支持 UEK54.14.35-2047.513.2.4.el7uek或 RHCK3.10.0-1160.118.1.el7及以上內(nèi)核。關鍵陷阱在于oracle-rdbms-server-19c-preinstallRPM 在 OL7.9 上默認裝的是 UEK5 內(nèi)核但如果你手動yum update過可能升到了 UEK65.4.x而19c GI 19.20 不支持 UEK6會卡在ohasd啟動CentOS 7.9 默認內(nèi)核是3.10.0-1160.el7但若啟用了centos-release-crbs倉庫可能意外裝上3.10.0-1160.118.1.el7—— 這個版本雖在支持列表但需額外打Patch 34133642GI Bundle Patch 19.20.0.0.221018才能解決ora.cssd進程崩潰問題。提示執(zhí)行以下命令確認真實內(nèi)核兼容性# 查當前內(nèi)核精確版本注意末尾 .el7uek 或 .el7 uname -r # 查已安裝內(nèi)核包確保只有一個 active 內(nèi)核且版本匹配 rpm -qa | grep ^kernel | sort # 查 Oracle 官方支持矩陣離線可用 # https://support.oracle.com/epmos/faces/DocumentDisplay?id2687001.1 需 MOS 賬號2.2 網(wǎng)絡與 DNSSCAN 名解析不是“能 ping 通就行”而是nslookup必須返回 3 個 A 記錄RAC 的 SCANSingle Client Access Name是負載均衡入口其 DNS 解析行為直接影響srvctl start scan是否成功。常見錯誤是用/etc/hosts硬編碼 SCAN IP如192.168.10.100 rac-scan這會導致srvctl config scan顯示SCAN name: rac-scan,SCAN VIP name: rac-scan-vip,SCAN VIP addresses: (192.168.10.100)但nslookup rac-scan只返回 1 條 A 記錄 ——RAC 要求 DNS 必須返回恰好 3 個不同 IP即使你只配了 2 個節(jié)點SCAN 也必須解析出 3 個 VIP第三個由 DNS 輪詢或空閑分配使用 dnsmasq 或 bind 時未啟用round-robin模式導致客戶端始終連到同一節(jié)點resolv.conf中options timeout:1 attempts:1導致 DNS 查詢超時cluvfy直接報PRVF-4663。正確做法# 在 DNS 服務器如 bindzone 文件中添加 rac-scan IN A 192.168.10.101 rac-scan IN A 192.168.10.102 rac-scan IN A 192.168.10.103 # 所有節(jié)點 /etc/resolv.conf 必須指向該 DNS且禁用本地 hosts 解析 SCAN echo options ndots:0 /etc/resolv.conf2.3 存儲可見性驗證multipath -ll輸出必須含active狀態(tài)且udevadm info能讀取 WWIDASM 依賴底層存儲設備的穩(wěn)定路徑名如/dev/mapper/mpatha。若 multipath 未正確識別asmca創(chuàng)建磁盤組時會報ORA-15032: not all alterations performedORA-15017: unable to initialize disk group。關鍵檢查點multipath -ll輸出中每個 LUN 的status字段必須為active非failed或undefudevadm info --queryall --name/dev/mapper/mpatha | grep ID_WWN必須返回類似ID_WWN0x600a0b80002e1f1d00003a5a00000000的 WWID/etc/multipath.conf中devices段必須顯式聲明你的陣列 vendor/product如vendor IBMproduct 2145否則multipathd不會為該設備生成 alias。注意不要用fdisk -l或lsblk判斷設備是否可用 —— 它們只顯示內(nèi)核設備樹不反映 multipath 層狀態(tài)。真正可信的是multipath -ll的active和ready標識。2.4 內(nèi)核參數(shù)與資源限制sysctl.conf里kernel.sem的四個數(shù)字必須按公式算Oracle 官方文檔寫kernel.sem 250 32000 100 128這是 11g 時代的值。19c RAC 要求更高第一個數(shù)SEMMSL單個進程最大信號量數(shù) max(100, (PROCESSES10)*2)其中PROCESSES是你計劃的數(shù)據(jù)庫最大連接數(shù)如 500則 SEMMSL ≥ 1020第二個數(shù)SEMMNS系統(tǒng)總信號量數(shù) SEMMSL * SEMMNI第三個數(shù)SEMOPM單次semop系統(tǒng)調(diào)用最大操作數(shù) SEMMSL第四個數(shù)SEMMNI信號量集總數(shù) ceil(TOTAL_PROCESSES / SEMMSL)TOTAL_PROCESSES 是所有實例 PROCESSES 之和。示例2節(jié)點每節(jié)點 PROCESSES800# 計算SEMMSL max(100, (80010)*2) 1620 # SEMMNS 1620 * 100 162000SEMMNI 取 100 是安全值 # SEMOPM 1620 # SEMMNI ceil(1600/1620) 1 → 但最小值為 128故取 128 # 最終kernel.sem 1620 162000 1620 128 echo kernel.sem 1620 162000 1620 128 /etc/sysctl.conf sysctl -p2.5 用戶與組權限oinstall組不能只加grid和oracle必須含root這是最反直覺但致命的一條。root.sh執(zhí)行時會以root身份調(diào)用oraenv并切換到grid用戶執(zhí)行crsconfig_params若root不在oinstall組su - grid -c echo \$ORACLE_HOME會失敗報Permission denied最終ohasd啟動失敗。驗證命令# 所有節(jié)點執(zhí)行 id root | grep oinstall # 必須輸出 oinstall # 若無立即修復 usermod -a -G oinstall root # 注意此操作必須在運行 root.sh 前完成且不能重啟機器否則 systemd 會重載用戶組緩存2.6 時間同步chrony必須配置makestep且systemctl status chronyd顯示Leap status : NormalRAC 節(jié)點間時間差 1s 會導致cssd進程異常退出報CSSDAGENT: clssnmvDiskCheckWait: node X is down。ntpd已淘汰chrony是唯一推薦方案。關鍵配置/etc/chrony.conf中必須有makestep 1.0 3表示若時鐘偏差 1s立即跳躍校正而非緩慢調(diào)整systemctl enable chronyd systemctl start chronyd后執(zhí)行chronyc trackingLeap status必須為Normal非Insert second或Delete secondchronyc sources -v應顯示至少一個^*優(yōu)選源且Last offset 0.01s。2.7 防火墻與 SELinuxfirewalld必須放行 1521/1522/1526/1532 端口SELinux 設為permissiveOracle 19c RAC 的端口策略比單機復雜數(shù)據(jù)庫監(jiān)聽器1521默認、1522備用、1526SCAN 監(jiān)聽器GI 進程1532oraagent.bin通信端口crsctl check crs失敗常因firewalld攔截1532端口。# 放行關鍵端口不要 disable firewalld firewall-cmd --permanent --add-port1521/tcp firewall-cmd --permanent --add-port1522/tcp firewall-cmd --permanent --add-port1526/tcp firewall-cmd --permanent --add-port1532/tcp firewall-cmd --reload # SELinux 必須設為 permissiveenforcing 模式下 asmcmd ls 常報 Permission denied setenforce 0 sed -i s/SELINUXenforcing/SELINUXpermissive/g /etc/selinux/config3. Grid Infrastructure 安裝runInstaller圖形界面里的 5 個隱藏開關決定成敗gridSetup.sh啟動的圖形安裝向?qū)Э此粕倒匣渲杏?3 個頁面的選項直接影響后續(xù)root.sh是否能通過、ASM 是否能識別磁盤、SCAN 是否注冊成功。這些選項在官方文檔里被弱化為“可選”但在 Linux 7.9 上它們是必選。3.1 “Configure Oracle ASM” 頁面必須勾選 “Use Oracle ASM Filter Driver (AFD)”且afd configure命令必須手動執(zhí)行AFD 是 Oracle 19c 推薦的 ASM 設備過濾層替代老舊的 ASMLIB。但它在 Linux 7.9 上有個致命缺陷runInstaller自動執(zhí)行的afd configure會失敗報AFD-628: Existing AFD installation detected即使這是首次安裝。原因oracleasm服務殘留CentOS/RHEL 7.9 默認預裝oracleasm-support包。正確流程# 1. 徹底卸載 oracleasm所有節(jié)點 yum remove oracleasm-support oracleasmlib -y rm -rf /etc/init.d/oracleasm /etc/sysconfig/oracleasm /var/lib/oracleasm # 2. 運行 runInstaller在 Configure Oracle ASM 頁面勾選 Use Oracle ASM Filter Driver (AFD) # 3. 安裝完成后手動執(zhí)行而非等 root.sh 自動調(diào)用 /u01/app/19.0.0/grid/bin/afd configure # 4. 驗證 AFD 狀態(tài) /u01/app/19.0.0/grid/bin/afd state # 輸出應為 ASMLIB and AFD are both disabled → 表示 AFD 已接管邏輯說明AFD 的核心是內(nèi)核模塊oracleafd.ko它在afd configure時編譯并加載。若跳過此步asmca創(chuàng)建磁盤組時會報ORA-15032: not all alterations performed因為底層設備/dev/mapper/mpatha未被 AFD 標記為AFD:前綴設備。3.2 “Specify Network Interface Usage” 頁面心跳網(wǎng)卡必須選 “Do not use this interface for ASM or database traffic”RAC 心跳網(wǎng)絡通常用私網(wǎng)如 10.10.10.0/24必須嚴格隔離于 ASM 和數(shù)據(jù)庫流量。若在此頁面將心跳網(wǎng)卡如eth2勾選為 “ASM and database traffic”會導致cssd進程在心跳檢測時誤判網(wǎng)絡擁塞頻繁觸發(fā)node eviction。驗證方法安裝后執(zhí)行oifcfg getif輸出中心跳網(wǎng)卡應標記為cluster_interconnect而非public或asm。3.3 “Specify ASM Disk Group” 頁面DATA和FRA磁盤組必須顯式指定AU_SIZE4M而非默認1M這是性能翻車的根源。19c ASM 默認AU_SIZE1M但 Linux 7.9 的 ext4 文件系統(tǒng)塊大小為 4K當 ASM 以 1M 為單位讀寫時會產(chǎn)生大量4K小 IO嚴重拖慢dbwr進程。生產(chǎn)環(huán)境必須設為4M在asmca圖形界面創(chuàng)建磁盤組時點擊 “Advanced Options”將Allocation Unit Size改為4 MB若用命令行CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK AFD:DATA* ATTRIBUTE au_size4M;3.4 “Create ASM Password” 頁面密碼必須含大小寫字母數(shù)字特殊字符且長度 ≥12 位19c 強制要求 ASM 實例密碼符合SEC_CASE_SENSITIVE_LOGONTRUE策略。若密碼為oracle123sqlplus / as sysasm會報ORA-01017: invalid username/password。密碼規(guī)則至少 1 個大寫字母A-Z至少 1 個小寫字母a-z至少 1 個數(shù)字0-9至少 1 個特殊字符!#$%^*長度 ≥12。3.5 “Operating System Groups” 頁面asmadmin組必須包含grid用戶asmoper組必須包含oracle用戶這是權限鏈的最后一環(huán)。grid用戶需asmadmin權限管理 ASM 實例oracle用戶需asmoper權限訪問 ASM 磁盤組。若遺漏srvctl start database會報ORA-01031: insufficient privileges。驗證命令# grid 用戶應屬 asmadmin 組 id grid | grep asmadmin # oracle 用戶應屬 asmoper 組 id oracle | grep asmoper # 若無立即添加 usermod -a -G asmadmin grid usermod -a -G asmoper oracle4. 數(shù)據(jù)庫軟件安裝與建庫dbca靜默模式避坑指南dbca圖形界面易操作但生產(chǎn)環(huán)境必須用靜默模式-silent保證可重復性。然而19cdbca的靜默參數(shù)設計存在多個反直覺陷阱尤其在 RAC 場景下。4.1 靜默建庫命令模板-nodelist和-nodeinfo必須同時指定且順序不能錯官方文檔示例dbca -silent -createDatabase ... -nodelist node1,node2是錯的。正確命令必須包含-nodeinfo參數(shù)且節(jié)點順序必須與crsctl check cluster -all輸出一致即node1必須是crsctl顯示的第一個 ONLINE 節(jié)點# 先查節(jié)點順序 crsctl check cluster -all | grep Node | head -2 | awk {print $2} | tr \n , | sed s/,$// # 假設輸出node1,node2 # 執(zhí)行建庫注意 -nodeinfo 在 -nodelist 之后 dbca -silent \ -createDatabase \ -templateName General_Purpose.dbc \ -gdbname orcl \ -sid orcl \ -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword Oracle123# \ -systemPassword Oracle123# \ -databaseType MULTIPURPOSE \ -automaticMemoryManagement false \ -totalMemory 4096 \ -storageType ASM \ -asmSysPassword Oracle123# \ -asmDiskGroup DATA,FRA \ -asmsnmpPassword Oracle123# \ -nodelist node1,node2 \ -nodeinfo node1,node2 \ -ignorePreReqs參數(shù)說明-nodelist告訴dbca哪些節(jié)點參與建庫-nodeinfo告訴dbca每個節(jié)點的實例名默認為SID1,SID2若省略dbca會為 node1 創(chuàng)建orcl1為 node2 創(chuàng)建orcl2但srvctl config database顯示的實例名卻是orcl_1,orcl_2導致后續(xù)srvctl stop instance -i orcl1失敗。4.2-ignorePreReqs不是萬能鑰匙它跳過內(nèi)存檢查但swap必須 ≥8GB-ignorePreReqs會跳過Total Memory檢查如你只配了 4GB RAM但swap空間不足仍會導致dbca在Creating and starting Oracle instance階段卡死。Linux 7.9 要求swap≥RAM的 1.5 倍最小 8GB。驗證# 查 swap 大小 free -h | grep Swap # 若不足動態(tài)擴容無需重啟 dd if/dev/zero of/swapfile bs1G count8 mkswap /swapfile swapon /swapfile echo /swapfile none swap sw 0 0 /etc/fstab4.3-storageType ASM下的-datafileDestination參數(shù)無效必須用-useOMF啟用 OMF19c RAC 中-datafileDestination指定的數(shù)據(jù)文件路徑會被忽略因為 ASM 環(huán)境下數(shù)據(jù)文件必須存于 ASM 磁盤組。若想控制文件位置唯一方式是啟用 Oracle Managed FilesOMF添加參數(shù)-useOMF truedbca會自動在DATA磁盤組下創(chuàng)建DATA/ORCL/DATAFILE/目錄結構若需自定義路徑如DATA/ORCL/USER_DATA必須在建庫后用ALTER DATABASE CREATE DATAFILE手動創(chuàng)建。4.4 建庫后必須立即執(zhí)行的 3 條 SQL修復listener.ora和tnsnames.ora的 SCAN 地址dbca靜默建庫不會自動更新$ORACLE_HOME/network/admin/下的監(jiān)聽配置導致lsnrctl status顯示監(jiān)聽器未注冊實例。必須手動執(zhí)行-- 以 sysdba 登錄任意節(jié)點實例 sqlplus / as sysdba -- 1. 注冊實例到 SCAN 監(jiān)聽器 ALTER SYSTEM REGISTER; -- 2. 檢查監(jiān)聽器狀態(tài)應在 1526 端口 !lsnrctl status LISTENER_SCAN1 -- 3. 若 LISTENER_SCAN1 未啟動手動啟動 !srvctl start scan_listener -- 4. 驗證客戶端能否通過 SCAN 連接在遠程機器執(zhí)行 sqlplus system/Oracle123#orcl_scan5. 避坑RAC 安裝后最常見的 5 個故障現(xiàn)象與根因定位以下問題均來自真實生產(chǎn)環(huán)境每一條都附帶crsctl/asmcmd/sqlplus三類工具的精準診斷命令而非泛泛而談“檢查日志”。5.1 現(xiàn)象crsctl check cluster -all顯示CRS-4537: CSS daemon is online但crsctl check crs報CRS-4638: Oracle High Availability Services is onlineCRS-4535: Cannot communicate with Cluster Ready Services原因ohasd進程啟動但ora.cssdCluster Synchronization Services未啟動通常因udev規(guī)則未生效導致 ASM 設備不可見。解決# 查 cssd 日志 tail -50 /u01/app/grid/diag/crs/$(hostname)/crs/trace/cssd.log | grep -i device\|asm # 若出現(xiàn) Cannot open device /dev/asm-disk1執(zhí)行 udevadm trigger --subsystem-matchblock udevadm settle # 重啟 CRS crsctl stop crs crsctl start crs5.2 現(xiàn)象srvctl status database -d orcl顯示Instance orcl_1 is running on node node1但srvctl status instance -d orcl -i orcl_1報PRCD-1120 : The resource for database orcl and instance orcl_1 is not running原因ora.orcl.db資源狀態(tài)正常但ora.orcl.orcl_1.inst資源未注冊通常因ORACLE_HOME環(huán)境變量在srvctl中未正確繼承。解決# 查資源定義 crsctl stat res ora.orcl.orcl_1.inst -p | grep ORACLE_HOME # 若輸出為空或路徑錯誤重新注冊實例 srvctl remove instance -d orcl -i orcl_1 srvctl add instance -d orcl -i orcl_1 -n node1 srvctl start instance -d orcl -i orcl_15.3 現(xiàn)象asmcmd lsdg顯示STATE為MOUNTED但sqlplus / as sysasm執(zhí)行SELECT NAME, STATE FROM V$ASM_DISKGROUP;返回DISMOUNTED原因ASM 實例未啟動或ORACLE_SIDASM1環(huán)境變量未設置。解決# 查 ASM 實例狀態(tài) ps -ef | grep pmon | grep ASM # 若無手動啟動 export ORACLE_SIDASM1 sqlplus / as sysasm SQL STARTUP; # 驗證磁盤組 SQL SELECT NAME, STATE FROM V$ASM_DISKGROUP;5.4 現(xiàn)象crsctl query css votedisk顯示Located 1 voting disk(s)但ocrcheck報PROT-1: Failed to initialize ocr且/u01/app/19.0.0/grid/cdata/下無ocri文件原因OCROracle Cluster Registry未初始化通常因root.sh執(zhí)行時ocrconfig -showbackup無備份且ocrconfig -manualbackup未手動觸發(fā)。解決# 手動備份 OCR必須在 root 用戶下 /u01/app/19.0.0/grid/bin/ocrconfig -manualbackup # 查備份位置 /u01/app/19.0.0/grid/bin/ocrconfig -showbackup # 若仍失敗強制重建 OCR風險操作僅當無備份時 /u01/app/19.0.0/grid/bin/ocrconfig -restore /u01/app/19.0.0/grid/cdata/$(hostname)/backup00.ocr5.5 現(xiàn)象srvctl start service -d orcl -s orcl_service成功但tnsping orcl_service超時lsnrctl services LISTENER_SCAN1不顯示該 service原因Service 未注冊到 SCAN 監(jiān)聽器通常因service創(chuàng)建時未指定preferred_instances或available_instances。解決-- 以 sysdba 登錄 sqlplus / as sysdba -- 查 service 狀態(tài) SELECT NAME, FAILOVER_TYPE, FAILOVER_METHOD FROM DBA_SERVICES WHERE NAMEorcl_service; -- 若 FAILOVER_TYPE 為空重新創(chuàng)建 service BEGIN DBMS_SERVICE.CREATE_SERVICE( service_name orcl_service, network_name orcl_service, failover_method BASIC, failover_type SESSION, failover_retries 180, failover_delay 1 ); END; / -- 啟動 service 并指定實例 EXEC DBMS_SERVICE.START_SERVICE(orcl_service, orcl_1);6. 驗證與壓測用 3 個真實腳本確認 RAC 真正可用裝完不等于可用。RAC 的價值在于故障轉(zhuǎn)移和負載分擔必須用腳本模擬真實場景驗證。以下腳本均已在 Linux 7.9 Oracle 19c RAC 生產(chǎn)環(huán)境實測通過無需額外安裝組件。6.1 故障轉(zhuǎn)移驗證腳本failover_test.sh此腳本主動 kill 主節(jié)點的pmon進程驗證ora.orcl.orcl_1.inst是否自動遷移到 node2并檢查v$session中的failover_type是否為SESSION。#!/bin/bash # failover_test.sh NODE1node1 NODE2node2 SERVICEorcl_service echo Step 1: Check current service location srvctl status service -d orcl -s $SERVICE echo Step 2: Kill PMON on $NODE1 ssh $NODE1 ps -ef | grep pmon | grep orcl | awk {print \$2} | xargs kill -9 echo Step 3: Wait 60s for failover sleep 60 echo Step 4: Verify service moved to $NODE2 srvctl status service -d orcl -s $SERVICE echo Step 5: Connect via service and check failover sqlplus system/Oracle123#${SERVICE} EOF SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF SELECT Failover Type: || failover_type FROM v\$session WHERE sid (SELECT sid FROM v\$mystat WHERE rownum1); EXIT EOF預期輸出Failover Type: SESSION。若輸出為空或NONE說明 service 未配置FAILOVER_TYPE。6.2 負載分擔驗證腳本load_balance_test.sql此 SQL 腳本在 client 端連續(xù)發(fā)起 100 次連接統(tǒng)計每次連接的instance_name驗證 SCAN 是否輪詢分發(fā)請求。-- load_balance_test.sql DECLARE v_inst VARCHAR2(30); v_count NUMBER : 0; v_node1 NUMBER : 0; v_node2 NUMBER : 0; BEGIN FOR i IN 1..100 LOOP EXECUTE IMMEDIATE SELECT instance_name FROM v$instance INTO v_inst; v_count : v_count 1; IF v_inst LIKE %1 THEN v_node1 : v_node1 1; ELSIF v_inst LIKE %2 THEN v_node2 : v_node2 1; END IF; END LOOP; DBMS_OUTPUT.PUT_LINE(Total connections: || v_count); DBMS_OUTPUT.PUT_LINE(Node1 (orcl_1): || v_node1 || ( || ROUND(v_node1/v_count*100,1) || %)); DBMS_OUTPUT.PUT_LINE(Node2 (orcl_2): || v_node2 || ( || ROUND(v_node2/v_count*100,1) || %)); END; /執(zhí)行方式sqlplus -s system/Oracle123#orcl_scan load_balance_test.sql。理想分布應為45%~55%若某節(jié)點占比 30%說明 DNS 或 SCAN 配置有偏。6.3 ASM 性能基線測試asm_iops_test.sh此腳本用dd和fio測試 ASM 磁盤組的隨機讀寫 IOPS避免建庫后才發(fā)現(xiàn) AU_SIZE 設置錯誤。#!/bin/bash # asm_iops_test.sh ASM_DISK/dev/asm-disk1 # 替換為你的 AFD 設備名 TEST_FILE/u01/test_iops.dat echo Testing random read IOPS... fio --namerandread --ioenginelibaio --rwrandread --bs8k --size1G --runtime60 --time_based --filename$ASM_DISK --direct1 --group_reporting echo Testing random write IOPS... fio --namerandwrite --ioenginelibaio --rwrandwrite --bs8k --size1G --runtime60 --time_based --filename$ASM_DISK --direct1 --group_reporting關鍵指標randread的iops應 ≥ 5000SSD或 ≥ 200HDD。若 1000立即檢查asmcmd lsdg的AU_SIZE是否為4M。我干這行十年踩過的 RAC 坑比讀過的文檔還多。最深的教訓是不要相信任何“一鍵安裝腳本”哪怕它來自 Oracle 官方。Linux 7.9 的內(nèi)核調(diào)度、udev 加載順序、systemd 服務依賴和 Oracle 19c GI 的啟動邏輯之間存在無數(shù)個 0.1 秒級的競態(tài)條件。每一次root.sh失敗都不是運氣差而是某個sysctl參數(shù)沒生效、某個本文還有配套的精品資源點擊獲取