OS환경 : Oracle Linux 6.8 (64bit)
DB 환경 : Oracle Database 11.2.0.4
방법 : 오라클 11g R2 서버 기동시 db 자동실행 설정
서버 기동 시 오라클DB와 리스너가 자동으로 기동되게 끔 설정하는 방법
scripts 디렉토리 생성
1
|
$ mkdir -p /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+x /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 [ -x $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
https://oracle-base.com/articles/linux/automating-database-startup-and-shutdown-on-linux
'ORACLE > Admin' 카테고리의 다른 글
오라클 19c 리스너 로그 자동백업 파라미터 (0) | 2021.12.26 |
---|---|
오라클 19c ahf(tfa) 업그레이드 가이드 (0) | 2021.12.25 |
오라클 19c AWR 에 저장된 정보 확인(awrinfo.sql) (0) | 2021.11.05 |
오라클 19c 무료 클라이언트, 모니터링 툴 (0) | 2021.11.03 |
오라클 19c 윈도우 환경에서 아카이브 로그 정리 방법(archive log) (0) | 2021.10.27 |