SRVCTL是ORACLEi RAC叢集配置管理的工具。本文是對SRVCTL的所有命令進行詳細說明的一篇參考文件。
SRVCTL Add
新增資料庫或例項的配置資訊。在增加例項中,與-i一起指定的名字應該與INSTANCE_NAME 和 ORACLE_SID引數匹配。
srvctl add database -d database_name [-m domain_name] -o oracle_home [-s spfile]
srvctl add instance -d database_name -i instance_name -n node_name
表- SRVCTL Add命令詳細選項
命令 選項
-m 資料庫域名 格式如"us.mydomain.com"
-m 選項指定的資料庫域名必須匹配資料庫INIT.ORA或者SPFILE中DB_DOMAIN 和DB_NAME引數。在增加資料庫時,-d指定的資料庫名必須與DB_NAME引數匹配
-n 例項節點名
-o $ORACLE_HOME(用來確定lsnrctl和Oracle等命令路徑)
-s SPFILE 檔名
例項:新增一個新的資料庫
srvctl add database -d mydb -o /ora/ora
例項:向資料庫新增例項
srvctl add instance -d mydb -i mydb0 -n gm0
srvctl add instance -d mydb -i mydb0 -n gm0
srvctl add instance -d mydb -i mydb0 -n gm0
SRVCTL Config
顯示儲存在SRVM配置檔案中的配置資訊
srvctl config database
顯示資料庫配置列表
srvctl config database -d database_name
資料庫配置資訊顯示的格式:
nodename instancename oraclehome
nodename instancename oraclehome
例項:顯示資料庫配置資訊
srvctl config database -d mydb
SRVCTL Getenv
getenv操作用來從SRVM配置檔案中獲取與顯示環境變數
srvctl getenv database -d database_name [-t name[,name,……]]
srvctl getenv instance -d database_name -i instance_name [-t name[,name,……]]
例項:列出資料庫的所有環境變數
srvctl getenv database -d mydb
SRVCTL Modify
修改例項的節點配置資訊。這些修改會在程式下次重新啟動後生效。修改後的資訊將永久儲存。
srvctl modify instance -d database_name -i instance_name -n node_name
例項:修改例項到另一個節點
srvctl modify instance -d mydb -n my_new_node
SRVCTL Remove
這是用來刪除SRVM庫中配置資訊的命令。物件相關的環境設定也同樣刪除。如果你未使用強制標誌(-f),ORACLE將提示你確認是否刪除。
使用強制選項(-f),刪除操作將不進行提示
srvctl remove database -d database_name [-f]
srvctl remove instance -d database_name -i instance_name [-f]
SRVCTL Remove命令詳細選項
-f 強制刪除應用時不進行確認提示
例項:刪除資料庫
srvctl remove database -d mydb
例項:刪除資料庫例項
srvctl remove instance -d mydb -i mydb0
srvctl remove instance -d mydb -i mydb0
srvctl remove instance -d mydb -i mydb0
SRVCTL Setenv
設定SRVM配置檔案中的環境變數值。
srvctl setenv database -d database_name -t name=value [,name=value,……]
srvctl setenv instance -d database_name [-i instance_name] -t name=value [,name=value,……]
例項:設定資料庫環境變數
srvctl setenv database -d mydb -t LANG=en
SRVCTL Start
啟動資料庫,所有例項或指定的例項,及啟動所有相關未啟動的監聽。
注:
對於start命令和其它一些可以使用連線字串的操作,如果你不提供連線字串,那麼ORACLE會使用"/ as sysdba"在例項上執行相關的操作。另外,要執行類似的操作,你必須是OSDBA組的成員。關於更多的OSDBA組許可權資訊,請參考ORACLEi的安裝指南。
srvctl start database -d database_name [-o start_options] [-c connect_string]
srvctl start instance -d database_name -i instance_name [,instance_name-list] [-o start_options] [-c connect_string]
表- SRVCTL Start命令詳細選項
命令 選項
-o 在SQL*Plus直接傳遞的startup命令選項,可以包括PFILE
-c 使用SQL*Plus連線資料庫例項的連線字串
例項:啟動資料庫及所有的例項
srvctl start database -d mydb
例項:啟動指定的例項
srvctl start instance -d mydb -i mydb,mydb
SRVCTL Status
顯示指定資料庫的當前狀態
srvctl status database -d database_name
srvctl status instance -d database_name -i instance_name [,instance_name-list]
例項:顯示資料和所有例項狀態
srvctl status database -d mydb
例項:顯示指定例項的狀態
srvctl status instance -d mydb -i mydb,mydb
SRVCTL Stop
停止資料庫所有例項可者指定例項
srvctl stop database -d database_name [-o stop_options] [-c connect_string]
srvctl stop instance -d database_name -i instance_name [,instance_name_list] [-o stop_options][-c connect_string]
表- SRVCTL Stop命令詳細選項
命令 選項
-c 使用SQL*Plus連線資料庫例項的連線字串
-o 在SQL*Plus直接傳遞的shutdown命令選項
例項:停止資料庫所有的例項
srvctl stop database -d mydb
例項:停止指定例項
srvctl stop instance -d mydb -i mydb
SRVCTL Unsetenv
取消SRVM配置檔案中環境變數定義值
srvctl unsetenv database -d database_name-t name[,name,……]
srvctl unsetenv instance -d database_name[-i instance_name] -t name[,name,……]
例項:取消環境變數,回到預設值
srvctl unsetenv database -d mydb -t CLASSPATH
使用SRVCONFIG匯入和匯出RAW裝置配置資訊
你可使用SRVCONFIG匯入和匯出RAW裝置配置資訊,不管配置檔案是在叢集檔案系統上還是在RAW裝置上。你可以使用這種方法來備份與恢復SRVM配置資訊。
例如:
下面的命令用來匯出配置資訊的內容到你指定檔名的文字檔案中。
srvconfig -exp file_name
下面的命令用來從指定文字檔案中匯入配置資訊到到你執行命令的RAC環境配置資訊庫。
srvconfig -imp file_name
核實 RAC 叢集/資料庫配置
應在叢集的所有節點上執行以下 RAC 核實檢查!對於本指南,我將只從 linux1 中執行這些檢查。
本節提供了幾個可用於驗證 Oracle RAC 10g 配置的 srvctl 命令和 SQL 查詢。
有五個為 SRVCTL 定義的節點級任務:
- 新增和刪除節點級應用程式
- 設定和取消設定節點級應用程式的環境
- 管理節點應用程式
- 管理 ASM 例項
- 啟動和停止一組包含虛擬 IP 地址、監聽器、Oracle 通知服務和 Oracle 企業管理器代理的程式(出於維護目的)。
所有例項和服務的狀態
$ srvctl status database -d orcl
Instance orcl1 is running on node linux1
Instance orcl2 is running on node linux2
單個例項的狀態
$ srvctl status instance -d orcl -i orcl2
Instance orcl2 is running on node linux2
在資料庫全域性命名服務的狀態
$ srvctl status service -d orcl -s orcltest
Service orcltest is running on instance(s) orcl2, orcl1
特定節點上節點應用程式的狀態
$ srvctl status nodeapps -n linux1
VIP is running on node:linux1
GSD is running on node:linux1
Listener is running on node:linux1
ONS daemon is running on node:linux1
ASM 例項的狀態
$ srvctl status asm -n linux1
ASM instance +ASM1 is running on node linux1.
列出配置的所有資料庫
$ srvctl config database
orcl
顯示 RAC 資料庫的配置
$ srvctl config database -d orcl
linux1 orcl1 /u01/app/oracle/product/10.1.0/db_1
linux2 orcl2 /u01/app/oracle/product/10.1.0/db_1
顯示指定叢集資料庫的所有服務
$ srvctl config service -d orcl
orcltest PREF:orcl2 orcl1 AVAIL:
顯示節點應用程式的配置 -(VIP、GSD、ONS、監聽器)
$ srvctl config nodeapps -n linux1 -a -g -s -l
VIP exists.:/vip-linux1/192.168.1.200/255.255.255.0/eth0:eth1
GSD exists.
ONS daemon exists.
Listener exists.
顯示 ASM 例項的配置
$ srvctl config asm -n linux1
+ASM1 /u01/app/oracle/product/10.1.0/db_1
叢集中所有正在執行的例項
SELECT
inst_id
, instance_number inst_no
, instance_name inst_name
, parallel
, status
, database_status db_status
, active_state state
, host_name host
FROM gv$instance
ORDER BY inst_id;
INST_ID INST_NO INST_NAME PAR STATUS DB_STATUS STATE HOST
-------- -------- ---------- --- ------- ------------ --------- -------
1 1 orcl1 YES OPEN ACTIVE NORMAL linux1
2 2 orcl2 YES OPEN ACTIVE NORMAL linux2
位於磁碟組中的所有資料檔案
select name from v$datafile
union
select member from v$logfile
union
select name from v$controlfile
union
select name from v$tempfile;
NAME
-------------------------------------------
+ORCL_DATA1/orcl/controlfile/current.256.1
+ORCL_DATA1/orcl/datafile/indx.269.1
+ORCL_DATA1/orcl/datafile/sysaux.261.1
+ORCL_DATA1/orcl/datafile/system.259.1
+ORCL_DATA1/orcl/datafile/undotbs1.260.1
+ORCL_DATA1/orcl/datafile/undotbs1.270.1
+ORCL_DATA1/orcl/datafile/undotbs2.263.1
+ORCL_DATA1/orcl/datafile/undotbs2.271.1
+ORCL_DATA1/orcl/datafile/users.264.1
+ORCL_DATA1/orcl/datafile/users.268.1
+ORCL_DATA1/orcl/onlinelog/group_1.257.1
+ORCL_DATA1/orcl/onlinelog/group_2.258.1
+ORCL_DATA1/orcl/onlinelog/group_3.265.1
+ORCL_DATA1/orcl/onlinelog/group_4.266.1
+ORCL_DATA1/orcl/tempfile/temp.262.1
15 rows selected.
屬於“ORCL_DATA1”磁碟組的所有 ASM 磁碟
SELECT path
FROM v$asm_disk
WHERE group_number IN (select group_number
from v$asm_diskgroup
where name = 'ORCL_DATA1');
PATH
----------------------------------
ORCL:VOL1
ORCL:VOL2
ORCL:VOL3
26. 啟動和停止叢集
此時,我們已經完全安裝並配置了 Oracle RAC 10g 並擁有了一個功能完善的叢集化資料庫。
至此完成所有工作後,您可能會問“那我又怎樣啟動和停止服務呢?”如果您遵循了本指南中的說明,則所有服務(包括 CRS、所有 Oracle 例項、企業管理器資料庫控制檯等)應在 Linux 節點每次重新引導時自動啟動。
但有時您可能想要關閉某個節點,然後手動重新啟動它。或者,您可能發現企業管理器沒有而需要啟動它。本節提供了啟動和停止叢集環境的命令(使用 SRVCTL)。
確保您是以 oracle UNIX 使用者登入的。我們將從 linux1 執行本節中的所有命令:
# su - oracle
$ hostname
linux1
停止 Oracle RAC 10g 環境
第一步是停止 Oracle 例項。當此例項(和相關服務)關閉後,關閉 ASM 例項。最後,關閉節點應用程式(虛擬 IP、GSD、TNS 監聽器和 ONS)。
$ export ORACLE_SID=orcl1
$ emctl stop dbconsole
$ srvctl stop instance -d orcl -i orcl1
$ srvctl stop asm -n linux1
$ srvctl stop nodeapps -n linux1
啟動 Oracle RAC 10g 環境
第一步是啟動節點應用程式(虛擬 IP、GSD、TNS 監聽器和 ONS)。當成功啟動節點應用程式後,啟動 ASM 例項。最後,啟動 Oracle 例項(和相關服務)以及企業管理器資料庫控制檯。
$ export ORACLE_SID=orcl1
$ srvctl start nodeapps -n linux1
$ srvctl start asm -n linux1
$ srvctl start instance -d orcl -i orcl1
$ emctl start dbconsole
使用 SRVCTL 啟動/停止所有例項
啟動/停止所有例項及其啟用的服務。我只是覺得有意思就把此步驟作為關閉所有例項的一種方法加進來了!
$ srvctl start database -d orcl
$ srvctl stop database -d orcl