diff --git a/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/Dockerfile.xe b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/Dockerfile.xe index 4e157640ea..99d1ebc1c7 100644 --- a/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/Dockerfile.xe +++ b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/Dockerfile.xe @@ -50,7 +50,8 @@ ENV ORACLE_BASE=/u01/app/oracle \ CONFIG_RSP="xe.rsp" \ RUN_FILE="runOracle.sh" \ PWD_FILE="setPassword.sh" \ - CHECK_DB_FILE="checkDBStatus.sh" + CHECK_DB_FILE="checkDBStatus.sh" \ + DB_STARTED_MARKER_FILE="/dev/shm/.db_started" # Use second ENV so that variable get substituted ENV PATH=$ORACLE_HOME/bin:$PATH @@ -89,4 +90,4 @@ RUN yum -y install unzip libaio bc initscripts net-tools openssl compat-libstdc+ HEALTHCHECK --interval=1m --start-period=5m \ CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 -CMD exec $ORACLE_BASE/$RUN_FILE +CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ] diff --git a/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/checkDBStatus.sh b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/checkDBStatus.sh index df473ab922..6316390ca9 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/checkDBStatus.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/checkDBStatus.sh @@ -12,7 +12,13 @@ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # +if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then + echo "Database was not started yet." >&2 + exit 1 +fi + POSITIVE_RETURN="OPEN" +# shellcheck disable=SC2034 ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`" # Check Oracle DB status and store it in status diff --git a/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/runOracle.sh b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/runOracle.sh old mode 100644 new mode 100755 index babd0235c0..7b9d4a7fc6 --- a/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/runOracle.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2/runOracle.sh @@ -19,7 +19,11 @@ function runUserScripts { for f in $SCRIPTS_ROOT/*; do case "$f" in - *.sh) echo "$0: running $f"; . "$f" ;; + *.sh) + echo "$0: running $f" + # shellcheck disable=SC1090 + . "$f" + ;; *.sql) echo "$0: running $f"; echo "exit" | su -p oracle -c "$ORACLE_HOME/bin/sqlplus / as sysdba @$f"; echo ;; *) echo "$0: ignoring $f" ;; esac @@ -175,7 +179,7 @@ fi; /etc/init.d/oracle-xe start | grep -qc "Oracle Database 11g Express Edition is not configured" if [ "$?" == "0" ]; then # Check whether container has enough memory - if [ `df -Pk /dev/shm | tail -n 1 | awk '{print $2}'` -lt 1048576 ]; then + if [ "`df -Pk /dev/shm | tail -n 1 | awk '{print $2}'`" -lt 1048576 ]; then echo "Error: The container doesn't have enough memory allocated." echo "A database XE container needs at least 1 GB of shared memory (/dev/shm)." 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 fi; # Check whether database is up and running -$ORACLE_BASE/$CHECK_DB_FILE +IGNORE_DB_STARTED_MARKER=true $ORACLE_BASE/$CHECK_DB_FILE if [ $? -eq 0 ]; then echo "#########################" echo "DATABASE IS READY TO USE!" @@ -199,6 +203,8 @@ if [ $? -eq 0 ]; then # Execute custom provided startup scripts runUserScripts $ORACLE_BASE/scripts/startup + # Create marker file for the health check + touch "$DB_STARTED_MARKER_FILE" else echo "#####################################" echo "########### E R R O R ###############" diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.ee b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.ee index 82e80ec245..96e3d0439e 100644 --- a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.ee +++ b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.ee @@ -52,6 +52,7 @@ ENV ORACLE_BASE=/opt/oracle \ SETUP_LINUX_FILE="setupLinuxEnv.sh" \ CHECK_SPACE_FILE="checkSpace.sh" \ CHECK_DB_FILE="checkDBStatus.sh" \ + DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \ USER_SCRIPTS_FILE="runUserScripts.sh" \ INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" @@ -119,4 +120,4 @@ HEALTHCHECK --interval=1m --start-period=5m \ CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 # Define default command to start Oracle Database. -CMD exec $ORACLE_BASE/$RUN_FILE +CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ] diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.se2 b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.se2 index 28e8c126f7..2b601ed286 100644 --- a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.se2 +++ b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/Dockerfile.se2 @@ -52,6 +52,7 @@ ENV ORACLE_BASE=/opt/oracle \ SETUP_LINUX_FILE="setupLinuxEnv.sh" \ CHECK_SPACE_FILE="checkSpace.sh" \ CHECK_DB_FILE="checkDBStatus.sh" \ + DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \ USER_SCRIPTS_FILE="runUserScripts.sh" \ INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" @@ -119,4 +120,4 @@ HEALTHCHECK --interval=1m --start-period=5m \ CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 # Define default command to start Oracle Database. -CMD exec $ORACLE_BASE/$RUN_FILE +CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ] diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/checkDBStatus.sh b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/checkDBStatus.sh index a96fe77e91..0b61e3ac8e 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/checkDBStatus.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/checkDBStatus.sh @@ -12,9 +12,17 @@ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # +if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then + echo "Database was not started yet." >&2 + exit 1 +fi + +# shellcheck disable=SC2034 ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`" OPEN_MODE="READ WRITE" +# shellcheck disable=SC2034 ORAENV_ASK=NO +# shellcheck disable=SC1090 source oraenv # Check Oracle at least one PDB has open_mode "READ WRITE" and store it in status diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/runOracle.sh b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/runOracle.sh index cb94a9f00f..dd5c4dee85 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/runOracle.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/12.1.0.2/runOracle.sh @@ -178,7 +178,7 @@ else fi; # Check whether database is up and running -$ORACLE_BASE/$CHECK_DB_FILE +IGNORE_DB_STARTED_MARKER=true $ORACLE_BASE/$CHECK_DB_FILE if [ $? -eq 0 ]; then echo "#########################" echo "DATABASE IS READY TO USE!" @@ -187,6 +187,8 @@ if [ $? -eq 0 ]; then # Execute custom provided startup scripts $ORACLE_BASE/$USER_SCRIPTS_FILE $ORACLE_BASE/scripts/startup + # Create marker file for the health check + touch "$DB_STARTED_MARKER_FILE" else echo "#####################################" echo "########### E R R O R ###############" diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/Dockerfile b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/Dockerfile index 71df07b58f..f67540b72d 100644 --- a/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/Dockerfile +++ b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/Dockerfile @@ -46,6 +46,7 @@ ENV ORACLE_BASE=/opt/oracle \ RUN_FILE="runOracle.sh" \ START_FILE="startDB.sh" \ CREATE_DB_FILE="createDB.sh" \ + DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \ SETUP_LINUX_FILE="setupLinuxEnv.sh" \ CHECK_SPACE_FILE="checkSpace.sh" \ CHECK_DB_FILE="checkDBStatus.sh" \ @@ -116,4 +117,4 @@ HEALTHCHECK --interval=1m --start-period=5m \ CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 # Define default command to start Oracle Database. -CMD exec $ORACLE_BASE/$RUN_FILE +CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ] diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/checkDBStatus.sh b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/checkDBStatus.sh index a96fe77e91..0b61e3ac8e 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/checkDBStatus.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/checkDBStatus.sh @@ -12,9 +12,17 @@ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # +if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then + echo "Database was not started yet." >&2 + exit 1 +fi + +# shellcheck disable=SC2034 ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`" OPEN_MODE="READ WRITE" +# shellcheck disable=SC2034 ORAENV_ASK=NO +# shellcheck disable=SC1090 source oraenv # Check Oracle at least one PDB has open_mode "READ WRITE" and store it in status diff --git a/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/runOracle.sh b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/runOracle.sh index cb94a9f00f..dd5c4dee85 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/runOracle.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/runOracle.sh @@ -178,7 +178,7 @@ else fi; # Check whether database is up and running -$ORACLE_BASE/$CHECK_DB_FILE +IGNORE_DB_STARTED_MARKER=true $ORACLE_BASE/$CHECK_DB_FILE if [ $? -eq 0 ]; then echo "#########################" echo "DATABASE IS READY TO USE!" @@ -187,6 +187,8 @@ if [ $? -eq 0 ]; then # Execute custom provided startup scripts $ORACLE_BASE/$USER_SCRIPTS_FILE $ORACLE_BASE/scripts/startup + # Create marker file for the health check + touch "$DB_STARTED_MARKER_FILE" else echo "#####################################" echo "########### E R R O R ###############" diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.3.0/Dockerfile b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/Dockerfile index 608cb49f12..5329e903c5 100644 --- a/OracleDatabase/SingleInstance/dockerfiles/18.3.0/Dockerfile +++ b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/Dockerfile @@ -49,6 +49,7 @@ ENV ORACLE_BASE=/opt/oracle \ SETUP_LINUX_FILE="setupLinuxEnv.sh" \ CHECK_SPACE_FILE="checkSpace.sh" \ CHECK_DB_FILE="checkDBStatus.sh" \ + DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \ USER_SCRIPTS_FILE="runUserScripts.sh" \ INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" @@ -116,4 +117,4 @@ HEALTHCHECK --interval=1m --start-period=5m \ CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 # Define default command to start Oracle Database. -CMD exec $ORACLE_BASE/$RUN_FILE +CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ] diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.3.0/checkDBStatus.sh b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/checkDBStatus.sh index a96fe77e91..0b61e3ac8e 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/18.3.0/checkDBStatus.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/checkDBStatus.sh @@ -12,9 +12,17 @@ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # +if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then + echo "Database was not started yet." >&2 + exit 1 +fi + +# shellcheck disable=SC2034 ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`" OPEN_MODE="READ WRITE" +# shellcheck disable=SC2034 ORAENV_ASK=NO +# shellcheck disable=SC1090 source oraenv # Check Oracle at least one PDB has open_mode "READ WRITE" and store it in status diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.3.0/runOracle.sh b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/runOracle.sh index 00b81a5db5..56b21eb2ac 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/18.3.0/runOracle.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/18.3.0/runOracle.sh @@ -178,7 +178,7 @@ else fi; # Check whether database is up and running -$ORACLE_BASE/$CHECK_DB_FILE +IGNORE_DB_STARTED_MARKER=true $ORACLE_BASE/$CHECK_DB_FILE if [ $? -eq 0 ]; then echo "#########################" echo "DATABASE IS READY TO USE!" @@ -187,6 +187,8 @@ if [ $? -eq 0 ]; then # Execute custom provided startup scripts $ORACLE_BASE/$USER_SCRIPTS_FILE $ORACLE_BASE/scripts/startup + # Create marker file for the health check + touch "$DB_STARTED_MARKER_FILE" else echo "#####################################" echo "########### E R R O R ###############" diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.4.0/Dockerfile.xe b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/Dockerfile.xe index 4b20089f5f..eb60ffe019 100644 --- a/OracleDatabase/SingleInstance/dockerfiles/18.4.0/Dockerfile.xe +++ b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/Dockerfile.xe @@ -81,4 +81,4 @@ RUN chmod ug+x $INSTALL_DIR/*.sh && \ HEALTHCHECK --interval=1m --start-period=5m \ CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 -CMD exec $ORACLE_BASE/$RUN_FILE +CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ] diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.4.0/checkDBStatus.sh b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/checkDBStatus.sh index ba803718e7..d8ee075c94 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/18.4.0/checkDBStatus.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/checkDBStatus.sh @@ -12,9 +12,17 @@ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # +if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then + echo "Database was not started yet." >&2 + exit 1 +fi + +# shellcheck disable=SC2034 ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`" OPEN_MODE="READ WRITE" +# shellcheck disable=SC2034 ORAENV_ASK=NO +# shellcheck disable=SC1090 source oraenv [ -f "$ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/oratab" ] || exit 1; diff --git a/OracleDatabase/SingleInstance/dockerfiles/18.4.0/runOracle.sh b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/runOracle.sh old mode 100644 new mode 100755 index fbff9cf649..645cf72f7f --- a/OracleDatabase/SingleInstance/dockerfiles/18.4.0/runOracle.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/18.4.0/runOracle.sh @@ -19,7 +19,11 @@ function runUserScripts { for f in $SCRIPTS_ROOT/*; do case "$f" in - *.sh) echo "$0: running $f"; . "$f" ;; + *.sh) + echo "$0: running $f" + # shellcheck disable=SC1090 + . "$f" + ;; *.sql) echo "$0: running $f"; echo "exit" | su -p oracle -c "$ORACLE_HOME/bin/sqlplus / as sysdba @$f"; echo ;; *) echo "$0: ignoring $f" ;; esac @@ -201,7 +205,7 @@ if [ "$?" == "0" ]; then fi; # Check whether database is up and running -$ORACLE_BASE/$CHECK_DB_FILE +IGNORE_DB_STARTED_MARKER=true $ORACLE_BASE/$CHECK_DB_FILE if [ $? -eq 0 ]; then echo "#########################" echo "DATABASE IS READY TO USE!" @@ -210,6 +214,8 @@ if [ $? -eq 0 ]; then # Execute custom provided startup scripts runUserScripts $ORACLE_BASE/scripts/startup + # Create marker file for the health check + touch "$DB_STARTED_MARKER_FILE" else echo "#####################################" echo "########### E R R O R ###############" diff --git a/OracleDatabase/SingleInstance/dockerfiles/19.3.0/Dockerfile b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/Dockerfile index 04c2704694..e1695ed48b 100644 --- a/OracleDatabase/SingleInstance/dockerfiles/19.3.0/Dockerfile +++ b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/Dockerfile @@ -56,6 +56,7 @@ ENV ORACLE_BASE=/opt/oracle \ SETUP_LINUX_FILE="setupLinuxEnv.sh" \ CHECK_SPACE_FILE="checkSpace.sh" \ CHECK_DB_FILE="checkDBStatus.sh" \ + DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \ USER_SCRIPTS_FILE="runUserScripts.sh" \ INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" \ RELINK_BINARY_FILE="relinkOracleBinary.sh" \ diff --git a/OracleDatabase/SingleInstance/dockerfiles/19.3.0/checkDBStatus.sh b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/checkDBStatus.sh index 1743029a4d..fb2ef372c1 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/19.3.0/checkDBStatus.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/checkDBStatus.sh @@ -73,17 +73,26 @@ EOF ################ MAIN ####################### ############################################# +if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then + echo "Database was not started yet." >&2 + exit 1 +fi + # Setting up ORACLE_PWD if podman secret is passed on if [ -e '/run/secrets/oracle_pwd' ]; then - export ORACLE_PWD="$(cat '/run/secrets/oracle_pwd')" + ORACLE_PWD="$(cat '/run/secrets/oracle_pwd')" + export ORACLE_PWD fi if [ "$DG_OBSERVER_ONLY" = "true" ]; then checkObserver else + # shellcheck disable=SC2034 ORACLE_SID="$(grep "$ORACLE_HOME" /etc/oratab | cut -d: -f1)" DB_ROLE="" + # shellcheck disable=SC2034 ORAENV_ASK=NO + # shellcheck disable=SC1090 source oraenv checkDatabaseRole checkPDBOpen diff --git a/OracleDatabase/SingleInstance/dockerfiles/19.3.0/runOracle.sh b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/runOracle.sh index 2a5bcc2908..8297e3ac1d 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/19.3.0/runOracle.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/19.3.0/runOracle.sh @@ -22,7 +22,9 @@ function moveFiles { mv "$ORACLE_HOME"/network/admin/sqlnet.ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ mv "$ORACLE_HOME"/network/admin/listener.ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ mv "$ORACLE_HOME"/network/admin/tnsnames.ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ - mv "$ORACLE_HOME"/install/.docker_* "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ + if [ -n "$(shopt -s nullglob; echo "$ORACLE_HOME"/install/.docker_*)" ]; then + mv "$ORACLE_HOME"/install/.docker_* "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ + fi; # oracle user does not have permissions in /etc, hence cp and not mv cp /etc/oratab "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ @@ -272,7 +274,7 @@ else "$ORACLE_BASE"/"$CREATE_DB_FILE" "$ORACLE_SID" "$ORACLE_PDB" "$ORACLE_PWD" || exit 1; # Check whether database is successfully created - if "$ORACLE_BASE"/"$CHECK_DB_FILE"; then + if IGNORE_DB_STARTED_MARKER=true "$ORACLE_BASE"/"$CHECK_DB_FILE"; then # Create a checkpoint file if database is successfully created # Populate the checkpoint file with the current date to avoid timing issue when using NFS persistence in multi-replica mode date -Iseconds > "$ORACLE_BASE"/oradata/."${ORACLE_SID}""${CHECKPOINT_FILE_EXTN}" @@ -295,7 +297,7 @@ else fi; # Check whether database is up and running -"$ORACLE_BASE"/"$CHECK_DB_FILE" +IGNORE_DB_STARTED_MARKER=true "$ORACLE_BASE"/"$CHECK_DB_FILE" status=$? if [ $status -eq 0 ]; then @@ -308,6 +310,8 @@ if [ $status -eq 0 ]; then # Execute custom provided startup scripts "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/startup + # Create marker file for the health check + touch "$DB_STARTED_MARKER_FILE" else echo "#####################################" echo "########### E R R O R ###############" diff --git a/OracleDatabase/SingleInstance/dockerfiles/21.3.0/Dockerfile b/OracleDatabase/SingleInstance/dockerfiles/21.3.0/Dockerfile index 0ba206efc3..f9f6b2f8f3 100644 --- a/OracleDatabase/SingleInstance/dockerfiles/21.3.0/Dockerfile +++ b/OracleDatabase/SingleInstance/dockerfiles/21.3.0/Dockerfile @@ -55,6 +55,7 @@ ENV ORACLE_BASE=/opt/oracle \ SETUP_LINUX_FILE="setupLinuxEnv.sh" \ CHECK_SPACE_FILE="checkSpace.sh" \ CHECK_DB_FILE="checkDBStatus.sh" \ + DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \ USER_SCRIPTS_FILE="runUserScripts.sh" \ INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" \ RELINK_BINARY_FILE="relinkOracleBinary.sh" \ @@ -139,4 +140,4 @@ HEALTHCHECK --interval=1m --start-period=5m --timeout=30s \ CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 # Define default command to start Oracle Database. -CMD exec $ORACLE_BASE/$RUN_FILE +CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ] diff --git a/OracleDatabase/SingleInstance/dockerfiles/21.3.0/Dockerfile.xe b/OracleDatabase/SingleInstance/dockerfiles/21.3.0/Dockerfile.xe index 34c16357dc..ffb8fe7a1b 100644 --- a/OracleDatabase/SingleInstance/dockerfiles/21.3.0/Dockerfile.xe +++ b/OracleDatabase/SingleInstance/dockerfiles/21.3.0/Dockerfile.xe @@ -47,6 +47,7 @@ ENV ORACLE_BASE=/opt/oracle \ CONF_FILE="oracle-xe-21c.conf" \ CHECK_SPACE_FILE="checkSpace.sh" \ CHECK_DB_FILE="checkDBStatus.sh" \ + DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \ SETUP_LINUX_FILE="setupLinuxEnv.sh" \ CONFIG_TCPS_FILE="configTcps.sh" \ INSTALL_DIR="$HOME/install" \ @@ -90,4 +91,4 @@ WORKDIR /home/oracle HEALTHCHECK --interval=1m --start-period=5m --timeout=30s \ CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1 -CMD [ "/bin/bash", "-c", "$ORACLE_BASE/$RUN_FILE" ] +CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ] diff --git a/OracleDatabase/SingleInstance/dockerfiles/21.3.0/checkDBStatus.sh b/OracleDatabase/SingleInstance/dockerfiles/21.3.0/checkDBStatus.sh old mode 100644 new mode 100755 index 26e5e2a7e9..81a7b0a1ff --- a/OracleDatabase/SingleInstance/dockerfiles/21.3.0/checkDBStatus.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/21.3.0/checkDBStatus.sh @@ -73,9 +73,15 @@ EOF ################ MAIN ####################### ############################################# +if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then + echo "Database was not started yet." >&2 + exit 1 +fi + # Setting up ORACLE_PWD if podman secret is passed on if [ -e '/run/secrets/oracle_pwd' ]; then - export ORACLE_PWD="$(cat '/run/secrets/oracle_pwd')" + ORACLE_PWD="$(cat '/run/secrets/oracle_pwd')" + export ORACLE_PWD fi # Sanitizing env for XE Database @@ -88,7 +94,9 @@ if [ "$DG_OBSERVER_ONLY" = "true" ]; then else ORACLE_SID="$(grep "$ORACLE_HOME" /etc/oratab | cut -d: -f1)" DB_ROLE="" + # shellcheck disable=SC2034 ORAENV_ASK=NO + # shellcheck disable=SC1090 source oraenv checkDatabaseRole checkPDBOpen diff --git a/OracleDatabase/SingleInstance/dockerfiles/21.3.0/runOracle.sh b/OracleDatabase/SingleInstance/dockerfiles/21.3.0/runOracle.sh old mode 100644 new mode 100755 index c8f1d734a7..d0b1ff99eb --- a/OracleDatabase/SingleInstance/dockerfiles/21.3.0/runOracle.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/21.3.0/runOracle.sh @@ -22,7 +22,7 @@ function moveFiles { mv "$ORACLE_BASE_HOME"/network/admin/sqlnet.ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ mv "$ORACLE_BASE_HOME"/network/admin/listener.ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ mv "$ORACLE_BASE_HOME"/network/admin/tnsnames.ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ - if [ -a "$ORACLE_HOME"/install/.docker_* ]; then + if [ -n "$(shopt -s nullglob; echo "$ORACLE_HOME"/install/.docker_*)" ]; then mv "$ORACLE_HOME"/install/.docker_* "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ fi; @@ -170,7 +170,8 @@ fi; # Setting up ORACLE_PWD if podman secret is passed on if [ -e '/run/secrets/oracle_pwd' ]; then - export ORACLE_PWD="$(cat '/run/secrets/oracle_pwd')" + ORACLE_PWD="$(cat '/run/secrets/oracle_pwd')" + export ORACLE_PWD fi # Sanitizing env for XE @@ -230,6 +231,7 @@ export ORACLE_CHARACTERSET=${ORACLE_CHARACTERSET:-AL32UTF8} # Call relinkOracleBinary.sh before the database is created or started if [ "${ORACLE_SID}" != "XE" ]; then + # shellcheck disable=SC1090 source "$ORACLE_BASE/$RELINK_BINARY_FILE" fi; @@ -280,7 +282,7 @@ else "$ORACLE_BASE"/"$CREATE_DB_FILE" $ORACLE_SID "$ORACLE_PDB" "$ORACLE_PWD" || exit 1; # Check whether database is successfully created - if "$ORACLE_BASE"/"$CHECK_DB_FILE"; then + if IGNORE_DB_STARTED_MARKER=true "$ORACLE_BASE"/"$CHECK_DB_FILE"; then # Create a checkpoint file if database is successfully created # Populate the checkpoint file with the current date to avoid timing issue when using NFS persistence in multi-replica mode echo "$(date -Iseconds)" > "$ORACLE_BASE"/oradata/.${ORACLE_SID}"${CHECKPOINT_FILE_EXTN}" @@ -303,7 +305,7 @@ else fi; # Check whether database is up and running -"$ORACLE_BASE"/"$CHECK_DB_FILE" +IGNORE_DB_STARTED_MARKER=true "$ORACLE_BASE"/"$CHECK_DB_FILE" status=$? # Check whether database is up and running @@ -317,7 +319,9 @@ if [ $status -eq 0 ]; then # Execute custom provided startup scripts "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/startup - + + # Create marker file for the health check + touch "$DB_STARTED_MARKER_FILE" else echo "#####################################" echo "########### E R R O R ###############" diff --git a/OracleDatabase/SingleInstance/dockerfiles/23.6.0/Containerfile.free b/OracleDatabase/SingleInstance/dockerfiles/23.6.0/Containerfile.free index c9cf5a1be3..149db15568 100644 --- a/OracleDatabase/SingleInstance/dockerfiles/23.6.0/Containerfile.free +++ b/OracleDatabase/SingleInstance/dockerfiles/23.6.0/Containerfile.free @@ -46,6 +46,7 @@ ENV ORACLE_BASE=/opt/oracle \ CONF_FILE="oracle-free-23ai.conf" \ CHECK_SPACE_FILE="checkSpace.sh" \ CHECK_DB_FILE="checkDBStatus.sh" \ + DB_STARTED_MARKER_FILE="/dev/shm/.db_started" \ SETUP_LINUX_FILE="setupLinuxEnv.sh" \ DECRYPT_PWD_FILE="decryptPassword.sh" \ CONFIG_TCPS_FILE="configTcps.sh" \ @@ -118,4 +119,4 @@ HEALTHCHECK --interval=1m --start-period=5m --timeout=30s \ EXPOSE 1521/tcp -CMD [ "/bin/bash", "-c", "$ORACLE_BASE/$RUN_FILE" ] +CMD [ "/bin/bash", "-c", "exec $ORACLE_BASE/$RUN_FILE" ] diff --git a/OracleDatabase/SingleInstance/dockerfiles/23.6.0/checkDBStatus.sh b/OracleDatabase/SingleInstance/dockerfiles/23.6.0/checkDBStatus.sh index e66feeb655..6f643c8b87 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/23.6.0/checkDBStatus.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/23.6.0/checkDBStatus.sh @@ -77,6 +77,11 @@ EOF ################ MAIN ####################### ############################################# +if [ "$IGNORE_DB_STARTED_MARKER" != true ] && [ ! -f "$DB_STARTED_MARKER_FILE" ]; then + echo "Database was not started yet." >&2 + exit 1 +fi + ORACLE_PWD=$($ORACLE_BASE/$DECRYPT_PWD_FILE) export ORACLE_PWD @@ -92,7 +97,7 @@ else DB_ROLE="" # shellcheck disable=SC2034 ORAENV_ASK=NO - # shellcheck source=/dev/null + # shellcheck disable=SC1090 source oraenv checkDatabaseRole checkPDBOpen diff --git a/OracleDatabase/SingleInstance/dockerfiles/23.6.0/runOracle.sh b/OracleDatabase/SingleInstance/dockerfiles/23.6.0/runOracle.sh index 275f68735a..fe1ba5703b 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/23.6.0/runOracle.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/23.6.0/runOracle.sh @@ -222,7 +222,7 @@ export ORACLE_CHARACTERSET=${ORACLE_CHARACTERSET:-AL32UTF8} # Call relinkOracleBinary.sh before the database is created or started if [ "${ORACLE_SID}" != "FREE" ]; then - # shellcheck source=/dev/null + # shellcheck disable=SC1090 source "$ORACLE_BASE/$RELINK_BINARY_FILE" fi; @@ -273,7 +273,7 @@ else "$ORACLE_BASE"/"$CREATE_DB_FILE" $ORACLE_SID "$ORACLE_PDB" "$ORACLE_PWD" || exit 1; for i in 1 2 4 8; do - "$ORACLE_BASE"/"$CHECK_DB_FILE"; + IGNORE_DB_STARTED_MARKER=true "$ORACLE_BASE"/"$CHECK_DB_FILE"; ret=$? # Check whether database is successfully created if [ $ret -eq 0 ]; then @@ -308,7 +308,7 @@ fi; for i in 1 2 4 8; do # Check whether database is up and running - "$ORACLE_BASE"/"$CHECK_DB_FILE" + IGNORE_DB_STARTED_MARKER=true "$ORACLE_BASE"/"$CHECK_DB_FILE" status=$? if [ $status -eq 5 ]; then # PDB is in mounted state @@ -331,6 +331,8 @@ if [ $status -eq 0 ]; then # Execute custom provided startup scripts "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/startup + # Create marker file for the health check + touch "$DB_STARTED_MARKER_FILE" else echo "#####################################" echo "########### E R R O R ###############" diff --git a/OracleDatabase/SingleInstance/dockerfiles/23.6.0/runUserScripts.sh b/OracleDatabase/SingleInstance/dockerfiles/23.6.0/runUserScripts.sh index 6b2db24f14..9686e00dd5 100755 --- a/OracleDatabase/SingleInstance/dockerfiles/23.6.0/runUserScripts.sh +++ b/OracleDatabase/SingleInstance/dockerfiles/23.6.0/runUserScripts.sh @@ -27,7 +27,7 @@ if [ -d "$SCRIPTS_ROOT" ] && [ -n "$(ls -A "$SCRIPTS_ROOT")" ]; then for f in "$SCRIPTS_ROOT"/*; do case "$f" in *.sh) echo "$0: running $f"; - # shellcheck source=/dev/null + # shellcheck disable=SC1090 . "$f" ;; *.sql) echo "$0: running $f"; echo "exit" | "$ORACLE_HOME"/bin/sqlplus -s "/ as sysdba" @"$f"; echo ;; *) echo "$0: ignoring $f" ;;