1. 程式人生 > 實用技巧 >Oracle 11g RAC運維總結

Oracle 11g RAC運維總結

轉至:https://blog.csdn.net/qq_41944882/article/details/103560879

1 術語解釋
1.1 高可用(HA)
什麼是高可用?顧名思義我們能輕鬆地理解是高度可用的意思,也說是說高可用(high availability)指的是執行時間能滿足預計或期望的一個系統或元件,我們常聽說的247365系統,這種系統追求一種不間斷提供服務的目標,任何時候都不能停止服務,否則會給使用者造成比較大的影響。在資訊、通訊、網際網路技術發展如此快的今天,越來越多的系統都希望成為一個高可用的系統,比如銀行、證券系統等。
1.2 負載均衡(LB)
負載均衡(load balance)是指將業務的負載儘可能平均、合理地分攤到叢集的各個節點,每個節點都可以處理一部分負載,並且可以根據節點負載進行動態平衡,提高各個節點硬體資源的利用率以及降低單節點因為負載過高而導致的故障。
1.3 RAC叢集
RAC叢集,全稱Real Application Clusters,譯為“實時應用叢集”,是Oracle提供的一種高可用、並行集群系統,RAC除了具有高可用能力還有負載均衡能力,整個RAC集群系統由Oracle Clusterware (叢集軟體)和 Real Application Clusters(RAC)兩大部分組成。 我們平時一直經常提的RAC,它僅僅是RAC叢集中的一部分,是執行在叢集軟體Oracle Clusterware上的一個應用,就是資料庫,它和叢集軟體的關係類似單機環境中應用程式和作業系統的關係。
1.4 CRS
我們知道RAC叢集需要叢集軟體,那麼CRS是什麼呢?在Oracle 10g版本前,RAC叢集所需的叢集軟體依賴於硬體廠商,在不同平臺上實施RAC叢集都需要安裝和配置廠商的叢集軟體,而Oracle只提供了Linux和Windows平臺上的叢集軟體,叫Oracle Cluster Manager。但從10.1版本開始,Oracle推出了一個與平臺獨立的叢集產品:Cluster Ready Service,簡稱CRS,從此RAC叢集的實施不再依賴各個硬體廠商,從10.2版本開始,Oracle將這個叢集產品改名為Oracle Clusterware,在11g中又被稱為GI(Oracle Grid Infrastructure),但我們叫慣了CRS,所以平時很多時候也就稱之為CRS,這個產品並不侷限用於資料庫的叢集,其他應用都可以借用其API輕易實現叢集功能。

2 架構
2.1 RAC環境組成
2.1.1 硬體環境
整個RAC叢集的硬體環境包括主機、共享儲存、網際網路絡裝置。

  1. 主機(節點)
    一個RAC叢集環境中至少有兩臺主機,也就是兩個節點,每個節點的硬體配置應該都一樣,每個節點至少配置兩塊物理網絡卡。
  2. 網際網路絡裝置
    1) 兩塊網絡卡:也就是上面所說的每個節點上必須至少配置兩塊物理網絡卡。一塊網絡卡用於叢集內部的私有通訊,叢集節點間資料塊的傳輸都是通過這塊網絡卡,我們稱之為私有網絡卡,上面配的IP稱為Private IP;另一塊網絡卡用於對外服務,比如資料庫的查詢等,我們稱之為公有網絡卡,上面配的IP稱為Public IP。除此之外,每個節點還有第三個IP,我們稱之為VIP(Virtual IP),在所有節點都正常執行時,每個節點的VIP會被分配到公有網絡卡上,當某個節點出現故障宕機時,這個節點的VIP會被移到還在正常執行節點的公有網絡卡上。
    2) 網路交換機:整個RAC叢集中需要幾個網路交換機呢?個人認為至少兩個。一個用於連線所有節點的公有網絡卡以提供對外的資料庫服務,一個用於連線各個節點之間的私有網絡卡(當然Oracle官方也認為如果是兩個節點,其實也可以通過網線直連的方式,但是生產環境中幾乎不存在這種方式)以傳遞叢集節點之間的心跳資料和資料庫資料塊(Cache Fusion)。
  3. 共享儲存
    在RAC叢集中,最重要的是共享儲存,RAC是一個“多例項、單一資料庫”的架構,所有的節點共享一個數據庫。資料檔案、聯機日誌、引數檔案、控制檔案都必須放在共享儲存上以保證每個節點的例項都能訪問。每個節點必須安裝HBA卡,然後通過光纖線和儲存裝置連線。
    2.1.2 軟體組成
    概括來說,RAC叢集的軟體組成包含:作業系統、叢集軟體、叢集檔案系統、資料庫軟體。
  4. 作業系統
    每個節點上所安裝的作業系統必須是相同版本的,作業系統在RAC架構中所處位置是硬體與叢集件中間。
  5. 叢集件(CRS)
    叢集件是安裝在作業系統之上的一個特殊軟體,負責管理整個叢集環境中的硬體資源,併為上層的RAC叢集提供基礎服務。它與上層應用(例如資料庫)的關係類似於單機環境中作業系統和應用程式的關係。單機環境下,OS能代理應用程式對硬體訪問,但是在叢集中有多臺計算機,把整個叢集想象成一臺虛擬的計算機,那叢集件就是這臺虛擬計算機上的作業系統,RAC是執行在它上面的一個應用程式。
  6. 叢集檔案系統
    RAC叢集中有很多的檔案必須放在共享儲存上,保證所有節點都能訪問。這就需要對節點的訪問進行控制,普通的檔案系統並不支援叢集功能,必須採取特殊的儲存策略。在10g以前,Oracle只提供了對裸裝置的支援,並沒有提供叢集檔案系統,但從Oracle 10g開始,Oracle提供了OCFS和ASM兩種叢集檔案系統,後者在現在的環境中用的最多,也最為流行。
  7. 資料庫軟體
    這個就是rdbms軟體了,只有安裝了資料庫軟體,我們才能建立資料庫,儲存資料,對外提供資料服務。

這裡附上一張RAC叢集簡單的拓撲圖:

2.2 CRS組成
Oracle Clusterware,在11g中又被稱為GI(Oracle Grid Infrastructure),我們這裡統一直接稱之為CRS好了,它由磁碟檔案、後臺程序、網路元件組成。

  1. 磁碟檔案
  1. OCR:OCR(Oracle Cluster Registry)是為了避免每個節點的配置資訊不同步而儲存了整個叢集的配置資訊,且整個叢集只有一份配置,所有節點共享,配置資訊以“Key-value”的形式儲存其中。當叢集配置需要發生改變時,每個節點都有一個OCR Process來讀取OCR Cache中的內容,而只有一個節點(OCR Master)有許可權讀寫OCR Disk的內容,然後同步到本地和其他節點的OCR Cache。
  2. Voting Disk:Voting Disk這個檔案主要用於記錄各個節點的狀態,以防在某個或某幾個節點出現問題時,決定哪部分節點具有叢集的控制權,而把其他節點從叢集中剔除,從而能夠繼續正常地對外提供服務。
  1. CRS後臺程序
    其中最重要的三個程序是CRSD、CSSD、EVMD,分別對應了CRS、CSS、EVM三個服務,而每個服務又是由一系列的模組組成的,我們可以通過crsctl命令來檢視有哪些模組組成,如檢視css服務,crsctl lsmodules css。那麼這三個程序又是什麼時候啟來的呢?在安裝Clusterware的最後階段,會要求在每個節點中執行root.sh指令碼,這個指令碼會在/etc/inittab檔案中最後三行新增三個後臺程序的啟動資訊,類似:
    h1:35:respawn:/etc/init.d/init.evmd run >/dev/null 2>&1 </dev/null
    h2:35:respawn:/etc/init.d/init.cssd run >/dev/null 2>&1 </dev/null
    h3:35:respawn:/etc/init.d/init.crsd run >/dev/null 2>&1 </dev/null
    如果CRSD和EVMD出現異常,系統會自動重啟這兩個程序。但是如果CSSD程序異常,系統會立即重啟。羅列Linux和Unix中各個服務所對應的程序如下:

    以Oracle 11g在linux上為例來檢視一下各個程序:
[oracle@node1 ~]$ ps -ef|grep css
root      4408     1  0 04:23 ?        00:00:05 /oracle/app/grid/product/11.2.0/bin/cssdmonitor
root      4427     1  0 04:23 ?        00:00:05 /oracle/app/grid/product/11.2.0/bin/cssdagent
grid      4445     1  0 04:23 ?        00:00:56 /oracle/app/grid/product/11.2.0/bin/ocssd.bin
[grid@node1 bin]$ ps -ef|grep crs
root      4767     1  0 04:24 ?        00:00:20 /oracle/app/grid/product/11.2.0/bin/crsd.bin reboot

[grid@node1 bin]$ ps -ef|grep evm
grid      4623     1  0 04:24 ?        00:00:07 /oracle/app/grid/product/11.2.0/bin/evmd.bin
grid      4861  4623  0 04:24 ?        00:00:00 /oracle/app/grid/product/11.2.0/bin/evmlogger.bin -o /oracle/app/grid/product/11.2.0/evm/log/evmlogger.info -l /oracle/app/grid/product/11.2.0/evm/log/evmlogger.log

我們來看一下各個程序的作用:
OCSSD
程序是Clusterware最關鍵的程序,如果出現異常會導致系統重啟,這個程序提供CSS(Cluster Synchronization Service)服務,它通過多種心跳機制實時監控叢集的健康狀態,提供叢集的基礎服務功能。
CRSD
是實現高可用的主要程序,它提供了CRS(Cluster Ready Service)服務。這些服務包括Clusterware上叢集資源的關閉、重啟、轉移、監控等。叢集資源分為兩類:一類是Nodeapps型的,就是說每個節點只需要一個就行,這類有GSD(Global Service Daemon)、ONS(Oracle Notification Service Daemon)、VIP、Listener;另一類是Database-Related,就是和資料庫相關,不受節點限制,這類有Database、Instance、Service等。
EVMD
該程序負責釋出CRS產生的各種事件,同時也是CRSD和CSSD兩個程序之間的橋樑。
RACGIMON
該程序負責檢查資料庫健康狀態,負責Service的啟動、停止、故障轉移等。
OPROCD
在非Linux平臺,且沒有使用第三方叢集軟體時才有該程序,用來檢測節點的CPU掛起,起過1.5秒會重啟節點。
OHASd
Oracle在11gR2引入了OHASd(Oracle High Availability Services Daemon,Oracle高可用服務後臺程序),再由它來啟動其他的叢集件守護程序。

  1. 網路元件
    我們從RAC叢集架構中的硬體環境組成已經知道,叢集環境中的節點上必須配置兩塊物理網絡卡,在公網網絡卡上面我們除了設定公有IP外還設定了VIP,Oracle的TAF(所謂TAF就是連線建立後,如果某個例項發生故障,連線到這個例項上的使用者會被自動遷移到其他健康例項上,對於應用程式而言,這個遷移過程透明,不需要人工介入)是建立在VIP技術上的,它與IP最主要的不同就是VIP是浮動的,IP是固定的,當某個節點宕機時,該節點上的VIP自動會移到健康節點的公網網絡卡上,所能對該節點的連線自動會移到健康節點。
    VIP還有幾個特點需要我們注意一下:
    a) VIP是在Clusterware安裝最後階段通過指令碼vipca建立的;
    b) VIP作為一個Nodeapps型別的CRS資源註冊到OCR,並由CRS維護狀態;
    c) 每個節點的監聽會同時在Public網絡卡的Public Ip和VIP兩個地址上監聽;
    d) 客戶端的tnsnames.ora一般配置指向節點的VIP

2.3 單例項與RAC環境
1、 單例項與RAC環境對比

2、 RAC新增的元件和後臺程序
RAC的環境中雖然每個例項都有自己的buffer cache與shared pool,但它們現在已經變成全域性的,需要特殊處理才能做到沒有衝突、無損壞地管理資源,所以也新增了一些單例項環境中沒有的元件,最主要的有以下兩部分:

  1. GRD
    RAC例項的SGA中多了一個GRD(Global Resource Directory)部分,Oracle資料庫中資料的操作都是在記憶體SGA中完成的,與傳統的單例項資料庫不同,RAC有多個例項,每個資料塊在任何一個例項中都有拷貝,RAC必須知道這些拷貝的分佈、版本、狀態,而GRD就是儲存這種資訊的記憶體區。值得注意的是,每個節點都只有部分GRD內容,所有節點合在一起才能構成完整的GRD。
  2. 後臺程序
    RAC也有和單例項中的DBWR、LGWR、ARCn、CKPT這些後臺程序,此外還有一些RAC特有的後臺程序:
    lms
    該程序是Cache Fusion的主要程序,負責資料塊在例項間的傳遞,對應的服務是GCS(Global Cache Service),可以通過GCS_SERVER_PROCESSES引數來控制程序的數量,預設是2個,取值範圍為0~9。
    lmd
    該程序提供GES(Global Enqueue Service)服務,在多個例項間協調對資料塊的訪問序,保證資料的一致性訪問,和LMSn程序以及GRD共同構成RAC的核心功能Cache Fusion。
    lck
    這個程序負責Non-Cache Fusion資源的同步訪問,每個例項都有一個LCK程序。
    lmon
    各個例項的LMON程序都會定期通訊,檢查叢集中各節點的健康狀態,當某個節點出現故障,該程序負責叢集重構、GRD恢復等,它提供的服務是CGS(Cluster Group Services)。
    diag
    Diag程序監控例項的健康狀態,並在例項出現執行錯誤時收集診斷資料記錄到Alert.log日誌中。
    GSD
    這個程序負責從客戶端工具,比如srvctl接收使用者命令,為使用者提供管理介面。

3 Oracle 11g RAC叢集搭建
該部分詳細內容參考我寫的RAC的搭建文件

4 維護
4.1 叢集維護
CRS有一整套的工具集,它們都出現在$GRID_HOME/bin目錄下,在 $ ORACLE_HOME中也有部分CRS工具可用,但Oracle推薦只使用$GRID_HOME/bin目錄下的工具集。常用的有crsctl、crs_stat、diagcollection.pl、oifcfg等,下面介紹一些簡單的應用。
4.1.1 啟動和停止CRS
通常,RAC環境中的CRS都配置成了隨機自動啟動,但有時候需要除錯CRS,或者OS需要維護,或者需要為GI軟體打補丁時,需要手工啟停CRS,手工啟停CRS的命令很簡單,與以前版本也是一致的,開啟CRS:crsctl start crs,關閉CRS:crsctl stop crs,依舊需要特權使用者root來完成CRS的啟停。
11g還引入了一個命令集來啟停所有節點上執行的全部叢集資源,包括資料庫例項、ASM、VIP等等資源,非常方便:

Usage:
  crsctl start cluster [[-all]|[-n <server>[...]]]
    Start CRS stack
where
    Default         Start local server
    -all            Start all servers
    -n              Start named servers
    server [...]    One or more blank-separated server names

例如:
停止所有節點上的css及資源:

crsctl stop cluster -all

啟動所有節點上的css及資源:

crsctl start cluster -all

4.1.2 驗證CRS
面這些命令用來驗證叢集及其相關程序的狀態(以grid、root使用者執行皆可)。
檢查一個叢集的當前執行狀態:

/opt/11.2.0/grid/bin/crsctl check cluster

例如:

[root@node1 bin]# ./crsctl check cluster
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

檢查CRS的當前狀態:

/opt/11.2.0/grid/bin/crsctl check crs

例如:

[grid@node1 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

檢查ohasd程序的狀態:

/opt/11.2.0/grid/bin/crsctl check has

例如:

[grid@node1 ~]$ crsctl check has
CRS-4638: Oracle High Availability Services is online

檢查ctssd程序的狀態:

/opt/11.2.0/grid/bin/crsctl check ctss

例如:

[grid@node1 ~]$ crsctl check ctss
CRS-4700: The Cluster Time Synchronization Service is in Observer mode.

備註:如果RAC時間的同步是採用第三方軟體,比中ntp方式,那麼ctss會處於observer狀態

4.1.3 禁用與啟用CRS
若是不想讓CRS隨機啟動,那麼可以disable它:

/opt/11.2.0/grid/bin/crsctl disable crs

如果又改變了注意,可以enable:

/opt/11.2.0/grid/bin/crsctl enable crs

4.1.4 顯示叢集資源狀態
這個功能是11gR2中crsctl新具有的,顯示叢集資源的狀態:

/opt/11.2.0/grid/bin/crsctl stat res -t

該命令與以前的crs_stat -t基本類似

4.1.5 使用oifcfg配置叢集網路
該命令包含了獲取、刪除與設定三部分,分別為oifcfg getif、oifcfg delif、oifcfg setif,更加具體的語法可以通過oifcfg -h來獲取到
例如:

[grid@node1 ~]$ oifcfg getif
eth0  192.168.100.0  global  public
eth1  10.10.17.0  global  cluster_interconnect

4.1.6 使用diagcollection診斷叢集
該工具可以幫助DBA們一次性收集有關所有必需元件的診斷資訊,如主機、作業系統、叢集等等,這個工具位於$GRID_HOME/bin目錄下,預設情況下,該工具將收集完整的診斷資訊,但也可以使用正確的選項只收集想要的資訊,如下命令只收集CRS的診斷資訊:

/oracle/app/grid/product/11.2.0/bin/diagcollection.pl --collect --crs

4.2 管理OCR
OCR用來儲存叢集資料庫的配置資訊,對它的管理操作包括備份、恢復、新增、刪除以及遷移等等

4.2.1 備份
OCR有自動備份,預設情況下,在叢集執行的過程中,每4個小時就會對OCR進行一次備份,並保留最後的3個備份,每天和每週結束時,也會保留相應的一個備份。有幾個命令被用來執行OCR備份相關的各種操作,比如檢視OCR當前的一些資訊並檢查OCR是否損壞(用root使用者執行):

/opt/11.2.0/grid/bin/ocrcheck

例如:

[root@node1 bin]# ./ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          3
         Total space (kbytes)     :     262120
         Used space (kbytes)      :       2792
         Available space (kbytes) :     259328
         ID                       :  465396144
         Device/File Name         :      +DATA
                                    Device/File integrity check succeeded

                                    Device/File not configured

                                    Device/File not configured

                                    Device/File not configured

                                    Device/File not configured

         Cluster registry integrity check succeeded

         Logical corruption check succeeded

因為OCR的重要,備份OCR是項非常重要的工作,以下命令檢視OCR的備份資訊:

/opt/11.2.0/grid/bin/ocrconfig -showbackup

切換至root,使用如下命令可以用來手工備份OCR檔案(root使用者執行):

/opt/11.2.0/grid/bin/ocrconfig -manualbackup

OCR的備份檔案是一個二進位制檔案,但是可以使用ocrdump命令來檢視它的內容(同樣需要使用root使用者):

cd /opt/11.2.0/grid/bin/
./ocrdump -backupfile /opt/11.2.0/grid/cdata/racdb-cluster/backup00.ocr

為了讓word中的顯示不太混亂,先cd到了ocrdump命令所在的目錄,這個命令會在命令執行的工作目錄下生成一個名為OCRDUMPFILE的文字檔案

4.2.2 恢復
備份是為了在OCR損壞的關鍵時刻能夠對其進行恢復,下面是一個簡單的模擬恢復測試(使用root使用者來執行下面這些命令):
在所有節點上執行如下命令來停止crs:

/opt/11.2.0/grid/bin/crsctl stop crs

如果OCR檔案已經損壞,那麼上述命令可能會報錯,在命令中使用“-f”選項強制關停crs,然後在其中一個節點上將crs啟動到獨佔模式:

/opt/11.2.0/grid/bin/crsctl start crs -excl

使用ps命令來觀察,如果crsd程序存在,使用如下命令先行關閉該程序:

crsctl stop resource ora.crsd -init

然後再使用ocrconfig命令檢視備份檔案所在的位置,並找合適的備份來恢復OCR:

/opt/11.2.0/grid/bin/ocrconfig -restore /opt/11.2.0/grid/cdata/racdb-cluster/backup00.ocr

再度使用ocrcheck來檢查OCR的狀況,如正常,先將當前節點的crs關閉:

/opt/11.2.0/grid/bin/crsctl stop crs -f

crs可以正常啟動了。

4.2.3 映象維護
當前的OCR所在的位置可以通過兩個途徑得到:一是ocrcheck命令,二是/etc/oracle/ocr.loc檔案,既然OCR這麼重要,如果使用前面的幾個方法得知只有一份OCR的話,那麼應該考慮為其建立映象,OCR只能有一個映象,也就是說OCR磁碟最多有兩個,一個primary ocr,一個mirror ocr,以下操作都可以在crs執行時進行,依舊使用root使用者來執行ocrconfig命令:

/opt/11.2.0/grid/bin/ocrconfig -add +ASM_TEST

這裡需要注意一點,在11.2版本具是用ASM來存放OCR,用來做OCR的diskgroup,也就是這裡的+ASM_TEST,需要滿足以下條件:
1) 冗餘配置為External時,至少需要300M;冗餘配置為Normal的至少需要600M;冗餘配置為High的至少需要900M;
2) 該磁碟必須在所有節點上掛載;
3) Compatible.asm引數必須設定至少為11.2(alter diskgroup +ASM_TEST set ATTRIBUTE ‘compatible.asm’=‘11.2’;);
4) 所有節點上,GRID_HOME的許可權為“6751”或“-rwsr-s—x”。
下面的命令用來刪除多餘的OCR:

/opt/11.2.0/grid/bin/ocrconfig -delete +ASM_TEST

4.2.4 移動OCR
有時在維護時可能會更改OCR的磁碟,也就是說將OCR從一個磁碟移動到另一個磁碟,那麼也是可以的,只是在移動前必須先給OCR新增映象OCR,然後再移動,步驟如下:
當前的OCR是DATA,建立映象DATA1,然後移動到DATA2

opt/11.2.0/grid/bin/ocrconfig -add +DATA1
/opt/11.2.0/grid/bin/ocrconfig -replace +DATA -replacement +DATA2

值得一提的是,ocrconfig還有-export和-import選項可以用來替代上面的備份與恢復過程。

4.2.5 管理OLR
OLR是11gR2引入的,它只儲存與當前節點有關的配置資訊,可以用ocrconfig命令來檢視其資訊:

/opt/11.2.0/grid/bin/ocrcheck -local

很多管理ocr的ocrconfig命令可以在新增-local的選項下來對olr進行管理,如前面的-showbackup、-manualbackup等。

4.3 管理Voting Disk
從11gR2開始,無需對Voting Disk進行手工的備份,只要對叢集的結構做了任何更改,Voting Disk會被自動備份到OCR中,如果添加了新的Voting Disk,那麼Oracle會自動將以前備份的Voting Disk資料恢復到新新增的Voting Disk中。與OCR不同的是,Voting Disk的管理需要使用crsctl命令,下面的命令用來查詢Voting Disk的有關資訊:

/opt/11.2.0/grid/bin/crsctl query css votedisk

例如:

[grid@node1 ~]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   1ed6e4e28dc94fb2bf991a1ff18b818f (ORCL:DATAVG) [DATA]
Located 1 voting disk(s).

當Voting Disk在ASM上的時候,不可以使用crsctl add/delete css votedisk命令,唯一可做的操作是可以將Voting Disk搬遷到其他的磁碟組上,不過這樣的操作看來也沒太多的用武之地,除非想要將其搬遷到冗餘度更高的磁碟組上:

/opt/11.2.0/grid/bin/crsctl replace css votedisk +asm_test

4.4 ASM維護
從11gR2開始,Oracle不再支援在dbca建庫的時候選擇裸裝置,因此共享儲存部分主要的選擇就剩下了ASM,這裡也只對ASM的管理進行簡單的說明。
在Oracle 11g RAC中,Oracle將ASM集成於GI軟體中,現在的Voting Disk與OCR可以放置於ASM上了,這省去了為他們單獨建立並管理一些裸裝置的麻煩,在GI安裝好後ASM例項就建立好並已經啟來了,因為CRS要用到OCR和Voting Disk,如果ASM沒有啟來,CRS就無法讀取它們的資訊,當然ASM例項建立和ASM磁碟組管理都可以使用圖形介面asmca來完成,因此下面這兩部分主要以命令為主。

4.4.1 ASM例項建立
要想使用ASM,首要的工作就是建立ASM例項,既然是與資料庫例項類似的例項,那麼首先就需要有一個引數檔案,只不過,ASM例項只需要關注少量的引數,與資料庫的例項相比,比較特別的引數如下表所示:

srvctl工具可以用來操作ASM例項,這與以往版本是一樣的:srvctl status asm、srvctl start asm與srvctl stop asm,當然具體語法可以使用類似srvctl status asm –h來得到。

4.4.2 磁碟組的建立與刪除
我們想要使用ASM,就必須先建立ASM DG(Disk Group),建立磁碟組的時候可以指定冗餘策略,分別為:External外部冗餘(依靠磁碟RAID),Normal為映象冗餘,而最高階的High則包含了總共三份冗餘。建立DG的方法很簡單,切換至grid使用者,使用sqlplus命令來登入ASM例項:sqlplus ‘/as sysasm’,然後輸入如下建立DG的語句:
以grid使用者sqlplus / as sysasm登入asm例項,然後執行語句:
create diskgroup data_bak external redundancy disk ‘ORCL:TESTVG’,‘ORCL:TESTVG2’;
很像建立表空間的語法,注意ASM DISK的書寫,可以查詢v$asm_disk.path欄位來得到這些ASM DISK的正確路徑。在create diskgroup語句完成後,DG將在當前操作的ASM例項中自動掛載,且新增到ASM例項的asm_diskgroups引數中。其他例項需要手工mount一下:

sqlplus / sysasm
alter diskgroup data_bak mount;

刪除DG的語句更加簡單:

drop diskgroup asm_test;

前提是DG中沒有任何內容,否則需要使用如下語句來刪除:

drop diskgroup asm_test including contents;

通過以下語句可以檢視asm中是否存在該diskgroup:

SQL> select name from v$asm_diskgroup;

NAME
------------------------------
DATA
DATA_BAK

4.4.3 磁碟組的掛載與解除安裝
DG只有在當前節點的ASM例項上掛載,才能被該節點的資料庫例項訪問:

alter diskgroup asm_test mount;

想要dismount一個DG也很簡單:

alter diskgroup asm_test dismount;

如果該磁碟組正在被使用,那麼可以在語句最後面新增force子句,強制解除安裝。
可以通過以下語句來查詢diskgroup的狀態:

SQL>  select name,STATE from  v$asm_diskgroup;

NAME                           STATE
------------------------------ -----------
DATA                           MOUNTED
DATA_BAK                       MOUNTED

4.4.4 磁碟的新增與刪除
從DG中刪除磁碟的操作:

ALTER DISKGROUP dgroupA drop DISK '/devices/Disk1’;

新增磁碟:

ALTER DISKGROUP dgroupA ADD DISK '/devices/D*';

無論是新增磁碟還是刪除磁碟,都會觸發磁碟組的重平衡,為了減少重平衡的影響,應將刪除或者新增磁碟操作一次性完成。還有值得一提的是:在刪除磁碟的時候因為需要將刪除磁碟上的內容重平衡至其他磁碟,因此刪除操作要比較長的時間,在期間可以用如下命令取消刪除磁碟的操作:

alter diskgroup asm_test undrop disks;

但如果刪除時加上了force關鍵字,那麼這個刪除操作就不可逆了。
可以通過以下語句來檢視某磁碟是否還存在,以及它們的狀態:

SQL>  select GROUP_NUMBER,DISK_NUMBER,MOUNT_STATUS,NAME,PATH from v$asm_disk;

GROUP_NUMBER DISK_NUMBER MOUNT_S NAME                 PATH
------------ ----------- ------- -------------------- --------------------
           1           0 CACHED  DATAVG               ORCL:DATAVG
           2           0 CACHED  TESTVG               ORCL:TESTVG

4.4.5 磁碟組資訊的查詢
比較常用的幾個V視 圖 : v 檢視:vvasm_diskgroup、va s m d i s k 、 v asm_disk、vasmdiskvasm_client,還有兩個查詢效能統計資訊的檢視:va s m d i s k s t a t 、 v asm_disk_stat、vasmdiskstatvasm_diskgroup_stat。

4.4.6 磁碟組的重平衡
除了通過ASM的初始化引數asm_power_limit引數來調節重平衡外,也可以使用如下語句來觸發重平衡:
alter diskgroup asm_test rebalance power 11 wait;
其中power子句後的數字指定了重平衡的力度,與引數一樣,取值範圍0~11,但如果這裡的值大於asm_power_limit引數,那麼這裡的指定不起任何作用;最後面的wait子句代表這個命令等待重平衡結束後再返回,如果沒有wait,那麼該命令立刻返回,當然重平衡操作會在後臺繼續。

4.4.7 ASM工具
下面兩個工具,asmcmd在10g就出現了,asmca是11g才新加入ASM家族的實用工具。

  1. asmca
    asmca是從11g引入一個圖形工具,它的使用在前面安裝部分已經有較為詳細的描述,它可以用來進行ASM相關的絕大部分管理操作,非常方便,有一點需要注意:從11g開始,dbca不再支援建立和配置ASM磁碟組,開啟dbca介面後不要傻眼就是。
  2. asmcmd
    10gR2的時候,asmcmd包含了一些UNIX風格的命令,比如ls、du、cd等等,但當時這些命令基本上還處於中看不中用的狀態,11g後,Oracle加入了非常多的新命令,甚至可以在asmcmd下來管理ASM例項和磁碟組,可以完成前面ASM磁碟組管理中介紹的所有管理操作!asmcmd又提供了非常詳盡的命令幫助頁,在以後的工作中可以慢慢去體會。

4.5 資料庫維護
4.5.1 引數維護
在RAC環境中,Oracle建議使用共享的spfile,在預設的安裝下就是如此,而在每個節點oracle使用者的$ORACLE_HOME/dbs目錄下有一個pfile:init ${ORACLE_SID}.ora,裡面有一行引數指定了spfile的所在,比如:
SPFILE=’+ASM_DATA/racdb/spfileracdb.ora’
在這個二進位制spfile中,包含了資料庫的非預設初始化引數,引數的格式為:
<instance_name>.<parameter_name>=<parameter_value>
如果在instance_name部分使用了“*”或者沒有取值,那麼意味著這個引數對於所有的例項都是有效的。

與單例項資料庫一樣,還是可以使用alter system set … 命令來修改引數的值,但是語法卻有所不同,這個命令的完整語法為:
alter system set <parameter_name> = <parameter_value> scope = <memory|spfile|both> comment = <’comments’> deferred sid = <sid|*>
其中:

Scope=memory 表明這些改變會在例項重啟後丟失,如果某引數只能針對本地例項進行修改,那麼這個選項就將使命令報錯;
Scope=spfile 表明只在spfile中進行引數的修改,例項重啟後生效,如果例項不是使用spfile,而是pfile啟動的,那麼這個選項也會使得命令報錯;
Scope=both 表明所做的引數改動在當前環境有效,且在例項啟動後依然有效;
Comment 沒什麼好說的,註釋而已;
Deferred 表明所做的引數修改僅對發出該命令後生成的會話有效;
Sid 使用sid子句允許指定例項名稱,使得指定的例項受引數修改的影響,如果使用“*”,那麼就針對所有例項進行修改,這是預設取值。

4.5.2 啟動和停止例項
Srvctl工具非常強大,在後面將介紹其更多的功能,其中一個簡單的應用就是啟停RAC資料庫。我們可以使用下面兩條簡單的命令分別來啟動、關閉資料庫:

srvctl start database -d racdb
srvctl stop database -d racdb -o immediate

這兩條命令將對RAC資料庫中的所有例項生效,其中stop database時的immediate,與sqlplus中shutdown命令的immediate含義一樣,且srvctl命令也支援其他幾個諸如normal、transactional、abort等引數,下面的stop instance命令中-o選項所跟的引數也是一樣的道理——與10g的時候一樣,也可以使用srvctl命令來啟停RAC中的單個例項:

srvctl start instance -d racdb -n racdb1
srvctl stop instance -d racdb -n racdb1 -o immedaite

單例項資料庫一樣,也可以使用sqlplus中的starup與shutdown命令來啟停資料庫,確切地講,是啟停當前登入的例項,它們的用法與單例項資料庫是相同的。

4.5.3 管理UNDO
在RAC資料庫中,表空間的管理基本與單例項資料庫是一樣的,也有但有一個例外:UNDO表空間,在RAC中,每個例項都需要一個自己的UNDO表空間,可以檢視初始化引數UNDO_TABLESPACE來了解當前例項所使用的UNDO表空間。
說到UNDO,還是提下單例項資料庫中就存在的一個管理操作,就是替換例項的當前UNDO表空間,先建立一個UNDO表空間:

create undo tablespace undo_test datafile size 10m;

再來使用引數切換UNDO表空間:

alter system set undo_tablespace='UNDO_TEST';

測試了下這個引數的更改有點特別,不能指定sid,且只在當前例項生效。

4.5.4 管理redo log
與單例項資料庫不同的是,RAC資料庫中,每個例項都有自己的online redo log,自然也有單獨的log buffer、單獨的歸檔日誌檔案。每個資料庫例項的redo log稱為一個執行緒,這在v$log、v $archived_log等重要檢視中都可得到。

4.5.5 線上日誌
日常做的最多的與online redo log相關的管理操作就是新增刪除日誌了,其實大多時候還是與單例項是一樣的,簡單的使用如下命令就為當前例項新增一組線上日誌:

alter database add logfile group 5 size 10m;

如果想為其他的例項新增日誌檔案,那麼就需要制定例項名:

alter database add logfile instance 'racdb2' group 6 size 10m;

或者

alter database add logfile thread 1 group 6 size 10m;

而刪除與單例項相同,只要指定group#即可,無需指定例項名。

4.5.6 歸檔日誌
修改RAC資料庫為歸檔模式或者關閉歸檔模式的方法也很簡單:關閉所有例項,將其中一個例項開啟到mount狀態,執行如下語句:

alter database archivelog;

語句是與單例項時代是一樣的,之後開啟所有例項即可。
歸檔日誌的存放可以各例項分離,但是要注意的是,資料庫的備份與恢復是在一個例項完成的,因此必須實現歸檔在各個例項間的共享問題,online redo log也一樣,平常正常工作時各個例項對自己的online redo log進行寫入,但是在例項恢復時,可能需要讀取其他例項的online redo log,因此也需要實現共享。
值得一提的單例項不同的切換日誌的命令在RAC中也與單例項有所不同,alter system switch logfile; 命令只能在當前例項進行日誌切換,想要在所有例項進行日誌切換就需要變通地執行命令:

alter system archive log current; 

當然單例項資料庫也有這個命令。使用這個命令還可以對指定例項進行日誌切換:

alter system archive log instance 'racdb2' current;

最後提一下與日誌相關的發出檢查點操作的命令,在RAC資料庫中也有所不同,以前的alter system checkpoint與alter system checkpoint global; 命令是等價的,將在所有資料庫例項中觸發檢查點操作,若是想要在當前例項觸發檢查點,那麼需要對命令稍作修改:

alter system checkpoint local;

4.5.7 管理服務
服務用來在Oracle RAC環境中來管理工作量,它提供了一種對工作量進行分組的邏輯方法,將採用相同資料集、相同功能以及相同服務級需求的使用者分組在一起,因此服務也經常被用來將不同的使用者分組的連線“引導”到不同的RAC例項上,從而減少RAC資料庫環境中叢集方面的相關等待。
早期的版本中可以使用dbca來管理服務,那也是最方便快捷的新增服務的方法,但是在11gR2中,dbca關於服務的這個選項已經被去除了,還可以通過em來進行配置,但Oracle推薦使用上面介紹的srvctl命令來對服務進行管理。
用oracle使用者登入,使用如下命令來為racdb資料庫建立一個服務ssfxdw,將racdb1定義為首選例項,將racdb2定義為次選例項,且建立basic TAF策略,將服務配置為自動啟動:

srvctl add service -d racdb -s ssfxdw -P BASIC -y AUTOMATIC -r racdb1 -a racdb2

動上面建立的服務:

srvctl start service -d racdb -s ssfxdw

關閉服務:

srvctl stop service -d racdb -s ssfxdw

4.5.8 備份與恢復

  1. 備份
    1) 作業系統的冷備:在關閉資料庫的情況下,在檔案級別對資料庫的資料檔案、控制檔案、歸檔日誌、線上日誌、引數檔案。
    2) 使用rman工具對資料庫備份和恢復,這裡主要要了解全庫備份、兩種增量備份方式(差異增量備份和累積增量備份)
  2. 恢復
    1) 不完全恢復
    2) 完全恢復
    Oracle RAC的備份與恢復與單例項資料庫其實相差不大,有幾點需要注意:

RAC資料庫的例項恢復與崩潰恢復是不一樣的概念,雖然兩者都只需要讀取online redo log,但是例項恢復是指正常例項利用異常終止例項的online redo log,對該例項中被修改但未寫入資料檔案的資料塊進行恢復,所以,RAC資料庫的哦你online redo log必須共享;而崩潰恢復是指RAC資料庫中的所有例項都出現故障,需要使用online redo log進行恢復;

RAC資料庫的介質恢復與單例項基本相同,但是在RAC資料庫恢復過程中,需要讀取所有例項的歸檔日誌,所以它們的歸檔日誌也必須是共享的。
檢視附錄中備份與恢復的例項進一步地瞭解。

4.5.9 檢視監聽
檢視監聽狀態:

lsnrctl status

啟動監聽:

lsnrctl start

關閉監聽:

lsnrctl stop

4.6 告警日誌檢視
一般系統出現問題,在我們檢視過操作系的CPU、記憶體、磁碟IO後,往往只瞭解這些資訊是不夠的,我們還得從叢集軟體、ASM、資料庫層去查詢問題的所在,首先肯定要檢視的各個層面的告警日誌,那麼這日誌檔案是放在哪裡的呢?

  1. 叢集軟體日誌
    Oracle的叢集軟體Clusterware不像資料庫有很多的檢視或者工具來幫助診斷,它的日誌和trace檔案是唯一的選擇,它主要的日誌檔案目錄結構如下:
    日誌的根目錄CRS的安裝目錄,也就是grid使用者的 $ ORACLE_HOME(在10g中會設定成$ CRS_HOME)/log/[node],其中node是節點的名稱。
    alertnode1.log:其中node1是結點的名稱,這個日誌相當於資料庫的alert.log,一般應該作為檢查的起點;
    crsd、cssd、evmd:分別是3個目錄,分別對應著Clusterware三個同名的程序的日誌,日誌的名字和程序名字一致,分別叫crsd.log、ocssd.log、evmd.log;
    racg:這個目錄裡放置的是所有nodeapp的日誌,包括ONS、VIP,每個日誌從名字上就很容易辨別所對的nodeapp;
    client:這個目錄裡放置的是工具執行日誌,比如ocrcheck、ocrconfig等,這些工具執行時產生的日誌就會放在這個目錄下。
  2. ASM日誌
    這裡只需要掌握一下ASM的告警日誌存放路徑就行了,如果ASM例項啟不來,我們就可以去檢視一下這個日誌檔案,它在grid使用者的$ORACLE_BASE/diag/asm/+ASM/+ASM1/trace目錄下,以.log結尾的那個檔案就是了,其中+ASM1是ASM例項的名稱,一般情況下,第一個節點就是+ASM1,第二個節點就是+ASM2,以此類推。例如:
/oracle/app/oracle/diag/asm/+asm/+ASM1/trace/alert_+ASM1.log

  1. 資料庫日誌
    資料庫的告警日誌檔案存放的路徑預設是在oracle使用者的$ORACLE_BASE/diag/rdbms/資料庫名/例項名/trace目錄下,以.log結尾的檔案就是了,例如:
/oracle/app/oracle/diag/rdbms/orcl/orcl1/trace/alert_orcl1.log
    1. 監聽日誌
      監聽日誌檔案是$ORACLE_BASE/diag/tnslsnr/node1/listener/alert/log.xml,其中node1是節點名,也可以從lsnrctl status中Listener Log File後面內容看出來。