天天看點

Oracle RAC 常用維護工具和指令

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.

 Oifcfg 指令用來定義和修改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

-- 删除接口配置

[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

[root@raw1 bin]# ./crsctl check crsd

[root@raw1 bin]# ./crsctl check evmd

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

    CRSOCR

    CRSTIMER

    CRSEVT

    CRSD

    CLUCLS

    CSSCLNT

    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) 檢視目前配置

2)  停止所有節點的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)  确認添加後的情況:

5) 啟動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

        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

     2) 用root 使用者導出OCR内容

[root@raw1 bin]# ./ocrconfig -export /u01/ocr.exp

     3) 重新開機CRS

     4) 檢查CRS 狀态

    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一緻性

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

         Used space (kbytes)      :       4364

         Available space (kbytes) :     142988

         ID                       :  610419116

10) 使用cluvfy工具檢查

WARNING:

These nodes cannot be reached:

        raw2  

Verification will proceed with nodes:

        raw1

ERROR:

User equivalence unavailable on all the nodes.

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 -export /u01/ocrbackup -s online

2) 檢視目前OCR配置

輸出顯示目前隻有一個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) 确認添加成功

5)改變primary OCR 位置

[root@raw1 bin]# ./ocrconfig -replace ocr /dev/raw/raw3

确認修改成功:

    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

2) 使用-v 選項,檢視詳細内容,這時輸出多出4項内容,分别是允許重新開機次數,已執行重新開機次數,失敗閥值,失敗次數。

[root@raw1 bin]# ./crs_stat -v ora.raw2.vip

RESTART_ATTEMPTS=0

RESTART_COUNT=0

FAILURE_THRESHOLD=0

FAILURE_COUNT=0

3) 使用-p 選項檢視更詳細内容

[root@raw1 bin]# ./crs_stat -p ora.raw2.vip

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

HOSTING_MEMBERS=raw2

OPTIONAL_RESOURCES=

PLACEMENT=favored

REQUIRED_RESOURCES=

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

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:

         3 127.000.000.001  6100 0001001a          0               1     0

         4 127.000.000.001  6100 0001001a          0               1     1

Pending connections:

         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 -a

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

               -- 使用-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

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

[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

--檢視配置

-- 禁止資料庫在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

-- 檢視資訊

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

-- 檢視

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

4.3.6 跟蹤srvctl

在Oracle 10g中要跟蹤srvctl 非常簡單,隻要設定srvm_trace=true 這個OS環境變量即可,這個指令的所有函數調用都會輸出到螢幕上,可以幫助使用者進行診斷。

[root@raw1 bin]# export SRVM_TRACE=TRUE

/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';

Srvctl 指令的用法還有很多,下面是線上文檔的一個目錄,感興趣的可以自己研究下。 

本文轉自 張沖andy 部落格園部落格,原文連結: http://blog.csdn.net/tianlesoftware/article/details/5358573如需轉載請自行聯系原作者

本文轉自 張沖andy 部落格園部落格,原文連結:http://www.cnblogs.com/andy6/p/5766584.html   ,如需轉載請自行聯系原作者