Skip to content

Commit 0618ce1

Browse files
authored
Start Oracle Database health check only after startup is finished (#2882)
* Start Oracle Database health check only after startup is finished * Replicate to all other database versions * Fix linter issues
1 parent 394109e commit 0618ce1

27 files changed

+130
-33
lines changed

OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/Dockerfile.xe

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ ENV ORACLE_BASE=/u01/app/oracle \
5050
CONFIG_RSP="xe.rsp" \
5151
RUN_FILE="runOracle.sh" \
5252
PWD_FILE="setPassword.sh" \
53-
CHECK_DB_FILE="checkDBStatus.sh"
53+
CHECK_DB_FILE="checkDBStatus.sh" \
54+
DB_STARTED_MARKER_FILE="/dev/shm/.db_started"
5455

5556
# Use second ENV so that variable get substituted
5657
ENV PATH=$ORACLE_HOME/bin:$PATH
@@ -89,4 +90,4 @@ RUN yum -y install unzip libaio bc initscripts net-tools openssl compat-libstdc+
8990
HEALTHCHECK --interval=1m --start-period=5m \
9091
CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
9192

92-
CMD exec $ORACLE_BASE/$RUN_FILE
93+
CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ]

OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/checkDBStatus.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,13 @@
1212
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
1313
#
1414

15+
if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then
16+
echo "Database was not started yet." >&2
17+
exit 1
18+
fi
19+
1520
POSITIVE_RETURN="OPEN"
21+
# shellcheck disable=SC2034
1622
ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
1723

1824
# Check Oracle DB status and store it in status

OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/runOracle.sh

100644100755
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ function runUserScripts {
1919

2020
for f in $SCRIPTS_ROOT/*; do
2121
case "$f" in
22-
*.sh) echo "$0: running $f"; . "$f" ;;
22+
*.sh)
23+
echo "$0: running $f"
24+
# shellcheck disable=SC1090
25+
. "$f"
26+
;;
2327
*.sql) echo "$0: running $f"; echo "exit" | su -p oracle -c "$ORACLE_HOME/bin/sqlplus / as sysdba @$f"; echo ;;
2428
*) echo "$0: ignoring $f" ;;
2529
esac
@@ -175,7 +179,7 @@ fi;
175179
/etc/init.d/oracle-xe start | grep -qc "Oracle Database 11g Express Edition is not configured"
176180
if [ "$?" == "0" ]; then
177181
# Check whether container has enough memory
178-
if [ `df -Pk /dev/shm | tail -n 1 | awk '{print $2}'` -lt 1048576 ]; then
182+
if [ "`df -Pk /dev/shm | tail -n 1 | awk '{print $2}'`" -lt 1048576 ]; then
179183
echo "Error: The container doesn't have enough memory allocated."
180184
echo "A database XE container needs at least 1 GB of shared memory (/dev/shm)."
181185
echo "You currently only have $((`df -Pk /dev/shm | tail -n 1 | awk '{print $2}'`/1024)) MB allocated to the container."
@@ -190,7 +194,7 @@ if [ "$?" == "0" ]; then
190194
fi;
191195

192196
# Check whether database is up and running
193-
$ORACLE_BASE/$CHECK_DB_FILE
197+
IGNORE_DB_STARTED_MARKER=true $ORACLE_BASE/$CHECK_DB_FILE
194198
if [ $? -eq 0 ]; then
195199
echo "#########################"
196200
echo "DATABASE IS READY TO USE!"
@@ -199,6 +203,8 @@ if [ $? -eq 0 ]; then
199203
# Execute custom provided startup scripts
200204
runUserScripts $ORACLE_BASE/scripts/startup
201205

206+
# Create marker file for the health check
207+
touch "$DB_STARTED_MARKER_FILE"
202208
else
203209
echo "#####################################"
204210
echo "########### E R R O R ###############"

OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.ee

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ ENV ORACLE_BASE=/opt/oracle \
5252
SETUP_LINUX_FILE="setupLinuxEnv.sh" \
5353
CHECK_SPACE_FILE="checkSpace.sh" \
5454
CHECK_DB_FILE="checkDBStatus.sh" \
55+
DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \
5556
USER_SCRIPTS_FILE="runUserScripts.sh" \
5657
INSTALL_DB_BINARIES_FILE="installDBBinaries.sh"
5758

@@ -119,4 +120,4 @@ HEALTHCHECK --interval=1m --start-period=5m \
119120
CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
120121

121122
# Define default command to start Oracle Database.
122-
CMD exec $ORACLE_BASE/$RUN_FILE
123+
CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ]

OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.se2

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ ENV ORACLE_BASE=/opt/oracle \
5252
SETUP_LINUX_FILE="setupLinuxEnv.sh" \
5353
CHECK_SPACE_FILE="checkSpace.sh" \
5454
CHECK_DB_FILE="checkDBStatus.sh" \
55+
DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \
5556
USER_SCRIPTS_FILE="runUserScripts.sh" \
5657
INSTALL_DB_BINARIES_FILE="installDBBinaries.sh"
5758

@@ -119,4 +120,4 @@ HEALTHCHECK --interval=1m --start-period=5m \
119120
CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
120121

121122
# Define default command to start Oracle Database.
122-
CMD exec $ORACLE_BASE/$RUN_FILE
123+
CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ]

OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/checkDBStatus.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,17 @@
1212
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
1313
#
1414

15+
if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then
16+
echo "Database was not started yet." >&2
17+
exit 1
18+
fi
19+
20+
# shellcheck disable=SC2034
1521
ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
1622
OPEN_MODE="READ WRITE"
23+
# shellcheck disable=SC2034
1724
ORAENV_ASK=NO
25+
# shellcheck disable=SC1090
1826
source oraenv
1927

2028
# Check Oracle at least one PDB has open_mode "READ WRITE" and store it in status

OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/runOracle.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ else
178178
fi;
179179

180180
# Check whether database is up and running
181-
$ORACLE_BASE/$CHECK_DB_FILE
181+
IGNORE_DB_STARTED_MARKER=true $ORACLE_BASE/$CHECK_DB_FILE
182182
if [ $? -eq 0 ]; then
183183
echo "#########################"
184184
echo "DATABASE IS READY TO USE!"
@@ -187,6 +187,8 @@ if [ $? -eq 0 ]; then
187187
# Execute custom provided startup scripts
188188
$ORACLE_BASE/$USER_SCRIPTS_FILE $ORACLE_BASE/scripts/startup
189189

190+
# Create marker file for the health check
191+
touch "$DB_STARTED_MARKER_FILE"
190192
else
191193
echo "#####################################"
192194
echo "########### E R R O R ###############"

OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ ENV ORACLE_BASE=/opt/oracle \
4646
RUN_FILE="runOracle.sh" \
4747
START_FILE="startDB.sh" \
4848
CREATE_DB_FILE="createDB.sh" \
49+
DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \
4950
SETUP_LINUX_FILE="setupLinuxEnv.sh" \
5051
CHECK_SPACE_FILE="checkSpace.sh" \
5152
CHECK_DB_FILE="checkDBStatus.sh" \
@@ -116,4 +117,4 @@ HEALTHCHECK --interval=1m --start-period=5m \
116117
CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
117118

118119
# Define default command to start Oracle Database.
119-
CMD exec $ORACLE_BASE/$RUN_FILE
120+
CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ]

OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/checkDBStatus.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,17 @@
1212
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
1313
#
1414

15+
if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then
16+
echo "Database was not started yet." >&2
17+
exit 1
18+
fi
19+
20+
# shellcheck disable=SC2034
1521
ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
1622
OPEN_MODE="READ WRITE"
23+
# shellcheck disable=SC2034
1724
ORAENV_ASK=NO
25+
# shellcheck disable=SC1090
1826
source oraenv
1927

2028
# Check Oracle at least one PDB has open_mode "READ WRITE" and store it in status

OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/runOracle.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ else
178178
fi;
179179

180180
# Check whether database is up and running
181-
$ORACLE_BASE/$CHECK_DB_FILE
181+
IGNORE_DB_STARTED_MARKER=true $ORACLE_BASE/$CHECK_DB_FILE
182182
if [ $? -eq 0 ]; then
183183
echo "#########################"
184184
echo "DATABASE IS READY TO USE!"
@@ -187,6 +187,8 @@ if [ $? -eq 0 ]; then
187187
# Execute custom provided startup scripts
188188
$ORACLE_BASE/$USER_SCRIPTS_FILE $ORACLE_BASE/scripts/startup
189189

190+
# Create marker file for the health check
191+
touch "$DB_STARTED_MARKER_FILE"
190192
else
191193
echo "#####################################"
192194
echo "########### E R R O R ###############"

0 commit comments

Comments
 (0)