oracle 11g中的 oracle restart特性
oracle restart性特
在oracle 11g r2 以前對于單實例一般都是寫腳本為自動啟動oracle,在oracle 11g r2中使用oracle restart功能來配置在硬件或軟件出現故障或者數據庫所在主機重啟之后自動重新啟動數據庫,監聽和其它oracle組件對于非集群環境,只需要安裝OracleGrid Infrastructure,在安裝的時候選擇“僅安裝網格基礎結構軟件”,然后運行如下腳本
來安裝Oracle Restart:$GRID_HOME/crs/install/roothas.pl
<pre>
[root@jyrac1 install]# ./roothas.pl
2014-05-28 12:11:54: Checking for super user privileges
2014-05-28 12:11:54: User has super user privileges
2014-05-28 12:11:54: Parsing the host name
Using configuration parameter file: ./crsconfig_params
Creating trace directory
LOCAL ADD MODE
Creating OCR keys for user 'grid', privgrp 'oinstall'..
Operation successful.
CRS-4664: Node jyrac1 successfully pinned.
Adding daemon to inittab
CRS-4123: Oracle High Availability Services has been started.
ohasd is starting
jyrac1 2014/05/28 12:12:47 /grid/11.2.0/grid/cdata/jyrac1/backup_20140528_121247.olr
Successfully configured Oracle Grid Infrastructure for a Standalone Server
[root@jyrac1 install]# srvctl
-bash: srvctl: command not found
[root@jyrac1 install]# su - grid
[grid@jyrac1 ~]$ srvctl
Usage: srvctl <command /> <object> [<options>]
commands: enable|disable|start|stop|status|add|remove|modify|getenv|setenv|unsetenv|config
objects: database|service|asm|diskgroup|listener|home|ons|eons
For detailed help on each command and object and its options use:
srvctl <command /> -h or
srvctl <command /> <object> -h
</object></options></object></pre>
oracel restart提高了數據庫的可用性.當你安裝oracle restart之后在硬件或軟件出現故障或者數據庫所在主機重啟之后各種
oracle組件能夠自動重啟.
表: 通過oracle restart自動重啟的oracle組件
<pre>
------------------------------------------------------------------------------------------------------------
組件 說明
------------------------------------------------------------------------------------------------------------
實例 oracle restart能夠用于單主機上的多個數據庫實例
監聽程序
數據庫服務 不包括默認創建的缺省服務因為它是由oracle數據庫來管理的且不包括在數據庫創建時
所創建的缺省服務
oracle asm實例
oracle asm磁盤組 重新啟動磁盤組并加載磁盤組
oracle ONS通知服務 在單獨的環境中,ONS在data guard安裝中被用來在主庫和備庫之間通過
fast application notification(fan)來自動進行故障切換.ONS是一個服務用來發送
FAN事件被集成到客戶端的故障轉移功能中.
-------------------------------------------------------------------------------------------------------------
</pre>
oracle restart會定期運行檢查操作來監控這些組件的健康.如果對一個組件的檢查操作失敗,那么這個組件會被關閉然后再重新啟動.
oracle restart只能用于獨立的
服務器環境(非集群).對于oracle rac來說是由oracle clusterware來提供自動重啟組件的功能.
oracle restart是在oracle grid 架構目錄之外的目錄運行的它的安裝目錄是與oracle數據庫的home目錄分開的.
關于啟動的依賴性
oracle restart能確保oracle組件根據組件之間的依賴性以合適的順序被啟動.例如,如果數據文件被存儲在oracle asm磁盤組中,那么在啟動數據庫實例之前,oracle restart會確保oracle asm實例被啟動且被要求的磁盤組會被加載.同樣的如果一個組件必須被關閉,oracle restart會確保依賴組件首先會被關閉.
oracle restart也管理數據庫實例和oracle監聽之間的弱依賴:當一個數據庫實例被啟動時,oracle restart會試圖啟動監聽.如果監聽啟動失敗,數據庫仍然處于啟動狀態.如果監聽后啟動失敗,oracle restart不會關閉實例然后再重啟實例.
并于使用oracle restart啟動和停止組件
當有需要時oracle restart會自動重啟各種oracle組件,當你手動關閉你的操作系統時oracle restart會以合理的順序來停止oracle組件.可能有時候你想手動啟動或者停止單個的oracle組件.oracle restart包括服務控制工具(srvctl)可以用它來手動啟動和停止由oracle restart管理的組件.當使用oracle restart時,oracle強烈建議使用srvctl來手動啟動和停止組件.
在你使用srvctl停止一個組件,如果出現故障oracle restart不會自動重啟這個組件.如果你使用srvctl啟動這個組件,那么這個組件對于自動重啟又再次可以使用.
oracle工具象SQL*Plus,監聽控制工具(LSNRCTL)和ASMCMD都被集成到oracle restart中.如果使用SQL*Plus關閉數據庫,oracle restart不會把數據庫看作是故障不會試圖重新啟動數據庫.類似地如果你使用SQL*Plus或ASMCMD關閉oracle asm實例,oracle restart不會試圖重啟它.
使用srvctl啟動一個組件和使用SQL*Plus(或者其它工具)啟動有以下重要的不同:
.當你使用srvctl啟動一個組件時,這個組件所依賴的任何組件都會首先以合理的順序自動啟動.
.當你使用SQL*Plus(或其它工具)啟動一個組件該組件所依賴的其它組件是不會自動啟動的,你必須確保它所依賴的組件已經被啟動.
另外通過在指定的oracle home目錄中oracle restart使用單個命令能夠讓你啟動和停止所有的組件.這個oracle home目錄可以是一個數據庫home目錄或者oracle grid infrastructure home目錄.這個功能在打補丁時是非常有用的.
關于啟動和停止oracle restart
crsctl工具用來啟動和停止oracle restart.也可以使用crsctl工具來啟用或禁用oracle高可用服務.oracle restart使用高可用服務來自動啟動和停止由oracle restart管理的組件.例如,oracle高可用服務守護進程會自動啟動數據庫,監聽和oracle asm實例.當oracle高可用服務被禁用時,當一個節點被重啟時不會有通過oracle restart來管理的組件被自動啟動.
通常來說在oracle安裝時當要停止所有運行的oracle軟件時可以使用crsctl工具.例如,錄正在打補丁或者執行操作系統維護操作時可能需要停止oracle restart.當維護操作完成后可以使用crsctl工具啟動oracle restart.
oracle restart配置
oracle restart維護了一個由它管理的所有oracle組件的一個組件列表和每一個組件的配置信息.所有這些配置信息是一個集合被稱作oracle restart配置.當oracle restart啟動一個組件時它將根據這個組件的配置信息來啟動這個組件.例如,oracle restart配置包含數據庫的一個本地服務器參數文件(spfile)和監聽程序的監聽端口.
如果你先安裝oracle restart然后再使用DBCA創建數據庫那么DBCA會自動將數據庫添加到oracle restart配置中.當DBCA啟動 數據庫時,在數據庫和其它組件之間要求的依賴關系(例如存儲數據的磁盤組)會被創建,oracle restart將開始管理數據庫.
可以使用srvctl命令來向oracle restart配置中手動增加或刪除組件.例如,如果你在運行數據庫的主機上安裝了oracle restart 可以使用srvctl來向oracle restart配置增加一個數據庫.當你手動向oracle restart配置中增加一個組件后可以使用srvctl 來啟動它.oracle restart就會開始管理這個組件當有需要時重啟這個組件.
注意:向oracle restart配置增加一個組件也可以稱作使用oracle restart注冊一個組件
其它的srvctl命令可以用來查看oracle restart管理組件的狀態和配置信息,如臨時禁用和重新啟用組件管理等等.
當安裝oracle restart后許多創建oracle組件的操作會自動將組件增加到oracle restart配置中.
表:創建操作和oracle restart配置
<pre>
---------------------------------------------------------------------------------------------------------
創建操作 創建組件并自動增加到oracle restart配置中?
---------------------------------------------------------------------------------------------------------
使用OUI或DBCA創建數據庫 yes
使用create database語句創建數據庫 no
使用OUI,DBCA或ASMCA創建oracle asm實例 yes
使用任何方法創建磁盤組 yes
使用netca添加一個監聽 yes
使用srvctl創建一個數據庫服務 yes
通過修改service_name初始化參數創建一個數據庫服務 no
使用dbms_service.create_service創建一個數據庫服務 no
創建一個備份數據庫 no
---------------------------------------------------------------------------------------------------------
</pre>
下在的表格列出了一些delete/drop/remove操作是否會自動從oracle restart配置中刪除組件
表: Delete/Drop/Remove Operations and the Oracle Restart Configuration
<pre>
---------------------------------------------------------------------------------------------------------
操作 自動從oracle restart配置中刪除組件?
---------------------------------------------------------------------------------------------------------
使用DBCA刪除一個數據庫 yes
使用操作系統命令刪除數據文件來刪除數據庫 no
使用netca刪除監聽 yes
使用任何方法來刪除一個磁盤組 yes
使用srvctl刪除數據庫服務 yes
通過其它方法來刪除數據庫服務 no
---------------------------------------------------------------------------------------------------------
</pre>
配置oracle restart
如果對單機環境通過安裝oracle grid infrastructure安裝了oracle restart然后再創建數據庫,數據庫會自動被增加到oracle restart配置中,然后在需要時自動重啟.然而如果在創建數據庫之后才安裝oracle restart,那么就需要手動向oracle restart配置中增加數據庫,監聽,oracle asm管理實例,和其它要用的組件.
在配置oracle restart來管理數據庫后能夠做以下事情:
.向oracle restart配置中增加組件
.從oracle restart配置中刪除組件
.臨時暫停oracle restart對一個或多個組件管理
.對單個組件修改oracle restart的配置選項.
準備運行srvctl
要確保從正確的oracle home目錄中運行srvctl,且使用正確的用戶登錄主機.表4-6列出了使用srvctl能配置的組件列表.對于每一個組件列出了運行srvctl所要求的oracle home目錄.
表: 判斷從哪個oracle home目錄中運行srvctl
<pre>
-------------------------------------------------------------------------------------------------------------
被配置的組件 運行srvctl的oracle home目錄
-------------------------------------------------------------------------------------------------------------
database,database service database home
oracle asm instance,disk group, oracle grid infrastructure home
listener,ONS
-------------------------------------------------------------------------------------------------------------
</pre><pre>
假設監聽不是從oracle grid infrastructure home目錄中啟動的.如果你對一個存在的數據庫安裝oracle restart,那么監聽可能要從database home目錄中啟動,在這種情況下從database home目錄中運行srvctl
為了運行srvctl
1.判斷應該從哪個oracle home目錄運行srvctl
2.如果打算運行srvctl命令來修改oracle restart配置(add,remove,enable,disable等等),那么可以按以下步驟來操作:
.在unix和linux中,使用安裝你所判斷運行srvctl命令的oracle home目錄用戶登錄到數據庫所在主機
.在windows上使用管理員登錄系統
否則使用任何用戶登錄到系統
3.打開命令窗口輸入要使用的srvctl命令.為了輸入命令,要確保在path環境變理中設置了srvctl程序.否則要輸入srvctl程序
的完全路徑.
獲取srvctl幫助
srvctl工具的聯機幫助文檔是可用的:
為了獲取srvctl的幫助:
1.準備運行srvctl
2.輸入以下命令:
srvctl
為了獲取更詳細的幫助輸入以下命令:
srvctl -h
為了獲取特定命令的幫助輸入以下命令:
srvctl command -h
例如為了獲取每一個組件類型的不同選項和add命令的幫助信息輸入:
srvctl add -h
為了獲取特定組件的組件類型的特定命令輸入:
srvctl command object -h
為了獲取關于增加一個數據庫服務的幫助信息輸入以下命令:
srvctl add service -h
向oracle restart配置中增加組件
在大多數情況下,在正在運行oracle restart的主機上創建一個oracle組件會自動向oracle restart配置中增加這個組件
下面是你要使用srvctl手動向oracle restart配置增加組件的情況:
.在創建數據庫之后才安裝oracle restart
.在相同主機上使用create database語句創建另外的數據庫.
.使用dbms_service.create_service過程創建一個數據庫服務
注意:向oracle restart配置中增加一個組件也叫作使用oracle restart注冊一個組件
向oracle restart配置中增加組件后不會啟動這個組件.必須使用srvctl start命令來啟動它.
你也可以使用oracle企業管理數據庫控制臺來向oracle restart配置增加一個數據庫或監聽.
注意:當你手動向oracle restart配置增加一個數據庫時,必須將oracle grid infrastructure software的所有者(用戶)
加到數據庫的osdba組中.這是因為grid infrastructure組件必須能夠以sysdba角色連接到數據庫啟動和停止數據庫.
例如,如果安裝grid infrastructure軟件的用戶是grid,數據庫的osdba組是dba,那么用戶grid必須是dba組的一員.
使用srvctl增加組件
當使用srvctl向oracle restart配置中增加一個組件時,你能對這個組件指定配置選項.
1.準備運行srvctl的環境
2.輸入下面的命令:
srvctl add object options
這里的object是一個組件.
增加一個數據庫
這個例子使用db_unique_name=jycs來增加一個數據庫組件.這個強制的-o選項用來指定oracle home目錄的位置
oracle@jyrac1 ~]$ srvctl add database -d jycs -o /u01/app/oracle/11.2.0/db
增加一個數據庫服務
對于db_unique_name=jycs的數據庫創建一個新的數據庫服務名jytest并將這個數據庫服務增加到oracle restart配置中
[oracle@jyrac1 ~]$ srvctl add service -d jycs -s jytest
增加缺省的監聽程序
向oracle restart配置中增加一個缺省的監聽程序:(注意增加監聽程序時要使用grid_home目錄
那么在添加監聽的時候應該指定GI_HOME,而非ORACLE_HOME)
[grid@jyrac1 ~]$ srvctl add listener -o /grid/11.2.0/grid/
現在來驗證數據庫會不會在主機重啟時自動啟動
[root@jyrac1 ~]# reboot
Broadcast message from root (pts/2) (Wed Jun 4 10:30:32 2014):
The system is going down for reboot NOW!
在主機重啟之后通過下面的命令來檢查發現數據庫和監聽程序也自動啟動了
</pre><pre>
[root@jyrac1 ~]# ps -ef | grep pmon
oracle 3451 1 0 10:32 ? 00:00:00 ora_pmon_jycs
root 3563 3530 0 10:32 pts/1 00:00:00 grep pmon
[root@jyrac1 ~]# ps -ef | grep tns
grid 3438 1 0 10:32 ? 00:00:00 /grid/11.2.0/grid/bin/tnslsnr LISTENER -inherit
root 3565 3530 0 10:33 pts/1 00:00:00 grep tns
[grid@jyrac1 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....ER.lsnr ora....er.type ONLINE ONLINE jyrac1
ora.cssd ora.cssd.type OFFLINE OFFLINE
ora.diskmon ora....on.type OFFLINE OFFLINE
ora.jycs.db ora....se.type ONLINE ONLINE jyrac1
</pre>
從oracle restart配置中刪除組件
當使用oracle推薦的方法來刪除一個組件時這個組件會自動從oracle restart配置中刪除.例如,如果使用DBCA來刪除一個數據庫,
DBCA會從oracle restart配置中刪除數據庫.同樣的如果使用netca來刪除監聽,netca會從oracle restart配置中刪除監聽.
如果使用非建議的或手動刪除方法來刪除組件,必須首先使用srvctl從oracle restart配置中刪除組件.不這樣做可能會出現錯誤
從oracle restart配置中刪除一個組件:
srvctl remove object [options]
例如下面刪除一個db_unique_name為dbcrm的數據庫
srvctl remove database -d dbcrm
對一個組件禁用或啟用oracle restart配置
可以臨時對一個組件禁用oracle restart配置.一種原因就是當對組件執行維護任務時.例如,如果一個組件必須被修復,那么可能想讓它在出現故障或者主機重啟時不自動啟動.
當維護任務完成后可以重新對組件啟用管理
當禁用一個組件時:
.它將不再自動重啟
.通過依賴組件它將不再自動啟動
.使用srvctl不能啟動
.任何依賴于這個資源的組件不再自動啟動或者自動重啟
禁用或啟動一個組件的自動重啟執行以下操作之一:
.禁用一個組件輸入以下命令:
srvctl disable object [options]
啟動一個組件輸入以下命令:
srvctl enable object [options]
例如:對一個db_unique_name為dbcrm的數據庫禁用自動重啟
srvctl disable database -d dbcrm
對一個asm磁盤組名為recovery的磁盤組禁用自動重啟
srvctl disable diskgroup -g recovery
查看組件狀態
可以使用srvctl來查看任命由oracle restart管理的組件的運行狀態.對于有些組件還會顯示額外的信息.
查看組件的狀態:
srvctl status object [options]
例如查看db_unique_name為jycs的數據庫的狀態
[oracle@jyrac1 ~]$ srvctl status database -d jycs
Database is running.
查看一個組件的oracle restart配置信息
可以使用srvctl來查看任何組件的oracle restart配置.oracle restart對于每種組件類型維護不同的配置信息.使用srvctl 命令
可以獲得由oracle restart所管理的組件列表.
查看組件配置:
srvctl config object options
例如:查看由oracle restart所管理的所有數據庫列表
[oracle@jyrac1 ~]$ srvctl config database
jycs
查看一個特定數據庫的配置信息:
下面的例子查看db_unique_name為jycs的數據庫的配置:
[oracle@jyrac1 ~]$ srvctl config database -d jycs
Database unique name: jycs
Database name:
Oracle home: /u01/app/oracle/11.2.0/db
Oracle user: grid
Spfile:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups:
Services:
修改組件的oracle restart配置
可以使用srvctl來修改組件的oracle restart配置.例如可以修改當oracle重啟動時的監聽程序的監聽端口或者在啟動數據庫時oracle restart所指示的服務器參數文件(SPFILE)
修改組件的oracle restart配置
srvctl modify object options
例如:對于db_unique_name為dbcrm的數據庫使用下面的命令將管理策略修改為manual啟動選項修改為nomount:
srvctl modify database -d dbcrm -y manual -s nomount
使用manual管理策略,當數據庫主機重啟時數據庫不會自動重啟.然而,oracle restart將會繼續監控數據庫如果出現故障將會重啟.
[oracle@jyrac1 ~]$ srvctl modify database -h
Modifies the configuration for the database.
Usage: srvctl modify database -d <db_unique_name> [-n <db_name>] [-o <oracle_home>] [-u <oracle_user>] [-m <domain>] [-p <spfile>] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY}] [-s <start_options>] [-t <stop_options>] [-y {AUTOMATIC | MANUAL}] [-a "<diskgroup_list>"|-z]
-d <db_unique_name> Unique name for the database
-n <db_name> Database name (DB_NAME), if different from the unique name given by the -d option
-o <oracle_home> ORACLE_HOME path
-u <oracle_user> Oracle user
-m <domain> Domain for database. Must be set if database has DB_DOMAIN set.
-p <spfile> Server parameter file path
-r <role> Role of the database (primary, physical_standby, logical_standby, snapshot_standby)
-s <start_options> Startup options for the database. Examples of startup options are open, mount, or nomount.
-t <stop_options> Stop options for the database. Examples of shutdown options are normal, transactional, immediate, or abort.
-y <dbpolicy> Management policy for the database (AUTOMATIC or MANUAL)
-a "<diskgroup_list>" Comma separated list of disk groups
-z To remove database's dependency upon disk groups
-h Print usage
管理oracle restart配置中的環境變量.
在oracle restart配置中可以存儲環境變量的名值對.如果你通常在啟動數據庫之前設置環境變量(除了oracle_home和oracle_sid
之外),你可以在oracle restart配置中設置其它的環境變量.可以在下面的組件的單個配置中存儲任何數量的環境變量.
.database實例
.監聽
.oracle asm實例
當oracle restart啟動一個組件時它首先會使用存儲在組件配置中的的值來設置組件的環境變量.盡管可以通過oracle組件這種方式
來設置環境變量,這個功能主要是傾向于設置操作系統環境變量.
設置和取消環境變量
使用srvctl來對oracle restart配置中的組件來進行設置或者取消環境變量.
對組件設置或取消環境變量:
.為了設置環境變理使用以下命令:
srvctl setenv {asm|database|listener} options
從配置中刪除環境變量輸入以下命令:
srvctl unsetenv {asm|database|listener} options
例如設置數據庫環境變量
對db_unique_name為dbcrm的數據庫在oracle restart配置中設置NLS_LANG和AIX AIXTHREAD_SCOPE環境變量:
srvctl setenv database -d dbcrm -t "NLS_LANG=AMERICAN_AMERICA.AL32UTF8,AIXTHREAD_SCOPE=S"
查看環境變量
使用srvctl來查看oracle restart配置中組件的環境變量.
查看環境變量的配置:
srvctl getenv {database|listener|asm} options
例如查看數據庫的所有環境變量
查看db_unique_name為dbcrm的數據庫在oracle restart配置中的環境變量:
srvctl getenv database -d dbcrm
dbcrm:
NLS_LANG=AMERICAN_AMERICA
AIXTHREAD_SCOPE=S
GCONF_LOCAL_LOCKS=1
例如查看數據庫的特定環境變量
查看數據庫的NLS_LANG和AIXTHREAD_SCOPE環境變量:
srvctl getenv database -d dbcrm -t "NLS_LANG,AIXTHREAD_SCOPE"
dbcrm:
NLS_LANG=AMERICAN_AMERICA
AIXTHREAD_SCOPE=S
使用srvctl來創建和刪除數據庫服務
當使用oracle restart來管理數據庫時,oracle建議使用srvctl來創建來刪除數據庫服務.當使用srvctl來增加一個數據庫服務時,
這個服務會自動增加到oracle restart配置中,而且在服務與數據庫之間的依賴關系會被建立.因此如果啟動服務當數據庫沒有
啟動時oracle restart首先會啟動數據庫.
當使用srvctl刪除一個數據庫服務時這個服務也會從oracle restart配置中刪除
使用srvctl來創建一個數據庫服務:
srvctl add service -d db_unique_name -s service_name [options]
例如創建一個數據庫服務
對db_unique_name為dbcrm的數據庫創建一個名叫crmbatch的數據庫服務名
srvctl add service -d dbcrm -s crmbatch
例如創建一個基于角色的數據庫服務
創建一個名叫crmbatch的數據庫服務并指定它的data guard角色為physical_standby.只有dbcrm數據庫的當前角色為物理備庫時
這個服務才會自動啟動.
srvctl add service -d dbcrm -s crmbatch -l PHYSICAL_STANDBY
使用srvctl刪除數據庫服務:
srvctl remove service -d db_unique_name -s service_name [-f]
數據庫服務將會從oracle restart配置中被刪除掉.如果-f強制標示出現即使服務正在運行也會被刪除.如果沒有-f標示如果服務
正在運行會報錯.
與oracle restart相關的crsctl命令
crsctl命令的語法如下:
crsctl command has
這里command是start,stop或enable,disable等命令的簡稱.而has對象是指示oracle高可用服務.
check顯示oracle restart的狀態.
[grid@jyrac1 ~]$ crsctl check has
CRS-4638: Oracle High Availability Services is online
config顯示oracle restart配置
CRS-4622: Oracle High Availability Services autostart is enabled.
disable禁用oracle restart的自動重啟
[grid@jyrac1 ~]$crsctl disable has
enable啟用oracle restart的自動重啟
[grid@jyrac1 ~]$crsctl enable has
start啟動oracle restart
[grid@jyrac1 ~]$crsctl start has
stop停止oracle restart
[grid@jyrac1 ~]$crsctl stop has [-f]
-f選項:如果任何由oracle restart管理的資源仍然在運行.然后試圖停止這些資源.如果資源不能被停止那么試圖強制停止.
個人覺得對于單個實例使用oracle restart與寫腳本來啟動也沒有什么優勢</diskgroup_list></dbpolicy></stop_options></start_options></role></spfile></domain></oracle_user></oracle_home></db_name></db_unique_name></diskgroup_list></stop_options></start_options></spfile></domain></oracle_user></oracle_home></db_name></db_unique_name>