Oracle10g RAC管理 - CRS

tolywang發表於2009-02-17


Oracle10g RAC管理 –第一部分: 使用CRS命令列控制叢集 

 

在文章的開頭,我們討論一下管理RAC資料庫。所謂管理意味著很多事情;如同Oracle DBA所做的――備份,恢復,匯出,

匯入,最佳化,制定基線等等。無論如何管理RAC都將是一項挑戰。你需要的是可靠的工具。

CRS入門

讓我們先對什麼是CRS以及CRS做哪些工作了解一下。同樣也介紹一下命令列引數以及如何正確使用它們。

Crs_getperm:用於核對相關資源的許可權

語法:

crs_getperm resource_name [-u user|-g group]

Crs_profile:用於建立,驗證,刪除,更新 Oracle叢集件檔案檔案(profile)

你可以使用crs_profile來建立一個指令碼模版。在profile中,定義如何管理並監控叢集。

當建立了一個應用程式profile並且使用crs_register命令向Oracle叢集件註冊了它,你就可以使用其他的Oracle 叢集件

命令列(crs_stat,crs_start,crs_stop,crs_relocate, crs_unregister)來操作這個應用程式。這對方便的排除故障很有

用。在其他Oracle叢集件命令列控制特定的應用程式之前,你必須使用crs_regiester命令列來註冊它。

語法:

下面的步驟將建立一個profile:

crs_profile -create resource_name -t application [-a action_script]

[-B executable_pathname] [-dir directory] [-d description]

[-p placement_policy] [-h hosting_nodes] [-r required_resources]

[-l optional_resources]? [-o option,[...]]

[attribute_flag attribute_value] [...] [-f] [-q]

?

以下命令從模版中建立一個應用程式profile:

crs_profile -create resource_name -I template_file [-f] [-q]

驗證profile:

crs_profile -validate resource_name [-q]

將應用程式profile列出:

crs_profile -print [resource_name [...]] [-q]

更新profile:

crs_profile -update resource_name [option [...]] [-q]

刪除profile:

crs_profile -delete resource_name [-q]

crs_register:此命令將應用程式配置資訊註冊到OCR(譯者注:Oracle Cluster Registry:一個關於叢集的後設資料資料庫,

用於維護叢集內的資源跟蹤,並獲知資源正在哪裡執行以及它們能夠並應該在哪裡執行,執行crs_stat所得到的資訊來於

此)中。

Crs_register命令列使用特定的資源名引數來註冊每個應用程式。在使用starting,stopping 或其他的操作之前你必須先

註冊這個應用程式。

CRS程式必須是在執行的,如果任何成員丟失那麼這個profile將和預設模版合併(譯者注:在你的$CRS_HOME/crs目錄下你

可以找到上述的profile以及模版檔案)

在註冊時你要決定擁有者和許可權問題。(執行註冊動作的使用者預設為擁有者)。

crs_profile和crs_register必須要有讀寫許可權,之後可以使用crs_stat命令來檢查註冊成功與否。

語法:使用crs_register命令註冊或更新應用程式。

crs_register resource_name [-dir directory_path] [...] [-u] [-f] [-q]

crs_relocate:將一個應用程式profile從一個節點重定位到另一個。

當然,重定位應用程式必須先註冊。使用上面的crs_relocate命令,Oracle叢集件透過先在源節點停止資源然後在目標節

點上開始執行資源來重定位。如果沒有成功,在你重新試圖重定位之前你必須先使用crs_stop –f命令關閉資源,然後運

行crs_start讓資源重新處於online狀態。

Syntax: ??語法:

crs_relocate resource_name [...] [-c cluster_node] [-f][-q]

crs_relocate resource_name [-c cluster_node] [-q]

crs_relocate [USR_attribute_name=value] [...] resource_name [-c cluster_node] [-q]

crs_relocate -s source_node [-c cluster_node] [-q]

Crs_setperm:用來設定和修改相關資源的許可權

與UNIX/LINUX中的chmod命令起到相同的作用。

語法:

crs_setperm resource_name -u aclstring [-q]

crs_setperm resource_name -x aclstring [-q]

crs_setperm resource_name -o user_name [-q]

crs_setperm resource_name -g group_name [-q]

crs_stat:用來列出應用程式profile的狀態。以上提到的資源需要有讀和執行許可權,也可以

使用-g引數。

在state屬性欄中資源可以是online或offline狀態。如果資源為online但叢集節點失敗了叢集件會在另一個節點上重新啟

動應用程式。所有的資源狀態都應該是online的,如果資源失敗的計數器高於所定義的失敗閥值(譯者注:這些值都在

profile中定義,profile的位置為$CRS_HOME/crs/public/*.cap)將會導致資源處在offline的狀態。你必須使用

crs_start命令來使能所有的資源。

我還喜歡使用-v引數來顯示更詳細的資訊。RESTART_COUNT值表明資源在一個節點上已經重啟的多少次。FAILURE_COUNT值

表明在FAILURE_INTERVAL值中資源失敗的次數(以上及以下值都在profile中),一旦超過了FAILURE_THRESHOLD引數就會

導致資源停止。在詳細模式中顯示的FAILOVER_STATUS值表明在資源重定向時等待的時間(因為節點失敗所導致的重定向)

FAILOVER_DELAY屬性標明在重定向之前等待的時間。

語法:

crs_stat [resource_name [...]] [-v] [-l] [-q] [-c cluster_node]

crs_stat [resource_name [...]] -t [-v] [-q] [-c cluster_node]

crs_stat -p [resource_name [...]] [-q]

crs_stat [-a] resource_name -g

crs_stat [-a] resource_name -r [-c cluster_node]

crs_stat -f [resource_name [...]] [-q] [-c cluster_node]

crs_stat -ls resource_name

小節:

Crs_commands在管理和排錯時很有效。下一節為將繼續討論如何使用crs_stop、crs_start等其他命令來把所有應用帶回到

online狀態下。

 

 

 

 

 

 

 

 

 

 

 

RAC管理 -第二部分:crs命令

在上一篇文章裡,討論了幾個crs的命令和行語法,並且看了一下叢集突然執行不正常時發生了什麼。下面繼續討論其餘的

cs命令:

介紹CRS

crs_start:
此命令將使所有應用程式或指定的應用程式進入到ONLINE狀態,並且試圖使能指定的已註冊應用程式或應用程式資源。(

需要完全的管理許可權)。

語法:
crs_start resource_name [...] [-c cluster_node] [-q] [-f]

crs_start -all [-q]

crs_start [USR_attribute_name=value] [...]
resource_name [-c node_name] [-q]

crs_stop:
此命令將停止指定節點上的資源。可以使用crs_stat來檢視應用程式或資源列表。

語法:
crs_stop resource_name [...] [-f] [-q]

crs_stop -c cluster_node [...] [-q]

crs_stop -all [-q]

crs_stop [USR_attribute_name=value] [...] resource_name [-q]
-c cluster_node [...]

crs_unregister:
此命令將移除Oracle叢集件資源的註冊資訊。

語法:
crs_unregister resource_name [...] [-q]

糾正RAC的問題:
上面我們看了一下關於crs的命令和語法,接著我們看一下它們的具體應用。
當執行我的構建在RHEL4上的RAC時出現了問題(我想主要的原因是虛擬機器記憶體不足導致的),執行crs_stat來檢視RAC狀態

~]$ cd /u01/app/oracle/product/10.2.0/crs/bin
[oracle@vmora01rh4 bin]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.fokerac.db application ONLINE ONLINE vmora02rh4
ora....c1.inst application ONLINE ONLINE vmora01rh4
ora....c2.inst application OFFLINE UNKNOWN vmora02rh4
ora....serv.cs application ONLINE ONLINE vmora02rh4
ora....ac1.srv application ONLINE ONLINE vmora01rh4
ora....ac2.srv application ONLINE OFFLINE
ora....SM1.asm application ONLINE ONLINE vmora01rh4
ora....H4.lsnr application ONLINE ONLINE vmora01rh4
ora....rh4.gsd application ONLINE UNKNOWN vmora01rh4
ora....rh4.ons application ONLINE UNKNOWN vmora01rh4
ora....rh4.vip application ONLINE ONLINE vmora01rh4
ora....SM2.asm application OFFLINE UNKNOWN vmora02rh4
ora....H4.lsnr application OFFLINE UNKNOWN vmora02rh4
ora....rh4.gsd application ONLINE UNKNOWN vmora02rh4
ora....rh4.ons application OFFLINE UNKNOWN vmora02rh4
ora....rh4.vip application ONLINE ONLINE vmora02rh4

可以看見有一些應用程式的狀態為UNKNOW或OFFLINE,這樣是非正常的。

在手工關閉應用程式時可以使用crs_stat命令列出的應用程式名。

[oracle@vmora01rh4 bin]$ crs_stat
NAME=ora.fokerac.db
TYPE=application
TARGET=ONLINE
STATE=ONLINE on vmora02rh4

NAME=ora.fokerac.fokerac1.inst
TYPE=application
TARGET=ONLINE
STATE=ONLINE on vmora01rh4

NAME=ora.fokerac.fokerac2.inst
TYPE=application
TARGET=OFFLINE
STATE=OFFLINE

NAME=ora.fokerac.fokeserv.cs
TYPE=application
TARGET=ONLINE
STATE=ONLINE on vmora02rh4

NAME=ora.fokerac.fokeserv.fokerac1.srv
TYPE=application
TARGET=ONLINE
STATE=ONLINE on vmora01rh4

NAME=ora.fokerac.fokeserv.fokerac2.srv
TYPE=application
TARGET=ONLINE
STATE=OFFLINE

NAME=ora.vmora01rh4.ASM1.asm
TYPE=application
TARGET=ONLINE
STATE=ONLINE on vmora01rh4

NAME=ora.vmora01rh4.LISTENER_VMORA01RH4.lsnr
TYPE=application
TARGET=ONLINE
STATE=ONLINE on vmora01rh4

NAME=ora.vmora01rh4.gsd
TYPE=application
TARGET=ONLINE
STATE=UNKNOWN on vmora01rh4

NAME=ora.vmora01rh4.ons
TYPE=application
TARGET=ONLINE
STATE=UNKNOWN on vmora01rh4

NAME=ora.vmora01rh4.vip
TYPE=application
TARGET=ONLINE
STATE=ONLINE on vmora01rh4

NAME=ora.vmora02rh4.ASM2.asm
TYPE=application
TARGET=OFFLINE
STATE=UNKNOWN on vmora02rh4

NAME=ora.vmora02rh4.LISTENER_VMORA02RH4.lsnr
TYPE=application
TARGET=OFFLINE
STATE=UNKNOWN on vmora02rh4

NAME=ora.vmora02rh4.gsd
TYPE=application
TARGET=ONLINE
STATE=UNKNOWN on vmora02rh4

NAME=ora.vmora02rh4.ons
TYPE=application
TARGET=OFFLINE
STATE=UNKNOWN on vmora02rh4

NAME=ora.vmora02rh4.vip
TYPE=application
TARGET=ONLINE
STATE=ONLINE on vmora02rh4

可以使用crs_stop -all命令來一次性把它們全部停止掉,但通常會報一些錯誤,所以你可以手工的一個一個關閉它們。
bin]$ crs_stop -all
Attempting to stop `ora.vmora01rh4.ons` on member `vmora01rh4`
Attempting to stop `ora.vmora02rh4.ons` on member `vmora02rh4`
`ora.vmora02rh4.ons` on member `vmora02rh4` has experienced an unrecoverable failure.
Human intervention required to resume its availability.
Stop of `ora.vmora01rh4.ons` on member `vmora01rh4` succeeded.
Attempting to stop `ora.vmora01rh4.ASM1.asm` on member `vmora01rh4`
Attempting to stop `ora.fokerac.fokerac2.inst` on member `vmora02rh4`
`ora.fokerac.fokerac2.inst` on member `vmora02rh4` has experienced an unrecoverable failure.
Human intervention required to resume its availability.
Attempting to stop `ora.vmora02rh4.ASM2.asm` on member `vmora02rh4`
`ora.vmora02rh4.ASM2.asm` on member `vmora02rh4` has experienced an unrecoverable failure.
Human intervention required to resume its availability.
Attempting to stop `ora.vmora02rh4.LISTENER_VMORA02RH4.lsnr` on member `vmora02rh4`
`ora.vmora02rh4.LISTENER_VMORA02RH4.lsnr` on member `vmora02rh4` has experienced an unrecoverable failure.
Human intervention required to resume its availability.
Attempting to stop `ora.fokerac.fokerac2.inst` on member `vmora02rh4`
`ora.fokerac.fokerac2.inst` on member `vmora02rh4` has experienced an unrecoverable failure.
Human intervention required to resume its availability.
Attempting to stop `ora.vmora02rh4.ASM2.asm` on member `vmora02rh4`
`ora.vmora02rh4.ASM2.asm` on member `vmora02rh4` has experienced an unrecoverable failure.
Human intervention required to resume its availability.
Attempting to stop `ora.vmora02rh4.vip` on member `vmora02rh4`
Stop of `ora.vmora02rh4.vip` on member `vmora02rh4` succeeded.
Stop of `ora.vmora01rh4.ASM1.asm` on member `vmora01rh4` succeeded.
Attempting to stop `ora.vmora01rh4.LISTENER_VMORA01RH4.lsnr` on member `vmora01rh4`
Stop of `ora.vmora01rh4.LISTENER_VMORA01RH4.lsnr` on member `vmora01rh4` succeeded.
Attempting to stop `ora.vmora01rh4.vip` on member `vmora01rh4`
Stop of `ora.vmora01rh4.vip` on member `vmora01rh4` succeeded.
CRS-0216: Could not stop resource 'ora.vmora02rh4.ASM2.asm'.

CRS-0216: Could not stop resource 'ora.vmora02rh4.ons'.

CRS-0216: Could not stop resource 'ora.vmora02rh4.vip'.

看見了嗎,報錯了,所以我們還是要自己來。首先先停止實列。
[oracle@vmora01rh4 bin]$ srvctl stop instance -d fokerac -i fokerac1
[oracle@vmora01rh4 bin]$ srvctl stop instance -d fokerac -i fokerac2

再看一下狀態:
[oracle@vmora01rh4 bin]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.fokerac.db application OFFLINE OFFLINE
ora....c1.inst application OFFLINE OFFLINE
ora....c2.inst application OFFLINE OFFLINE
ora....serv.cs application ONLINE UNKNOWN vmora02rh4
ora....ac1.srv application OFFLINE OFFLINE
ora....ac2.srv application OFFLINE OFFLINE
ora....SM1.asm application OFFLINE OFFLINE
ora....H4.lsnr application OFFLINE OFFLINE
ora....rh4.gsd application ONLINE UNKNOWN vmora01rh4
ora....rh4.ons application OFFLINE OFFLINE
ora....rh4.vip application OFFLINE OFFLINE
ora....SM2.asm application OFFLINE UNKNOWN vmora02rh4
ora....H4.lsnr application OFFLINE UNKNOWN vmora02rh4
ora....rh4.gsd application ONLINE UNKNOWN vmora02rh4
ora....rh4.ons application OFFLINE UNKNOWN vmora02rh4
ora....rh4.vip application OFFLINE OFFLINE

停止服務:
[oracle@vmora01rh4 bin]$ srvctl stop service -d fokerac -s fokeserv

再看一下狀態:
[oracle@vmora01rh4 bin]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.fokerac.db application OFFLINE OFFLINE
ora....c1.inst application OFFLINE OFFLINE
ora....c2.inst application OFFLINE OFFLINE
ora....serv.cs application OFFLINE OFFLINE
ora....ac1.srv application OFFLINE OFFLINE
ora....ac2.srv application OFFLINE OFFLINE
ora....SM1.asm application OFFLINE OFFLINE
ora....H4.lsnr application OFFLINE OFFLINE
ora....rh4.gsd application ONLINE UNKNOWN vmora01rh4
ora....rh4.ons application OFFLINE OFFLINE
ora....rh4.vip application OFFLINE OFFLINE
ora....SM2.asm application OFFLINE UNKNOWN vmora02rh4
ora....H4.lsnr application OFFLINE UNKNOWN vmora02rh4
ora....rh4.gsd application ONLINE UNKNOWN vmora02rh4
ora....rh4.ons application OFFLINE UNKNOWN vmora02rh4
ora....rh4.vip application OFFLINE OFFLINE

好,現在停止這些應用程式。
[oracle@vmora01rh4 bin]$ crs_stop ora.vmora01rh4.gsd
Attempting to stop `ora.vmora01rh4.gsd` on member `vmora01rh4`
Stop of `ora.vmora01rh4.gsd` on member `vmora01rh4` succeeded.

[oracle@vmora01rh4 bin]$ crs_stop ora.vmora02rh4.ASM2.asm
Attempting to stop `ora.vmora02rh4.ASM2.asm` on member `vmora02rh4`
Stop of `ora.vmora02rh4.ASM2.asm` on member `vmora02rh4` succeeded.

[oracle@vmora01rh4 bin]$ crs_stop ora.vmora02rh4.LISTENER_VMORA02RH4.lsnr
Attempting to stop `ora.vmora02rh4.LISTENER_VMORA02RH4.lsnr` on member `vmora02rh4`
Stop of `ora.vmora02rh4.LISTENER_VMORA02RH4.lsnr` on member `vmora02rh4` succeeded.

[oracle@vmora01rh4 bin]$ crs_stop ora.vmora02rh4.gsd
Attempting to stop `ora.vmora02rh4.gsd` on member `vmora02rh4`
Stop of `ora.vmora02rh4.gsd` on member `vmora02rh4` succeeded.

[oracle@vmora01rh4 bin]$ crs_stop ora.vmora02rh4.ons
Attempting to stop `ora.vmora02rh4.ons` on member `vmora02rh4`
Stop of `ora.vmora02rh4.ons` on member `vmora02rh4` succeeded.

看一下狀態:
[oracle@vmora01rh4 bin]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.fokerac.db application OFFLINE OFFLINE
ora....c1.inst application OFFLINE OFFLINE
ora....c2.inst application OFFLINE OFFLINE
ora....serv.cs application OFFLINE OFFLINE
ora....ac1.srv application OFFLINE OFFLINE
ora....ac2.srv application OFFLINE OFFLINE
ora....SM1.asm application OFFLINE OFFLINE
ora....H4.lsnr application OFFLINE OFFLINE
ora....rh4.gsd application OFFLINE OFFLINE
ora....rh4.ons application OFFLINE OFFLINE
ora....rh4.vip application OFFLINE OFFLINE
ora....SM2.asm application OFFLINE OFFLINE
ora....H4.lsnr application OFFLINE OFFLINE
ora....rh4.gsd application OFFLINE OFFLINE
ora....rh4.ons application OFFLINE OFFLINE
ora....rh4.vip application OFFLINE OFFLINE

好了。 現在再把它們全部online.
[oracle@vmora01rh4 bin]$ crs_start -all
Attempting to start `ora.vmora02rh4.vip` on member `vmora02rh4`
Attempting to start `ora.vmora01rh4.vip` on member `vmora01rh4`
Start of `ora.vmora02rh4.vip` on member `vmora02rh4` succeeded.
Start of `ora.vmora01rh4.vip` on member `vmora01rh4` succeeded.
Attempting to start `ora.vmora01rh4.ASM1.asm` on member `vmora01rh4`
Attempting to start `ora.vmora02rh4.ASM2.asm` on member `vmora02rh4`
Start of `ora.vmora02rh4.ASM2.asm` on member `vmora02rh4` succeeded.
Attempting to start `ora.fokerac.fokerac2.inst` on member `vmora02rh4`
Start of `ora.vmora01rh4.ASM1.asm` on member `vmora01rh4` succeeded.
Attempting to start `ora.fokerac.fokerac1.inst` on member `vmora01rh4`
Start of `ora.fokerac.fokerac2.inst` on member `vmora02rh4` succeeded.
Attempting to start `ora.vmora02rh4.LISTENER_VMORA02RH4.lsnr` on member `vmora02rh4`
Start of `ora.fokerac.fokerac1.inst` on member `vmora01rh4` succeeded.
Attempting to start `ora.vmora01rh4.LISTENER_VMORA01RH4.lsnr` on member `vmora01rh4`
Start of `ora.vmora02rh4.LISTENER_VMORA02RH4.lsnr` on member `vmora02rh4` succeeded.
Start of `ora.vmora01rh4.LISTENER_VMORA01RH4.lsnr` on member `vmora01rh4` succeeded.
CRS-1002: Resource 'ora.vmora02rh4.ons' is already running on member 'vmora02rh4'

CRS-1002: Resource 'ora.vmora01rh4.ons' is already running on member 'vmora01rh4'

Attempting to start `ora.fokerac.fokeserv.fokerac1.srv` on member `vmora01rh4`
Attempting to start `ora.vmora01rh4.gsd` on member `vmora01rh4`
Attempting to start `ora.fokerac.db` on member `vmora01rh4`
Attempting to start `ora.fokerac.fokeserv.fokerac2.srv` on member `vmora02rh4`
Attempting to start `ora.fokerac.fokeserv.cs` on member `vmora02rh4`
Attempting to start `ora.vmora02rh4.gsd` on member `vmora02rh4`
Start of `ora.fokerac.fokeserv.fokerac2.srv` on member `vmora02rh4` succeeded.
Start of `ora.fokerac.fokeserv.cs` on member `vmora02rh4` succeeded.
Start of `ora.fokerac.db` on member `vmora01rh4` succeeded.
Start of `ora.vmora02rh4.gsd` on member `vmora02rh4` succeeded.
Start of `ora.vmora01rh4.gsd` on member `vmora01rh4` succeeded.
Start of `ora.fokerac.fokeserv.fokerac1.srv` on member `vmora01rh4` succeeded.
*CRS-0223: Resource 'ora.vmora01rh4.ons' has placement error.

CRS-0223: Resource 'ora.vmora02rh4.ons' has placement error.

那些錯誤可以忽略,叢集件會把它們一個個按順序啟動的。
再看一下:
[oracle@vmora01rh4 bin]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.fokerac.db application ONLINE ONLINE vmora01rh4
ora....c1.inst application ONLINE ONLINE vmora01rh4
ora....c2.inst application ONLINE ONLINE vmora02rh4
ora....serv.cs application ONLINE ONLINE vmora02rh4
ora....ac1.srv application ONLINE ONLINE vmora01rh4
ora....ac2.srv application ONLINE ONLINE vmora02rh4
ora....SM1.asm application ONLINE ONLINE vmora01rh4
ora....H4.lsnr application ONLINE ONLINE vmora01rh4
ora....rh4.gsd application ONLINE ONLINE vmora01rh4
ora....rh4.ons application ONLINE ONLINE vmora01rh4
ora....rh4.vip application ONLINE ONLINE vmora01rh4
ora....SM2.asm application ONLINE ONLINE vmora02rh4
ora....H4.lsnr application ONLINE ONLINE vmora02rh4
ora....rh4.gsd application ONLINE ONLINE vmora02rh4
ora....rh4.ons application ONLINE ONLINE vmora02rh4
ora....rh4.vip application ONLINE ONLINE vmora02rh4
好了。都online了。

 

 

 

http://joelau.spaces.live.com/blog/cns!19b1d65418d95a1b!378.entry

 

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

相關文章