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 -c '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 -i "\|$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+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###
###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 -i '$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 -x set.sh
++ su - oracle -c '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 -i '\|/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+x /home/oracle/start_all.sh
+ chown oracle:oinstall /home/oracle/stop_all.sh
+ chmod u+x /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 -i '$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) 1991, 2019, 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 -c '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 -i "\|$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 -i '$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
'ORACLE > Sql' 카테고리의 다른 글
오라클 19c 테스트 시 사용하는 아카이브 로그 전체 삭제 스크립트 (0) | 2024.01.22 |
---|---|
오라클 19c 최근 ash event 확인 쿼리 (0) | 2024.01.19 |
오라클 19c 기간별 세션 현황 확인 쿼리 (0) | 2023.07.29 |
오라클 19c v$로 시작하는 뷰 원본 쿼리 확인 (0) | 2023.07.13 |
오라클 19c log file sync 발생 시 정보 수집 쿼리 (2) | 2023.03.06 |