Oracle RAC 常用工具和命令
文章出處:http://www.cnblogs.com/hibernate315/archive/2010/03/09/2399314.html
Oracle 的管理可以通過OEM或者命令行接口。 Oracle Clusterware的命令集可以分爲以下4種:
節點層:osnodes
網絡層:oifcfg
集羣層:crsctl, ocrcheck,ocrdump,ocrconfig
應用層:srvctl,onsctl,crs_stat
下面分別來介紹這些命令。
一. 節點層
只有一個命令: osnodes, 這個命令用來顯示集羣點列表,可用的參數如下,這些參數可以混合使用。
[root@raw1 bin]# ./olsnodes --help
Usage: olsnodes [-n] [-p] [-i] [<node> | -l] [-g] [-v]
where
-n print node number with the node name
-p print private interconnect name with the node name
-i print virtual IP name with the node name
<node> print information for the specified node
-l print information for the local node
-g turn on logging
-v run in verbose mode
[root@raw1 bin]# ./olsnodes -n -p -i
raw1 1 raw1-priv raw1-vip
raw2 2 raw2-priv raw2-vip
二. 網絡層
網絡層由各個節點的網絡組件組成,包括2個物理網卡和3個IP 地址。 也只有一個命令:oifcfg.
Oifctg 命令用來定義和修改Oracle 集羣需要的網卡屬性,這些屬性包括網卡的網段地址,子網掩碼,接口類型等。 要想正確的使用這個命令, 必須先知道Oracle 是如何定義網絡接口的,Oracle的每個網絡接口包括名稱,網段地址,接口類型3個屬性。
Oifcfg 命令的格式如下: interface_name/subnet:interface_type
這些屬性中沒有IP地址,但接口類型有兩種,public和private,前者說明接口用於外部通信,用於Oracle Net和VIP 地址,而後者說明接口用於Interconnect。
接口的配置方式分爲兩類: global 和node-specific。 前者說明集羣所有節點的配置信息相同,也就是說所有節點的配置是對稱的;而後者意味着這個節點的配置和其他節點配置不同,是非對稱的。
Iflist:顯示網口列表
Getif: 獲得單個網口信息
Setif:配置單個網口
Delif:刪除網口
[root@raw1 bin]# ./oifcfg --help
PRIF-9: incorrect usage
Name:
oifcfg - Oracle Interface Configuration Tool.
Usage: oifcfg iflist [-p [-n]]
oifcfg setif {-node <nodename> | -global} {<if_name>/<subnet>:<if_type>}...
oifcfg getif [-node <nodename> | -global] [ -if <if_name>[/<subnet>] [-type <if_type>] ]
oifcfg delif [-node <nodename> | -global] [<if_name>[/<subnet>]]
oifcfg [-help]
<nodename> - name of the host, as known to a communications network
<if_name> - name by which the interface is configured in the system
<subnet> - subnet address of the interface
<if_type> - type of the interface { cluster_interconnect | public | storage }
[root@raw1 bin]# ./oifcfg iflist
eth0 10.85.10.0
eth1 192.168.1.0
[root@raw1 bin]# ./oifcfg getif
eth0 10.85.10.119 global public
eth0 10.85.10.121 global public
eth0 10.85.10.0 global public
eth1 192.168.1.119 global cluster_interconnect
eth1 192.168.1.121 global cluster_interconnect
eth1 192.168.1.0 global cluster_interconnect
-- 查看public 類型的網卡
[root@raw1 bin]# ./oifcfg getif -type public
eth0 10.85.10.119 global public
eth0 10.85.10.121 global public
eth0 10.85.10.0 global public
-- 刪除接口配置
[root@raw1 bin]# ./oifcfg delif -global
-- 添加接口配置
[root@raw1 bin]# ./oifcfg setif -global eth0/192.168.1.119:public
[root@raw1 bin]# ./oifcfg setif -global eth1/10.85.10.119:cluster_interconnect
三. 集羣層
集羣層是指由Clusterware組成的核心集羣, 這一層負責維護集羣內的共享設備,併爲應用集羣提供完整的集羣狀態視圖,應用集羣依據這個視圖進行調整。 這一層共有4個命令: crsctl, ocrcheck,ocrdump,ocrconfig. 後三個是針對OCR 磁盤的。
3.1 CRSCTL
Crsctl 命令可以用來檢查CRS 進程棧,每個crs 進程狀態,管理Votedisk,跟蹤CRS進程功能。
[root@raw1 bin]# ./crsctl
Usage: crsctl check crs - checks the viability of the CRS stack
crsctl check cssd - checks the viability of CSS
crsctl check crsd - checks the viability of CRS
crsctl check evmd - checks the viability of EVM
crsctl set css <parameter> <value> - sets a parameter override
crsctl get css <parameter> - gets the value of a CSS parameter
crsctl unset css <parameter> - sets CSS parameter to its default
crsctl query css votedisk - lists the voting disks used by CSS
crsctl add css votedisk <path> - adds a new voting disk
crsctl delete css votedisk <path> - removes a voting disk
crsctl enable crs - enables startup for all CRS daemons
crsctl disable crs - disables startup for all CRS daemons
crsctl start crs - starts all CRS daemons.
crsctl stop crs - stops all CRS daemons. Stops CRS resources in case of cluster.
crsctl start resources - starts CRS resources.
crsctl stop resources - stops CRS resources.
crsctl debug statedump evm - dumps state info for evm objects
crsctl debug statedump crs - dumps state info for crs objects
crsctl debug statedump css - dumps state info for css objects
crsctl debug log css [module:level]{,module:level} ...
- Turns on debugging for CSS
crsctl debug trace css - dumps CSS in-memory tracing cache
crsctl debug log crs [module:level]{,module:level} ...
- Turns on debugging for CRS
crsctl debug trace crs - dumps CRS in-memory tracing cache
crsctl debug log evm [module:level]{,module:level} ...
- Turns on debugging for EVM
crsctl debug trace evm - dumps EVM in-memory tracing cache
crsctl debug log res <resname:level> turns on debugging for resources
crsctl query crs softwareversion [<nodename>] - lists the version of CRS software installed
crsctl query crs activeversion - lists the CRS software operating version
crsctl lsmodules css - lists the CSS modules that can be used for debugging
crsctl lsmodules crs - lists the CRS modules that can be used for debugging
crsctl lsmodules evm - lists the EVM modules that can be used for debugging
If necesary any of these commands can be run with additional tracing by
adding a "trace" argument at the very front.
Example: crsctl trace check css
3.1.1 檢查CRS 狀態
[root@raw1 bin]# ./crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
-- 檢查單個狀態
[root@raw1 bin]# ./crsctl check cssd
CSS appears healthy
[root@raw1 bin]# ./crsctl check crsd
CRS appears healthy
[root@raw1 bin]# ./crsctl check evmd
EVM appears healthy
3.1.2 配置CRS 棧是否自啓動
CRS 進程棧默認隨着操作系統的啓動而自啓動,有時出於維護目的需要關閉這個特性,可以用root 用戶執行下面命令。
[root@raw1 bin]# ./crsctl disable crs
[root@raw1 bin]# ./crsctl enable crs
這個命令實際是修改了/etc/oracle/scls_scr/raw/root/crsstart 這個文件裏的內容。
3.1.3 啓動,停止CRS 棧。
Oracle 在10.1時,必須通過重新啓動系統重啓Clusterware,但是從Oracle 10.2 開始,可以通過命令來啓動和停止CRS.
-- 啓動CRS:
[root@raw1 bin]# ./crsctl start crs
Attempting to start CRS stack
The CRS stack will be started shortly
-- 關閉CRS:
[root@raw1 bin]# ./crsctl stop crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
3.1.4 查看Votedisk 磁盤位置
[root@raw1 bin]# ./crsctl query css votedisk
0. 0 /dev/raw/raw2
located 1 votedisk(s).
3.1.5 查看和修改CRS 參數
-- 查看參數:用get
[root@raw1 bin]# ./crsctl get css misscount
60
-- 修改參數: 用set, 但是這個功能要慎用
[root@raw1 bin]# ./crsctl set css miscount 60
3.1.6 跟蹤CRS 模塊,提供輔助功能
CRS由CRS,CSS,EVM 三個服務組成,每個服務又是由一系列module組成,crsctl 允許對每個module進行跟蹤,並把跟蹤內容記錄到日誌中。
[root@raw1 bin]# ./crsctl lsmodules css
The following are the CSS modules ::
CSSD
COMMCRS
COMMNS
[root@raw1 bin]# ./crsctl lsmodules crs
The following are the CRS modules ::
CRSUI
CRSCOMM
CRSRTI
CRSMAIN
CRSPLACE
CRSAPP
CRSRES
CRSCOMM
CRSOCR
CRSTIMER
CRSEVT
CRSD
CLUCLS
CSSCLNT
COMMCRS
COMMNS
[root@raw1 bin]# ./crsctl lsmodules evm
The following are the EVM modules ::
EVMD
EVMDMAIN
EVMCOMM
EVMEVT
EVMAPP
EVMAGENT
CRSOCR
CLUCLS
CSSCLNT
COMMCRS
COMMNS
--跟蹤CSSD模塊,需要root 用戶執行:
[root@raw1 bin]# ./crsctl debug log css "CSSD:1"
Configuration parameter trace is now set to 1.
Set CRSD Debug Module: CSSD Level: 1
-- 查看跟蹤日誌
[root@raw1 cssd]# pwd
/u01/app/oracle/product/crs/log/raw1/cssd
[root@raw1 cssd]# more ocssd.log
...
[ CSSD]2010-03-08 00:19:27.160 [36244384] >TRACE: clssscSetDebugLevel: The logging level is set to 1 ,the cache level is set to 2
[ CSSD]2010-03-08 00:19:52.139 [119085984] >TRACE: clssgmClientConnectMsg: Connect from con(0x834fd18) proc(0x8354c70) pid() proto(10:2:1:1)
...
3.1.7 維護Votedisk
以圖新方式安裝Clusterware的過程中,在配置Votedisk時,如果選擇External Redundancy策略。則只能填寫一個Votedisk。但是即使使用External Redundancy作爲冗餘策略,也可以添加多個Vodedisk,只是必須通過crsctl 命令來添加,添加多個Votedisk後,這些Votedisk 互爲鏡像,可以防止Votedisk的單點故障。
需要注意的是,Votedisk使用的是一種“多數可用算法”,如果有多個Votedisk,,則必須一半以上的Votedisk同時使用,Clusterware才能正常使用。 比如配置了4個Votedisk,壞一個Votedisk,集羣可以正常工作,如果壞了2個,則不能滿足半數以上,集羣會立即宕掉,所有節點立即重啓,所以如果添加Votedisk,儘量不要只添加一個,而應該添加2個。這點和OCR 不一樣。OCR 只需配置一個。
添加和刪除Votedisk的操作比較危險,必須停止數據庫,停止ASM,停止CRS Stack後操作,並且操作時必須使用-force參數。
1) 查看當前配置
[root@raw1 bin]# ./crsctl query css votedisk
2) 停止所有節點的CRS:
[root@raw1 bin]# ./crsctl stop crs
3) 添加Votedisk
[root@raw1 bin]# ./crsctl add css votedisk /dev/raw/raw1 -force
注意:即使在CRS 關閉後,也必須通過-force 參數來添加和刪除Votedisk,並且-force 參數只有在CRS關閉的場合下使用才安全。 否則會報:Cluter is not a ready state for online disk addition.
4) 確認添加後的情況:
[root@raw1 bin]# ./crsctl query css votedisk
5) 啓動CRS
[root@raw1 bin]# ./crsctl start crs
3.2 OCR命令系列
Oracle Clusterware把整個集羣的配置信息放在共享存儲上,這個存儲就是OCR Disk. 在整個集羣中,只有一個節點能對OCR Disk 進行讀寫操作,這個節點叫作Master Node,所有節點都會在內存中保留一份OCR的拷貝,同時喲一個OCR Process 從這個內存中讀取內容。 OCR 內容發生改變時,由Master Node的OCR Process負責同步到其他節點的OCR Process。
因爲OCR的內容如此重要,Oracle 每4個小時對其做一次備份,並且保留最後的3個備份,以及前一天,前一週的最後一個備份。 這個備份由Master Node CRSD進程完成,備份的默認位置是$CRS_HOME/crs/cdata/<cluster_name>目錄下。 每次備份後,備份文件名自動更改,以反應備份時間順序,最近一次的備份叫作backup00.ocr。這些備份文件除了保存在本地,DBA還應該在其他存儲設備上保留一份,以防止意外的存儲故障。
3.2.1 ocrdump
該命令能以ASCII的方式打印出OCR的內容,但是這個命令不能用作OCR的備份恢復,也就是說產生的文件只能用作閱讀,而不能用於恢復。
命令格式: ocrdump [-stdout] [filename] [-keyname name] [-xml]
參數說明:
-stdout: 把內容打印輸出到屏幕上
Filename:內容輸出到文件中
-keyname:只打印某個鍵及其子健內容
-xml:以xml格式打印輸出
示例:把system.css鍵的內容以.xml格式打印輸出到屏幕
[root@raw1 bin]# ./ocrdump -stdout -keyname system.css -xml|more
<OCRDUMP>
<TIMESTAMP>03/08/2010 04:28:41</TIMESTAMP>
<DEVICE>/dev/raw/raw1</DEVICE>
<COMMAND>./ocrdump.bin -stdout -keyname system.css -xml </COMMAND>
......
這個命令在執行過程中,會在$CRS_HOME/log/<node_name>/client 目錄下產生日誌文件,文件名ocrdump_<pid>.log,如果命令執行出現問題,可以從這個日誌查看問題原因。
3.2.2 ocrcheck
Ocrcheck 命令用於檢查OCR內容的一致性,命令執行過程會在$CRS_HOME/log/nodename/client 目錄下產生ocrcheck_pid.log 日誌文件。 這個命令不需要參數。
[root@raw1 bin]# ./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 147352
Used space (kbytes) : 4360
Available space (kbytes) : 142992
ID : 1599790592
Device/File Name : /dev/raw/raw1
Device/File integrity check succeeded
Device/File not configured
Cluster registry integrity check succeeded
3.2.3 ocrconfig
該命令用於維護OCR 磁盤,安裝clusterware過程中,如果選擇External Redundancy冗餘方式,則只能輸入一個OCR磁盤位置。 但是Oracle允許配置兩個OCR 磁盤互爲鏡像,以防止OCR 磁盤的單點故障。 OCR 磁盤和Votedisk磁盤不一樣,OCR磁盤最多隻能有兩個,一個Primary OCR 和一個Mirror OCR。
[root@raw1 bin]# ./ocrconfig --help
Name:
ocrconfig - Configuration tool for Oracle Cluster Registry.
Synopsis:
ocrconfig [option]
option:
-export <filename> [-s online]
- Export cluster register contents to a file
-import <filename> - Import cluster registry contents from a file
-upgrade [<user> [<group>]]
- Upgrade cluster registry from previous version
-downgrade [-version <version string>]
- Downgrade cluster registry to the specified version
-backuploc <dirname> - Configure periodic backup location
-showbackup - Show backup information
-restore <filename> - Restore from physical backup
-replace ocr|ocrmirror [<filename>] - Add/replace/remove a OCR device/file
-overwrite - Overwrite OCR configuration on disk
-repair ocr|ocrmirror <filename> - Repair local OCR configuration
-help - Print out this help information
Note:
A log file will be created in
$ORACLE_HOME/log/<hostname>/client/ocrconfig_<pid>.log. Please ensure
you have file creation privileges in the above directory before
running this tool.
-- 查看自助備份
[root@raw1 bin]# ./ocrconfig -showbackup
在缺省情況下,OCR自動備份在$CRS_HOME/CRS/CDATA/cluster_name 目錄下,可以通過ocrconfig -backuploc <directory_name> 命令修改到新的目錄
3.2.4 使用導出,導入進行備份和恢復
Oracle 推薦在對集羣做調整時,比如增加,刪除節點之前,應該對OCR做一個備份,可以使用export 備份到指定文件,如果做了replace或者restore 等操作,Oracle 建議使用 cluvfy comp ocr -n all 命令來做一次全面的檢查。該命令在clusterware 的安裝軟件裏。
1) 首先關閉所有節點的CRS
[root@raw1 bin]# ./crsctl stop crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
2) 用root 用戶導出OCR內容
[root@raw1 bin]# ./ocrconfig -export /u01/ocr.exp
3) 重啓CRS
[root@raw1 bin]# ./crsctl start crs
Attempting to start CRS stack
The CRS stack will be started shortly
4) 檢查CRS 狀態
[root@raw1 bin]# ./crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
5)破壞OCR內容
[root@raw1 bin]# dd if=/dev/zero of=/dev/raw/raw1 bs=1024 count=102400
102400+0 records in
102400+0 records out
6) 檢查OCR一致性
[root@raw1 bin]# ./ocrcheck
PROT-601: Failed to initialize ocrcheck
7)使用cluvfy 工具檢查一致性
[root@raw1 cluvfy]# ./runcluvfy.sh comp ocr -n all
Verifying OCR integrity
Unable to retrieve nodelist from Oracle clusterware.
Verification cannot proceed.
8) 使用Import 恢復OCR 內容
[root@raw1 bin]# ./ocrconfig -import /u01/ocr.exp
9)再次檢查OCR
[root@raw1 bin]# ./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 147352
Used space (kbytes) : 4364
Available space (kbytes) : 142988
ID : 610419116
Device/File Name : /dev/raw/raw1
Device/File integrity check succeeded
Device/File not configured
Cluster registry integrity check succeeded
10) 使用cluvfy工具檢查
[root@raw1 cluvfy]# ./runcluvfy.sh comp ocr -n all
Verifying OCR integrity
WARNING:
These nodes cannot be reached:
raw2
Verification will proceed with nodes:
raw1
ERROR:
User equivalence unavailable on all the nodes.
Verification cannot proceed.
Verification of OCR integrity was unsuccessful on all the nodes.
注:此處不成功是因爲我的機器卡,故raw2節點沒有啓動
3.2.5 移動OCR 文件位置
實例演示將OCR從/dev/raw/raw1 移動到/dev/raw/raw3上。
1) 查看是否有OCR備份
[root@raw1 bin]# ./ocrconfig -showbackup
如果沒有備份,可以立即執行一次導出作爲備份:
[root@raw1 bin]# ./ocrconfig -export /u01/ocrbackup -s online
2) 查看當前OCR配置
[root@raw1 bin]# ./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 147352
Used space (kbytes) : 4364
Available space (kbytes) : 142988
ID : 610419116
Device/File Name : /dev/raw/raw1
Device/File integrity check succeeded
Device/File not configured
Cluster registry integrity check succeeded
輸出顯示當前只有一個Primary OCR,在/dev/raw/raw1。 沒有Mirror OCR。 因爲現在只有一個OCR文件,所以不能直接改變這個OCR的位置,必須先添加鏡像後在修改,否則會報:Failed to initialize ocrconfig.
3) 添加一個Mirror OCR
[root@raw1 bin]# ./ocrconfig -replace ocrmirror /dev/raw/raw4
4) 確認添加成功
[root@raw1 bin]# ./ocrcheck
5)改變primary OCR 位置
[root@raw1 bin]# ./ocrconfig -replace ocr /dev/raw/raw3
確認修改成功:
[root@raw1 bin]# ./ocrcheck
6)使用ocrconfig命令修改後,所有RAC節點上的/etc/oracle/ocr.loc 文件內容也會自動同步了,如果沒有自動同步,可以手工的改成以下內容。
[root@raw1 bin]# more /etc/oracle/ocr.loc
ocrconfig_loc=/dev/raw/raw1
Ocrmirrorconfig_loc=/dev/raw/raw3
local_only=FALSE
四. 應用層
應用層就是指RAC數據庫了,這一層有若干資源組成,每個資源都是一個進程或者一組進程組成的完整服務,這一層的管理和維護都是圍繞這些資源進行的。 有如下命令: srvctl, onsctl, crs_stat 三個命令。
4.1 crs_stat
Crs_stat 這個命令用於查看CRS維護的所有資源的運行狀態,如果不帶任何參數時,顯示所有資源的概要信息。每個資源顯示是各個屬性:資源名稱,類型,目錄,資源運行狀態等。
[root@raw1 bin]# ./crs_stat
NAME=ora.raw.db
TYPE=application
TARGET=ONLINE
STATE=OFFLINE
......
也可以指定資源名,查看指定資源的狀態,並可以使用-V 和-P 選項,以查看詳細信息,其中-p 參數顯示的內容比-V 更詳細。
1) 查看制定資源狀態
[root@raw1 bin]# ./crs_stat ora.raw2.vip
NAME=ora.raw2.vip
TYPE=application
TARGET=ONLINE
STATE=OFFLINE
2) 使用-v 選項,查看詳細內容,這時輸出多出4項內容,分別是允許重啓次數,已執行重啓次數,失敗閥值,失敗次數。
[root@raw1 bin]# ./crs_stat -v ora.raw2.vip
NAME=ora.raw2.vip
TYPE=application
RESTART_ATTEMPTS=0
RESTART_COUNT=0
FAILURE_THRESHOLD=0
FAILURE_COUNT=0
TARGET=ONLINE
STATE=OFFLINE
3) 使用-p 選項查看更詳細內容
[root@raw1 bin]# ./crs_stat -p ora.raw2.vip
NAME=ora.raw2.vip
TYPE=application
ACTION_SCRIPT=/u01/app/oracle/product/crs/bin/racgwrap
ACTIVE_PLACEMENT=1
AUTO_START=1
CHECK_INTERVAL=60
DESCRIPTION=CRS application for VIP on a node
FAILOVER_DELAY=0
FAILURE_INTERVAL=0
FAILURE_THRESHOLD=0
HOSTING_MEMBERS=raw2
OPTIONAL_RESOURCES=
PLACEMENT=favored
REQUIRED_RESOURCES=
RESTART_ATTEMPTS=0
SCRIPT_TIMEOUT=60
START_TIMEOUT=0
STOP_TIMEOUT=0
UPTIME_THRESHOLD=7d
USR_ORA_ALERT_NAME=
USR_ORA_CHECK_TIMEOUT=0
USR_ORA_CONNECT_STR=/ as sysdba
USR_ORA_DEBUG=0
USR_ORA_DISCONNECT=false
USR_ORA_FLAGS=
USR_ORA_IF=eth0
USR_ORA_INST_NOT_SHUTDOWN=
USR_ORA_LANG=
USR_ORA_NETMASK=255.255.255.0
USR_ORA_OPEN_MODE=
USR_ORA_OPI=false
USR_ORA_PFILE=
USR_ORA_PRECONNECT=none
USR_ORA_SRV=
USR_ORA_START_TIMEOUT=0
USR_ORA_STOP_MODE=immediate
USR_ORA_STOP_TIMEOUT=0
USR_ORA_VIP=10.85.10.123
這些字段是所有資源共有的,但是根據資源類型不同,某些字段可以空值。
4) 使用-ls 選項,可以查看每個資源的權限定義,權限定義格式和Linux 一樣。
[root@raw1 bin]# ./crs_stat -ls
Name Owner Primary PrivGrp Permission
-----------------------------------------------------------------
ora.raw.db oracle oinstall rwxrwxr--
ora.raw.dmm.cs oracle oinstall rwxrwxr--
ora....aw2.srv oracle oinstall rwxrwxr--
ora....w1.inst oracle oinstall rwxrwxr--
ora....w2.inst oracle oinstall rwxrwxr--
ora....SM1.asm oracle oinstall rwxrwxr--
ora....W1.lsnr oracle oinstall rwxrwxr--
ora.raw1.gsd oracle oinstall rwxr-xr--
ora.raw1.ons oracle oinstall rwxr-xr--
ora.raw1.vip root oinstall rwxr-xr--
ora....SM2.asm oracle oinstall rwxrwxr--
ora....W2.lsnr oracle oinstall rwxrwxr--
ora.raw2.gsd oracle oinstall rwxr-xr--
ora.raw2.ons oracle oinstall rwxr-xr--
ora.raw2.vip root oinstall rwxr-xr--
4.2 onsctl
這個命令用於管理配置ONS(Oracle Notification Service). ONS 是Oracle Clusterware 實現FAN Event Push模型的基礎。
在傳統模型中,客戶端需要定期檢查服務器來判斷服務端狀態,本質上是一個pull模型,Oracle 10g 引入了一個全新的PUSH 機制--FAN(Fast Application Notification),當服務端發生某些事件時,服務器會主動的通知客戶端這種變化,這樣客戶端就能儘早得知服務端的變化。 而引入這種機制就是依賴ONS實現, 在使用onsctl命令之前,需要先配置ONS服務。
4.2.1 ONS 配置內容
在RAC 環境中,需要使用$CRS_HOME下的ONS,而不是$ORACLE_HOME下面的ONS, 這點需要注意。 配置文件在$CRS_HOME/opmn/conf/ons.config.
[root@raw1 conf]# pwd
/u01/app/oracle/product/crs/opmn/conf
[root@raw1 conf]# more ons.config
localport=6100
remoteport=6200
loglevel=3
useocr=on
參數說明:
Localport: 這個參數代表本地監聽端口,這裏本地特指:127.0.0.1 這個迴環地址,用來和運行在本地的客戶端進行通信
Remoteport:這個參數代表的是遠程監聽端口,也就是除了127.0.0.1 以外的所有本地IP地址,用來和遠程的客戶端進行通信。
Loglevel: Oracle 允許跟蹤ONS進程的運行,並把日誌記錄到本地文件中,這個參數用來定義ONS進程要記錄的日誌級別,從1-9,缺省值是3.
Logfile: 這個參數和loglevel參數一起使用,用於定義ONS進程日誌文件的位置,缺省值是$CRS_HOME/opmn/logs/opmn.log
nodes和useocr: 這兩個參數共同決定餓了本地的ONS daemon要和哪些遠程節點上的ONS daemon進行通信。
Nodes 參數值格式如下:Hostname/IP:port[hostname/ip:port]
如:useoce=off
Nodes=rac1:6200,rac2:6200
而useocr 參數值爲on/off, 如果useocr 是ON, 說明信息保存在OCR中,如果是OFF,說明信息取nodes中的配置。對於單實例而言,要把useocr設置爲off。
4.2.2 配置ONS
可以直接編譯ONS的配置文件來修改配置,如果使用了OCR,則可以通過racgons命令進行配置,但必須以root用戶來執行,如果用oracle 用戶來執行,不會提示任何錯誤,但也不會更改任何配置。
若要添加配置,可以使用下面命令:
Racgons add_config rac1:6200 rac2:6200
若要刪除配置,可以用下面命令:
Racgons remove_config rac1:6200 rac2:6200
4.2.3 onsctl 命令
使用onsctl命令可以啓動,停止,調試ONS,並重新載入配置文件,其命令格式如下:
[root@raw1 bin]# ./onsctl
usage: ./onsctl start|stop|ping|reconfig|debug
start - Start opmn only.
stop - Stop ons daemon
ping - Test to see if ons daemon is running
debug - Display debug information for the ons daemon
reconfig - Reload the ons configuration
help - Print a short syntax description (this).
detailed - Print a verbose syntax description.
ONS 進程運行,並不一定代表ONS 正常工作,需要使用ping命令來確認。
1) 在OS級別查看進程狀態。
[root@raw1 bin]# ps -aef|grep ons
root 1924 6953 0 03:17 pts/1 00:00:00 grep ons
oracle 30723 1 0 Mar08 ? 00:00:00 /u01/app/oracle/product/crs/opmn/bin/ons -d
oracle 30724 30723 0 Mar08 ? 00:00:04 /u01/app/oracle/product/crs/opmn/bin/ons -d
2) 確認ONS服務的狀態
[root@raw1 bin]# ./onsctl ping
Number of onsconfiguration retrieved, numcfg = 2
onscfg[0]
{node = raw1, port = 6200}
Adding remote host raw1:6200
onscfg[1]
{node = raw2, port = 6200}
Adding remote host raw2:6200
ons is running ...
3) 啓動ONS服務
[root@raw1 bin]# ./onsctl start
4) 使用debug 選項,可以查看詳細信息,其中最有意義的就是能顯示所有連接。
[root@raw1 bin]# ./onsctl debug
Number of onsconfiguration retrieved, numcfg = 2
onscfg[0]
{node = raw1, port = 6200}
Adding remote host raw1:6200
onscfg[1]
{node = raw2, port = 6200}
Adding remote host raw2:6200
HTTP/1.1 200 OK
Content-Length: 1357
Content-Type: text/html
Response:
======== ONS ========
Listeners:
NAME BIND ADDRESS PORT FLAGS SOCKET
------- --------------- ----- -------- ------
Local 127.000.000.001 6100 00000142 7
Remote 010.085.010.119 6200 00000101 8
Request No listener
Server connections:
ID IP PORT FLAGS SENDQ WORKER BUSY SUBS
---------- --------------- ----- -------- ---------- -------- ------ -----
1 010.085.010.121 6200 00104205 0 1 0
Client connections:
ID IP PORT FLAGS SENDQ WORKER BUSY SUBS
---------- --------------- ----- -------- ---------- -------- ------ -----
3 127.000.000.001 6100 0001001a 0 1 0
4 127.000.000.001 6100 0001001a 0 1 1
Pending connections:
ID IP PORT FLAGS SENDQ WORKER BUSY SUBS
---------- --------------- ----- -------- ---------- -------- ------ -----
0 127.000.000.001 6100 00020812 0 1 0
Worker Ticket: 3/3, Idle: 180
THREAD FLAGS
-------- --------
17faba0 00000012
67f6ba0 00000012
32d6ba0 00000012
Resources:
Notifications:
Received: 1, in Receive Q: 0, Processed: 1, in Process Q: 0
Pools:
Message: 24/25 (1), Link: 25/25 (1), Subscription: 24/25 (1)
[root@raw1 bin]#
4.3 srvctl
該命令是RAC維護中最常用的命令,也是最複雜的命令。 這個工具可以操作下面的幾種資源:Database,Instance,ASM,Service,Listener 和 Node Application,其中Node application又包括GSD,ONS,VIP。 這些資源除了使用srvctl工具統一管理外,某些資源還有自己獨立的管理工具,比如ONS可以使用onsctl命令進行管理;Listener 可以通過lsnrctl 管理。
[root@raw1 bin]# ./srvctl --help
Usage: srvctl <command> <object> [<options>]
command: enable|disable|start|stop|relocate|status|add|remove|modify|getenv|setenv|unsetenv|config
objects: database|instance|service|nodeapps|asm|listener
For detailed help on each command and object and its options use:
srvctl <command> <object> -h
4.3.1 使用config查看配置
1)查看數據庫配置
-- 不帶任何參數時,顯示OCR中註冊的所有數據庫
[root@raw1 bin]# ./srvctl config database
raw
-- 使用-d 選項,查看某個數據庫配置
[root@raw1 bin]# ./srvctl config database -d raw
raw1 raw1 /u01/app/oracle/product/10.2.0/db_1
raw2 raw2 /u01/app/oracle/product/10.2.0/db_1
注: 該輸出結果顯示數據庫raw由2個節點組成,各自實例名交raw1和raw2. 兩個實例的$ORACLE_HOME是/u01/app/oracle/product/10.2.0/db_1
-- 使用-a 選項查看配置的詳細信息
[root@raw1 bin]# ./srvctl config database -d raw
raw1 raw1 /u01/app/oracle/product/10.2.0/db_1
raw2 raw2 /u01/app/oracle/product/10.2.0/db_1
[root@raw1 bin]# ./srvctl config database -d raw -a
raw1 raw1 /u01/app/oracle/product/10.2.0/db_1
raw2 raw2 /u01/app/oracle/product/10.2.0/db_1
DB_NAME: raw
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1
SPFILE: +DATA/raw/spfileraw.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED
2)查看Node Application的配置
-- 不帶任何參數,返回節點名,實例名和$ORACLE_HOME
[root@raw1 bin]# ./srvctl config nodeapps -n raw1
raw1 raw1 /u01/app/oracle/product/10.2.0/db_1
-- 使用-a 選項,查看VIP 配置
[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -a
VIP exists.: /raw1-vip/10.85.10.122/255.255.255.0/eth0
-- 使用-g 選項, 查看GSD:
[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -g
GSD exists.
-- 使用-s 選項,查看ONS:
[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -s
ONS daemon exists.
-- 使用-l 選項,查看Listener:
[root@raw1 bin]# ./srvctl config nodeapps -n raw1 -l
Listener exists.
3) 查看 Listener.
[root@raw1 bin]# ./srvctl config listener -n raw1
raw1 LISTENER_RAW1
[root@raw1 bin]# ./srvctl config listener -n raw2
raw2 LISTENER_RAW2
4) 查看ASM
[root@raw1 bin]# ./srvctl config asm -n raw1
+ASM1 /u01/app/oracle/product/10.2.0/db_1
[root@raw1 bin]# ./srvctl config asm -n raw2
+ASM2 /u01/app/oracle/product/10.2.0/db_1
5) 查看Service
-- 查看數據庫所有service配置
[root@raw1 bin]# ./srvctl config service -d raw -a
dmm PREF: raw2 AVAIL: raw1 TAF: basic
-- 查看某個Service 配置
[root@raw1 bin]# ./srvctl config service -d raw -s dmm
dmm PREF: raw2 AVAIL: raw1
-- 使用-a 選項,查看TAF 策略
[root@raw1 bin]# ./srvctl config service -d raw -s dmm -a
dmm PREF: raw2 AVAIL: raw1 TAF: basic
4.3.2 使用add 添加對象
一般情況下,應用層資源都是在圖形界面的幫助下注冊到OCR中的,比如VIP,ONS實在安裝最後階段創建的,而數據庫,ASM是執行DBCA的過程中自動註冊到OCR中的,Listener是通過netca工具。 但是有些時候需要手工把資源註冊到OCR中。 這時候就需要add 命令了。
1) 添加數據庫
[root@raw1 bin]# ./srvctl add database -d dmm -o $ORACLE_HOME
2) 添加實例
[root@raw1 bin]# ./srvctl add instance -d dmm -n rac1 -i dmm1
[root@raw1 bin]# ./srvctl add instance -d dmm -n rac2 -i dmm2
3) 添加服務,需要使用4個參數
-s : 服務名
-r:首選實例名
-a:備選實例名
-P:TAF策略,可選值爲None(缺省值),Basic,preconnect。
[root@raw1 bin]# ./srvctl add service -d dmm -s dmmservice -r rac1 -a rac2 -P BASIC
4) 確認添加成功
[root@raw1 bin]# ./srvctl config service -d dmm -s dmmservice -a
4.3.3 使用enable/disable 啓動,禁用對象
缺省情況下數據庫,實例,服務,ASM都是隨着CRS的啓動而自啓動的,有時候由於維護的需要,可以先關閉這個特性。
1) 配置數據庫隨CRS的啓動而自動啓動
-- 啓用數據庫的自啓動:
[root@raw1 bin]# ./srvctl enable database -d raw
--查看配置
[root@raw1 bin]# ./srvctl config database -d raw -a
raw1 raw1 /u01/app/oracle/product/10.2.0/db_1
raw2 raw2 /u01/app/oracle/product/10.2.0/db_1
DB_NAME: raw
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1
SPFILE: +DATA/raw/spfileraw.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED
-- 禁止數據庫在CRS啓動後自啓動,這時需要手動啓動
[root@raw1 bin]# ./srvctl disable database -d raw
2) 關閉某個實例的自動啓動
[root@raw1 bin]# ./srvctl disable instance -d raw -i raw1
[root@raw1 bin]# ./srvctl enable instance -d raw -i raw1
-- 查看信息
[root@raw1 bin]# ./srvctl config database -d raw -a
raw1 raw1 /u01/app/oracle/product/10.2.0/db_1
raw2 raw2 /u01/app/oracle/product/10.2.0/db_1
DB_NAME: raw
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1
SPFILE: +DATA/raw/spfileraw.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED
3) 禁止某個服務在實例上運行
[root@raw1 bin]# ./srvctl enable service -d raw -s rawservice -i raw1
[root@raw1 bin]# ./srvctl disable service -d raw -s rawservice -i raw1
-- 查看
[root@raw1 bin]# ./srvctl config service -d raw -a
dmm PREF: raw2 AVAIL: raw1 TAF: basic
4.3.4 使用remove 刪除對象
使用remove命令刪除的是對象在OCR中的定義信息,對象本省比如數據庫的數據文件等不會被刪除,以後隨時可以使用add命令重新添加到OCR中。
1) 刪除Service,在刪除之前,命令會給出確定提示
[root@raw1 bin]# ./srvctl remove service -d raw -s rawservice
2)刪除實例,刪除之前同樣會給出提示
[root@raw1 bin]# ./srvctl remove instance -d raw -i raw1
3)刪除數據庫
[root@raw1 bin]# ./srvctl remove database -d raw
4.3.5 啓動,停止對象與查看對象
在RAC 環境下啓動,關閉數據庫雖然仍然可以使用SQL/PLUS方法,但是更推薦使用srvctl命令來做這些工作,這可以保證即使更新CRS中運行信息,可以使用start/stop 命令啓動,停止對象,然後使用status 命令查看對象狀態。
1) 啓動數據庫,默認啓動到open狀態
[root@raw1 bin]# ./srvctl start database -d raw
2) 指定啓動狀態
[root@raw1 bin]# ./srvctl start database -d raw -i raw1 -o mount
[root@raw1 bin]# ./srvctl start database -d raw -i raw1 -o nomount
3) 關閉對象,並指定關閉方式
[root@raw1 bin]# ./srvctl stop instance -d raw -i raw1 -o immediate
[root@raw1 bin]# ./srvctl stop instance -d raw -i raw1 -o abort
4) 在指定實例上啓動服務:
[root@raw1 bin]# ./srvctl start service -d raw -s rawservice -i raw1
-- 查看服務狀態
[root@raw1 bin]# ./srvctl status service -d raw -v
5) 關閉指定實例上的服務
[root@raw1 bin]# ./srvctl stop service -d raw -s rawservice -i raw1
-- 查看服務狀態
[root@raw1 bin]# ./srvctl status service -d raw -v
4.3.6 跟蹤srvctl
在Oracle 10g中要跟蹤srvctl 非常簡單,只要設置srvm_trace=true 這個OS環境變量即可,這個命令的所有函數調用都會輸出到屏幕上,可以幫助用戶進行診斷。
[root@raw1 bin]# export SRVM_TRACE=TRUE
[root@raw1 bin]# ./srvctl config database -d raw
/u01/app/oracle/product/crs/jdk/jre/bin/java -classpath /u01/app/oracle/product/crs/jlib/netcfg.jar:/u01/app/oracle/product/crs/jdk/jre/lib/rt.jar:/u01/app/oracle/product/crs/jdk/jre/lib/i18n.jar:/u01/app/oracle/product/crs/jlib/srvm.jar:/u01/app/oracle/product/crs/jlib/srvmhas.jar:/u01/app/oracle/product/crs/jlib/srvmasm.jar:/u01/app/oracle/product/crs/srvm/jlib/srvctl.jar -DTRACING.ENABLED=true -DTRACING.LEVEL=2 oracle.ops.opsctl.OPSCTLDriver config database -d raw
[main] [6:58:44:858] [OPSCTLDriver.setInternalDebugLevel:165] tracing is true at level 2 to file null
[main] [6:58:44:911] [OPSCTLDriver.<init>:95] Security manager is set
[main] [6:58:44:955] [CommandLineParser.parse:173] parsing cmdline args
[main] [6:58:44:959] [CommandLineParser.parse2WordCommandOptions:940] parsing 2-word cmdline
[main] [6:58:44:961] [OPSCTLDriver.execute:174] executing srvctl command
[main] [6:58:44:963] [OPSCTLDriver.execute:199] executing 2-word command verb=10 noun=101
[main] [6:58:44:995] [Action.getOPSConfig:162] get db config for: raw
[main] [6:58:45:2] [CommandLineParser.obtainOPSConfig:1410] srvctl: get db config for: raw
[main] [6:58:45:47] [GetActiveNodes.create:213] Going into GetActiveNodes constructor...
... ...
4.4 恢復
假設OCR磁盤和Votedisk磁盤全部破壞,並且都沒有備份,該如何恢復, 這時最簡單的方法就是重新初始話OCR和Votedisk, 具體操作如下:
4.4.1 停止所有節點的Clusterware Stack
Crsctl stop crs;
4.4.2 分別在每個節點用root用戶執行$CRS_HOME/install/rootdelete.sh腳本
4.4.3 在任意一個節點上用root用戶執行$CRS_HOME/install/rootinstall.sh 腳本
4.4.4 在和上一步同一個節點上用root執行$CRS_HOME/root.sh腳本
4.4.5 在其他節點用root執行行$CRS_HOME/root.sh腳本
4.4.6 用netca 命令重新配置監聽,確認註冊到Clusterware中
#crs_stat -t -v
到目前爲止,只有Listener,ONS,GSD,VIP 註冊到OCR中,還需要把ASM, 數據庫都註冊到OCR中。
4.4.7 向OCR中添加ASM
#srvctl add asm -n rac1 -i +ASM1 -o /u01/app/product/database
#srvctl add asm -n rac2 -i +ASM2 -o /u01/app/product/database
4.4.8 啓動ASM
#srvctl start asm -n rac1
#srvctl start asm -n rac2
若在啓動時報ORA-27550錯誤。是因爲RAC無法確定使用哪個網卡作爲Private Interconnect,解決方法:在兩個ASM的pfile文件裏添加如下參數:
+ASM1.cluster_interconnects='10.85.10.119'
+ASM2.cluster_interconnects='10.85.10.121'
4.4.9 手工向OCR中添加Database對象。
#srvctl add database -d raw -o /u01/app/product/database
4.4.10 添加2個實例對象
#srvctl add instance -d raw -i raw1 -n raw1
#srvctl add instance -d raw -i raw2 -n raw2
4.4.11 修改實例和ASM實例的依賴關係
#srvctl modify instance -d raw -i raw1 -s +ASM1
#srvctl modify instance -d raw -i raw2 -s +ASM2
4.4.12 啓動數據庫
#srvctl start database-d raw
若也出現ORA-27550錯誤。也是因爲RAC無法確定使用哪個網卡作爲Private Interconnect,修改pfile參數在重啓動即可解決。
SQL>alter system set cluster_interconnects='10.85.10.119' scope=spfile sid='raw1';
SQL>alter system set cluster_interconnects='10.85.10.121' scope=spfile sid='raw2';