rac常用維護工具和命令

dawn009發表於2014-03-19

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] [ | -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

                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 | -global} {/:}...

        oifcfg getif [-node | -global] [ -if [/] [-type ] ]

        oifcfg delif [-node | -global] [[/]]

        oifcfg [-help]

 

        - name of the host, as known to a communications network

          - name by which the interface is configured in the system

           - subnet address of the interface

          - 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 - sets a parameter override

       crsctl get    css - gets the value of a CSS parameter

       crsctl unset  css - sets CSS parameter to its default

       crsctl query  css votedisk    - lists the voting disks used by CSS

       crsctl add    css votedisk - adds a new voting disk

       crsctl delete css votedisk - 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 turns on debugging for resources

       crsctl query crs softwareversion [] - 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/目錄下。 每次備份後,備份檔名自動更改,以反應備份時間順序,最近一次的備份叫作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

 

03/08/2010 04:28:41

/dev/raw/raw1

./ocrdump.bin -stdout -keyname system.css -xml

......

 

這個命令在執行過程中,會在$CRS_HOME/log//client 目錄下產生日誌檔案,檔名ocrdump_.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 [-s online]

                                                    - Export cluster register contents to a file

                -import                   - Import cluster registry contents from a file

                -upgrade [ []]

                                                    - Upgrade cluster registry from previous version

                -downgrade [-version ]

                                                    - Downgrade cluster registry to the specified version

                -backuploc                 - Configure periodic backup location

                -showbackup                         - Show backup information

                -restore                  - Restore from physical backup

                -replace ocr|ocrmirror [] - Add/replace/remove a OCR device/file

                -overwrite                          - Overwrite OCR configuration on disk

                -repair ocr|ocrmirror     - Repair local OCR configuration

                -help                               - Print out this help information

Note:

        A log file will be created in

        $ORACLE_HOME/log//client/ocrconfig_.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 命令修改到新的目錄

 

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: 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 -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.: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 命令的用法還有很多,下面是線上文件的一個目錄,感興趣的可以自己研究下。 

 

 

 

 srvctl add 

 srvctl add database

 srvctl add instance

 srvctl add service

 srvctl add nodeapps

 srvctl add asm

 

 srvctl config 

 srvctl config database

 srvctl config service

 srvctl config nodeapps

 srvctl config asm

 srvctl config listener

 

 srvctl enable 

 srvctl enable database

 srvctl enable instance

 srvctl enable service

 srvctl enable asm

 

 srvctl disable 

 srvctl disable database

 srvctl disable instance

 srvctl disable service

 srvctl disable asm

 

 srvctl start 

 srvctl start database

 srvctl start instance

 srvctl start service

 srvctl start nodeapps

 srvctl start asm

 srvctl start listener

 

 srvctl stop 

 srvctl stop database

 srvctl stop instance

 srvctl stop service

 srvctl stop nodeapps

 srvctl stop asm

 srvctl stop listener

 

 srvctl modify 

 srvctl modify database

 srvctl modify instance

 srvctl modify service

 srvctl modify nodeapps

 

 srvctl relocate 

 srvctl relocate service

 

 srvctl status 

 srvctl status database

 srvctl status instance

 srvctl status service

 srvctl status nodeapps

 srvctl status asm

 

 srvctl getenv 

 srvctl getenv database

 srvctl getenv instance

 srvctl getenv service

 srvctl getenv nodeapps

 

 srvctl setenv and unsetenv 

 srvctl setenv database

 srvctl setenv instance

 srvctl setenv service

 srvctl setenv nodeapps

 srvctl unsetenv database

 srvctl unsetenv instance

 srvctl unsetenv service

 srvctl unsetenv nodeapps

 

 srvctl remove 

 srvctl remove database

 srvctl remove instance

 srvctl remove service

 srvctl remove nodeapps

 srvctl remove asm

 

注:本文整理自

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1124847/,如需轉載,請註明出處,否則將追究法律責任。

相關文章