配置完ASM实例后,每次启动oracle数据库服务器的时候要先启动ASM实例,然后启动数据库实例;关闭的时候,需要先关闭oracle数据库实例,然后关闭ASM实例;敲起命来来麻烦的很,因而改进了原来的shell脚本来更好的实现自动化,为了加快启动和关闭的速度,该脚本不包含dbconsole的启动和关闭,脚本同样适用于非ASM环境。

一:总脚本调用/usr/bin/startdb和/usr/bin/stopdb脚本,使用chkconfig命令创建相关的符号链接后就可以使用service命令调用

   
   
   
   
  1. [root@ora10g ~]# cat /etc/init.d/oracle   
  2. #!/bin/sh  
  3. #chkconfig: 35 85 15  
  4. #description:oracle  
  5. #function: start .. stop the oracle and asm instance on 10g R2 64bit  
  6. #author:lw.yang  
  7. #version: V.2.0  
  8.  
  9. # Source function library.  
  10. . /etc/rc.d/init.d/functions  
  11.  
  12. case "$1" in 
  13.            start)  
  14.            /usr/bin/startdb   
  15.             ;;  
  16.  
  17.         stop)  
  18.             /usr/bin/stopdb  
  19.             ;;  
  20.  
  21.         *)  
  22.             echo $"Usage: $0 {start|stop}" 
  23.             exit 1  
  24.  
  25. esac 

二:/usr/bin/startdb脚本用来启动ASM实例和ORACLE数据库实例和监听器,启动前会进行判断是否配置了ASM以及实例是否已经启动,ASM实例需要ocssd.bin后台进程启动才可以运行

   
   
   
   
  1. [root@ora10g ~]# cat /usr/bin/startdb   
  2. #!/bin/sh  
  3.  
  4. #define variables  
  5.  
  6. ASM_PID=$(pidof ocssd.bin)  
  7. ASM_PROC=$(ps -ef |grep asm_ |grep -v 'grep' |wc -l)  
  8.  
  9. D_SID=$(su - oracle -c "env |grep ORACLE_SID|cut -d "=" -f 2")  
  10. DB_PROC=$(ps -ef |grep ora_ |grep -E 'smon|pmon|ckpt|lgwr' |wc -l)  
  11.  
  12. #startup asm instance  
  13.  
  14. if [ -z $ASM_PID ];then  
  15.    echo "Not configure use ASM"  
  16.    continue  
  17.    elif [ $ASM_PROC -gt "7" ];then  
  18.    echo "ASM instance already running"  
  19.    else   
  20.    su - oracle  -c "export ORACLE_SID=+ASM && sqlplus /nolog<<EOF   
  21.    conn /as sysdba  
  22.    startup   
  23.    exit  
  24.    EOF"  
  25. fi  
  26.  
  27. #startup database instance  
  28.  
  29.     if [ $DB_PROC -eq "4" ];then  
  30.         echo "Database instance already running,shutdown it firtst"  
  31.         else  
  32.         su - oracle -c "lsnrctl start"  
  33.         su - oracle -c "export ORACLE_SID=$D_SID && sqlplus /nolog<<EOF 
  34.         conn /as sysdba  
  35.         startup   
  36.         exit  
  37.         EOF"  
  38.         touch /var/lock/subsys/oracle  
  39.     fi 

三:/usr/bin/stopdb脚本用来关闭监听器,oracle数据库实例和ASM实例,关闭之前会先进行判断是否使用ASM以及相关实例是否已经关闭
 

   
   
   
   
  1. #!/bin/sh  
  2.  
  3. #define variables  
  4.  
  5. ASM_PID=$(pidof ocssd.bin)  
  6. ASM_PROC=$(ps -ef |grep asm_ |grep -v 'grep' |wc -l)  
  7.  
  8. D_SID=$(su - oracle -c "env |grep ORACLE_SID|cut -d "=" -f 2")  
  9. DB_PROC=$(ps -ef |grep ora_ |grep -E 'smon|pmon|ckpt|lgwr' |wc -l)  
  10.  
  11. #stop database instance  
  12.  
  13.     if [ $DB_PROC -eq "0" ];then  
  14.         echo "Database instance already shutdown"  
  15.         else  
  16.     su - oracle -c "lsnrctl stop"  
  17.     su - oracle -c "export ORACLE_SID=$D_SID && sqlplus /nolog<<EOF 
  18.     conn /as sysdba  
  19.     shutdown immediate  
  20.     exit  
  21.     EOF"  
  22.         rm -f /var/lock/subsys/oracle  
  23.     fi  
  24.  
  25. #stop asm instance  
  26.  
  27. if [ -z $ASM_PID ];then  
  28.    echo "Not configure use ASM"  
  29.    elif [ $ASM_PROC -eq "0" ];then  
  30.    echo "ASM instance already shutdown"  
  31.    exit   
  32.    else   
  33.    su - oracle  -c "export ORACLE_SID=+ASM && sqlplus /nolog<<EOF   
  34.    conn /as sysdba  
  35.    shutdown immediate  
  36.    exit  
  37.    EOF"  
  38. fi 

四:测试

   
   
   
   
  1. 非ASM环境下,数据库实例已经启动下测试:  
  2. [root@ora10g ~]# service oracle start  
  3. Not configure use ASM  
  4. Database instance already running,shutdown it firtst  
  5.  
  6.  
  7. [root@ora10g ~]# service oracle stop  
  8.  
  9. LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 02-JUN-2011 09:48:36  
  10.  
  11. Copyright (c) 1991, 2005, Oracle.  All rights reserved.  
  12.  
  13. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)))  
  14. The command completed successfully  
  15.  
  16. SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jun 2 09:48:40 2011  
  17.  
  18. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  19.  
  20. SQL> Connected.  
  21. SQL> Database closed.  
  22. Database dismounted.  
  23. ORACLE instance shut down.  
  24. SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production  
  25. With the Partitioning, OLAP and Data Mining options  
  26. Not configure use ASM  
  27.  
  28. 非ASM环境下,数据库实例已经关闭下测试:  
  29. [root@ora10g ~]# service oracle stop  
  30. Database instance already shutdown  
  31. Not configure use ASM  
  32.  
  33. [root@ora10g ~]# service oracle start  
  34. Not configure use ASM  
  35.  
  36. LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 02-JUN-2011 09:50:25  
  37.  
  38. Copyright (c) 1991, 2005, Oracle.  All rights reserved.  
  39.  
  40. Starting /u01/app/oracle/bin/tnslsnr: please wait...  
  41.  
  42. TNSLSNR for Linux: Version 10.2.0.1.0 - Production  
  43. System parameter file is /u01/app/oracle/network/admin/listener.ora  
  44. Log messages written to /u01/app/oracle/network/log/listener.log  
  45. Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora10g.766.com)(PORT=1521)))  
  46. Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))  
  47.  
  48. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)))  
  49. STATUS of the LISTENER  
  50. ------------------------  
  51. Alias                     LISTENER  
  52. Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production  
  53. Start Date                02-JUN-2011 09:50:25  
  54. Uptime                    0 days 0 hr. 0 min. 0 sec  
  55. Trace Level               off  
  56. Security                  ON: Local OS Authentication  
  57. SNMP                      OFF  
  58. Listener Parameter File   /u01/app/oracle/network/admin/listener.ora  
  59. Listener Log File         /u01/app/oracle/network/log/listener.log  
  60. Listening Endpoints Summary...  
  61.   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora10g.766.com)(PORT=1521)))  
  62.   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))  
  63. Services Summary...  
  64. Service "PLSExtProc" has 1 instance(s).  
  65.   Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...  
  66. The command completed successfully  
  67.  
  68. SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jun 2 09:50:25 2011  
  69.  
  70. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  71.  
  72. SQL> Connected to an idle instance.  
  73. SQL> ORACLE instance started.  
  74.  
  75. Total System Global Area  629145600 bytes  
  76. Fixed Size                  2022824 bytes  
  77. Variable Size             230687320 bytes  
  78. Database Buffers          390070272 bytes  
  79. Redo Buffers                6365184 bytes  
  80. Database mounted.  
  81. Database opened.  
  82. SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production  
  83. With the Partitioning, OLAP and Data Mining options 

五:设置操作系统环境变量

设置NLS_DATE_FORMAT和NLS_LANG环境变量,这两个变量需要同时设定,否则执行select sysdate from dual的时候,输出格式DD-MON-YY

SQL> select sysdate from dual;

SYSDATE
---------
02-JUN-11

[oracle@ora10g ~]$ env |grep NLS
NLS_LANG=american_america.UTF8
NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS

SQL> select sysdate from dual;

SYSDATE
-------------------
2011-06-02 10:04:49

设置默认编辑器为vim,若不设置该变量,在sqlplus中将无法使用ed命令

SQL> ed
Wrote file afiedt.buf
27

[oracle@ora10g ~]$ env |grep EDITOR
EDITOR=vim