본문 바로가기
Oracle/운영

[Single][linux] Oracle 자동 재기동 쉘 작성&등록

by 취미툰 2023. 4. 26.
반응형

출처 : 

https://oracle-base.com/articles/linux/automating-database-startup-and-shutdown-on-linux
https://thefif19wlsvy.tistory.com/157

 

Automating Database Startup and Shutdown on Linux

Use these methods to automatically startup and shutdown your database instances when your system starts and stops.

oracle-base.com

 

리눅스에서 자동으로 재기동할 수 있게 해주는 쉘입니다.

 

테스트는 linux 6,linux 7에서 수행하였습니다.

(출처에는 리눅스 6용이라고 되어 있었는데, 테스트는 리눅스 7에서 수행하였고, 잘 수행되었음. 실제 서버는 리눅스 6이라 적용했고 잘 수행되었음.)

DB 버전은 11.2.0.2로 수행하였습니다.

 

등록을 위해서는 두가지절차가 있습니다.

1.oratab flag 변경

2.쉘 등록

 

 

작업 내용

1.oratab flag 변경

[oracle 유저로 수행]

# cat /etc/oratab
XE:/u01/app/oracle/product/11.2.0/xe:Y

 

2.쉘 등록

[root유저로 수행]

ORA_HOME과 ORA_OWNER를 환경에 맞게 변경합니다.

# vi /etc/init.d/oracle

#!/bin/bash
#
# chkconfig: - 70 30
# description: oracle for GCLB
# ORA_HOME 경로는 자기 경로에 맞게 설정한다.
ORA_HOME="/u01/app/oracle/product/11.2.0/xe"
ORA_OWNER="oracle"

case "$1" in
start)
        echo -n "Oracle Start: "
        su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
        su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
        touch /var/lock/subsys/oracle
        echo "OK"
        ;;
stop)
        echo -n "ORACLE Shutdown: "
        su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
        su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
        rm -f /var/lock/subsys/oracle
        echo "OK"
        ;;
restart)
        $0 stop
        $0 start
        ;;
*)
        echo "Usage: $0 start|stop|restart"
        exit 1
esac
exit 0

 

권한 변경 및 chkconfig 등록

# chmod 775 /etc/init.d/oracle
# chkconfig --add oracle
# chkconfig oracle on
# chkconfig --list oracle

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

oracle          0:off   1:off   2:on    3:on    4:on    5:on    6:off

 

완료되었습니다. 이제 재기동하면 자동으로 기동되게 됩니다.

 

 

테스트

아래는 테스트한 결과인데 같이 첨부합니다. 테스트는 1번 oratab 변경과 2번 쉘등록중 하나만 해도 재기동 시 자동기동이 될까에 대한 테스트이고 4번의 상황에 DB가 자동으로 올라오는지 테스트 하였습니다.

 

1.oratab  : Y & chkconfig 등록 X  

# cat /etc/oratab
XE:/u01/app/oracle/product/11.2.0/xe:Y // Y


# chkconfig --list oracle
Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

error reading information on service oracle: No such file or directory //등록 안되어 있음

재기동 후

DB가 자동기동 되지 않았습니다.

$ ps -ef |grep pmon
vagrant   1589  1565  0 15:53 pts/0    00:00:00 grep --color=auto pmon
$ ps -ef |grep tns
root        23     2  0 15:52 ?        00:00:00 [netns]
vagrant   1596  1565  0 15:53 pts/0    00:00:00 grep --color=auto tns

 

2.oratab  : N & chkconfig 등록 O 

# cat /etc/oratab
XE:/u01/app/oracle/product/11.2.0/xe:N //N

# chkconfig --list oracle

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

oracle          0:off   1:off   2:on    3:on    4:on    5:on    6:off

재기동 후

DB는 기동되지 않음(리스너는 기동됨)

$ ps -ef |grep pmon
vagrant   1692  1662  0 16:06 pts/0    00:00:00 grep --color=auto pmon
$ ps -ef |grep tns
root        23     2  0 16:04 ?        00:00:00 [netns]
oracle     956     1  0 16:04 ?        00:00:00 /u01/app/oracle/product/11.2.0/xe/bin/tnslsnr LISTENER -inherit
vagrant   1697  1662  0 16:06 pts/0    00:00:00 grep --color=auto tns

 

3.oratab  : Y & chkconfig 등록 O 

# cat /etc/oratab
XE:/u01/app/oracle/product/11.2.0/xe:Y //Y

# chkconfig --list oracle

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

oracle          0:off   1:off   2:on    3:on    4:on    5:on    6:off

재기동 후

DB 자동기동 잘됨

$ ps -ef |grep pmon
oracle    1032     1  0 15:40 ?        00:00:00 xe_pmon_XE
vagrant   1816  1775  0 15:41 pts/0    00:00:00 grep --color=auto pmon
$ ps -ef |grep tns
root        23     2  0 15:40 ?        00:00:00 [netns]
oracle     954     1  0 15:40 ?        00:00:00 /u01/app/oracle/product/11.2.0/xe/bin/tnslsnr LISTENER -inherit
vagrant   1819  1775  0 15:41 pts/0    00:00:00 grep --color=auto tns

4.oratab  : N & chkconfig 등록 X

# cat /etc/oratab
XE:/u01/app/oracle/product/11.2.0/xe:N // N


# chkconfig --list oracle
Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

error reading information on service oracle: No such file or directory //등록 안되어 있음

 

재기동 후

DB 재기동 안됨.

$ ps -ef |grep pmon
vagrant   1753  1730  0 16:14 pts/0    00:00:00 grep --color=auto pmon
$ ps -ef |grep tns
root        23     2  0 16:10 ?        00:00:00 [netns]
vagrant   1757  1730  0 16:14 pts/0    00:00:00 grep --color=auto tns

 

테스트 결과, 두개의 파일이 같이 적용되어야 자동으로 재기동 되는것을 확인할 수 있었습니다.

다만,

쉘 내용은 os상에서 sh oracle start/stop/restart 로 DB를 기동/중지/재기동 한다는 내용인데.. chkconfig 등록만으로도 DB가 OS 재기동시 자동으로 기동되는 이유는 정확히 이해되지 않고 있습니다. 

이해된다면 내용 추가하겠습니다.

 

끝.

반응형

댓글