프린트 하기

OS환경 : Oracle Linux 6.8 (64bit)

 

DB 환경 : Oracle Database 11.2.0.4

 

방법 : 오라클 11g R2 서버 기동시 db 자동실행 설정

서버 기동 시 오라클DB와 리스너가 자동으로 기동되게 끔 설정하는 방법

 

scripts 디렉토리 생성

1
$ mkdir -/home/oracle/scripts

 

 

기동 및 정지용 스크립트 생성

start_all.sh 쉘파일 생성

1
2
3
4
5
6
7
8
9
$ vi/home/oracle/scripts/start_all.sh
#!/bin/bash
/home/oracle/.bash_profile
 
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
 
dbstart \$ORACLE_HOME

 

 

stop_all.sh 쉘파일 생성

1
2
3
4
5
6
7
8
9
$ vi/home/oracle/scripts/stop_all.sh
#!/bin/bash
/home/oracle/.bash_profile
 
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
 
dbshut \$ORACLE_HOME

 

 

start_all.sh, stop_all.sh 쉘파일 실행 권한 부여

1
2
$ chown -R oracle:dba /home/oracle/scripts
$ chmod u+/home/oracle/scripts/*.sh

 

 

start_all.sh, stop_all.sh 쉘파일 테스트

쉘파일로 db 기동 정지가 가능해야함

1
2
$ sh /home/oracle/scripts/start_all.sh 
$ sh /home/oracle/scripts/stop_all.sh

 

 

root 계정으로 /etc/init.d/dbora 파일 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# vi /etc/init.d/dbora
 
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
Set ORA_OWNER to the user id of the owner of the 
# Oracle database software.
 
ORA_OWNER=oracle
 
case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        # Remove "&" if you don't want startup as a background process.
        su $ORA_OWNER -c "/home/oracle/scripts/start_all.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1" &
 
        touch /var/lock/subsys/dbora
        ;;
    'stop')
        # Stop the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        su $ORA_OWNER -c "/home/oracle/scripts/stop_all.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1"
        rm -f /var/lock/subsys/dbora
        ;;
esac
 

 

 

root 계정으로 /etc/init.d/dbora 파일 권한부여

1
# chmod 750 /etc/init.d/dbora

 

 

os 기동시 자동 기동되도록 dbora 서비스 등록

1
# chkconfig --add dbora

 

 

아래 명령으로 db가 기동, 정지되는지 확인

1
2
# service dbora start
# service dbora stop

 

 

서비스 시작 전 프로세스 확인

1
2
3
4
5
# ps -ef|grep pmon
root      6218  5242  0 10:54 pts/0    00:00:00 grep pmon
# ps -ef|grep tns
root        36     2  0 10:27 ?        00:00:00 [netns]
root      6220  5242  0 10:54 pts/0    00:00:00 grep tns

db와 리스너가 내려가 있음

 

 

db 서비스 기동

1
# service dbora start

 

 

서비스 시작 후 프로세스 확인

1
2
3
4
5
6
# ps -ef | grep pmon
oracle    6301     1  0 10:55 ?        00:00:00 ora_pmon_orcl
root      6405  5242  0 10:56 pts/0    00:00:00 grep pmon
# ps -ef | grep tns
root        36     2  0 10:27 ?        00:00:00 [netns]
root      6407  5242  0 10:56 pts/0    00:00:00 grep tns

db는 정상적으로 기동됬지만 리스너는 기동되지 않음

 

 

$ORACLE_HOME/bin/dbstart 쉘 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ vi $ORACLE_HOME/bin/dbstart
79번 라인
# First argument is used to bring up Oracle Net Listener
ORACLE_HOME_LISTNER=$1
if [ ! $ORACLE_HOME_LISTNER ] ; then
  echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener"
  echo "Usage: $0 ORACLE_HOME"
else
  LOG=$ORACLE_HOME_LISTNER/listener.log
 
  # Set the ORACLE_HOME for the Oracle Net Listener, it gets reset to
  # a different ORACLE_HOME for each entry in the oratab.
  ORACLE_HOME=$ORACLE_HOME_LISTNER ; export ORACLE_HOME
 
  # Start Oracle Net Listener
  if [ -x $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
    echo "$0: Starting Oracle Net Listener" >> $LOG 2>&1
    $ORACLE_HOME_LISTNER/bin/lsnrctl start >> $LOG 2>&1 &
    VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTL for " | cut -d' ' -f5 | cut -d'.' -f1`
    export VER10LIST
  else
    echo "Failed to auto-start Oracle Net Listener using $ORACLE_HOME_LISTNER/bin/tnslsnr"
  fi
fi

 

 

$ORACLE_HOME/bin/dbstart 쉘 수정

모든 $ORACLE_HOME_LISTNER를 $ORACLE_HOME으로 수정

LOG=부분을 기존 리스너 로그 경로로 정확하게 지정

ORACLE_HOME export 부분을 정확한 ORACLE_HOME 경로로 지정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ vi $ORACLE_HOME/bin/dbstart
79번 라인
# First argument is used to bring up Oracle Net Listener
ORACLE_HOME=$1
if [ ! $ORACLE_HOME ] ; then
  echo "ORACLE_HOME is not SET, unable to auto-start Oracle Net Listener"
  echo "Usage: $0 ORACLE_HOME"
else
  LOG=/app/oracle/diag/tnslsnr/ora11/listener/trace/listener.log
 
  # Set the ORACLE_HOME for the Oracle Net Listener, it gets reset to
  # a different ORACLE_HOME for each entry in the oratab.
  ORACLE_HOME=/app/oracle/product/11.2.0/db_1 ; export ORACLE_HOME
 
  # Start Oracle Net Listener
  if [ -$ORACLE_HOME/bin/tnslsnr ] ; then
    echo "$0: Starting Oracle Net Listener" >> $LOG 2>&1
    $ORACLE_HOME/bin/lsnrctl start >> $LOG 2>&1 &
    VER10LIST=`$ORACLE_HOME/bin/lsnrctl version | grep "LSNRCTL for " | cut -d' ' -f5 | cut -d'.' -f1`
    export VER10LIST
  else
    echo "Failed to auto-start Oracle Net Listener using $ORACLE_HOME/bin/tnslsnr"
  fi
fi

 

 

root 계정으로 서비스 재시작 후 상태 확인

1
2
3
4
5
6
7
8
9
# service dbora stop
# service dbora start
# ps -ef | grep tns
root        36     2  0 10:27 ?        00:00:00 [netns]
oracle    7645     1  0 11:08 ?        00:00:00 /app/oracle/product/11.2.0/db_1/bin/tnslsnr LISTENER -inherit
root      7920  5242  0 11:09 pts/0    00:00:00 grep tns
# ps -ef|grep pmon
oracle    7834     1  0 11:09 ?        00:00:00 ora_pmon_orcl
root     11193  5242  0 11:18 pts/0    00:00:00 grep pmon

리스너까지 정상적으로 기동됨

 

 

서비스 종료시에 리스너도 같이 내려가게 하려면

$ORACLE_HOME/bin/dbshut 파일도 dbstart 파일처럼 수정이 필요함

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
$ vi $ORACLE_HOME/bin/dbshut
수정전
# The  this to bring down Oracle Net Listener
ORACLE_HOME_LISTNER=$1
if [ ! $ORACLE_HOME_LISTNER ] ; then
  echo "ORACLE_HOME_LISTNER is not SET, unable to auto-stop Oracle Net Listener"
  echo "Usage: $0 ORACLE_HOME"
else
  LOG=$ORACLE_HOME_LISTNER/listener.log
 
  # Set the ORACLE_HOME for the Oracle Net Listener, it gets reset to
  # a different ORACLE_HOME for each entry in the oratab.
  ORACLE_HOME=$ORACLE_HOME_LISTNER ; export ORACLE_HOME
 
  # Stop Oracle Net Listener
  if [ -f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
    echo "$0: Stoping Oracle Net Listener" >> $LOG 2>&1
    $ORACLE_HOME_LISTNER/bin/lsnrctl stop >> $LOG 2>&1 &
  else
    echo "Failed to auto-stop Oracle Net Listener using $ORACLE_HOME_LISTNER/bin/tnslsnr"
  fi
fi
 
수정후
# The  this to bring down Oracle Net Listener
ORACLE_HOME=$1
if [ ! $ORACLE_HOME] ; then
  echo "ORACLE_HOME is not SET, unable to auto-stop Oracle Net Listener"
  echo "Usage: $0 ORACLE_HOME"
else
  LOG=/app/oracle/diag/tnslsnr/ora11/listener/trace/listener.log
  # Set the ORACLE_HOME for the Oracle Net Listener, it gets reset to
  # a different ORACLE_HOME for each entry in the oratab.
  ORACLE_HOME=/app/oracle/product/11.2.0/db_1 ; export ORACLE_HOME
  # Stop Oracle Net Listener
  if [ -f $ORACLE_HOME/bin/tnslsnr ] ; then
    echo "$0: Stoping Oracle Net Listener" >> $LOG 2>&1
    $ORACLE_HOME/bin/lsnrctl stop >> $LOG 2>&1 &
  else
    echo "Failed to auto-stop Oracle Net Listener using $ORACLE_HOME/bin/tnslsnr"
  fi
fi

 

 

참조 :

https://positivemh.tistory.com/593

 

오라클 19c 서버 기동시 db 자동실행 설정

OS환경 : Oracle Linux 7.5 (64bit) DB 환경 : Oracle Database 19.3.0.0 방법 : 오라클 19c 자동실행 설정 서버 기동 시 오라클DB와 리스너가 자동으로 기동되게 끔 설정하는 방법 oratab 파일 확인 1 2 3 4 5 6..

positivemh.tistory.com

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