1,雲端rc.local設定失效
伺服器資訊是centos6.5,oracle資料庫版本是orcle11g,小版本号是11.2.0.1.0,以前在idc環境設定的oracle伺服器開機啟動oracle服務,在/etc/rc.local中設定,增加如下的内容 :
su - oracle < lsnrctl start sqlplus / as sysdba startup quit EOF |
但是遷移到雲環境後,這個設定啟動失效了,伺服器啟動後,oracle沒有随機開啟,是以準備換一種新的思路來實作。
Linux啟動時,會運作一個init程式,然後由init來啟動後面的任務,包括多使用者環境(inittab中設定)和網絡等。運作級就是目前程式運作的功能級别,這個級别從1到6,具有不同的功能。這些級别在/etc/inittab中指定,該檔案就是init程式尋找的主要檔案。最先運作的服務放在/etc/rc.d目錄下。
檔案以S開頭,代表start(啟動),後面的數字是啟動順序;檔案以K開頭,代表kill(結束),同樣,後面的數字代表結束順序。
例如/etc/rc2.d/S10network代表它與運作級别2有關,10就是他的啟動順序。
目錄介紹:
init.d
這個目錄中存放了一些服務啟動腳本,系統安裝時的多個rpm包,這些腳本在執行時可以用來啟動,停止和重新開機這些服務。
rcx.d(x為0~6)
這個目錄是啟動級别的執行程式連結目錄,裡面的檔案都是指向init.d目錄中檔案的一些軟連接配接。
是以可以在init.d裡面添加一個啟動oracle的腳本,然後通過chkconfig來實作開機自啟動。
2,修改/etc/oratab
[[email protected] ~]# vim /etc/oratab powerdes:/oracle/app/oracle/product/11.2.0/dbhome_1:Y |
blog源位址:http://blog.csdn.net/mchdba/article/details/51176911 ,部落客mchdba,謝絕轉載
3,在oracle使用者的profile檔案中增加SID環境變量
[[email protected] ~]# su - oracle [[email protected] ~]$ vim .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH export ORACLE_BASE=/oracle/app/oracle export ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export ORACLE_TERM=xterm export TNS_ADMIN=$ORACLE_HOME/network/admin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/oracm/lib:$ORACLE_HOME/lib export CLASSPATH=$CLASSPATH:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/jlib:$ORACLE_HOME/network/lib export LANG=en_US.gbk export NLS_LANG=american_america.ZHS16GBK export EDITOR=vim # add in the end export ORACLE_SID=powerdes |
4,編寫oracle自啟動腳本oracled
判斷oracle是否啟動的小腳本:
[[email protected] ~]# more t.sh pidnum=`ps -eaf|grep oracle |grep powerdes |grep -v grep |wc |awk '{ print $1 }' ` echo $pidnum if [ $pidnum -gt 0 ]; then echo "oracle is running,there are $pidnum oracle proccesses exists .." fi [[email protected]_crm ~]# [[email protected]_crm ~]# sh t.sh 40 oracle is running,there are 40 oracle proccesses exists .. [[email protected] ~]# |
Oracle随機啟動的腳本:
[[email protected] ~]# more /etc/init.d/oracled #!/bin/bash # chkconfig: 2345 10 90 # description: myservice .... # description: The Oracle Database is an Object-Relational Database Management System. # check the oracle server by " ps -eaf|grep oracle |grep powerdes |grep -v grep |wc " . /etc/rc.d/init.d/functions LOCKFILE=/var/lock/subsys/oracle ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1 ORACLE_USER=oracle # check the oracle processe, if >0 means oracle is running. pidnum=`ps -eaf|grep oracle |grep powerdes |grep -v grep |wc |awk '{ print $1 }' ` case "$1" in 'start') if [ $pidnum -gt 0 ]; then echo $0 already running. exit 1 fi echo -n $"Starting Oracle Database:" su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start" su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" #su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl start dbconsole" touch $LOCKFILE ;; 'stop') #if [ ! -f $LOCKFILE ]; then if [ $pidnum -lt 1 ]; then echo $0 already stopping. exit 1 fi echo -n $"Stopping Oracle Database:" su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop" su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" #su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole" rm -f $LOCKFILE ;; 'restart') $0 stop $0 start ;; 'status') if [ $pidnum -gt 0 ]; then echo $0 started. else echo $0 stopped. fi ;; *) echo "Usage: $0 [start|stop|status]" exit 1 esac exit 0 [[email protected] ~]# |
5,驗證oracled
賦予執行權限: chmod a+x /etc/rc.d/init.d/oracled ln –s /etc/rc.d/init.d/oracle /etc/rc2.d/S61oracled ln –s /etc/rc.d/init.d/oracled /etc/rc3.d/S61oracled ln –s /etc/rc.d/init.d/oracled /etc/rc4.d/S61oracled ln –s /etc/rc.d/init.d/oracle /etc/rc0.d/K61oracled ln –s /etc/rc.d/init.d/oracle /etc/rc6.d/K61oracled 驗證: service oracled status; service oracled start; service oracled stop; service oracled restart; |
6,添加開機自啟動
将oracled添加進chkconfig:
chkconfig --level 2345 oracled on; chkconfig --add oracled; |