oraclerac常用的命令
oracle rac常用的命令
節點層:olsnodes
網絡層: oifcfg
集群層:crsctl,ocrcheck,ocrdump,ocrconfig
應用層:srvctl,onsctl,crs_stat
一.節點層:
olsnodes 用來顯示集群點列表,可以混用
[root@rac1 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@rac1 bin]# ./olsnodes -n -p -i
rac1 1 rac1-priv rac1-vip
rac2 2 rac2-priv rac2-vip
[root@rac1 bin]# ./olsnodes -v
prlslms: Initializing LXL global
prlsndmain: Initializing CLSS context
prlsmemberlist: No of cluster members configured = 256
prlsmemberlist: Getting information for nodenum = 1
prlsmemberlist: node_name = rac1
prlsmemberlist: ctx->lsdata->node_num = 1
prls_printdata: Printing the node data
rac1
prlsmemberlist: Getting information for nodenum = 2
prlsmemberlist: node_name = rac2
prlsmemberlist: ctx->lsdata->node_num = 2
prls_printdata: Printing the node data
rac2
prlsndmain: olsnodes executed successfully
prlsndterm: Terminating LSF
二.網絡層:
網絡層由各個節點的網絡組件組成,包括2個物理網卡和3個IP 地址。 也只有一個命令:oifcfg.
Oifctg 命令用來定義和修改Oracle 集群需要的網卡屬性,這些屬性包括網卡的網段地址,子網掩碼,接口類型等。 要想正確的使用這個命令, 必須先知道Oracle 是如何定義網絡接口的,Oracle的每個網絡接口包括名稱,網段地址,接口類型3個屬性。
這些屬性中沒有IP地址,但接口類型有兩種,public和private,前者說明接口用於外部通信,用於Oracle Net和VIP 地址,而後者說明接口用於Interconnect。
接口的配置方式分為兩類: global 和node-specific。 前者說明集群所有節點的配置信息相同,也就是說所有節點的配置是對稱的;而後者意味著這個節點的配置和其他節點配置不同,是非對稱的。
[root@rac1 bin]# ./oifcfg
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 }
1.iflist:顯示網口列表
[root@rac1 bin]# ./oifcfg iflist -p -n
eth0 192.168.90.0 PRIVATE 255.255.255.0
eth1 192.168.91.0 PRIVATE 255.255.255.0
2.getif: 獲得單個網口信息
[root@rac1 bin]# ./oifcfg getif
eth0 192.168.90.0 global public
eth1 192.168.91.0 global cluster_interconnect
還可以查看網卡類型
[root@rac1 bin]# ./oifcfg getif -type public
eth0 192.168.90.0 global public
3.delif:刪除接口配置
[root@rac1 bin]# ./oifcfg delif -global
[root@rac1 bin]# ./oifcfg getif
4.setif:配置單個網口
[root@rac1 bin]# ./oifcfg getif
eth0 192.168.90.2 global public
eth1 192.168.91.3 global cluster_interconnect
三.集群層:
集群層是指由Clusterware組成的核心集群, 這一層負責維護集群內的共享設備,並為應用集群提供完整的集群狀態視圖,應用集群依據這個視圖進行調整。 這一層共有4個命令: crsctl, ocrcheck,ocrdump,ocrconfig. 後三個是針對OCR 磁盤的。
3.1 CRSCTL
CRSCTL 命令可以用來檢查CRS進程棧,每個crs進程狀態,管理Votedisk,跟蹤CRS進程功能。
[oracle@rac1 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
1.檢測crs狀態:
[oracle@rac1 bin]$ crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
--單個檢測cssd,crsd,evmd狀態
[oracle@rac1 bin]$ crsctl check cssd
CSS appears healthy
[oracle@rac1 bin]$ crsctl check crsd
CRS appears healthy
[oracle@rac1 bin]$ crsctl check evmd
EVM appears healthy
2.配置CRS棧是否開機自啟動 //這個命令需要root用戶執行
[oracle@rac1 bin]$ crsctl disable crs
Insufficient user privileges.
[oracle@rac1 bin]$ crsctl enable crs
Insufficient user privileges.
實際修改這個文件中內容
[oracle@rac1 bin]$ cat /etc/oracle/scls_scr/rac1/root/crsstart
enable
3.啟動、停止CRS資源
[root@rac1 bin]# ./crsctl start resources
[root@rac1 bin]# ./crsctl stop resources
4.啟動、停止CRS棧
oracle 10.1之前,必須通過重啟系統重啟Clusterware,但是從10.2開始,可以通過命令來啟動和停止CRS。
[root@rac1 bin]# ./crsctl stop crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
[root@rac1 bin]# ./crsctl start crs
Attempting to start CRS stack
The CRS stack will be started shortly
5.查看Votedisk磁盤位置
[root@rac1 bin]# ./crsctl query css votedisk
0. 0 /dev/raw/raw2
located 1 votedisk(s).
6.查看和修改CRS參數
[root@rac1 bin]# ./crsctl get css misscount
60
--修改參數:功能慎用
[root@rac1 bin]# ./crsctl set css misscount 60
Configuration parameter misscount is now set to 60.
[root@rac1 bin]# ./crsctl get css misscount
60
--重置CRS參數
[root@rac1 bin]# ./crsctl unset css misscount
Configuration parameter misscount is now undefined.
[root@rac1 bin]# ./crsctl get css misscount
Configuration parameter misscount is not defined.
7,跟蹤CRS模塊,提供輔助功能
CRS由CRS、CSS、EVM三個服務組成,每個服務又是由一系列module組成,crsctl允許每個module進行跟蹤,並把跟蹤內容記錄到日志中。
[root@rac1 bin]# ./crsctl lsmodules css
The following are the CSS modules ::
CSSD
COMMCRS
COMMNS
[root@rac1 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@rac1 bin]# ./crsctl lsmodules evm
The following are the EVM modules ::
EVMD
EVMDMAIN
EVMCOMM
EVMEVT
EVMAPP
EVMAGENT
CRSOCR
CLUCLS
CSSCLNT
COMMCRS
COMMNS
--跟蹤CSSD模塊、CRS模塊、EVM模塊
[root@rac1 bin]# ./crsctl debug log css CSSD:1
Configuration parameter trace is now set to 1.
Set CRSD Debug Module: CSSD Level: 1
[root@rac1 bin]# ./crsctl debug log crs CRSOCR:1
Set CRSD Debug Module: CRSOCR Level: 1
[root@rac1 bin]# ./crsctl debug log evm EVMD:1
Set CRSD Debug Module: EVMD Level: 1
--轉儲當前CSS、CRS、EVM狀態跟蹤
[root@rac1 bin]# ./crsctl debug statedump css
CSS data dump triggered.
[root@rac1 bin]# ./crsctl debug statedump crs
Dumping State for crs objects
[root@rac1 bin]# ./crsctl debug statedump evm
Dumping State for evm objects
可以在文件中查看
[oracle@rac1 cssd]$ pwd
/u01/app/oracle/product/10.2.0/db_1/log/rac1/cssd
[oracle@rac1 cssd]$ more ocssd.log
...信息量很大啊。
8.查看當前所在的節點CRS版本
[root@rac1 bin]# ./crsctl query crs softwareversion
CRS software version on node [rac1] is [10.2.0.1.0]
[root@rac1 bin]# ./crsctl query crs activeversion
CRS active version on the cluster is [10.2.0.1.0]
9.開啟資源的跟蹤
[root@rac1 bin]# ./crsctl debug log res EVMD:1
Set Resource Debug Module: EVMD Level: 1
10.將CSS轉儲到內存緩存中 目前不支持
[root@rac1 bin]# ./crsctl debug trace crs
operation presently unsupported.
11.維護Votedisk
以圖形化安裝Clusterware的過程中,在配置Votedisk時,如果選擇External Redundancy策略。則只能填寫一個Votedisk。但是即使使用External Redundancy作為冗余策略,也可以添加多個Votedisk,只是必須通過crsctl命令來添加,添加多個Votedisk後, 這些Votedisk互為鏡像,可以防止Votedisk單點故障。
/* 圖:24-1.圖形安裝clusterware的votedisk配置 */
需要注意的是,Votedisk使用的是一種“多數可用算法”,如果有多個Votedisk,,則必須一半以上的Votedisk同時使用,Clusterware才能正常使用。 比如配置了4個Votedisk,壞一個Votedisk,集群可以正常工作,如果壞了2個,則不能滿足半數以上,集群會立即宕掉,所有節點立即重啟,所以如果添加Votedisk,盡量不要只添加一個,而應該添加2個。這點和OCR
不一樣。OCR 只需配置一個。
實驗:上面的情況我做了實驗,我的是用openfiler做的存儲,當我取消掉節點votedisk裸設備的mapping時,節點過一分鐘就會重啟,如果取消兩個節點的mapping時,兩個都會在一分鐘左右重啟。
CSSD日志中報錯(我的votedisk是在/dev/raw/raw2)
[ CSSD]2014-08-22 13:43:34.474 [65854352] >ERROR: clssnmvWriteBlocks: write failed 1 at offset 17 of /dev/raw/raw2
[ CSSD]2014-08-22 13:43:34.474 [65854352] >TRACE: clssnmDiskStateChange: state from 4 to 3 disk (0//dev/raw/raw2)
添加和刪除Votedisk的操作比較危險,必須停止數據庫,停止ASM,停止CRS Stack後操作,並且操作時必須使用-force參數。
真的很危險,我實驗環境搞得ASM磁盤組都壞了。
a.查看當前votedisk磁盤
[root@rac1 bin]# ./crsctl query css votedisk
0. 0 /dev/raw/raw2
located 1 votedisk(s).
b.關閉當前節點的CRS棧
[root@rac1 bin]# ./crsctl stop crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
c.增加Votedisk磁盤 (必須加-fore 參數)
[root@rac1 bin]# ./crsctl add css votedisk /dev/raw/raw6
Cluster is not in a ready state for online disk addition
[root@rac1 bin]# ./crsctl add css votedisk /dev/raw/raw6 -force
Now formatting voting disk: /dev/raw/raw6
successful addition of votedisk /dev/raw/raw6.
d.查看添加完成後votedisk個數
[root@rac1 bin]# ./crsctl query css votedisk
0. 0 /dev/raw/raw2
1. 0 /dev/raw/raw6
located 2 votedisk(s).
e.啟動crs棧
[root@rac1 bin]# ./crsctl start crs
Attempting to start CRS stack
The CRS stack will be started shortly
刪除votedisk(同樣方式,刪除命令如下)
[root@rac2 bin]# ./crsctl delete css votedisk /dev/raw/raw6 -force
successful deletion of votedisk /dev/raw/raw6.
[root@rac2 bin]# ./crsctl query css votedisk
0. 0 /dev/raw/raw2
located 1 votedisk(s).
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還應該在其他存儲設備上保留一份,以防止意外的存儲故障。
1.ocrdump
該命令能以ASCII的方式打印出OCR的內容,但是這個命令不能用作OCR的備份恢復,也就是說產生的文件只能用作閱讀,而不能用於恢復。
命令格式: ocrdump [-stdout] [filename] [-keyname name] [-xml]
參數說明:
-stdout: 把內容打印輸出到屏幕上
Filename:內容輸出到文件中
-keyname:只打印某個鍵及其子健內容
-xml:以xml格式打印輸出
[root@rac1 bin]# ./ocrdump -stdout -keyname -xml|more
Name:
ocrdump - Dump contents of Oracle Cluster Registry to a file.
Synopsis:
ocrdump [<filename>|-stdout] [-backupfile <backupfilename>] [-keyname <k
eyname>] [-xml] [-noheader]
Description:
Default filename is OCRDUMPFILE. Examples are:
prompt> ocrdump
writes cluster registry contents to OCRDUMPFILE in the current directory
prompt> ocrdump MYFILE
writes cluster registry contents to MYFILE in the current directory
prompt> ocrdump -stdout -keyname SYSTEM
writes the subtree of SYSTEM in the cluster registry to stdout
....
2.ocrcheck
Ocrcheck 命令用於檢查OCR內容的一致性,命令執行過程會在$CRS_HOME/log/nodename/client 目錄下產生ocrcheck_pid.log 日志文件。 這個命令不需要參數。
[root@rac1 bin]# ./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 1048288
Used space (kbytes) : 3804
Available space (kbytes) : 1044484
ID : 887377004
Device/File Name : /dev/raw/raw1
Device/File integrity check succeeded
Device/File not configured
Cluster registry integrity check succeeded
[root@rac1 client]# cat ocrcheck_16964.log
Oracle Database 10g CRS Release 10.2.0.1.0 Production Copyright 1996, 2005 Oracle. All rights reserved.
2014-08-25 13:40:10.491: [OCRCHECK][1566928]ocrcheck starts...
2014-08-25 13:40:12.094: [OCRCHECK][1566928]protchcheck: OCR status : total = [1048288], used = [3804], avail = [1044484]
2014-08-25 13:40:12.095: [OCRCHECK][1566928]Exiting [status=success]...
3.ocrconfig
該命令用於維護OCR 磁盤,安裝clusterware過程中,如果選擇External Redundancy冗余方式,則只能輸入一個OCR磁盤位置。 但是Oracle允許配置兩個OCR 磁盤互為鏡像,以防止OCR 磁盤的單點故障。 OCR 磁盤和Votedisk磁盤不一樣,OCR磁盤最多只能有兩個,一個Primary OCR 和一個Mirror OCR。
[root@rac1 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@rac1 bin]# ./ocrconfig -showbackup
[root@rac1 bin]# ./ocrconfig -export /home/oracle/ocrdump.dmp
[root@rac1 bin]# cat /home/oracle/ocrdump.dmp
....
4.使用導出、導入進行備份和恢復
oracle推薦在對集群進行調整時,比如增加、刪除節點之前,應該對OCR做一個備份,可以使用export備份到指定文件,如果做了replace或者restore等操作,oracle建議使用cluvfy comp ocr -n all命令來做一次全面的檢查。該命令在clusterware的安裝軟件裡。
a.首先關閉所有節點的CRS
節點1:
[root@rac1 bin]# ./crsctl stop crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
節點2:
[root@rac2 bin]# ./crsctl stop crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
b.用root用戶導出OCR內容
[root@rac1 bin]# ./ocrconfig -export /home/oracle/ocr.exp
[root@rac1 bin]# ll /home/oracle/ocr.exp
-rw-r--r-- 1 root root 84949 Aug 25 13:54 /home/oracle/ocr.exp
c.重啟CRS
節點1:
[root@rac1 bin]# ./crsctl start crs
Attempting to start CRS stack
The CRS stack will be started shortly
節點2:
[root@rac2 bin]# ./crsctl start crs
Attempting to start CRS stack
The CRS stack will be started shortly
d.檢查crs狀態
[root@rac1 bin]# ./crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
[root@rac1 bin]# ./crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....B1.inst application ONLINE ONLINE rac1
ora....B2.inst application ONLINE ONLINE rac2
ora.RACDB.db application ONLINE ONLINE rac1
ora....SM1.asm application ONLINE ONLINE rac1
ora....C1.lsnr application ONLINE ONLINE rac1
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2
e.破壞OCR內容
[root@rac1 bin]# dd if=/dev/zero of=/dev/raw/raw1 bs=1024 count=10240
10240+0 records in
10240+0 records out
10485760 bytes (10 MB) copied, 12.5641 seconds, 835 kB/s
f.檢查OCR的一致性和CRS狀態
[root@rac1 bin]# ./crs_stat -t
CRS-0184: Cannot communicate with the CRS daemon.
[root@rac1 bin]# ./ocrcheck
PROT-601: Failed to initialize ocrcheck
g.使用cluvfy工具檢查一致性
[root@rac1 cluvfy]# ./runcluvfy.sh comp ocr -n all
Verifying OCR integrity
Unable to retrieve nodelist from Oracle clusterware.
Verification cannot proceed.
h.使用import恢復OCR內容
[root@rac1 bin]# ./ocrconfig -import /home/oracle/ocr.exp
i.再次檢查OCR狀態
[root@rac1 bin]# ./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 1048288
Used space (kbytes) : 3812
Available space (kbytes) : 1044476
ID : 91794367
Device/File Name : /dev/raw/raw1
Device/File integrity check succeeded
Device/File not configured
Cluster registry integrity check succeeded
j.使用cluvfy工具檢查一致性
[root@rac1 cluvfy]# ./runcluvfy.sh comp ocr -n all
5.移動OCR文件位置
將OCR從/dev/raw/raw1移動到/dev/raw/raw3
a.查看是否有OCR備份
[root@rac1 bin]# ./ocrconfig -showbackup
b.查看ocr當前位置
[root@rac1 bin]# ./ocrcheck
如果只有一個Primary OCR,在移動前需要有一個Mirror OCR,否則報錯。
c.增加mirror OCR
[root@rac1 bin]# ./ocrconfig -replace ocrmirror /dev/raw/raw6
d.確認添加成功
[root@rac1 bin]# ./ocrcheck
e.改變primary OCR的文件位置
[root@rac1 bin]# ./ocrconfig -replace ocr /dev/raw/raw7
f.確認添加成功
[root@rac1 bin]# ./ocrcheck
注意!!!
在使用ocrconfig命令後,所有RAC節點上的/etc/oracle/ocr.loc文件內容也會同步,如果沒有同步,可以手動改寫:
[root@rac1 bin]# cat /etc/oracle/ocr.loc
ocrconfig_loc=/dev/raw/raw1
ocrmirrorconfig_loc=/dev/raw/raw6
local_only=FALSE
四.應用層:
應用層就是指RAC數據庫了,這一層有若干資源組成,每個資源都是一個進程或者一組進程組成的完整服務,這一層的管理和維護都是圍繞這些資源進行的。 有如下命令: srvctl, onsctl, crs_stat 三個命令。
4.1 crs_stat
Crs_stat 這個命令用於查看CRS維護的所有資源的運行狀態,如果不帶任何參數時,顯示所有資源的概要信息。每個資源顯示是各個屬性:資源名稱,類型,目錄,資源運行狀態等。
[root@rac2 bin]# ./crs_stat -help
Usage: crs_stat [resource_name [...]] [-v] [-l] [-q] [-c cluster_member]
crs_stat [resource_name [...]] -t [-v] [-q] [-c cluster_member]
crs_stat -p [resource_name [...]] [-q]
crs_stat [-a] application -g
crs_stat [-a] application -r [-c cluster_member]
crs_stat -f [resource_name [...]] [-q] [-c cluster_member]
crs_stat -ls [resource_name [...]] [-q]
[root@rac2 bin]# ./crs_stat
NAME=ora.RACDB.RACDB1.inst
TYPE=application
TARGET=ONLINE
STATE=ONLINE
NAME=ora.RACDB.RACDB2.inst
TYPE=application
TARGET=ONLINE
STATE=ONLINE on rac2
.....
4.1.1 同樣可以指定特定的資源名,查看指定資源的狀態,使用-V 和 -P選項。 -p比-v更加詳細。
[root@rac2 bin]# ./crs_stat ora.rac2.vip
NAME=ora.rac2.vip
TYPE=application
TARGET=ONLINE
STATE=ONLINE on rac2
[root@rac2 bin]# ./crs_stat ora.rac2.vip -v
NAME=ora.rac2.vip
TYPE=application
RESTART_ATTEMPTS=0
//允許重啟次數
RESTART_COUNT=0
//已經重啟次數
FAILURE_THRESHOLD=0
//失敗閥值
FAILURE_COUNT=0
//失敗次數
TARGET=ONLINE
STATE=ONLINE on rac2
[root@rac2 bin]# ./crs_stat -p ora.rac2.vip
NAME=ora.rac2.vip
TYPE=application
ACTION_SCRIPT=/u01/app/oracle/product/10.2.0/db_1/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=rac2
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=192.168.90.4
4.1.2 使用ls 選項,可以查看每個資源的權限定義,權限定義格式和Linux一樣。
[root@rac2 bin]# ./crs_stat -ls
Name Owner Primary PrivGrp Permission
-----------------------------------------------------------------
ora....B1.inst oracle oinstall rwxrwxr--
ora....B2.inst oracle oinstall rwxrwxr--
ora.RACDB.db oracle oinstall rwxrwxr--
ora....SM1.asm oracle oinstall rwxrwxr--
ora....C1.lsnr oracle oinstall rwxrwxr--
ora.rac1.gsd oracle oinstall rwxr-xr--
ora.rac1.ons oracle oinstall rwxr-xr--
ora.rac1.vip root oinstall rwxr-xr--
ora....SM2.asm oracle oinstall rwxrwxr--
ora....C2.lsnr oracle oinstall rwxrwxr--
ora.rac2.gsd oracle oinstall rwxr-xr--
ora.rac2.ons oracle oinstall rwxr-xr--
ora.rac2.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。
[root@rac2 conf]# pwd
/u01/app/oracle/product/10.2.0/db_1/opmn/conf
[root@rac2 conf]# more ons.config
localport=6113
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和userocr:這兩個參數共同決定了本地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 用戶來執行,不會提示任何錯誤,但也不會更改任何配置。
[root@rac2 bin]# ./racgons
To add ONS daemons configuration:
./racgons.bin add_config hostname:port [hostname:port] ...
To remove ONS daemons configuration:
./racgons.bin remove_config hostname[:port] [hostname:port] ...
若要添加配置,可以使用下面命令:
Racgons add_config rac1:6200 rac2:6200
若要刪除配置,可以用下面命令:
Racgons remove_config rac1:6200 rac2:6200
4.2.3 onsctl命令
使用onsctl命令可以啟動、停止、調試ONS,並重新載入配置文件,其命令格式如下:
[root@rac2 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命令來確認。
a.在OS級別查看進程狀態
[root@rac2 bin]# ps -ef |grep ons
root 7505 20858 0 15:09 pts/5 00:00:00 grep ons
oracle 10184 1 0 13:28 ? 00:00:00 /u01/app/oracle/product/10.2.0/db_2/perl/bin/perl /u01/app/oracle/product/10.2.0/db_2/bin/emwd.pl dbconsole /u01/app/oracle/product/10.2.0/db_2/rac2_RACDB2/sysman/log/emdb.nohup
oracle 26106 1 0 13:57 ? 00:00:00 /u01/app/oracle/product/10.2.0/db_1/opmn/bin/ons -d
oracle 26107 26106 0 13:57 ? 00:00:00 /u01/app/oracle/product/10.2.0/db_1/opmn/bin/ons -d
b.確認ONS服務的狀態
[root@rac2 bin]# ./onsctl ping
Number of onsconfiguration retrieved, numcfg = 2
onscfg[0]
{node = rac1, port = 6200}
Adding remote host rac1:6200
onscfg[1]
{node = rac2, port = 6200}
Adding remote host rac2:6200
ons is running ...
c.啟動、停止ONS
[root@rac2 bin]# ./onsctl start
[root@rac2 bin]# ./onsctl stop
d.使用debug選項,可以查看詳細信息,其中最有意義的就是能顯示所有連接。
[root@rac2 bin]# ./onsctl debug
Number of onsconfiguration retrieved, numcfg = 2
onscfg[0]
{node = rac1, port = 6200}
Adding remote host rac1:6200
onscfg[1]
{node = rac2, port = 6200}
Adding remote host rac2:6200
HTTP/1.1 200 OK
Content-Length: 1361
Content-Type: text/html
Response:
======== ONS ========
Listeners:
NAME BIND ADDRESS PORT FLAGS SOCKET
------- --------------- ----- -------- ------
Local 127.000.000.001 6113 00000142 7
Remote 192.168.090.005 6200 00000101 8
Request No listener
Server connections:
ID IP PORT FLAGS SENDQ WORKER BUSY SUBS
---------- --------------- ----- -------- ---------- -------- ------ -----
5 192.168.090.002 6200 00010025 0 1 0
Client connections:
ID IP PORT FLAGS SENDQ WORKER BUSY SUBS
---------- --------------- ----- -------- ---------- -------- ------ -----
3 127.000.000.001 6113 0001001a 0 1 0
4 127.000.000.001 6113 0001001a 0 1 1
Pending connections:
ID IP PORT FLAGS SENDQ WORKER BUSY SUBS
---------- --------------- ----- -------- ---------- -------- ------ -----
0 127.000.000.001 6113 00020812 0 1 0
Worker Ticket: 37/37, Idle: 360
THREAD FLAGS
-------- --------
b7f68b90 00000012
b6dabb90 00000012
b63aab90 00000012
Resources:
Notifications:
Received: 13, in Receive Q: 0, Processed: 13, in Process Q: 0
Pools:
Message: 24/25 (1), Link: 25/25 (1), Subscription: 24/25 (1)
4.3 srvctl
該命令是RAC維護中最常用的命令,也是最復雜的命令。 這個工具可以操作下面的幾種資源:Database,Instance,ASM,Service,Listener 和 Node Application,其中Node application又包括GSD,ONS,VIP。 這些資源除了使用srvctl工具統一管理外,某些資源還有自己獨立的管理工具,比如ONS可以使用onsctl命令進行管理;Listener
可以通過lsnrctl 管理。
[root@rac2 bin]# ./srvctl
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查看配置
a.查看數據庫配置
--不帶任何參數時,顯示OCR中注冊的所有數據庫
[root@rac2 bin]# ./srvctl config
RACDB
[root@rac2 bin]# ./srvctl config database
RACDB
--使用-d選項,查看某個數據庫配置
[root@rac2 bin]# ./srvctl config database -d racdb
rac1 RACDB1 /u01/app/oracle/product/10.2.0/db_2
rac2 RACDB2 /u01/app/oracle/product/10.2.0/db_2
注:該輸出結果顯示數據庫racdb由2個節點組成,各自實例名交racdb1和racdb2. 兩個實例的$ORACLE_HOME是/u01/app/oracle/product/10.2.0/db_2
--使用-a選項,查看配置的詳細信息
[root@rac2 bin]# ./srvctl config database -d racdb -a
rac1 RACDB1 /u01/app/oracle/product/10.2.0/db_2
rac2 RACDB2 /u01/app/oracle/product/10.2.0/db_2
DB_NAME: RACDB
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_2
SPFILE: +ORADATE/RACDB/spfileRACDB.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED
a. 查看Node Application的配置
--不帶任何參數,返回節點名,實例名和$ORACLE_HOME
[root@rac2 bin]# ./srvctl config nodeapps -n rac2
rac2 RACDB2 /u01/app/oracle/product/10.2.0/db_2
--使用-a選項,查看VIP配置
[root@rac2 bin]# ./srvctl config nodeapps -n rac2 -a
VIP exists.: /rac2-vip/192.168.90.4/255.255.255.0/eth0
--使用-g選項,查看GSD配置
[root@rac2 bin]# ./srvctl config nodeapps -n rac2 -g
GSD exists.
--使用-s選項,查看ONS配置
[root@rac2 bin]# ./srvctl config nodeapps -n rac2 -s
ONS daemon exists.
--使用-l選項,查看LISTENER配置
[root@rac2 bin]# ./srvctl config nodeapps -n rac2 -l
Listener exists.
b. 查看ASM
[root@rac2 bin]# ./srvctl config asm -n rac2
+ASM2 /u01/app/oracle/product/10.2.0/db_2
[root@rac2 bin]# ./srvctl config asm -n rac1
+ASM1 /u01/app/oracle/product/10.2.0/db_2
c. 查看Service
--查看數據庫所有service配置
[root@rac2 bin]# ./srvctl config service -d racdb -a
....a
--查看某個service配置
[root@rac2 bin]# ./srvctl config service -d racdb -s a
--使用-a選項,查看TAF策略
[root@rac2 bin]# ./srvctl config service -d racdb -s a -a
4.3.2 使用add添加對象
一般情況下,應用層資源都是在圖形界面的幫助下注冊到OCR中的,比如VIP,ONS實在安裝最後階段創建的,而數據庫,ASM是執行DBCA的過程中自動注冊到OCR中的,Listener是通過netca工具。 但是有些時候需要手工把資源注冊到OCR中。 這時候就需要add 命令了。
a. 添加數據庫
[root@rac2 bin]# ./srvctl add database -d db1 -o $ORACLE_HOME
b. 添加實例
[root@rac2 bin]# ./srvctl add instance -d db1 -n rac1 -i db11
[root@rac2 bin]# ./srvctl add instance -d db1 -n rac1 -i db12
c.添加服務,需要使用四個參數
-s:服務名
-r:首選實例名
-a:備選實例名
-P:taf策略,可選值為None(缺省值),Basic,preconnect
[root@rac2 bin]# ./srvctl add service -d db1 -s db1service -r rac1 -a rac2 -P BASIC
d.確認添加成功
[root@rac2 bin]# ./srvctl config service -d db1 -s db1service -a
4.3.3 使用enable/disable啟動、禁用對象
缺省情況下數據庫,實例,服務,ASM都是隨著CRS的啟動而自啟動的,有時候由於維護的需要,可以先關閉這個特性。
a. 配置數據庫隨CRS啟動而自啟動
--啟動數據庫的自啟動:
[root@rac2 bin]# ./srvctl enable database -d racdb
PRKP-1016 : Database racdb already enabled.
--查看配置
[root@rac2 bin]# ./srvctl config database -d racdb -a
rac1 RACDB1 /u01/app/oracle/product/10.2.0/db_2
rac2 RACDB2 /u01/app/oracle/product/10.2.0/db_2
DB_NAME: RACDB
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_2
SPFILE: +ORADATE/RACDB/spfileRACDB.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED
--禁止自啟動,那就需要手動啟動
[root@rac2 bin]# ./srvctl disable database -d racdb
b. 關閉某個實例的自啟動
[root@rac2 bin]# ./srvctl disable instance -d racdb -i racdb1
[root@rac2 bin]# ./srvctl enable instance -d racdb -i racdb1
--查看信息
[root@rac2 bin]# ./srvctl config database -d racdb -a
rac1 RACDB1 /u01/app/oracle/product/10.2.0/db_2
rac2 RACDB2 /u01/app/oracle/product/10.2.0/db_2
DB_NAME: RACDB
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_2
SPFILE: +ORADATE/RACDB/spfileRACDB.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED
c. 禁止某個服務在實例上運行
[root@rac2 bin]# ./srvctl disable service -d racdb -s racservice -i rac1
[root@rac2 bin]# ./srvctl enable service -d racdb -s racservice -i rac1
--查看服務名
[root@rac2 bin]# ./srvctl config service -d racdb -a
4.3.4 使用remove刪除對象
使用remove命令刪除的是對象在OCR中的定義信息,對象本身比如數據庫的數據文件等不會被刪除,以後隨時可以使用add命令重新添加到OCR中。
a. 刪除service 在刪除之前命令會給出確定提示
[root@rac2 bin]# ./srvctl remove service -d racdb -s racservice
b.刪除實例 //會提示
[root@rac2 bin]# ./srvctl remove instance -d racdb -i racdb1
Remove instance racdb1 from the database racdb? (y/[n])
c.數據數據庫
//冒險試了一下 也會給提示
[root@rac2 bin]# ./srvctl remove database -d racdb
Remove the database racdb? (y/[n])
4.3.5 啟動、停止對象和查看對象
在RAC 環境下啟動,關閉數據庫雖然仍然可以使用SQL/PLUS方法,但是更推薦使用srvctl命令來做這些工作,這可以保證即使更新CRS中運行信息,可以使用start/stop 命令啟動,停止對象,然後使用status 命令查看對象狀態。
a. 啟動數據庫,默認啟動到open狀態
[root@rac2 bin]# ./srvctl start database -d racdb
b. 啟動指定狀態
[root@rac2 bin]# ./srvctl start database -d racdb -i racdb1 -o mount
[root@rac2 bin]# ./srvctl start database -d racdb -i racdb1 -o nomount
c. 關閉對象,並制定關閉方式
[root@rac2 bin]# ./srvctl stop instance -d racdb -i racdb1 -o immediate
[root@rac2 bin]# ./srvctl stop instance -d racdb -i racdb1 -o abort
d.在指定實例上啟動服務
[root@rac2 bin]# ./srvctl start service -d racdb -s racservice -i racdb1
--查看服務狀態
[root@rac2 bin]# ./srvctl status service -d racdb -v
e. 關閉指定實例上的服務
[root@rac2 bin]# ./srvctl stop service -d racdb -s racservice -i racdb1
--查看服務狀態
[root@rac2 bin]# ./srvctl status service -d racdb -v
4.3.6 跟蹤srvctl
在Oracle 10g中要跟蹤srvctl 非常簡單,只要設置srvm_trace=true 這個OS環境變量即可,這個命令的所有函數調用都會輸出到屏幕上,可以幫助用戶進行診斷。
[root@rac2 bin]# export SRVM_TRACE=TRUE
[root@rac2 bin]# ./srvctl config database -d racdb
/u01/app/oracle/product/10.2.0/db_1/jdk/jre/bin/java -classpath /u01/app/oracle/product/10.2.0/db_1/jlib/netcfg.jar:/u01/app/oracle/product/10.2.0/db_1/jdk/jre/lib/rt.jar:/u01/app/oracle/product/10.2.0/db_1/jdk/jre/lib/i18n.jar:/u01/app/oracle/product/10.2.0/db_1/jlib/srvm.jar:/u01/app/oracle/product/10.2.0/db_1/jlib/srvmhas.jar:/u01/app/oracle/product/10.2.0/db_1/jlib/srvmasm.jar:/u01/app/oracle/product/10.2.0/db_1/srvm/jlib/srvctl.jar
-DTRACING.ENABLED=true -DTRACING.LEVEL=2 oracle.ops.opsctl.OPSCTLDriver config database -d racdb
[main] [16:1:30:670] [OPSCTLDriver.setInternalDebugLevel:165] tracing is true at level 2 to file null
[main] [16:1:30:705] [OPSCTLDriver.<init>:95] Security manager is set
[main] [16:1:30:716] [CommandLineParser.parse:173] parsing cmdline args
[main] [16:1:30:717] [CommandLineParser.parse2WordCommandOptions:940] parsing 2-word cmdline
[main] [16:1:30:718] [OPSCTLDriver.execute:174] executing srvctl command
[main] [16:1:30:718] [OPSCTLDriver.execute:199] executing 2-word command verb=10 noun=101
[main] [16:1:30:729] [Action.getOPSConfig:162] get db config for: racdb
[main] [16:1:30:730] [CommandLineParser.obtainOPSConfig:1410] srvctl: get db config for: racdb
[main] [16:1:30:745] [GetActiveNodes.create:213] Going into GetActiveNodes constructor...
[main] [16:1:30:750] [HASContext.getInstance:190] Module init : 16
[main] [16:1:30:751] [HASContext.getInstance:214] Local Module init : 19
[main] [16:1:30:770] [Library.getInstance:95] Created instance of Library.
[main] [16:1:30:771] [Library.load:195] Loading libsrvmhas10.so...
[main] [16:1:30:771] [Library.load:201] oracleHome null
E.DATABASES.racdb.INSTANCE.racdb1)
......
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
[root@rac2 bin]# ./srvctl add asm -n racdb1 -i +ASM1 -o /u01/app/oracle/admin/RACDB
[root@rac2 bin]# ./srvctl add asm -n racdb2 -i +ASM2 -o /u01/app/oracle/admin/RACDB
4.4.8 啟動ASM
./srvctl start asm -n rac1
./srvctl start asm -n rac2
// 若在啟動時報ORA-27550錯誤,是因為RAC無法確定使用哪個網卡作為PRIVATE INTERCONNECT,解決方法:在兩個ASM的pfile文件裡加入參數:
+ASM1.cluster_interconnects='192.168.90.3'
+ASM2.cluster_interconnects='192.168.90.6'
/* ORA-27550: Target ID protocol check failed. tid vers=number, type=number, remote instance number=number, local instance number=number
Cause: The local Oracle Real Application Cluster instance and remote instance are running with incompatible implementation of the inter-instance IPC protocol library. A misconfiguration or installation error occurred.
Action: Check additional error messages in the alert log and the process trace file. */
4.4.9 手工向OCR中添加DATABASE對象。
./srvctl add database -d racdb -o /u01/app/oracle/admin/RACDB
4.4.10 添加2個實例對象
./srvctl add instance -d racdb -i racdb1 -n rac1
./srvctl add instance -d racdb -i racdb2 -n rac2
4.4.11 修改實例和ASM實例的依賴關系
./srvctl modify instance -d racdb -i racdb1 -s +ASM1
./srvctl modify instance -d racdb -i racdb2 -s +ASM2
4.4.12 啟動數據庫
./srvctl start database -d racdb
本文參考:Oracle RAC 常用維護工具和命令 http://blog.csdn.net/tianlesoftware/article/details/5358573
《大話ORACLE RAC》