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