Oracle 10gsolaris 10下的自動執行指令碼

作者:田逸([email]sery@163.com[/email])發表在[url]http://os.51cto.com/art/200705/47777.htm[/url]

 

Solaris 10使用了SMF(服務管理設施)來集中管理各項系統及網路服務,其目的是降低系統管理的難度和降低系統出錯的機率。實踐表明,通過SMF管理平臺來配置和管理服務,還是十分麻煩的,例如要把一個使用者自己訂製安裝的第三方軟體配置到SMF裡進行管理,要做很多的工作;另外,如果某個服務出現故障,將涉及服務本身和SMF這兩方面,這樣恢復起來難度相應增大。個人偏見:系統管理的目標是越簡單越好部署容易、維護簡單及恢復快速。正好solaris 10系統有一個oracle 10g,就用它來做例子,來配置一個 oracle的自動執行指令碼。

 

先介紹一下系統環境:

系統版本

SunOS sery 5.10 Generic_118855-33 i86pc i386 i86pc

Oracle 版本

racle Database 10g Enterprise Edition Release 10.2.0.2.0 – Prod

Oracle 安裝路徑

/opt/oracle/product/10.2/db_1

dbstart 路徑

/opt/oracle/product/10.2/db_1/bin/dbstart

 

Oracle 自帶一個指令碼dbstart,它的用途就是用來製作自動執行指令碼。在沒有啟動oracle例項之前,我們先手動執行指令碼dbstart:

-bash-3.00$ dbstart

ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener

Usage: /opt/oracle/product/10.2/db_1/bin/dbstart ORACLE_HOME

提示沒有設定ORACL_HOME_LISTNER,接著給出這個命令的使用方法。用ps –aef | grep oraoracle相關程式是否起來,哦,沒有起來!修改檔案dbstart,找到ORACL_HOME_LISTNER這一行(還好,只有唯一的一行),它的預設值為“$1,表示接受一個位置引數的意思,既然程式需要手動加位置引數ORACLE_HOME,我們不妨把“$1”直接用“ORACLE_HOME”替換掉,即 ORACLE_HOME_LISTNER=$1 –à ORACLE_HOME_LISTNER=$ORACLE_HOME,儲存後再來執行指令碼dbstart,順利執行了,

-bash-3.00$ dbstart

-bash-3.00$ ps -aef | grep ora | grep -v grep

  oracle   964   552   0 06:40:17 pts/1       0:00 ps -aef

  oracle   552   546   0 06:08:08 pts/1       0:00 -bash

  oracle   696     1   0 06:22:25 ?           0:00 /opt/oracle/product/10.2/db_1/bin/tnslsnr LISTENER –inherit //監聽器起來了

 

但沒有oracle程式,只有oracle監聽器起來了。還有一個檔案/var/opt/oracle/oratab修要修改,這個檔案是oracle安裝過程中,手動執行root.sh被建立的。開啟這個檔案,有效的配置只有一行,下面是某個系統上的輸出:

sery:/opt/oracle/product/10.2/db_1:N

根據註釋的提示,我們需要把它最後一個欄位(以冒號“:”為欄位分割符)的值由“N”改為“Y,儲存後再來執行dbstart &

-bash-3.00$ dbstart

Processing Database instance “sery”: log file /opt/oracle/product/10.2/db_1/startup.log

-bash-3.00$ ps -eaf | grep ora

  oracle  1175     1   0 06:54:35 ?           0:00 ora_j001_sery

  oracle  1173     1   1 06:54:35 ?           0:01 ora_j000_sery

  oracle  1179     1   0 06:54:35 ?           0:00 ora_j003_sery

  oracle  1177     1   0 06:54:35 ?           0:00 ora_j002_sery

  ……省略若干輸出

這時,oracle例項執行起來了。根據這個經驗,我們順便把檔案dbshut這個檔案也修改了。

 

一切準備就緒,就可以開始寫執行級別的自動指令碼了。在執行級別3的目錄建立檔案/etc/rc3.d/S33dbstart,其內容如下:

#!/bin/bash

su – oracle -c /opt/oracle/product/10.2/db_1/bin/dbstart& //少選項-c將不會執行這個指令碼,-c command

儲存後在給它執行許可權。同理在執行級別S的目錄建檔案 /etc/rcS.d/K33dbshut,檔案內容如下:

#!/bin/bash

su – oracle -c /opt/oracle/product/10.2/db_1/bin/dbshut &

執行命令init 6重啟solaris 10,oracle例項及監聽器是否在正常執行。當然,如果不用執行級別而用服務管理設施SMF來管理oracle服務的話,還有好多步驟修要完成,有興趣的可以去試試。

 

                                                2007-5-18