프린트 하기

OS환경 : Oracle Linux 7.4 (64bit)

 

DB 환경 : Oracle Database 19.3.0.0

 

방법 : 오라클 19c 서버 기동시 db 자동실행 설정 스크립트

오라클 19c 서버 기동시 db 자동실행 설정 ( https://positivemh.tistory.com/593 )

에 있는 내용을 sh 명령 한번에 설정되게끔 하는 스크립트

매번 테스트 db를 기동하기 귀찮아서 만듬

*운영환경이 아닌 테스트 환경에서만 실행하는것을 권고함

 

 

전체 스크립트

해당 스크립트 저장 후 sh set.sh 로 실행 시 서비스 등록 및 db 및 리스너 자동기동이 설정됨

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# cat set.sh
#!/bin/bash
#set.sh created by positivemh
 
###change oratab start###
ORACLE_HOME=$(su - oracle -'source /home/oracle/.bash_profile && echo $ORACLE_HOME')
timestamp=$(date '+%Y%m%d_%H%M%S')
 
# log file
log_file="install_${timestamp}.log"
 
echo "${timestamp} - Start setting auto start for oracle database" >> "$log_file"
 
# backup /etc/oratab
cp -av /etc/oratab /etc/oratab_backup_${timestamp>> "$log_file"
 
change oratab N to Y
sed -"\|$ORACLE_HOME|s|:N$|:Y|" /etc/oratab
echo "${timestamp} - /etc/oratab is changed" >> "$log_file"
###change oratab end###
 
 
###create start,stop sh start###
echo '#!/bin/bash' > /home/oracle/start_all.sh
echo '. /home/oracle/.bash_profile' >> /home/oracle/start_all.sh
echo '' >> /home/oracle/start_all.sh
echo 'export ORAENV_ASK=NO' >> /home/oracle/start_all.sh
echo '. oraenv' >> /home/oracle/start_all.sh
echo 'export ORAENV_ASK=YES' >> /home/oracle/start_all.sh
echo '' >> /home/oracle/start_all.sh
echo 'dbstart $ORACLE_HOME' >> /home/oracle/start_all.sh
 
echo '#!/bin/bash' > /home/oracle/stop_all.sh
echo '. /home/oracle/.bash_profile' >> /home/oracle/stop_all.sh
echo '' >> /home/oracle/stop_all.sh
echo 'export ORAENV_ASK=NO' >> /home/oracle/stop_all.sh
echo '. oraenv' >> /home/oracle/stop_all.sh
echo 'export ORAENV_ASK=YES' >> /home/oracle/stop_all.sh
echo '' >> /home/oracle/stop_all.sh
echo 'dbshut $ORACLE_HOME' >> /home/oracle/stop_all.sh
 
# get owner, group, priv from /home/oracle/.bash_profile
bash_profile_owner=$(stat -c %U /home/oracle/.bash_profile)
bash_profile_group=$(stat -c %G /home/oracle/.bash_profile)
#bash_profile_permissions=$(stat -c %a /home/oracle/.bash_profile)
 
# grant to start_all.sh
chown $bash_profile_owner:$bash_profile_group /home/oracle/start_all.sh
chmod u+/home/oracle/start_all.sh
chown $bash_profile_owner:$bash_profile_group /home/oracle/stop_all.sh
chmod u+/home/oracle/stop_all.sh
 
echo "${timestamp} - created start_all.sh, stop_all.sh file in /home/oracle/" >> "$log_file"
###create start,stop sh end###
 
 
###create orcl.service start###
echo "[Unit]" > /lib/systemd/system/orcl.service
echo "Description=The Oracle Database Service" >> /lib/systemd/system/orcl.service
echo "After=syslog.target network.target" >> /lib/systemd/system/orcl.service
echo "" >> /lib/systemd/system/orcl.service
echo "[Service]" >> /lib/systemd/system/orcl.service
echo "LimitMEMLOCK=infinity" >> /lib/systemd/system/orcl.service
echo "LimitNOFILE=65535" >> /lib/systemd/system/orcl.service
echo "RemainAfterExit=yes" >> /lib/systemd/system/orcl.service
echo "User=$bash_profile_owner" >> /lib/systemd/system/orcl.service
echo "Group=$bash_profile_group" >> /lib/systemd/system/orcl.service
echo "Restart=no" >> /lib/systemd/system/orcl.service
echo "ExecStart=/bin/bash -c '/home/oracle/start_all.sh'" >> /lib/systemd/system/orcl.service
echo "ExecStop=/bin/bash -c '/home/oracle/stop_all.sh'" >> /lib/systemd/system/orcl.service
echo "" >> /lib/systemd/system/orcl.service
echo "[Install]" >> /lib/systemd/system/orcl.service
echo "WantedBy=multi-user.target" >> /lib/systemd/system/orcl.service
 
echo "${timestamp} - created orcl service" >> "$log_file"
###create orcl.service end###
 
 
###input ORACLE_BASE_HOME in /home/oracle/.bash_profile start###
#backup /home/oracle/.bash_profile
cp -av /home/oracle/.bash_profile /home/oracle/.bash_profile_backup_${timestamp>> "$log_file"
 
#input ORACLE_BASE_HOME
sed -'$a\export ORACLE_BASE_HOME=$ORACLE_HOME' /home/oracle/.bash_profile
echo "${timestamp} - added ORACLE_BASE_HOME in /home/oracle/.bash_profile" >> "$log_file"
###input ORACLE_BASE_HOME in /home/oracle/.bash_profile end###
 
 
###reload start enable service start###
systemctl daemon-reload >> "$log_file"
systemctl start orcl.service >> "$log_file"
systemctl enable orcl.service >> "$log_file"
echo "${timestamp} - registerd service" >> "$log_file"
###reload start enable service end###
 
echo "${timestamp} - Ended setting auto start for oracle database" >> "$log_file"

 

 

테스트 실행(나의경우 디버깅을 위해 -x 옵션을 사용했지만 -x옵션 없이 실행해도됨)

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# sh -set.sh
++ su - oracle -'source /home/oracle/.bash_profile && echo $ORACLE_HOME'
+ ORACLE_HOME=/ORA19/app/oracle/product/19.0.0/db_1
++ date +%Y%m%d_%H%M%S
+ timestamp=20231219_164352
+ log_file=install_20231219_164352.log
+ echo '20231219_164352 - Start setting auto start for oracle database'
+ cp -av /etc/oratab /etc/oratab_backup_20231219_164352
+ sed -'\|/ORA19/app/oracle/product/19.0.0/db_1|s|:N$|:Y|' /etc/oratab
+ echo '20231219_164352 - /etc/oratab is changed'
+ echo '#!/bin/bash'
+ echo '. /home/oracle/.bash_profile'
+ echo ''
+ echo 'export ORAENV_ASK=NO'
+ echo '. oraenv'
+ echo 'export ORAENV_ASK=YES'
+ echo ''
+ echo 'dbstart $ORACLE_HOME'
+ echo '#!/bin/bash'
+ echo '. /home/oracle/.bash_profile'
+ echo ''
+ echo 'export ORAENV_ASK=NO'
+ echo '. oraenv'
+ echo 'export ORAENV_ASK=YES'
+ echo ''
+ echo 'dbshut $ORACLE_HOME'
++ stat -c %U /home/oracle/.bash_profile
+ bash_profile_owner=oracle
++ stat -c %G /home/oracle/.bash_profile
+ bash_profile_group=oinstall
+ chown oracle:oinstall /home/oracle/start_all.sh
+ chmod u+/home/oracle/start_all.sh
+ chown oracle:oinstall /home/oracle/stop_all.sh
+ chmod u+/home/oracle/stop_all.sh
+ echo '20231219_164352 - created start_all.sh, stop_all.sh file in /home/oracle/'
+ echo '[Unit]'
+ echo 'Description=The Oracle Database Service'
+ echo 'After=syslog.target network.target'
+ echo ''
+ echo '[Service]'
+ echo LimitMEMLOCK=infinity
+ echo LimitNOFILE=65535
+ echo RemainAfterExit=yes
+ echo User=oracle
+ echo Group=oinstall
+ echo Restart=no
+ echo 'ExecStart=/bin/bash -c '\''/home/oracle/start_all.sh'\'''
+ echo 'ExecStop=/bin/bash -c '\''/home/oracle/stop_all.sh'\'''
+ echo ''
+ echo '[Install]'
+ echo WantedBy=multi-user.target
+ echo '20231219_164352 - created orcl service'
+ cp -av /home/oracle/.bash_profile /home/oracle/.bash_profile_backup_20231219_164352
+ sed -'$a\export ORACLE_BASE_HOME=$ORACLE_HOME' /home/oracle/.bash_profile
+ echo '20231219_164352 - added ORACLE_BASE_HOME in /home/oracle/.bash_profile'
+ systemctl daemon-reload
+ systemctl start orcl.service
+ systemctl enable orcl.service
Created symlink /etc/systemd/system/multi-user.target.wants/orcl.service → /usr/lib/systemd/system/orcl.service.
+ echo '20231219_164352 - registerd service'
+ echo '20231219_164352 - Ended setting auto start for oracle database'

 

 

로그 확인

1
2
3
4
5
6
7
8
9
10
# cat install_20231219_164352.log
20231219_164352 - Start setting auto start for oracle database
'/etc/oratab' -> '/etc/oratab_backup_20231219_164352'
20231219_164352 - /etc/oratab is changed
20231219_164352 - created start_all.sh, stop_all.sh file in /home/oracle/
20231219_164352 - created orcl service
'/home/oracle/.bash_profile' -> '/home/oracle/.bash_profile_backup_20231219_164352'
20231219_164352 - added ORACLE_BASE_HOME in /home/oracle/.bash_profile
20231219_164352 - registerd service
20231219_164352 - Ended setting auto start for oracle database

 

 

db 및 리스너 기동 확인

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
43
44
45
46
오라클 프로세스 확인
$ ps -ef|grep pmon
oracle   58067     1  0 16:43 ?        00:00:00 ora_pmon_oracle19
oracle   58862  4556  0 16:47 pts/1    00:00:00 grep --color=auto pmon
 
오라클 alert 확인
$ vi alert.log
..
2023-12-19T16:44:00.864381+09:00
CJQ0 started with pid=42, OS id=58156
Completed: ALTER DATABASE OPEN
 
리스너 프로세스 확인
$ ps -ef|grep tns
root        34     2  0 09:27 ?        00:00:00 [netns]
oracle   57971     1  0 16:43 ?        00:00:00 /ORA19/app/oracle/product/19.0.0/db_1/bin/tnslsnr LISTENER -inherit
oracle   58864  4556  0 16:47 pts/1    00:00:00 grep --color=auto tns
 
리스너 기동 확인
$ lsnrctl status
 
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 19-DEC-2023 16:48:27
 
Copyright (c) 19912019, Oracle.  All rights reserved.
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oel8)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                19-DEC-2023 16:43:52
Uptime                    0 days 0 hr. 4 min. 34 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /ORA19/app/oracle/product/19.0.0/db_1/network/admin/listener.ora
Listener Log File         /ORA19/app/oracle/diag/tnslsnr/oel8/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oel8)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "oracle19" has 1 instance(s).
  Instance "oracle19", status READY, has 1 handler(s) for this service...
Service "oracle19XDB" has 1 instance(s).
  Instance "oracle19", status READY, has 1 handler(s) for this service...
The command completed successfully

모두 정상적으로 잘 동작함

이제부터는 서버 재기동 이후에도 db와 리스너가 자동으로 기동됨

 

 

참고용 모듈식 스크립트

oratab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
 
###change oratab start###
ORACLE_HOME=$(su - oracle -'source /home/oracle/.bash_profile && echo $ORACLE_HOME')
timestamp=$(date '+%Y%m%d_%H%M%S')
 
# log file
log_file="install_${timestamp}.log"
 
# backup /etc/oratab
cp -av /etc/oratab /etc/oratab_backup_${timestamp}
 
change oratab N to Y
sed -"\|$ORACLE_HOME|s|:N$|:Y|" /etc/oratab
echo "${timestamp} - /etc/oratab is changed" >> "$log_file"
###change oratab end###

 

 

start_all.sh stop_all.sh

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
#!/bin/bash
 
##can remove##
timestamp=$(date '+%Y%m%d_%H%M%S')
# log file
log_file="install_${timestamp}.log"
##can remove##
 
###create start,stop sh start###
echo '#!/bin/bash' > /home/oracle/start_all.sh
echo '. /home/oracle/.bash_profile' >> /home/oracle/start_all.sh
echo '' >> /home/oracle/start_all.sh
echo 'export ORAENV_ASK=NO' >> /home/oracle/start_all.sh
echo '. oraenv' >> /home/oracle/start_all.sh
echo 'export ORAENV_ASK=YES' >> /home/oracle/start_all.sh
echo '' >> /home/oracle/start_all.sh
echo 'dbstart $ORACLE_HOME' >> /home/oracle/start_all.sh
 
echo '#!/bin/bash' > /home/oracle/stop_all.sh
echo '. /home/oracle/.bash_profile' >> /home/oracle/stop_all.sh
echo '' >> /home/oracle/stop_all.sh
echo 'export ORAENV_ASK=NO' >> /home/oracle/stop_all.sh
echo '. oraenv' >> /home/oracle/stop_all.sh
echo 'export ORAENV_ASK=YES' >> /home/oracle/stop_all.sh
echo '' >> /home/oracle/stop_all.sh
echo 'dbshut $ORACLE_HOME' >> /home/oracle/stop_all.sh
 
# get owner, group, priv from /home/oracle/.bash_profile
bash_profile_owner=$(stat -c %U /home/oracle/.bash_profile)
bash_profile_group=$(stat -c %G /home/oracle/.bash_profile)
#bash_profile_permissions=$(stat -c %a /home/oracle/.bash_profile)
 
# grant to start_all.sh
chown $bash_profile_owner:$bash_profile_group /home/oracle/start_all.sh
chmod u+x /home/oracle/start_all.sh
chown $bash_profile_owner:$bash_profile_group /home/oracle/stop_all.sh
chmod u+x /home/oracle/stop_all.sh
 
echo "${timestamp} - created start_all.sh, stop_all.sh file in /home/oracle/" >> "$log_file"
###create start,stop sh end###

 

 

orcl service 

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
#!/bin/bash
 
##can remove##
bash_profile_owner=$(stat -c %U /home/oracle/.bash_profile)
bash_profile_group=$(stat -c %G /home/oracle/.bash_profile)
##can remove##
 
###create orcl.service start###
echo "[Unit]" > /lib/systemd/system/orcl.service
echo "Description=The Oracle Database Service" >> /lib/systemd/system/orcl.service
echo "After=syslog.target network.target" >> /lib/systemd/system/orcl.service
echo "" >> /lib/systemd/system/orcl.service
echo "[Service]" >> /lib/systemd/system/orcl.service
echo "LimitMEMLOCK=infinity" >> /lib/systemd/system/orcl.service
echo "LimitNOFILE=65535" >> /lib/systemd/system/orcl.service
echo "RemainAfterExit=yes" >> /lib/systemd/system/orcl.service
echo "User=$bash_profile_owner" >> /lib/systemd/system/orcl.service
echo "Group=$bash_profile_group" >> /lib/systemd/system/orcl.service
echo "Restart=no" >> /lib/systemd/system/orcl.service
echo "ExecStart=/bin/bash -c '/home/oracle/start_all.sh'" >> /lib/systemd/system/orcl.service
echo "ExecStop=/bin/bash -c '/home/oracle/stop_all.sh'" >> /lib/systemd/system/orcl.service
echo "" >> /lib/systemd/system/orcl.service
echo "[Install]" >> /lib/systemd/system/orcl.service
echo "WantedBy=multi-user.target" >> /lib/systemd/system/orcl.service
 
echo "${timestamp} - created orcl service" >> "$log_file"
###create orcl.service end###

 

 

input ORACLE_BASE_HOME and register service

1
2
3
4
5
6
7
8
9
10
11
12
###input ORACLE_BASE_HOME in /home/oracle/.bash_profile start###
sed -'$a\export ORACLE_BASE_HOME=$ORACLE_HOME' /home/oracle/.bash_profile
echo "${timestamp} - added ORACLE_BASE_HOME in /home/oracle/.bash_profile" >> "$log_file"
###input ORACLE_BASE_HOME in /home/oracle/.bash_profile end###
 
 
###reload start enable service start###
systemctl daemon-reload
systemctl start orcl.service
systemctl enable orcl.service
echo "${timestamp} - registerd service" >> "$log_file"
###reload start enable service start###

 

 

 

참조 : https://positivemh.tistory.com/593

 

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

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

positivemh.tistory.com