Oracle的管理可以通过OEM或者命令行接口。OracleClusterware的命令集可以分为以下4种:
节点层:osnodes
网络层:oifcfg
集群层:crsctl,ocrcheck,ocrdump,ocrconfig
应用层:srvctl,onsctl,crs_stat
下面分别来介绍这些命令。
一.节点层
只有一个命令: osnodes,这个命令用来显示集群点列表,可用的参数如下,这些参数可以混合使用。
[root@raw1bin]#./olsnodes--help
Usage:olsnodes[-n][-p][-i][<node>|-l][-g][-v]
where
-nprintnodenumberwiththenodename
-pprintprivateinterconnectnamewiththenodename
-iprintvirtualIPnamewiththenodename
<node>printinformationforthespecifiednode
-lprintinformationforthelocalnode
-gturnonlogging
-vruninverbosemode
[root@raw1bin]#./olsnodes-n-p-i
raw11raw1-privraw1-vip
raw22raw2-privraw2-vip
二.网络层
网络层由各个节点的网络组件组成,包括2个物理网卡和3个IP地址。也只有一个命令:oifcfg.
Oifctg命令用来定义和修改Oracle集群需要的网卡属性,这些属性包括网卡的网段地址,子网掩码,接口类型等。要想正确的使用这个命令,必须先知道Oracle是如何定义网络接口的,Oracle的每个网络接口包括名称,网段地址,接口类型3个属性。
Oifcfg命令的格式如下:interface_name/subnet:interface_type
这些属性中没有IP地址,但接口类型有两种,public和private,前者说明接口用于外部通信,用于OracleNet和VIP地址,而后者说明接口用于Interconnect。
接口的配置方式分为两类:global和node-specific。前者说明集群所有节点的配置信息相同,也就是说所有节点的配置是对称的;而后者意味着这个节点的配置和其他节点配置不同,是非对称的。
Iflist:显示网口列表
Getif:获得单个网口信息
Setif:配置单个网口
Delif:删除网口
[root@raw1bin]#./oifcfg--help
PRIF-9:incorrectusage
Name:
oifcfg-OracleInterfaceConfigurationTool.
Usage:oifcfgiflist[-p[-n]]
oifcfgsetif{-node<nodename>|-global}{<if_name>/<subnet>:<if_type>}...
oifcfggetif[-node<nodename>|-global][-if<if_name>[/<subnet>][-type<if_type>]]
oifcfgdelif[-node<nodename>|-global][<if_name>[/<subnet>]]
oifcfg[-help]
<nodename>-nameofthehost,asknowntoacommunicationsnetwork
<if_name>-namebywhichtheinterfaceisconfiguredinthesystem
<subnet>-subnetaddressoftheinterface
<if_type>-typeoftheinterface{cluster_interconnect|public|storage}
[root@raw1bin]#./oifcfgiflist
eth010.85.10.0
eth1192.168.1.0
[root@raw1bin]#./oifcfggetif
eth010.85.10.119globalpublic
eth010.85.10.121globalpublic
eth010.85.10.0globalpublic
eth1192.168.1.119globalcluster_interconnect
eth1192.168.1.121globalcluster_interconnect
eth1192.168.1.0globalcluster_interconnect
--查看public类型的网卡
[root@raw1bin]#./oifcfggetif-typepublic
eth010.85.10.119globalpublic
eth010.85.10.121globalpublic
eth010.85.10.0globalpublic
--删除接口配置
[root@raw1bin]#./oifcfgdelif-global
--添加接口配置
[root@raw1bin]#./oifcfgsetif-globaleth0/192.168.1.119:public
[root@raw1bin]#./oifcfgsetif-globaleth1/10.85.10.119:cluster_interconnect
三.集群层
集群层是指由Clusterware组成的核心集群,这一层负责维护集群内的共享设备,并为应用集群提供完整的集群状态视图,应用集群依据这个视图进行调整。这一层共有4个命令:crsctl,ocrcheck,ocrdump,ocrconfig.后三个是针对OCR磁盘的。
3.1CRSCTL
Crsctl命令可以用来检查CRS进程栈,每个crs进程状态,管理Votedisk,跟踪CRS进程功能。
[root@raw1bin]#./crsctl
Usage:crsctlcheckcrs-checkstheviabilityoftheCRSstack
crsctlcheckcssd-checkstheviabilityofCSS
crsctlcheckcrsd-checkstheviabilityofCRS
crsctlcheckevmd-checkstheviabilityofEVM
crsctlsetcss<parameter><value>-setsaparameteroverride
crsctlgetcss<parameter>-getsthevalueofaCSSparameter
crsctlunsetcss<parameter>-setsCSSparametertoitsdefault
crsctlquerycssvotedisk-liststhevotingdisksusedbyCSS
crsctladdcssvotedisk<path>-addsanewvotingdisk
crsctldeletecssvotedisk<path>-removesavotingdisk
crsctlenablecrs-enablesstartupforallCRSdaemons
crsctldisablecrs-disablesstartupforallCRSdaemons
crsctlstartcrs-startsallCRSdaemons.
crsctlstopcrs-stopsallCRSdaemons.StopsCRSresourcesincaseofcluster.
crsctlstartresources-startsCRSresources.
crsctlstopresources-stopsCRSresources.
crsctldebugstatedumpevm-dumpsstateinfoforevmobjects
crsctldebugstatedumpcrs-dumpsstateinfoforcrsobjects
crsctldebugstatedumpcss-dumpsstateinfoforcssobjects
crsctldebuglogcss[module:level]{,module:level}...
-TurnsondebuggingforCSS
crsctldebugtracecss-dumpsCSSin-memorytracingcache
crsctldebuglogcrs[module:level]{,module:level}...
-TurnsondebuggingforCRS
crsctldebugtracecrs-dumpsCRSin-memorytracingcache
crsctldebuglogevm[module:level]{,module:level}...
-TurnsondebuggingforEVM
crsctldebugtraceevm-dumpsEVMin-memorytracingcache
crsctldebuglogres<resname:level>turnsondebuggingforresources
crsctlquerycrssoftwareversion[<nodename>]-liststheversionofCRSsoftwareinstalled
crsctlquerycrsactiveversion-liststheCRSsoftwareoperatingversion
crsctllsmodulescss-liststheCSSmodulesthatcanbeusedfordebugging
crsctllsmodulescrs-liststheCRSmodulesthatcanbeusedfordebugging
crsctllsmodulesevm-liststheEVMmodulesthatcanbeusedfordebugging
Ifnecesaryanyofthesecommandscanberunwithadditionaltracingby
addinga"trace"argumentattheveryfront.
Example:crsctltracecheckcss
3.1.1检查CRS状态
[root@raw1bin]#./crsctlcheckcrs
CSSappearshealthy
CRSappearshealthy
EVMappearshealthy
--检查单个状态
[root@raw1bin]#./crsctlcheckcssd
CSSappearshealthy
[root@raw1bin]#./crsctlcheckcrsd
CRSappearshealthy
[root@raw1bin]#./crsctlcheckevmd
EVMappearshealthy
3.1.2配置CRS栈是否自启动
CRS进程栈默认随着操作系统的启动而自启动,有时出于维护目的需要关闭这个特性,可以用root用户执行下面命令。
[root@raw1bin]#./crsctldisablecrs
[root@raw1bin]#./crsctlenablecrs
这个命令实际是修改了/etc/oracle/scls_scr/raw/root/crsstart这个文件里的内容。
3.1.3启动,停止CRS栈。
Oracle在10.1时,必须通过重新启动系统重启Clusterware,但是从Oracle10.2开始,可以通过命令来启动和停止CRS.
--启动CRS:
[root@raw1bin]#./crsctlstartcrs
AttemptingtostartCRSstack
TheCRSstackwillbestartedshortly
--关闭CRS:
[root@raw1bin]#./crsctlstopcrs
Stoppingresources.
SuccessfullystoppedCRSresources
StoppingCSSD.
ShuttingdownCSSdaemon.
Shutdownrequestsuccessfullyissued.
3.1.4查看Votedisk磁盘位置
[root@raw1bin]#./crsctlquerycssvotedisk
0.0/dev/raw/raw2
located1votedisk(s).
3.1.5查看和修改CRS参数
--查看参数:用get
[root@raw1bin]#./crsctlgetcssmisscount
60
--修改参数:用set,但是这个功能要慎用
[root@raw1bin]#./crsctlsetcssmiscount60
3.1.6跟踪CRS模块,提供辅助功能
CRS由CRS,CSS,EVM三个服务组成,每个服务又是由一系列module组成,crsctl允许对每个module进行跟踪,并把跟踪内容记录到日志中。
[root@raw1bin]#./crsctllsmodulescss
ThefollowingaretheCSSmodules::
CSSD
COMMCRS
COMMNS
[root@raw1bin]#./crsctllsmodulescrs
ThefollowingaretheCRSmodules::
CRSUI
CRSCOMM
CRSRTI
CRSMAIN
CRSPLACE
CRSAPP
CRSRES
CRSCOMM
CRSOCR
CRSTIMER
CRSEVT
CRSD
CLUCLS
CSSCLNT
COMMCRS
COMMNS
[root@raw1bin]#./crsctllsmodulesevm
ThefollowingaretheEVMmodules::
EVMD
EVMDMAIN
EVMCOMM
EVMEVT
EVMAPP
EVMAGENT
CRSOCR
CLUCLS
CSSCLNT
COMMCRS
COMMNS
--跟踪CSSD模块,需要root用户执行:
[root@raw1bin]#./crsctldebuglogcss"CSSD:1"
Configurationparametertraceisnowsetto1.
SetCRSDDebugModule:CSSDLevel:1
--查看跟踪日志
[root@raw1cssd]#pwd
/u01/app/oracle/product/crs/log/raw1/cssd
[root@raw1cssd]#moreocssd.log
...
[CSSD]2010-03-0800:19:27.160[36244384]>TRACE:clssscSetDebugLevel:Thelogginglevelissetto1,thecachelevelissetto2
[CSSD]2010-03-0800:19:52.139[119085984]>TRACE:clssgmClientConnectMsg:Connectfromcon(0x834fd18)proc(0x8354c70)pid()proto(10:2:1:1)
...
3.1.7维护Votedisk
以图新方式安装Clusterware的过程中,在配置Votedisk时,如果选择ExternalRedundancy策略。则只能填写一个Votedisk。但是即使使用ExternalRedundancy作为冗余策略,也可以添加多个Vodedisk,只是必须通过crsctl命令来添加,添加多个Votedisk后,这些Votedisk互为镜像,可以防止Votedisk的单点故障。
需要注意的是,Votedisk使用的是一种“多数可用算法”,如果有多个Votedisk,,则必须一半以上的Votedisk同时使用,Clusterware才能正常使用。比如配置了4个Votedisk,坏一个Votedisk,集群可以正常工作,如果坏了2个,则不能满足半数以上,集群会立即宕掉,所有节点立即重启,所以如果添加Votedisk,尽量不要只添加一个,而应该添加2个。这点和OCR不一样。OCR只需配置一个。
添加和删除Votedisk的操作比较危险,必须停止数据库,停止ASM,停止CRSStack后操作,并且操作时必须使用-force参数。
1)查看当前配置
[root@raw1bin]#./crsctlquerycssvotedisk
2)停止所有节点的CRS:
[root@raw1bin]#./crsctlstopcrs
3)添加Votedisk
[root@raw1bin]#./crsctladdcssvotedisk/dev/raw/raw1-force
注意:即使在CRS关闭后,也必须通过-force参数来添加和删除Votedisk,并且-force参数只有在CRS关闭的场合下使用才安全。否则会报:Cluterisnotareadystateforonlinediskaddition.
4)确认添加后的情况:
[root@raw1bin]#./crsctlquerycssvotedisk
5)启动CRS
[root@raw1bin]#./crsctlstartcrs
3.2OCR命令系列
OracleClusterware把整个集群的配置信息放在共享存储上,这个存储就是OCRDisk.在整个集群中,只有一个节点能对OCRDisk进行读写操作,这个节点叫作MasterNode,所有节点都会在内存中保留一份OCR的拷贝,同时哟一个OCRProcess从这个内存中读取内容。OCR内容发生改变时,由MasterNode的OCRProcess负责同步到其他节点的OCRProcess。
因为OCR的内容如此重要,Oracle每4个小时对其做一次备份,并且保留最后的3个备份,以及前一天,前一周的最后一个备份。这个备份由MasterNodeCRSD进程完成,备份的默认位置是$CRS_HOME/crs/cdata/<cluster_name>目录下。每次备份后,备份文件名自动更改,以反应备份时间顺序,最近一次的备份叫作backup00.ocr。这些备份文件除了保存在本地,DBA还应该在其他存储设备上保留一份,以防止意外的存储故障。
3.2.1ocrdump
该命令能以ASCII的方式打印出OCR的内容,但是这个命令不能用作OCR的备份恢复,也就是说产生的文件只能用作阅读,而不能用于恢复。
命令格式:ocrdump[-stdout][filename][-keynamename][-xml]
参数说明:
-stdout:把内容打印输出到屏幕上
Filename:内容输出到文件中
-keyname:只打印某个键及其子健内容
-xml:以xml格式打印输出
示例:把system.css键的内容以.xml格式打印输出到屏幕
[root@raw1bin]#./ocrdump-stdout-keynamesystem.css-xml|more
<OCRDUMP>
<TIMESTAMP>03/08/201004:28:41</TIMESTAMP>
<DEVICE>/dev/raw/raw1</DEVICE>
<COMMAND>./ocrdump.bin-stdout-keynamesystem.css-xml</COMMAND>
......
这个命令在执行过程中,会在$CRS_HOME/log/<node_name>/client目录下产生日志文件,文件名ocrdump_<pid>.log,如果命令执行出现问题,可以从这个日志查看问题原因。
3.2.2ocrcheck
Ocrcheck命令用于检查OCR内容的一致性,命令执行过程会在$CRS_HOME/log/nodename/client目录下产生ocrcheck_pid.log日志文件。这个命令不需要参数。
[root@raw1bin]#./ocrcheck
StatusofOracleClusterRegistryisasfollows:
Version:2
Totalspace(kbytes):147352
Usedspace(kbytes):4360
Availablespace(kbytes):142992
ID:1599790592
Device/FileName:/dev/raw/raw1
Device/Fileintegritychecksucceeded
Device/Filenotconfigured
Clusterregistryintegritychecksucceeded
3.2.3ocrconfig
该命令用于维护OCR磁盘,安装clusterware过程中,如果选择ExternalRedundancy冗余方式,则只能输入一个OCR磁盘位置。但是Oracle允许配置两个OCR磁盘互为镜像,以防止OCR磁盘的单点故障。OCR磁盘和Votedisk磁盘不一样,OCR磁盘最多只能有两个,一个PrimaryOCR和一个MirrorOCR。
[root@raw1bin]#./ocrconfig--help
Name:
ocrconfig-ConfigurationtoolforOracleClusterRegistry.
Synopsis:
ocrconfig[option]
option:
-export<filename>[-sonline]
-Exportclusterregistercontentstoafile
-import<filename>-Importclusterregistrycontentsfromafile
-upgrade[<user>[<group>]]
-Upgradeclusterregistryfrompreviousversion
-downgrade[-version<versionstring>]
-Downgradeclusterregistrytothespecifiedversion
-backuploc<dirname>-Configureperiodicbackuplocation
-showbackup-Showbackupinformation
-restore<filename>-Restorefromphysicalbackup
-replaceocr|ocrmirror[<filename>]-Add/replace/removeaOCRdevice/file
-overwrite-OverwriteOCRconfigurationondisk
-repairocr|ocrmirror<filename>-RepairlocalOCRconfiguration
-help-Printoutthishelpinformation
Note:
Alogfilewillbecreatedin
$ORACLE_HOME/log/<hostname>/client/ocrconfig_<pid>.log.Pleaseensure
youhavefilecreationprivilegesintheabovedirectorybefore
runningthistool.
--查看自助备份
[root@raw1bin]#./ocrconfig-showbackup
在缺省情况下,OCR自动备份在$CRS_HOME/CRS/CDATA/cluster_name目录下,可以通过ocrconfig-backuploc<directory_name>命令修改到新的目录
3.2.4使用导出,导入进行备份和恢复
Oracle推荐在对集群做调整时,比如增加,删除节点之前,应该对OCR做一个备份,可以使用export备份到指定文件,如果做了replace或者restore等操作,Oracle建议使用cluvfycompocr-nall命令来做一次全面的检查。该命令在clusterware的安装软件里。
1)首先关闭所有节点的CRS
[root@raw1bin]#./crsctlstopcrs
Stoppingresources.
SuccessfullystoppedCRSresources
StoppingCSSD.
ShuttingdownCSSdaemon.
Shutdownrequestsuccessfullyissued.
2)用root用户导出OCR内容
[root@raw1bin]#./ocrconfig-export/u01/ocr.exp
3)重启CRS
[root@raw1bin]#./crsctlstartcrs
AttemptingtostartCRSstack
TheCRSstackwillbestartedshortly
4)检查CRS状态
[root@raw1bin]#./crsctlcheckcrs
CSSappearshealthy
CRSappearshealthy
EVMappearshealthy
5)破坏OCR内容
[root@raw1bin]#ddif=/dev/zeroof=/dev/raw/raw1bs=1024count=102400
102400+0recordsin
102400+0recordsout
6)检查OCR一致性
[root@raw1bin]#./ocrcheck
PROT-601:Failedtoinitializeocrcheck
7)使用cluvfy工具检查一致性
[root@raw1cluvfy]#./runcluvfy.shcompocr-nall
VerifyingOCRintegrity
UnabletoretrievenodelistfromOracleclusterware.
Verificationcannotproceed.
8)使用Import恢复OCR内容
[root@raw1bin]#./ocrconfig-import/u01/ocr.exp
9)再次检查OCR
[root@raw1bin]#./ocrcheck
StatusofOracleClusterRegistryisasfollows:
Version:2
Totalspace(kbytes):147352
Usedspace(kbytes):4364
Availablespace(kbytes):142988
ID:610419116
Device/FileName:/dev/raw/raw1
Device/Fileintegritychecksucceeded
Device/Filenotconfigured
Clusterregistryintegritychecksucceeded
10)使用cluvfy工具检查
[root@raw1cluvfy]#./runcluvfy.shcompocr-nall
VerifyingOCRintegrity
WARNING:
Thesenodescannotbereached:
raw2
Verificationwillproceedwithnodes:
raw1
ERROR:
Userequivalenceunavailableonallthenodes.
Verificationcannotproceed.
VerificationofOCRintegritywasunsuccessfulonallthenodes.
注:此处不成功是因为我的机器卡,故raw2节点没有启动
3.2.5移动OCR文件位置
实例演示将OCR从/dev/raw/raw1移动到/dev/raw/raw3上。
1)查看是否有OCR备份
[root@raw1bin]#./ocrconfig-showbackup
如果没有备份,可以立即执行一次导出作为备份:
[root@raw1bin]#./ocrconfig-export/u01/ocrbackup-sonline
2)查看当前OCR配置
[root@raw1bin]#./ocrcheck
StatusofOracleClusterRegistryisasfollows:
Version:2
Totalspace(kbytes):147352
Usedspace(kbytes):4364
Availablespace(kbytes):142988
ID:610419116
Device/FileName:/dev/raw/raw1
Device/Fileintegritychecksucceeded
Device/Filenotconfigured
Clusterregistryintegritychecksucceeded
输出显示当前只有一个PrimaryOCR,在/dev/raw/raw1。没有MirrorOCR。因为现在只有一个OCR文件,所以不能直接改变这个OCR的位置,必须先添加镜像后在修改,否则会报:Failedtoinitializeocrconfig.
3)添加一个MirrorOCR
[root@raw1bin]#./ocrconfig-replaceocrmirror/dev/raw/raw4
4)确认添加成功
[root@raw1bin]#./ocrcheck
5)改变primaryOCR位置
[root@raw1bin]#./ocrconfig-replaceocr/dev/raw/raw3
确认修改成功:
[root@raw1bin]#./ocrcheck
6)使用ocrconfig命令修改后,所有RAC节点上的/etc/oracle/ocr.loc文件内容也会自动同步了,如果没有自动同步,可以手工的改成以下内容。
[root@raw1bin]#more/etc/oracle/ocr.loc
ocrconfig_loc=/dev/raw/raw1
Ocrmirrorconfig_loc=/dev/raw/raw3
local_only=FALSE
四.应用层
应用层就是指RAC数据库了,这一层有若干资源组成,每个资源都是一个进程或者一组进程组成的完整服务,这一层的管理和维护都是围绕这些资源进行的。有如下命令:srvctl,onsctl,crs_stat三个命令。
4.1crs_stat
Crs_stat这个命令用于查看CRS维护的所有资源的运行状态,如果不带任何参数时,显示所有资源的概要信息。每个资源显示是各个属性:资源名称,类型,目录,资源运行状态等。
[root@raw1bin]#./crs_stat
NAME=ora.raw.db
TYPE=application
TARGET=ONLINE
STATE=OFFLINE
......
也可以指定资源名,查看指定资源的状态,并可以使用-V和-P选项,以查看详细信息,其中-p参数显示的内容比-V更详细。
1)查看制定资源状态
[root@raw1bin]#./crs_statora.raw2.vip
NAME=ora.raw2.vip
TYPE=application
TARGET=ONLINE
STATE=OFFLINE
2)使用-v选项,查看详细内容,这时输出多出4项内容,分别是允许重启次数,已执行重启次数,失败阀值,失败次数。
[root@raw1bin]#./crs_stat-vora.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@raw1bin]#./crs_stat-pora.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=CRSapplicationforVIPonanode
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=/assysdba
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@raw1bin]#./crs_stat-ls
NameOwnerPrimaryPrivGrpPermission
-----------------------------------------------------------------
ora.raw.dboracleoinstallrwxrwxr--
ora.raw.dmm.csoracleoinstallrwxrwxr--
ora....aw2.srvoracleoinstallrwxrwxr--
ora....w1.instoracleoinstallrwxrwxr--
ora....w2.instoracleoinstallrwxrwxr--
ora....SM1.asmoracleoinstallrwxrwxr--
ora....W1.lsnroracleoinstallrwxrwxr--
ora.raw1.gsdoracleoinstallrwxr-xr--
ora.raw1.onsoracleoinstallrwxr-xr--
ora.raw1.viprootoinstallrwxr-xr--
ora....SM2.asmoracleoinstallrwxrwxr--
ora....W2.lsnroracleoinstallrwxrwxr--
ora.raw2.gsdoracleoinstallrwxr-xr--
ora.raw2.onsoracleoinstallrwxr-xr--
ora.raw2.viprootoinstallrwxr-xr--
4.2onsctl
这个命令用于管理配置ONS(OracleNotificationService).ONS是OracleClusterware实现FANEventPush模型的基础。
在传统模型中,客户端需要定期检查服务器来判断服务端状态,本质上是一个pull模型,Oracle10g引入了一个全新的PUSH机制--FAN(FastApplicationNotification),当服务端发生某些事件时,服务器会主动的通知客户端这种变化,这样客户端就能尽早得知服务端的变化。而引入这种机制就是依赖ONS实现,在使用onsctl命令之前,需要先配置ONS服务。
4.2.1ONS配置内容
在RAC环境中,需要使用$CRS_HOME下的ONS,而不是$ORACLE_HOME下面的ONS,这点需要注意。配置文件在$CRS_HOME/opmn/conf/ons.config.
[root@raw1conf]#pwd
/u01/app/oracle/product/crs/opmn/conf
[root@raw1conf]#moreons.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:这两个参数共同决定饿了本地的ONSdaemon要和哪些远程节点上的ONSdaemon进行通信。
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用户来执行,不会提示任何错误,但也不会更改任何配置。
若要添加配置,可以使用下面命令:
Racgonsadd_configrac1:6200rac2:6200
若要删除配置,可以用下面命令:
Racgonsremove_configrac1:6200rac2:6200
4.2.3onsctl命令
使用onsctl命令可以启动,停止,调试ONS,并重新载入配置文件,其命令格式如下:
[root@raw1bin]#./onsctl
usage:./onsctlstart|stop|ping|reconfig|debug
start-Startopmnonly.
stop-Stoponsdaemon
ping-Testtoseeifonsdaemonisrunning
debug-Displaydebuginformationfortheonsdaemon
reconfig-Reloadtheonsconfiguration
help-Printashortsyntaxdescription(this).
detailed-Printaverbosesyntaxdescription.
ONS进程运行,并不一定代表ONS正常工作,需要使用ping命令来确认。
1)在OS级别查看进程状态。
[root@raw1bin]#ps-aef|grepons
root19246953003:17pts/100:00:00grepons
oracle3072310Mar08?00:00:00/u01/app/oracle/product/crs/opmn/bin/ons-d
oracle30724307230Mar08?00:00:04/u01/app/oracle/product/crs/opmn/bin/ons-d
2)确认ONS服务的状态
[root@raw1bin]#./onsctlping
Numberofonsconfigurationretrieved,numcfg=2
onscfg[0]
{node=raw1,port=6200}
Addingremotehostraw1:6200
onscfg[1]
{node=raw2,port=6200}
Addingremotehostraw2:6200
onsisrunning...
3)启动ONS服务
[root@raw1bin]#./onsctlstart
4)使用debug选项,可以查看详细信息,其中最有意义的就是能显示所有连接。
[root@raw1bin]#./onsctldebug
Numberofonsconfigurationretrieved,numcfg=2
onscfg[0]
{node=raw1,port=6200}
Addingremotehostraw1:6200
onscfg[1]
{node=raw2,port=6200}
Addingremotehostraw2:6200
HTTP/1.1200OK
Content-Length:1357
Content-Type:text/html
Response:
========ONS========
Listeners:
NAMEBINDADDRESSPORTFLAGSSOCKET
-----------------------------------------
Local127.000.000.0016100000001427
Remote010.085.010.1196200000001018
RequestNolistener
Serverconnections:
IDIPPORTFLAGSSENDQWORKERBUSYSUBS
-------------------------------------------------------------------
1010.085.010.121620000104205010
Clientconnections:
IDIPPORTFLAGSSENDQWORKERBUSYSUBS
-------------------------------------------------------------------
3127.000.000.00161000001001a010
4127.000.000.00161000001001a011
Pendingconnections:
IDIPPORTFLAGSSENDQWORKERBUSYSUBS
-------------------------------------------------------------------
0127.000.000.001610000020812010
WorkerTicket:3/3,Idle:180
THREADFLAGS
----------------
17faba000000012
67f6ba000000012
32d6ba000000012
Resources:
Notifications:
Received:1,inReceiveQ:0,Processed:1,inProcessQ:0
Pools:
Message:24/25(1),Link:25/25(1),Subscription:24/25(1)
[root@raw1bin]#
4.3srvctl
该命令是RAC维护中最常用的命令,也是最复杂的命令。这个工具可以操作下面的几种资源:Database,Instance,ASM,Service,Listener和NodeApplication,其中Nodeapplication又包括GSD,ONS,VIP。这些资源除了使用srvctl工具统一管理外,某些资源还有自己独立的管理工具,比如ONS可以使用onsctl命令进行管理;Listener可以通过lsnrctl管理。
[root@raw1bin]#./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
Fordetailedhelponeachcommandandobjectanditsoptionsuse:
srvctl<command><object>-h
4.3.1使用config查看配置
1)查看数据库配置
--不带任何参数时,显示OCR中注册的所有数据库
[root@raw1bin]#./srvctlconfigdatabase
raw
--使用-d选项,查看某个数据库配置
[root@raw1bin]#./srvctlconfigdatabase-draw
raw1raw1/u01/app/oracle/product/10.2.0/db_1
raw2raw2/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@raw1bin]#./srvctlconfigdatabase-draw
raw1raw1/u01/app/oracle/product/10.2.0/db_1
raw2raw2/u01/app/oracle/product/10.2.0/db_1
[root@raw1bin]#./srvctlconfigdatabase-draw-a
raw1raw1/u01/app/oracle/product/10.2.0/db_1
raw2raw2/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
ENABLEFLAG:DBENABLED
2)查看NodeApplication的配置
--不带任何参数,返回节点名,实例名和$ORACLE_HOME
[root@raw1bin]#./srvctlconfignodeapps-nraw1
raw1raw1/u01/app/oracle/product/10.2.0/db_1
--使用-a选项,查看VIP配置
[root@raw1bin]#./srvctlconfignodeapps-nraw1-a
VIPexists.:/raw1-vip/10.85.10.122/255.255.255.0/eth0
--使用-g选项,查看GSD:
[root@raw1bin]#./srvctlconfignodeapps-nraw1-g
GSDexists.
--使用-s选项,查看ONS:
[root@raw1bin]#./srvctlconfignodeapps-nraw1-s
ONSdaemonexists.
--使用-l选项,查看Listener:
[root@raw1bin]#./srvctlconfignodeapps-nraw1-l
Listenerexists.
3)查看Listener.
[root@raw1bin]#./srvctlconfiglistener-nraw1
raw1LISTENER_RAW1
[root@raw1bin]#./srvctlconfiglistener-nraw2
raw2LISTENER_RAW2
4)查看ASM
[root@raw1bin]#./srvctlconfigasm-nraw1
+ASM1/u01/app/oracle/product/10.2.0/db_1
[root@raw1bin]#./srvctlconfigasm-nraw2
+ASM2/u01/app/oracle/product/10.2.0/db_1
5)查看Service
--查看数据库所有service配置
[root@raw1bin]#./srvctlconfigservice-draw-a
dmmPREF:raw2AVAIL:raw1TAF:basic
--查看某个Service配置
[root@raw1bin]#./srvctlconfigservice-draw-sdmm
dmmPREF:raw2AVAIL:raw1
--使用-a选项,查看TAF策略
[root@raw1bin]#./srvctlconfigservice-draw-sdmm-a
dmmPREF:raw2AVAIL:raw1TAF:basic
一般情况下,应用层资源都是在图形界面的帮助下注册到OCR中的,比如VIP,ONS实在安装最后阶段创建的,而数据库,ASM是执行DBCA的过程中自动注册到OCR中的,Listener是通过netca工具。但是有些时候需要手工把资源注册到OCR中。这时候就需要add命令了。
1)添加数据库
[root@raw1bin]#./srvctladddatabase-ddmm-o$ORACLE_HOME
2)添加实例
[root@raw1bin]#./srvctladdinstance-ddmm-nrac1-idmm1
[root@raw1bin]#./srvctladdinstance-ddmm-nrac2-idmm2
3)添加服务,需要使用4个参数
-s:服务名
-r:首选实例名
-a:备选实例名
-P:TAF策略,可选值为None(缺省值),Basic,preconnect。
[root@raw1bin]#./srvctladdservice-ddmm-sdmmservice-rrac1-arac2-PBASIC
4)确认添加成功
[root@raw1bin]#./srvctlconfigservice-ddmm-sdmmservice-a
4.3.3使用enable/disable启动,禁用对象
缺省情况下数据库,实例,服务,ASM都是随着CRS的启动而自启动的,有时候由于维护的需要,可以先关闭这个特性。
1)配置数据库随CRS的启动而自动启动
--启用数据库的自启动:
[root@raw1bin]#./srvctlenabledatabase-draw
--查看配置
[root@raw1bin]#./srvctlconfigdatabase-draw-a
raw1raw1/u01/app/oracle/product/10.2.0/db_1
raw2raw2/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
ENABLEFLAG:DBENABLED
--禁止数据库在CRS启动后自启动,这时需要手动启动
[root@raw1bin]#./srvctldisabledatabase-draw
2)关闭某个实例的自动启动
[root@raw1bin]#./srvctldisableinstance-draw-iraw1
[root@raw1bin]#./srvctlenableinstance-draw-iraw1
--查看信息
[root@raw1bin]#./srvctlconfigdatabase-draw-a
raw1raw1/u01/app/oracle/product/10.2.0/db_1
raw2raw2/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
ENABLEFLAG:DBENABLED
3)禁止某个服务在实例上运行
[root@raw1bin]#./srvctlenableservice-draw-srawservice-iraw1
[root@raw1bin]#./srvctldisableservice-draw-srawservice-iraw1
--查看
[root@raw1bin]#./srvctlconfigservice-draw-a
dmmPREF:raw2AVAIL:raw1TAF:basic
4.3.4使用remove删除对象
使用remove命令删除的是对象在OCR中的定义信息,对象本省比如数据库的数据文件等不会被删除,以后随时可以使用add命令重新添加到OCR中。
1)删除Service,在删除之前,命令会给出确定提示
[root@raw1bin]#./srvctlremoveservice-draw-srawservice
2)删除实例,删除之前同样会给出提示
[root@raw1bin]#./srvctlremoveinstance-draw-iraw1
3)删除数据库
[root@raw1bin]#./srvctlremovedatabase-draw
4.3.5启动,停止对象与查看对象
在RAC环境下启动,关闭数据库虽然仍然可以使用SQL/PLUS方法,但是更推荐使用srvctl命令来做这些工作,这可以保证即使更新CRS中运行信息,可以使用start/stop命令启动,停止对象,然后使用status命令查看对象状态。
1)启动数据库,默认启动到open状态
[root@raw1bin]#./srvctlstartdatabase-draw
2)指定启动状态
[root@raw1bin]#./srvctlstartdatabase-draw-iraw1-omount
[root@raw1bin]#./srvctlstartdatabase-draw-iraw1-onomount
3)关闭对象,并指定关闭方式
[root@raw1bin]#./srvctlstopinstance-draw-iraw1-oimmediate
[root@raw1bin]#./srvctlstopinstance-draw-iraw1-oabort
4)在指定实例上启动服务:
[root@raw1bin]#./srvctlstartservice-draw-srawservice-iraw1
--查看服务状态
[root@raw1bin]#./srvctlstatusservice-draw-v
5)关闭指定实例上的服务
[root@raw1bin]#./srvctlstopservice-draw-srawservice-iraw1
--查看服务状态
[root@raw1bin]#./srvctlstatusservice-draw-v
4.3.6跟踪srvctl
在Oracle10g中要跟踪srvctl非常简单,只要设置srvm_trace=true这个OS环境变量即可,这个命令的所有函数调用都会输出到屏幕上,可以帮助用户进行诊断。
[root@raw1bin]#exportSRVM_TRACE=TRUE
[root@raw1bin]#./srvctlconfigdatabase-draw
/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=2oracle.ops.opsctl.OPSCTLDriverconfigdatabase-draw
[main][6:58:44:858][OPSCTLDriver.setInternalDebugLevel:165]tracingistrueatlevel2tofilenull
[main][6:58:44:911][OPSCTLDriver.<init>:95]Securitymanagerisset
[main][6:58:44:955][CommandLineParser.parse:173]parsingcmdlineargs
[main][6:58:44:959][CommandLineParser.parse2WordCommandOptions:940]parsing2-wordcmdline
[main][6:58:44:961][OPSCTLDriver.execute:174]executingsrvctlcommand
[main][6:58:44:963][OPSCTLDriver.execute:199]executing2-wordcommandverb=10noun=101
[main][6:58:44:995][Action.getOPSConfig:162]getdbconfigfor:raw
[main][6:58:45:2][CommandLineParser.obtainOPSConfig:1410]srvctl:getdbconfigfor:raw
[main][6:58:45:47][GetActiveNodes.create:213]GoingintoGetActiveNodesconstructor...
......
4.4恢复
假设OCR磁盘和Votedisk磁盘全部破坏,并且都没有备份,该如何恢复,这时最简单的方法就是重新初始话OCR和Votedisk,具体操作如下:
4.4.1停止所有节点的ClusterwareStack
Crsctlstopcrs;
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
#srvctladdasm-nrac1-i+ASM1-o/u01/app/product/database
#srvctladdasm-nrac2-i+ASM2-o/u01/app/product/database
4.4.8启动ASM
#srvctlstartasm-nrac1
#srvctlstartasm-nrac2
若在启动时报ORA-27550错误。是因为RAC无法确定使用哪个网卡作为PrivateInterconnect,解决方法:在两个ASM的pfile文件里添加如下参数:
+ASM1.cluster_interconnects='10.85.10.119'
+ASM2.cluster_interconnects='10.85.10.121'
4.4.9手工向OCR中添加Database对象。
#srvctladddatabase-draw-o/u01/app/product/database
4.4.10添加2个实例对象
#srvctladdinstance-draw-iraw1-nraw1
#srvctladdinstance-draw-iraw2-nraw2
4.4.11修改实例和ASM实例的依赖关系
#srvctlmodifyinstance-draw-iraw1-s+ASM1
#srvctlmodifyinstance-draw-iraw2-s+ASM2
4.4.12启动数据库
#srvctlstartdatabase-draw
若也出现ORA-27550错误。也是因为RAC无法确定使用哪个网卡作为PrivateInterconnect,修改pfile参数在重启动即可解决。
SQL>altersystemsetcluster_interconnects='10.85.10.119'scope=spfilesid='raw1';
SQL>altersystemsetcluster_interconnects='10.85.10.121'scope=spfilesid='raw2';
Srvctl命令的用法还有很多,下面是在线文档的一个目录,感兴趣的可以自己研究下。
http://download-west.oracle.com/docs/cd/B19306_01/rac.102/b14197/toc.htm
注:本文整理自<大话OracleRAC>