From a984ac5c16eb9ceffef680160d364ce3c88a8553 Mon Sep 17 00:00:00 2001
From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu>
Date: Fri, 8 Dec 2023 13:12:14 +0100
Subject: [PATCH] Update Oracle images from source github/Oracle/Docker (update
 java versions)

---
 smp-docker/images/build-docker-images.sh      |   4 +-
 .../oracle/OracleJava/java-11/Dockerfile      |  30 ++-
 .../oracle/OracleJava/java-11/Dockerfile.8    |  27 +-
 .../images/oracle/OracleJava/java-11/build.sh |   4 +-
 .../oracle/OracleJava/java-8/Dockerfile       |  30 +--
 .../oracle/OracleJava/java-8/Dockerfile.8     |  43 ++--
 .../images/oracle/OracleJava/java-8/build.sh  |   4 +-
 ...server-jre-8u211-linux-x64.tar.gz.download |   5 -
 .../oracle/oracle-db-11.2.0.2/Dockerfile.xe   |  19 +-
 .../oracle/oracle-db-11.2.0.2/runOracle.sh    |  13 +-
 .../images/oracle/oracle-db-19.3.0/Dockerfile |  45 +++-
 .../oracle/oracle-db-19.3.0/checkDBStatus.sh  | 109 ++++++---
 .../oracle/oracle-db-19.3.0/checkSpace.sh     |   8 +-
 .../oracle/oracle-db-19.3.0/createDB.sh       | 225 +++++++++++++----
 .../oracle/oracle-db-19.3.0/db_inst.rsp       |   2 +-
 .../oracle/oracle-db-19.3.0/dbca.rsp.tmpl     |   2 +-
 .../oracle-db-19.3.0/installDBBinaries.sh     |  44 ++--
 .../oracle-db-19.3.0/relinkOracleBinary.sh    |  12 +-
 .../oracle/oracle-db-19.3.0/runOracle.sh      | 230 ++++++++++++++----
 .../oracle/oracle-db-19.3.0/runUserScripts.sh |   8 +-
 .../oracle/oracle-db-19.3.0/setPassword.sh    |  11 +-
 .../oracle/oracle-db-19.3.0/setupLinuxEnv.sh  |  22 +-
 .../images/oracle/oracle-db-19.3.0/startDB.sh |   4 +-
 .../createAndStartEmptyDomain.sh              |   2 +-
 24 files changed, 610 insertions(+), 293 deletions(-)
 delete mode 100644 smp-docker/images/oracle/OracleJava/java-8/server-jre-8u211-linux-x64.tar.gz.download

diff --git a/smp-docker/images/build-docker-images.sh b/smp-docker/images/build-docker-images.sh
index 3a3b17dd2..c426104d1 100755
--- a/smp-docker/images/build-docker-images.sh
+++ b/smp-docker/images/build-docker-images.sh
@@ -28,8 +28,8 @@ ORACLE_DB19_FILE="LINUX.X64_193000_db_home.zip"
 ORACLE_DOCKERFILE="Dockerfile.xe"
 
 ORACLE_DB_FILE="${ORACLE_DB11_FILE}"
-SERVER_JDK_FILE="server-jre-8u333-linux-x64.tar.gz"
-SERVER_JDK11_FILE="jdk-11.0.17_linux-x64_bin.tar.gz"
+SERVER_JDK_FILE="server-jre-8u391-linux-x64.tar.gz"
+SERVER_JDK11_FILE="jdk-11.0.21_linux-x64_bin.tar.gz"
 WEBLOGIC_122_QUICK_FILE="fmw_12.2.1.4.0_wls_quick_Disk1_1of1.zip"
 WEBLOGIC_14_FILE="fmw_14.1.1.0.0_wls_lite_Disk1_1of1.zip"
 SMP_VERSION=
diff --git a/smp-docker/images/oracle/OracleJava/java-11/Dockerfile b/smp-docker/images/oracle/OracleJava/java-11/Dockerfile
index 7d51bc466..a5d3be3f7 100644
--- a/smp-docker/images/oracle/OracleJava/java-11/Dockerfile
+++ b/smp-docker/images/oracle/OracleJava/java-11/Dockerfile
@@ -1,16 +1,16 @@
-# Copyright (c) 2019, 2022 Oracle and/or its affiliates.
+# Copyright (c) 2019, 2023 Oracle and/or its affiliates.
 #
 # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
 #
 # ORACLE DOCKERFILES PROJECT
 # --------------------------
-# This is the Dockerfile for Oracle JDK 11
+# This is the Dockerfile for Oracle JDK 11 on Oracle Linux 7
 #
 # REQUIRED FILES TO BUILD THIS IMAGE
 # ----------------------------------
 #
 # (1) jdk-11.XX_linux-x64_bin.tar.gz or jdk-11.XX_linux-aarch64_bin.tar.gz
-#     Download from https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
+#     Download from https://www.oracle.com/java/technologies/downloads/
 #
 # HOW TO BUILD THIS IMAGE
 # -----------------------
@@ -25,12 +25,10 @@
 
 FROM oraclelinux:7-slim as builder
 
-MAINTAINER Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>
+LABEL maintainer="Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>"
 
-RUN set -eux; \
-	yum install -y \
-		gzip \
-		tar;
+RUN yum install -y gzip tar
+		
 	
 # Default to UTF-8 file.encoding
 ENV LANG en_US.UTF-8
@@ -43,15 +41,16 @@ ENV JAVA_HOME=/usr/java/jdk-11
 
 ##
 COPY *.tar.gz /tmp/
+SHELL ["/bin/bash", "-o", "pipefail", "-c"]
 RUN set -eux; \
-	ARCH=$(uname -m) && \
-    if [ "$ARCH" == "x86_64" ]; \
+	ARCH="$(uname -m)" && \
+    if [ "$ARCH" = "x86_64" ]; \
     then \
-		mv $(ls /tmp/jdk-11*_linux-x64_bin.tar.gz) /tmp/jdk.tar.gz ; \
-        JAVA_SHA256=ec4e2d98dae4a5342543b8c37cc764f9c0069d358522919c70ccde374fbe199a ; \
+		mv "$(ls /tmp/jdk-11*_linux-x64_bin.tar.gz)" /tmp/jdk.tar.gz ; \
+        JAVA_SHA256=612b6687c185b2b0f0651d5ca2cfd1dfd5936418e9bf0b169b516e83d18d178d ; \
     else \
-	    mv $(ls /tmp/jdk-11*_linux-aarch64_bin.tar.gz) /tmp/jdk.tar.gz ; \
-    	JAVA_SHA256=d68bb1a266d78869111f038a61ba0c88658e87f7fcf9b776f1159d92d5b823b6 ; \
+	    mv "$(ls /tmp/jdk-11*_linux-aarch64_bin.tar.gz)" /tmp/jdk.tar.gz ; \
+    	JAVA_SHA256=5036569e689c5385a31d55d5f66332768e1ee552624cbd097fcab17c6b583f22 ; \    	
     fi && \
 	echo "$JAVA_SHA256 */tmp/jdk.tar.gz" | sha256sum -c -; \
 	mkdir -p "$JAVA_HOME"; \
@@ -63,8 +62,7 @@ FROM oraclelinux:7-slim
 # Default to UTF-8 file.encoding
 ENV LANG en_US.UTF-8
 
-ENV JAVA_VERSION=11.0.17 \
-	JAVA_HOME=/usr/java/jdk-11
+ENV JAVA_HOME=/usr/java/jdk-11
 
 ENV	PATH $JAVA_HOME/bin:$PATH	
 
diff --git a/smp-docker/images/oracle/OracleJava/java-11/Dockerfile.8 b/smp-docker/images/oracle/OracleJava/java-11/Dockerfile.8
index 84ec85014..ff8007497 100644
--- a/smp-docker/images/oracle/OracleJava/java-11/Dockerfile.8
+++ b/smp-docker/images/oracle/OracleJava/java-11/Dockerfile.8
@@ -1,16 +1,16 @@
-# Copyright (c) 2019, 2022 Oracle and/or its affiliates.
+# Copyright (c) 2019, 2023 Oracle and/or its affiliates.
 #
 # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
 #
 # ORACLE DOCKERFILES PROJECT
 # --------------------------
-# This is the Dockerfile for Oracle JDK 11
+# This is the Dockerfile for Oracle JDK 11 on Oracle Linux 8
 #
 # REQUIRED FILES TO BUILD THIS IMAGE
 # ----------------------------------
 #
 # (1) jdk-11.XX_linux-x64_bin.tar.gz or jdk-11.XX_linux-aarch64_bin.tar.gz
-#     Download from https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
+#     Download from https://www.oracle.com/java/technologies/downloads/
 #
 # HOW TO BUILD THIS IMAGE
 # -----------------------
@@ -25,10 +25,9 @@
 
 FROM oraclelinux:8 as builder
 
-MAINTAINER Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>
+LABEL maintainer="Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>"
 
-RUN set -eux; \
-	dnf install -y tar;
+RUN dnf install -y tar
 
 # Default to UTF-8 file.encoding
 ENV LANG en_US.UTF-8
@@ -41,15 +40,16 @@ ENV JAVA_HOME=/usr/java/jdk-11
 
 ##
 COPY *.tar.gz /tmp/
+SHELL ["/bin/bash", "-o", "pipefail", "-c"]
 RUN set -eux; \
-	ARCH=$(uname -m) && \
-    if [ "$ARCH" == "x86_64" ]; \
+	ARCH="$(uname -m)" && \
+    if [ "$ARCH" = "x86_64" ]; \
     then \
-		mv $(ls /tmp/jdk-11*_linux-x64_bin.tar.gz) /tmp/jdk.tar.gz ; \
-        JAVA_SHA256=ec4e2d98dae4a5342543b8c37cc764f9c0069d358522919c70ccde374fbe199a ; \
+		mv "$(ls /tmp/jdk-11*_linux-x64_bin.tar.gz)" /tmp/jdk.tar.gz ; \
+        JAVA_SHA256=612b6687c185b2b0f0651d5ca2cfd1dfd5936418e9bf0b169b516e83d18d178d ; \
     else \
-	    mv $(ls /tmp/jdk-11*_linux-aarch64_bin.tar.gz) /tmp/jdk.tar.gz ; \
-    	JAVA_SHA256=d68bb1a266d78869111f038a61ba0c88658e87f7fcf9b776f1159d92d5b823b6 ; \
+	    mv "$(ls /tmp/jdk-11*_linux-aarch64_bin.tar.gz)" /tmp/jdk.tar.gz ; \
+    	JAVA_SHA256=5036569e689c5385a31d55d5f66332768e1ee552624cbd097fcab17c6b583f22 ; \
     fi && \
 	echo "$JAVA_SHA256 */tmp/jdk.tar.gz" | sha256sum -c -; \
 	mkdir -p "$JAVA_HOME"; \
@@ -61,8 +61,7 @@ FROM oraclelinux:8
 # Default to UTF-8 file.encoding
 ENV LANG en_US.UTF-8
 
-ENV JAVA_VERSION=11.0.17 \
-	JAVA_HOME=/usr/java/jdk-11
+ENV JAVA_HOME=/usr/java/jdk-11
 
 ENV	PATH $JAVA_HOME/bin:$PATH
 
diff --git a/smp-docker/images/oracle/OracleJava/java-11/build.sh b/smp-docker/images/oracle/OracleJava/java-11/build.sh
index 30d613135..03b7e10b4 100755
--- a/smp-docker/images/oracle/OracleJava/java-11/build.sh
+++ b/smp-docker/images/oracle/OracleJava/java-11/build.sh
@@ -7,8 +7,8 @@
 if test "$1" = "8"
 then
 	echo "Building Oracle JDK 11 on Oracle Linux 8"
-	docker build --file Dockerfile.8 --tag oracle/jdk:11-oraclelinux8 .
+	docker build --file Dockerfile.8 --tag oracle/jdk:11-ol8 .
 else
 	echo "Building Oracle JDK 11 on Oracle Linux 7 slim"
-	docker build --tag oracle/jdk:11 --tag oracle/jdk:11-oraclelinux7 .
+	docker build --tag oracle/jdk:11-ol7 .
 fi
diff --git a/smp-docker/images/oracle/OracleJava/java-8/Dockerfile b/smp-docker/images/oracle/OracleJava/java-8/Dockerfile
index 021afc3f8..8b3673725 100644
--- a/smp-docker/images/oracle/OracleJava/java-8/Dockerfile
+++ b/smp-docker/images/oracle/OracleJava/java-8/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright (c) 2019, 2022 Oracle and/or its affiliates. 
+# Copyright (c) 2019, 2023 Oracle and/or its affiliates. 
 #
 # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
 #
@@ -10,11 +10,11 @@
 # ----------------------------------
 #
 # (1) server-jre-8uXX-linux-x64.tar.gz
-#     Download from https://www.oracle.com/java/technologies/javase-server-jre8-downloads.html
+#     Download from https://www.oracle.com/java/technologies/downloads/
 #
 # HOW TO BUILD THIS IMAGE
 # -----------------------
-# Put all downloaded files in the same directory as this Dockerfile
+# Put the downloaded file in the same directory as this Dockerfile
 # Run:
 #      $ docker build -t oracle/serverjre:8 .
 #
@@ -25,15 +25,10 @@
 
 FROM oraclelinux:7-slim as builder
 
-MAINTAINER Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>
+LABEL maintainer="Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>"
 
 # Since the files is compressed as tar.gz first yum install gzip and tar
-RUN set -eux; \
-	yum install -y \
-		gzip \
-		tar \
-	; \
-	rm -rf /var/cache/yum
+RUN yum install -y gzip tar
 
 # Default to UTF-8 file.encoding
 ENV LANG en_US.UTF-8
@@ -41,12 +36,13 @@ ENV LANG en_US.UTF-8
 # Environment variables for the builder image.
 # Required to validate that you are using the correct file
 
-ENV JAVA_PKG=server-jre-8u333-linux-x64.tar.gz \
-	JAVA_SHA256=e6383f75665f5674deeb7e5c366fc7c6fc93e990c638c224dc68c5ec2863b763 \
-	JAVA_HOME=/usr/java/jdk-8
+	
+ENV JAVA_HOME=/usr/java/jdk-8
 
-COPY $JAVA_PKG /tmp/jdk.tgz
+COPY server-jre-8u*-linux-x64.tar.gz /tmp/jdk.tgz
+SHELL ["/bin/bash", "-o", "pipefail", "-c"]
 RUN set -eux; \
+	JAVA_SHA256=03454fe3a293ad3179bcc00f09dc4ced38dea77ad4f952d0d4154d9cc1f87160 ; \
 	echo "$JAVA_SHA256 */tmp/jdk.tgz" | sha256sum -c -; \
 	mkdir -p "$JAVA_HOME"; \
 	tar --extract --file /tmp/jdk.tgz --directory "$JAVA_HOME" --strip-components 1; 
@@ -58,9 +54,8 @@ FROM oraclelinux:7-slim
 # Default to UTF-8 file.encoding
 ENV LANG en_US.UTF-8
 
-ENV JAVA_VERSION=1.8.0_333 \
-	JAVA_HOME=/usr/java/jdk-8 
-	
+ENV JAVA_HOME=/usr/java/jdk-8 
+
 ENV	PATH $JAVA_HOME/bin:$PATH
 
 # Copy the uncompressed Java Runtime from the builder image
@@ -80,4 +75,3 @@ RUN	yum -y update; \
 # the file will be stored as /usr/java/jdk-8/jre/lib/amd64/server/classes.jsa 
 # See https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html
 	java -Xshare:dump;
-	
\ No newline at end of file
diff --git a/smp-docker/images/oracle/OracleJava/java-8/Dockerfile.8 b/smp-docker/images/oracle/OracleJava/java-8/Dockerfile.8
index 71911a254..177d76438 100644
--- a/smp-docker/images/oracle/OracleJava/java-8/Dockerfile.8
+++ b/smp-docker/images/oracle/OracleJava/java-8/Dockerfile.8
@@ -1,62 +1,60 @@
-# Copyright (c) 2019, 2022 Oracle and/or its affiliates. 
+# Copyright (c) 2019, 2023 Oracle and/or its affiliates.
 #
 # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
 #
 # ORACLE DOCKERFILES PROJECT
 # --------------------------
-# This is the Dockerfile for Oracle Server JRE 8
+# This is the Dockerfile for Oracle Server JRE 8 on Oracle Linux 8
 #
 # REQUIRED FILES TO BUILD THIS IMAGE
 # ----------------------------------
 #
 # (1) server-jre-8uXX-linux-x64.tar.gz
-#     Download from https://www.oracle.com/java/technologies/javase-server-jre8-downloads.html
+#     Download from https://www.oracle.com/java/technologies/downloads/
 #
 # HOW TO BUILD THIS IMAGE
 # -----------------------
-# Put all downloaded files in the same directory as this Dockerfile
+# Put the downloaded file in the same directory as this Dockerfile
 # Run:
 #      $ docker build -t oracle/serverjre:8 .
 #
 # This command is already scripted in build.sh so you can alternatively run
-#		$ bash build.sh
+#		$ bash build.sh 8
 #
 # The builder image will be used to uncompress the tar.gz file with the Java Runtime.
 
-FROM ghcr.io/oracle/oraclelinux8-compat:8-slim as builder
+FROM oraclelinux:8 as builder
 
-MAINTAINER Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>
+LABEL maintainer="Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>"
+
+# Since the files is compressed as tar.gz first yum install tar. gzip is already in oraclelinux:8
+RUN dnf install -y tar
 
-# Since the files is compressed as tar.gz first yum install tar. gzip is already in ghcr.io/oracle/oraclelinux8-compat:8-slim
-RUN set -eux; \
-	dnf install -y tar ;
-	
 # Default to UTF-8 file.encoding
 ENV LANG en_US.UTF-8
 
 # Environment variables for the builder image.
 # Required to validate that you are using the correct file
 
-ENV JAVA_PKG=server-jre-8u333-linux-x64.tar.gz \
-	JAVA_SHA256=e6383f75665f5674deeb7e5c366fc7c6fc93e990c638c224dc68c5ec2863b763 \
-	JAVA_HOME=/usr/java/jdk-8
+ENV JAVA_HOME=/usr/java/jdk-8
 
-COPY $JAVA_PKG /tmp/jdk.tgz
+COPY server-jre-8u*-linux-x64.tar.gz /tmp/jdk.tgz
+SHELL ["/bin/bash", "-o", "pipefail", "-c"]
 RUN set -eux; \
+	JAVA_SHA256=03454fe3a293ad3179bcc00f09dc4ced38dea77ad4f952d0d4154d9cc1f87160 ; \
 	echo "$JAVA_SHA256 */tmp/jdk.tgz" | sha256sum -c -; \
 	mkdir -p "$JAVA_HOME"; \
-	tar --extract --file /tmp/jdk.tgz --directory "$JAVA_HOME" --strip-components 1; 
+	tar --extract --file /tmp/jdk.tgz --directory "$JAVA_HOME" --strip-components 1;
 
 ## Get a fresh version of SLIM for the final image
 
-FROM ghcr.io/oracle/oraclelinux8-compat:8-slim
+FROM oraclelinux:8
 
 # Default to UTF-8 file.encoding
 ENV LANG en_US.UTF-8
 
-ENV JAVA_VERSION=1.8.0_333 \
-	JAVA_HOME=/usr/java/jdk-8 
-	
+ENV JAVA_HOME=/usr/java/jdk-8
+
 ENV	PATH $JAVA_HOME/bin:$PATH
 
 # Copy the uncompressed Java Runtime from the builder image
@@ -72,8 +70,7 @@ RUN	dnf -y update; \
 		[ ! -e "/usr/bin/$base" ]; \
 		alternatives --install "/usr/bin/$base" "$base" "$bin" 20000; \
 	done; \
-# -Xshare:dump will create a CDS archive to improve startup in subsequent runs	
-# the file will be stored as /usr/java/jdk-8/jre/lib/amd64/server/classes.jsa 
+# -Xshare:dump will create a CDS archive to improve startup in subsequent runs
+# the file will be stored as /usr/java/jdk-8/jre/lib/amd64/server/classes.jsa
 # See https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html
 	java -Xshare:dump;
-	
\ No newline at end of file
diff --git a/smp-docker/images/oracle/OracleJava/java-8/build.sh b/smp-docker/images/oracle/OracleJava/java-8/build.sh
index 8e74ba7ac..04988e3ea 100755
--- a/smp-docker/images/oracle/OracleJava/java-8/build.sh
+++ b/smp-docker/images/oracle/OracleJava/java-8/build.sh
@@ -7,9 +7,9 @@
 if test "$1" = "8"
 then
 	echo "Building Oracle Server JRE 8 on Oracle Linux 8"
-	docker build --file Dockerfile.8 --tag oracle/serverjre:8-oraclelinux8 .
+	docker build --file Dockerfile.8 --tag oracle/serverjre:8-ol8 .
 else
 	echo "Building Oracle Server JRE 8 on Oracle Linux 7 slim"
-	docker build --tag oracle/serverjre:8 --tag oracle/serverjre:8-oraclelinux7 .
+	docker build --tag oracle/serverjre:8-ol7 .
 fi
 
diff --git a/smp-docker/images/oracle/OracleJava/java-8/server-jre-8u211-linux-x64.tar.gz.download b/smp-docker/images/oracle/OracleJava/java-8/server-jre-8u211-linux-x64.tar.gz.download
deleted file mode 100644
index b247a644f..000000000
--- a/smp-docker/images/oracle/OracleJava/java-8/server-jre-8u211-linux-x64.tar.gz.download
+++ /dev/null
@@ -1,5 +0,0 @@
-# Download the Server JRE (which includes necessary JDK bits for backend Java based solutions)
-#
-#  - http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html
-#
-97a5c3f10678d309a60ab0b17be0d637adb9fa4131050da0736bf2214d521d2d  server-jre-8u211-linux-x64.tar.gz
diff --git a/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe b/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe
index cdc6aea32..4e157640e 100644
--- a/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe
+++ b/smp-docker/images/oracle/oracle-db-11.2.0.2/Dockerfile.xe
@@ -1,6 +1,6 @@
 # LICENSE UPL 1.0
 #
-# Copyright (c) 1982-2016 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2016, 2020 Oracle and/or its affiliates.
 #
 # ORACLE DOCKERFILES PROJECT
 # --------------------------
@@ -28,9 +28,17 @@
 # ---------------
 FROM oraclelinux:7-slim
 
-# Maintainer
-# ----------
-MAINTAINER Gerald Venzl <gerald.venzl@oracle.com>
+# Labels
+# ------
+LABEL "provider"="Oracle"                                               \
+      "issues"="https://github.com/oracle/docker-images/issues"         \
+      "volume.data"="/u01/app/oracle/oradata"                           \
+      "volume.setup.location1"="/u01/app/oracle/scripts/startup"        \
+      "volume.setup.location2"="/docker-entrypoint-initdb.d/setup"      \
+      "volume.startup.location1"="/u01/app/oracle/scripts/setup"        \
+      "volume.startup.location2"="/docker-entrypoint-initdb.d/startup"  \
+      "port.listener"="1521"                                            \
+      "port.apex"="8080"
 
 # Environment variables required for this build (do NOT change)
 # -------------------------------------------------------------
@@ -46,7 +54,6 @@ ENV ORACLE_BASE=/u01/app/oracle \
 
 # Use second ENV so that variable get substituted
 ENV PATH=$ORACLE_HOME/bin:$PATH
-ENV NLS_LANG=AMERICAN_AMERICA.AL32UTF8
 
 # Copy binaries
 # -------------
@@ -79,8 +86,6 @@ RUN yum -y install unzip libaio bc initscripts net-tools openssl compat-libstdc+
     rm -rf $INSTALL_DIR && \
     chmod ug+x $ORACLE_BASE/*.sh
 
-VOLUME ["$ORACLE_BASE/oradata"]
-EXPOSE 1521 8080
 HEALTHCHECK --interval=1m --start-period=5m \
    CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
 
diff --git a/smp-docker/images/oracle/oracle-db-11.2.0.2/runOracle.sh b/smp-docker/images/oracle/oracle-db-11.2.0.2/runOracle.sh
index d5b06fde4..babd0235c 100644
--- a/smp-docker/images/oracle/oracle-db-11.2.0.2/runOracle.sh
+++ b/smp-docker/images/oracle/oracle-db-11.2.0.2/runOracle.sh
@@ -83,12 +83,6 @@ function _term() {
   /etc/init.d/oracle-xe stop
 }
 
-########### SIGKILL handler ############
-function _kill() {
-   echo "SIGKILL received, shutting down database!"
-   /etc/init.d/oracle-xe stop
-}
-
 ############# Create DB ################
 function createDB {
    # Auto generate ORACLE PWD if not passed on
@@ -169,9 +163,6 @@ EOF"
 # Set SIGTERM handler
 trap _term SIGTERM
 
-# Set SIGKILL handler
-trap _kill SIGKILL
-
 # Check whether database already exists
 if [ -d $ORACLE_BASE/oradata/$ORACLE_SID ]; then
    symLinkFiles;
@@ -202,7 +193,7 @@ fi;
 $ORACLE_BASE/$CHECK_DB_FILE
 if [ $? -eq 0 ]; then
   echo "#########################"
-  echo "DATABASE IS READY TO USE!" |& tee /u01/status/database.status
+  echo "DATABASE IS READY TO USE!"
   echo "#########################"
 
   # Execute custom provided startup scripts
@@ -211,7 +202,7 @@ if [ $? -eq 0 ]; then
 else
   echo "#####################################"
   echo "########### E R R O R ###############"
-  echo "DATABASE SETUP WAS NOT SUCCESSFUL!"  |& tee /u01/status/database.status
+  echo "DATABASE SETUP WAS NOT SUCCESSFUL!"
   echo "Please check output for further info!"
   echo "########### E R R O R ###############"
   echo "#####################################"
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/Dockerfile b/smp-docker/images/oracle/oracle-db-19.3.0/Dockerfile
index 12acbc8c5..04c270469 100644
--- a/smp-docker/images/oracle/oracle-db-19.3.0/Dockerfile
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/Dockerfile
@@ -1,6 +1,6 @@
 # LICENSE UPL 1.0
 #
-# Copyright (c) 2018, 2020 Oracle and/or its affiliates.
+# Copyright (c) 2018, 2022 Oracle and/or its affiliates.
 #
 # ORACLE DOCKERFILES PROJECT
 # --------------------------
@@ -20,7 +20,9 @@
 #
 # Pull base image
 # ---------------
-FROM oraclelinux:7-slim as base
+ARG BASE_IMAGE=oraclelinux:7-slim
+# hadolint ignore=DL3006
+FROM ${BASE_IMAGE} as base
 
 # Labels
 # ------
@@ -36,26 +38,43 @@ LABEL "provider"="Oracle"                                               \
 
 # Argument to control removal of components not needed after db software installation
 ARG SLIMMING=true
+ARG INSTALL_FILE_1="LINUX.X64_193000_db_home.zip"
 
 # Environment variables required for this build (do NOT change)
 # -------------------------------------------------------------
 ENV ORACLE_BASE=/opt/oracle \
     ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 \
     INSTALL_DIR=/opt/install \
-    INSTALL_FILE_1="LINUX.X64_193000_db_home.zip" \
+    INSTALL_FILE_1=$INSTALL_FILE_1 \
     INSTALL_RSP="db_inst.rsp" \
     CONFIG_RSP="dbca.rsp.tmpl" \
     PWD_FILE="setPassword.sh" \
     RUN_FILE="runOracle.sh" \
     START_FILE="startDB.sh" \
     CREATE_DB_FILE="createDB.sh" \
+    CREATE_OBSERVER_FILE="createObserver.sh" \
     SETUP_LINUX_FILE="setupLinuxEnv.sh" \
     CHECK_SPACE_FILE="checkSpace.sh" \
     CHECK_DB_FILE="checkDBStatus.sh" \
     USER_SCRIPTS_FILE="runUserScripts.sh" \
     INSTALL_DB_BINARIES_FILE="installDBBinaries.sh" \
     RELINK_BINARY_FILE="relinkOracleBinary.sh" \
-    SLIMMING=$SLIMMING
+    CONFIG_TCPS_FILE="configTcps.sh" \
+    SLIMMING=$SLIMMING \
+    ENABLE_ARCHIVELOG=false \
+    ARCHIVELOG_DIR_NAME=archive_logs \
+    # To clone a database referred by PRIMARY_DB_CONN_STR
+    CLONE_DB=false \
+    # To create a standby database referred by PRIMARY_DB_CONN_STR
+    STANDBY_DB=false \
+    # Env var below should be in <HOST>:<PORT>/<SERVICE_NAME> format
+    PRIMARY_DB_CONN_STR="" \
+    # For creating dataguard observer
+    DG_OBSERVER_ONLY=false \
+    DG_OBSERVER_NAME="" \
+    CHECKPOINT_FILE_EXTN=".created" \
+    # Directory for keeping Oracle Wallet
+    WALLET_DIR=""
 
 # Use second ENV so that variable get substituted
 ENV PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH \
@@ -65,7 +84,7 @@ ENV PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH \
 # Copy files needed during both installation and runtime
 # -------------
 COPY $SETUP_LINUX_FILE $CHECK_SPACE_FILE $INSTALL_DIR/
-COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE $USER_SCRIPTS_FILE $RELINK_BINARY_FILE $ORACLE_BASE/
+COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CREATE_OBSERVER_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE $USER_SCRIPTS_FILE $RELINK_BINARY_FILE $CONFIG_TCPS_FILE $ORACLE_BASE/
 
 RUN chmod ug+x $INSTALL_DIR/*.sh && \
     sync && \
@@ -90,9 +109,9 @@ COPY --chown=oracle:dba $INSTALL_FILE_1 $INSTALL_RSP $INSTALL_DB_BINARIES_FILE $
 
 # Install DB software binaries
 USER oracle
-RUN chmod ug+x $INSTALL_DIR/*.sh && \
+RUN chmod ug+x "$INSTALL_DIR"/*.sh && \
     sync && \
-    $INSTALL_DIR/$INSTALL_DB_BINARIES_FILE $DB_EDITION
+    "$INSTALL_DIR"/"$INSTALL_DB_BINARIES_FILE" $DB_EDITION
 
 
 
@@ -108,14 +127,18 @@ USER oracle
 COPY --chown=oracle:dba --from=builder $ORACLE_BASE $ORACLE_BASE
 
 USER root
-RUN $ORACLE_BASE/oraInventory/orainstRoot.sh && \
-    $ORACLE_HOME/root.sh
+RUN "$ORACLE_BASE"/oraInventory/orainstRoot.sh && \
+    "$ORACLE_HOME"/root.sh
 
 USER oracle
 WORKDIR /home/oracle
 
-HEALTHCHECK --interval=1m --start-period=5m \
+# Add a bashrc file to capitalize ORACLE_SID in the environment
+# hadolint ignore=SC2016
+RUN echo 'ORACLE_SID=${ORACLE_SID:-ORCLCDB}; export ORACLE_SID=${ORACLE_SID^^}' > .bashrc
+
+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/smp-docker/images/oracle/oracle-db-19.3.0/checkDBStatus.sh b/smp-docker/images/oracle/oracle-db-19.3.0/checkDBStatus.sh
index a96fe77e9..1743029a4 100755
--- a/smp-docker/images/oracle/oracle-db-19.3.0/checkDBStatus.sh
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/checkDBStatus.sh
@@ -1,40 +1,91 @@
 #!/bin/bash
 # LICENSE UPL 1.0
 #
-# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
 #
 # Since: May, 2017
 # Author: gerald.venzl@oracle.com
 # Description: Checks the status of Oracle Database.
-# Return codes: 0 = PDB is open and ready to use
-#               1 = PDB is not open
-#               2 = Sql Plus execution failed
+# Return codes: 0 = Database is healthy and ready to use
+#               1 = Database role is neither PRIMARY nor STANDBY
+#               2 = PDB is not open in required mode
+#               3 = Sql Plus execution failed
+#               4 = Observer is not running
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 # 
 
-ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
-OPEN_MODE="READ WRITE"
-ORAENV_ASK=NO
-source oraenv
-
-# Check Oracle at least one PDB has open_mode "READ WRITE" and store it in status
-status=`sqlplus -s / as sysdba << EOF
-   set heading off;
-   set pagesize 0;
-   SELECT DISTINCT open_mode FROM v\\$pdbs WHERE open_mode = '$OPEN_MODE';
-   exit;
-EOF`
-
-# Store return code from SQL*Plus
-ret=$?
-
-# SQL Plus execution was successful and PDB is open
-if [ $ret -eq 0 ] && [ "$status" = "$OPEN_MODE" ]; then
-   exit 0;
-# PDB is not open
-elif [ "$status" != "$OPEN_MODE" ]; then
-   exit 1;
-# SQL Plus execution failed
+# Function to check database role: either Primary or Secondary
+checkDatabaseRole() {
+   # Obtain DB_ROLE using SQLPlus
+   DB_ROLE=$(sqlplus -s / << EOF
+set heading off;
+set pagesize 0;
+SELECT database_role FROM v\$database ;
+exit;
+EOF
+)
+   # Store return code from SQL*Plus
+   ret=$?
+
+   if [ $ret -eq 0 ] && [ "$DB_ROLE" != "PRIMARY" ] && [ "$DB_ROLE" != "PHYSICAL STANDBY" ]; then
+      exit 1
+   elif [ $ret -ne 0 ]; then
+      exit 3
+   fi
+}
+
+# Function to check if at least one PDB is open in "READ WRITE" mode for Primary database
+# Or in case of Secondary Database PDBs should be opened only in "READ ONLY" mode 
+checkPDBOpen() {
+   # Obtain OPEN_MODE for PDB using SQLPlus
+   PDB_OPEN_MODE=$(sqlplus -s / << EOF
+set heading off;
+set pagesize 0;
+SELECT DISTINCT open_mode FROM v\$pdbs;
+exit;
+EOF
+)
+   # Store return code from SQL*Plus
+   ret=$?
+
+   if [ $ret -eq 0 ] && [ "$DB_ROLE" = "PRIMARY" ] && ! echo "$PDB_OPEN_MODE" | grep -q "READ WRITE"; then
+      exit 2
+   elif [ $ret -eq 0 ] && [ "$DB_ROLE" = "PHYSICAL STANDBY" ] && [ "$PDB_OPEN_MODE" != "READ ONLY" ]; then
+      exit 2
+   elif [ $ret -ne 0 ]; then
+      exit 3
+   fi
+}
+
+# Function to check that observer is running or not
+checkObserver() {
+   dg_observer_status=$(dgmgrl sys@"$PRIMARY_DB_CONN_STR" "show observer" << EOF
+${ORACLE_PWD}
+EOF
+)
+   if ! echo "$dg_observer_status" | grep -q 'Observer ".*"' ; then
+      exit 4
+   fi 
+
+}
+
+#############################################
+################ MAIN #######################
+#############################################
+
+# 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')"
+ fi
+
+if [ "$DG_OBSERVER_ONLY" = "true" ]; then
+   checkObserver
 else
-   exit 2;
-fi;
+   ORACLE_SID="$(grep "$ORACLE_HOME" /etc/oratab | cut -d: -f1)"
+   DB_ROLE=""
+   ORAENV_ASK=NO
+   source oraenv
+   checkDatabaseRole
+   checkPDBOpen
+fi
+exit 0
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/checkSpace.sh b/smp-docker/images/oracle/oracle-db-19.3.0/checkSpace.sh
index 9eda76d39..332729df7 100755
--- a/smp-docker/images/oracle/oracle-db-19.3.0/checkSpace.sh
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/checkSpace.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # LICENSE UPL 1.0
 #
-# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
 #
 # Since: January, 2017
 # Author: gerald.venzl@oracle.com
@@ -11,10 +11,10 @@
 # 
 
 REQUIRED_SPACE_GB=18
-AVAILABLE_SPACE_GB=`df -PB 1G / | tail -n 1 | awk '{ print $4 }'`
+AVAILABLE_SPACE_GB=$(df -PB 1G / | tail -n 1 | awk '{ print $4 }')
 
-if [ $AVAILABLE_SPACE_GB -lt $REQUIRED_SPACE_GB ]; then
-  script_name=`basename "$0"`
+if [ "$AVAILABLE_SPACE_GB" -lt "$REQUIRED_SPACE_GB" ]; then
+  script_name=$(basename "$0")
   echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
   echo "$script_name: ERROR - There is not enough space available in the container."
   echo "$script_name: The container needs at least $REQUIRED_SPACE_GB GB, but only $AVAILABLE_SPACE_GB GB are available."
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/createDB.sh b/smp-docker/images/oracle/oracle-db-19.3.0/createDB.sh
index 1b3894b29..6b29975d5 100755
--- a/smp-docker/images/oracle/oracle-db-19.3.0/createDB.sh
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/createDB.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # LICENSE UPL 1.0
 #
-# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
 # 
 # Since: November, 2016
 # Author: gerald.venzl@oracle.com
@@ -15,85 +15,216 @@
 
 set -e
 
+############## Setting up network related config files (sqlnet.ora, listener.ora) ##############
+function setupNetworkConfig {
+  mkdir -p "$ORACLE_HOME"/network/admin
+
+  # sqlnet.ora
+  echo "NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME)
+DISABLE_OOB=ON" > "$ORACLE_HOME"/network/admin/sqlnet.ora
+
+  # listener.ora
+  echo "LISTENER = 
+(DESCRIPTION_LIST = 
+  (DESCRIPTION = 
+    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) 
+    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) 
+  ) 
+) 
+
+DEDICATED_THROUGH_BROKER_LISTENER=ON
+DIAG_ADR_ENABLED = off
+" > "$ORACLE_HOME"/network/admin/listener.ora
+
+}
+
+####################### Setting up tnsnames.ora ##############################
+function setupTnsnames {
+  mkdir -p "$ORACLE_HOME"/network/admin
+
+  # tnsnames.ora
+  echo "$ORACLE_SID=localhost:1521/$ORACLE_SID" > "$ORACLE_HOME"/network/admin/tnsnames.ora
+  echo "$ORACLE_PDB= 
+(DESCRIPTION = 
+  (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
+  (CONNECT_DATA =
+    (SERVER = DEDICATED)
+    (SERVICE_NAME = $ORACLE_PDB)
+  )
+)" >> "$ORACLE_HOME"/network/admin/tnsnames.ora
+
+}
+
+###################################
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #
+############# MAIN ################
+# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #
+###################################
+
 # Check whether ORACLE_SID is passed on
 export ORACLE_SID=${1:-ORCLCDB}
 
 # Check whether ORACLE_PDB is passed on
 export ORACLE_PDB=${2:-ORCLPDB1}
 
+# Setting up file creation mask for newly created files (dbca response templates)
+umask 177
+
 # Checking if only one of INIT_SGA_SIZE & INIT_PGA_SIZE is provided by the user
 if [[ "${INIT_SGA_SIZE}" != "" && "${INIT_PGA_SIZE}" == "" ]] || [[ "${INIT_SGA_SIZE}" == "" && "${INIT_PGA_SIZE}" != "" ]]; then
    echo "ERROR: Provide both the values, INIT_SGA_SIZE and INIT_PGA_SIZE or neither of them. Exiting.";
    exit 1;
 fi;
 
-# Auto generate ORACLE PWD if not passed on
-export ORACLE_PWD=${3:-"`openssl rand -base64 8`1"}
-echo "ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: $ORACLE_PWD";
+# If wallet is present for database credentials then prepare dbca options to use
+if [[ -n "${WALLET_DIR}" ]] && [[ -f $WALLET_DIR/ewallet.p12 ]]; then
+  # Oracle Wallet is present
+  export DBCA_CRED_OPTIONS="-useWalletForDBCredentials true  -dbCredentialsWalletLocation ${WALLET_DIR}"
+else
+  if [[ "${CLONE_DB}" == "true" ]] || [[ "${STANDBY_DB}" == "true" ]]; then
+    # Validation: Checking if ORACLE_PWD is provided or not
+    if [[ -z "$ORACLE_PWD" ]]; then
+      echo "ERROR: Please provide sys password of the primary database as ORACLE_PWD env variable. Exiting..."
+      exit 1
+    fi
+
+    # Creating temporary response file containing sysPassword for clone/standby cases
+    cat > "$ORACLE_BASE"/dbca.rsp <<EOF
+sysPassword=${ORACLE_PWD}
+EOF
+
+    export DBCA_CRED_OPTIONS=" -responseFile $ORACLE_BASE/dbca.rsp"
+  else
+    # If ORACLE_PWD is not provided, use DBCA auto password generation for generating a random, strong password
+    if [[ -z "${ORACLE_PWD}" ]]; then
+      export DBCA_CRED_OPTIONS="-autoGeneratePasswords"
+    fi
+  fi
+
+fi
+
+# Clone DB/ Standby DB creation path
+if [[ "${CLONE_DB}" == "true" ]] || [[ "${STANDBY_DB}" == "true" ]]; then
+  # Reverting umask to original value for clone/standby DB cases
+  umask 022
+  
+  # Validation: Check if PRIMARY_DB_CONN_STR is provided or not
+  if [[ -z "${PRIMARY_DB_CONN_STR}" ]] || [[ $PRIMARY_DB_CONN_STR != *:*/* ]]; then
+    echo "ERROR: Please provide PRIMARY_DB_CONN_STR in <HOST>:<PORT>/<SERVICE_NAME> format to connect with primary database. Exiting..."
+    exit 1
+  fi
+
+  # Primary database parameters extration
+  PRIMARY_DB_NAME=$(echo "${PRIMARY_DB_CONN_STR}" | cut -d '/' -f 2)
+
+  # Creating the database using the dbca command
+  if [ "${STANDBY_DB}" = "true" ]; then
+    # Creating standby database
+    # Ignoring shell check so as to treat DBCA_CRED_OPTIONS as separate args to dbca
+    # shellcheck disable=SC2086
+    dbca -silent -createDuplicateDB -gdbName "$PRIMARY_DB_NAME" -primaryDBConnectionString "$PRIMARY_DB_CONN_STR" ${DBCA_CRED_OPTIONS} -sid "$ORACLE_SID" -createAsStandby -dbUniquename "$ORACLE_SID" ORACLE_HOSTNAME="$ORACLE_HOSTNAME" ||
+      cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID"/"$ORACLE_SID".log ||
+      cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID".log
+  else
+    # Creating clone database using DBCA after duplicating a primary database; CLONE_DB is set to true here
+    # Ignoring shell check so as to treat DBCA_CRED_OPTIONS as separate args to dbca
+    # shellcheck disable=SC2086
+    dbca -silent -createDuplicateDB -gdbName "${ORACLE_SID}" -primaryDBConnectionString "${PRIMARY_DB_CONN_STR}" ${DBCA_CRED_OPTIONS} -sid "${ORACLE_SID}" -databaseConfigType SINGLE -useOMF true -dbUniquename "${ORACLE_SID}" ORACLE_HOSTNAME="${ORACLE_HOSTNAME}" ||
+      cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID"/"$ORACLE_SID".log ||
+      cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID".log
+  fi
+
+  # Setup tnsnames.ora after DBCA command execution, otherwise tnsnames gets overwritten by DBCA
+  setupTnsnames;
+
+  # Stopping the Listener
+  lsnrctl stop;
+
+  # Setup other network related configuration (sqlnet.ora, listener.ora)
+  setupNetworkConfig;
+
+  # Starting the Listener
+  lsnrctl start;
+
+  # Remove temporary response file
+  if [ -f "$ORACLE_BASE"/dbca.rsp ]; then
+    rm "$ORACLE_BASE"/dbca.rsp
+  fi
+
+  exit 0
+fi
 
 # Replace place holders in response file
-cp $ORACLE_BASE/$CONFIG_RSP $ORACLE_BASE/dbca.rsp
-sed -i -e "s|###ORACLE_SID###|$ORACLE_SID|g" $ORACLE_BASE/dbca.rsp
-sed -i -e "s|###ORACLE_PDB###|$ORACLE_PDB|g" $ORACLE_BASE/dbca.rsp
-sed -i -e "s|###ORACLE_PWD###|$ORACLE_PWD|g" $ORACLE_BASE/dbca.rsp
-sed -i -e "s|###ORACLE_CHARACTERSET###|$ORACLE_CHARACTERSET|g" $ORACLE_BASE/dbca.rsp
+cp "$ORACLE_BASE"/"$CONFIG_RSP" "$ORACLE_BASE"/dbca.rsp
+# Reverting umask to original value
+umask 022
+sed -i -e "s|###ORACLE_SID###|$ORACLE_SID|g" "$ORACLE_BASE"/dbca.rsp
+sed -i -e "s|###ORACLE_PDB###|$ORACLE_PDB|g" "$ORACLE_BASE"/dbca.rsp
+if [[ -n "${WALLET_DIR}" ]] && [[ -f $WALLET_DIR/ewallet.p12 ]] || [[ -z "$ORACLE_PWD" ]]; then
+  # Deleting password options from dbca response file as wallet will be used for credentials or ORACLE_PWD is not provided (i.e. password auto-generation intended)
+  sed -i -e "/###ORACLE_PWD###/d" "$ORACLE_BASE"/dbca.rsp
+else
+  sed -i -e "s|###ORACLE_PWD###|$ORACLE_PWD|g" "$ORACLE_BASE"/dbca.rsp
+fi
+sed -i -e "s|###ORACLE_CHARACTERSET###|$ORACLE_CHARACTERSET|g" "$ORACLE_BASE"/dbca.rsp
 
 # If both INIT_SGA_SIZE & INIT_PGA_SIZE aren't provided by user
 if [[ "${INIT_SGA_SIZE}" == "" && "${INIT_PGA_SIZE}" == "" ]]; then
-    # If there is greater than 8 CPUs default back to dbca memory calculations
-    # dbca will automatically pick 40% of available memory for Oracle DB
-    # The minimum of 2G is for small environments to guarantee that Oracle has enough memory to function
-    # However, bigger environment can and should use more of the available memory
-    # This is due to Github Issue #307
-    if [ `nproc` -gt 8 ]; then
-        sed -i -e "s|totalMemory=2048||g" $ORACLE_BASE/dbca.rsp
-    fi;
+    # If AUTO_MEM_CALCULATION isn't set to false and a given amount of memory is allocated,
+    # we set the total memory with the amount of memory allocated for the container.
+    # Otherwise, we keep the default of 2GB.
+    if [[ "${AUTO_MEM_CALCULATION}" != "false" && "${ALLOCATED_MEMORY}" -le 655360 ]]; then
+      sed -i -e "s|totalMemory=.*|totalMemory=${ALLOCATED_MEMORY?}|g" "$ORACLE_BASE"/dbca.rsp
+    fi
 else
-    sed -i -e "s|totalMemory=2048||g" $ORACLE_BASE/dbca.rsp
-    sed -i -e "s|initParams=.*|&,sga_target=${INIT_SGA_SIZE}M,pga_aggregate_target=${INIT_PGA_SIZE}M|g" $ORACLE_BASE/dbca.rsp
-fi;
+    sed -i -e "s|totalMemory=.*||g" "$ORACLE_BASE"/dbca.rsp
+    sed -i -e "s|initParams=.*|&,sga_target=${INIT_SGA_SIZE}M,pga_aggregate_target=${INIT_PGA_SIZE}M|g" "$ORACLE_BASE"/dbca.rsp
+fi
 
-# Create network related config files (sqlnet.ora, tnsnames.ora, listener.ora)
-mkdir -p $ORACLE_HOME/network/admin
-echo "NAME.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME)" > $ORACLE_HOME/network/admin/sqlnet.ora
+# Adding INIT_CPU_COUNT initParam if provided
+if [ -n "${INIT_CPU_COUNT}" ]; then
+  sed -i -e "s|initParams=.*|&,cpu_count=${INIT_CPU_COUNT}|g" "$ORACLE_BASE"/dbca.rsp
+fi
 
-# Listener.ora
-echo "LISTENER = 
-(DESCRIPTION_LIST = 
-  (DESCRIPTION = 
-    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) 
-    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) 
-  ) 
-) 
+# Adding INIT_PROCESSES initParam if provided
+if [ -n "${INIT_PROCESSES}" ]; then
+  sed -i -e "s|initParams=.*|&,processes=${INIT_PROCESSES}|g" "$ORACLE_BASE"/dbca.rsp
+fi
 
-DEDICATED_THROUGH_BROKER_LISTENER=ON
-DIAG_ADR_ENABLED = off
-" > $ORACLE_HOME/network/admin/listener.ora
+# Create network related config files (sqlnet.ora, listener.ora)
+setupNetworkConfig;
+
+# Directory for storing archive logs
+export ARCHIVELOG_DIR=$ORACLE_BASE/oradata/$ORACLE_SID/$ARCHIVELOG_DIR_NAME
 
 # Start LISTENER and run DBCA
+# Ignoring shell check so as to treat DBCA_CRED_OPTIONS as separate args to dbca
+# shellcheck disable=SC2086
 lsnrctl start &&
-dbca -silent -createDatabase -responseFile $ORACLE_BASE/dbca.rsp ||
- cat /opt/oracle/cfgtoollogs/dbca/$ORACLE_SID/$ORACLE_SID.log ||
- cat /opt/oracle/cfgtoollogs/dbca/$ORACLE_SID.log
+dbca -silent -createDatabase -enableArchive "$ENABLE_ARCHIVELOG" -archiveLogDest "$ARCHIVELOG_DIR" ${DBCA_CRED_OPTIONS} -responseFile "$ORACLE_BASE"/dbca.rsp ||
+ cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID"/"$ORACLE_SID".log ||
+ cat /opt/oracle/cfgtoollogs/dbca/"$ORACLE_SID".log
 
-echo "$ORACLE_SID=localhost:1521/$ORACLE_SID" > $ORACLE_HOME/network/admin/tnsnames.ora
-echo "$ORACLE_PDB= 
-  (DESCRIPTION = 
-    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
-    (CONNECT_DATA =
-      (SERVER = DEDICATED)
-      (SERVICE_NAME = $ORACLE_PDB)
-    )
-  )" >> $ORACLE_HOME/network/admin/tnsnames.ora
+# Setup tnsnames.ora after DBCA command execution, otherwise tnsnames gets overwritten by DBCA
+setupTnsnames;
 
 # Remove second control file, fix local_listener, make PDB auto open, enable EM global port
+# Create externally mapped oracle user for health check
 sqlplus / as sysdba << EOF
    ALTER SYSTEM SET control_files='$ORACLE_BASE/oradata/$ORACLE_SID/control01.ctl' scope=spfile;
    ALTER SYSTEM SET local_listener='';
    ALTER PLUGGABLE DATABASE $ORACLE_PDB SAVE STATE;
    EXEC DBMS_XDB_CONFIG.SETGLOBALPORTENABLED (TRUE);
+
+   ALTER SESSION SET "_oracle_script" = true;
+   CREATE USER OPS\$oracle IDENTIFIED EXTERNALLY;
+   GRANT CREATE SESSION TO OPS\$oracle;
+   GRANT SELECT ON sys.v_\$pdbs TO OPS\$oracle;
+   GRANT SELECT ON sys.v_\$database TO OPS\$oracle;
+   ALTER USER OPS\$oracle SET container_data=all for sys.v_\$pdbs container = current;
+
    exit;
 EOF
 
 # Remove temporary response file
-rm $ORACLE_BASE/dbca.rsp
+rm "$ORACLE_BASE"/dbca.rsp
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/db_inst.rsp b/smp-docker/images/oracle/oracle-db-19.3.0/db_inst.rsp
index afd579b9d..461d6f810 100644
--- a/smp-docker/images/oracle/oracle-db-19.3.0/db_inst.rsp
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/db_inst.rsp
@@ -1,5 +1,5 @@
 ####################################################################
-## Copyright(c) Oracle Corporation 1998,2017. All rights reserved.##
+## Copyright(c) Oracle Corporation 1998,2022. All rights reserved.##
 ##                                                                ##
 ## Specify values for the variables listed below to customize     ##
 ## your installation.                                             ##
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/dbca.rsp.tmpl b/smp-docker/images/oracle/oracle-db-19.3.0/dbca.rsp.tmpl
index eb1c91d1f..91958fb17 100644
--- a/smp-docker/images/oracle/oracle-db-19.3.0/dbca.rsp.tmpl
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/dbca.rsp.tmpl
@@ -2,7 +2,7 @@
 ##                                                                          ##
 ##                            DBCA response file                            ##
 ##                            ------------------                            ##
-## Copyright(c) Oracle Corporation 1998,2017. All rights reserved.          ##
+## Copyright(c) Oracle Corporation 1998,2022. All rights reserved.          ##
 ##                                                                          ##
 ## Specify values for the variables listed below to customize 			    ##
 ## your installation.                                         			    ##
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/installDBBinaries.sh b/smp-docker/images/oracle/oracle-db-19.3.0/installDBBinaries.sh
index b9ebc55f9..42426f242 100755
--- a/smp-docker/images/oracle/oracle-db-19.3.0/installDBBinaries.sh
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/installDBBinaries.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # LICENSE UPL 1.0
 #
-# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
 #
 # Since: December, 2016
 # Author: gerald.venzl@oracle.com
@@ -44,44 +44,44 @@ fi;
 
 # Replace place holders
 # ---------------------
-sed -i -e "s|###ORACLE_EDITION###|$EDITION|g" $INSTALL_DIR/$INSTALL_RSP && \
-sed -i -e "s|###ORACLE_BASE###|$ORACLE_BASE|g" $INSTALL_DIR/$INSTALL_RSP && \
-sed -i -e "s|###ORACLE_HOME###|$ORACLE_HOME|g" $INSTALL_DIR/$INSTALL_RSP
+sed -i -e "s|###ORACLE_EDITION###|$EDITION|g" "$INSTALL_DIR"/"$INSTALL_RSP" && \
+sed -i -e "s|###ORACLE_BASE###|$ORACLE_BASE|g" "$INSTALL_DIR"/"$INSTALL_RSP" && \
+sed -i -e "s|###ORACLE_HOME###|$ORACLE_HOME|g" "$INSTALL_DIR"/"$INSTALL_RSP"
 
 # Install Oracle binaries
-cd $ORACLE_HOME       && \
-mv $INSTALL_DIR/$INSTALL_FILE_1 $ORACLE_HOME/ && \
-unzip $INSTALL_FILE_1 && \
-rm $INSTALL_FILE_1    && \
-$ORACLE_HOME/runInstaller -silent -force -waitforcompletion -responsefile $INSTALL_DIR/$INSTALL_RSP -ignorePrereqFailure && \
-cd $HOME
+cd "$ORACLE_HOME"       && \
+mv "$INSTALL_DIR"/"$INSTALL_FILE_1" "$ORACLE_HOME"/ && \
+unzip "$INSTALL_FILE_1" && \
+rm "$INSTALL_FILE_1"    && \
+"$ORACLE_HOME"/runInstaller -silent -force -waitforcompletion -responsefile "$INSTALL_DIR"/"$INSTALL_RSP" -ignorePrereqFailure && \
+cd "$HOME"
 
 if $SLIMMING; then
     # Remove not needed components
     # APEX
-    rm -rf $ORACLE_HOME/apex && \
+    rm -rf "$ORACLE_HOME"/apex && \
     # ORDS
-    rm -rf $ORACLE_HOME/ords && \
+    rm -rf "$ORACLE_HOME"/ords && \
     # SQL Developer
-    rm -rf $ORACLE_HOME/sqldeveloper && \
+    rm -rf "$ORACLE_HOME"/sqldeveloper && \
     # UCP connection pool
-    rm -rf $ORACLE_HOME/ucp && \
+    rm -rf "$ORACLE_HOME"/ucp && \
     # All installer files
-    rm -rf $ORACLE_HOME/lib/*.zip && \
+    rm -rf "$ORACLE_HOME"/lib/*.zip && \
     # OUI backup
-    rm -rf $ORACLE_HOME/inventory/backup/* && \
+    rm -rf "$ORACLE_HOME"/inventory/backup/* && \
     # Network tools help
-    rm -rf $ORACLE_HOME/network/tools/help && \
+    rm -rf "$ORACLE_HOME"/network/tools/help && \
     # Database upgrade assistant
-    rm -rf $ORACLE_HOME/assistants/dbua && \
+    rm -rf "$ORACLE_HOME"/assistants/dbua && \
     # Database migration assistant
-    rm -rf $ORACLE_HOME/dmu && \
+    rm -rf "$ORACLE_HOME"/dmu && \
     # Remove pilot workflow installer
-    rm -rf $ORACLE_HOME/install/pilot && \
+    rm -rf "$ORACLE_HOME"/install/pilot && \
     # Support tools
-    rm -rf $ORACLE_HOME/suptools && \
+    rm -rf "$ORACLE_HOME"/suptools && \
     # Temp location
     rm -rf /tmp/* && \
     # Database files directory
-    rm -rf $INSTALL_DIR/database
+    rm -rf "$INSTALL_DIR"/database
 fi
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/relinkOracleBinary.sh b/smp-docker/images/oracle/oracle-db-19.3.0/relinkOracleBinary.sh
index 5fc748b8e..15629d5d6 100644
--- a/smp-docker/images/oracle/oracle-db-19.3.0/relinkOracleBinary.sh
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/relinkOracleBinary.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # LICENSE UPL 1.0
 #
-# Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
 #
 # Since: March, 2020
 # Author: rishabh.y.gupta@oracle.com
@@ -23,12 +23,12 @@ if [ "${LIB_EDITION}" == "std" ]; then
 fi
 
 # If datafiles already exists
-if [ -d $ORACLE_BASE/oradata/$ORACLE_SID ]; then
-    datafiles_edition=$(ls $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/.docker_* | rev | cut -d_ -f1 | rev)
-    if [ "${ORACLE_EDITION}" != "" ] && [ "${ORACLE_EDITION,,}" != $datafiles_edition ]; then
+if [ -f "$ORACLE_BASE"/oradata/."${ORACLE_SID}""${CHECKPOINT_FILE_EXTN}" ]; then
+    datafiles_edition=$(find "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/ -maxdepth 1 -name '.docker_*' | rev | cut -d_ -f1 | rev)
+    if [ "${ORACLE_EDITION}" != "" ] && [ "${ORACLE_EDITION,,}" != "$datafiles_edition" ]; then
         echo "The datafiles being used were created with $datafiles_edition edition software home. Please pass -e ORACLE_EDITION=$datafiles_edition to the docker run cmd.";
         exit 1;
-    elif [ "${ORACLE_EDITION}" == "" ] && [ "${CURRENT_EDITION,,}" != $datafiles_edition ]; then
+    elif [ "${ORACLE_EDITION}" == "" ] && [ "${CURRENT_EDITION,,}" != "$datafiles_edition" ]; then
         echo "The current software home is of ${CURRENT_EDITION,,} edition whereas the datafiles being used were created with $datafiles_edition edition software home. Please pass -e ORACLE_EDITION=$datafiles_edition to the docker run cmd.";
         exit 1;
     fi
@@ -45,4 +45,4 @@ if [ "${ORACLE_EDITION}" != "" ]; then
 fi
 
 echo "ORACLE EDITION: ${CURRENT_EDITION}"
-touch $ORACLE_HOME/install/.docker_${CURRENT_EDITION,,}
+touch "$ORACLE_HOME"/install/.docker_"${CURRENT_EDITION,,}"
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/runOracle.sh b/smp-docker/images/oracle/oracle-db-19.3.0/runOracle.sh
index 169ef6bf8..2a5bcc290 100755
--- a/smp-docker/images/oracle/oracle-db-19.3.0/runOracle.sh
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/runOracle.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # LICENSE UPL 1.0
 #
-# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
 # 
 # Since: November, 2016
 # Author: gerald.venzl@oracle.com
@@ -13,19 +13,19 @@
 ########### Move DB files ############
 function moveFiles {
 
-   if [ ! -d $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID ]; then
-      mkdir -p $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/
+   if [ ! -d "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID" ]; then
+      mkdir -p "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/
    fi;
 
-   mv $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/
-   mv $ORACLE_HOME/dbs/orapw$ORACLE_SID $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/
-   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/
+   mv "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/
+   mv "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID" "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/
+   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"/
 
    # oracle user does not have permissions in /etc, hence cp and not mv
-   cp /etc/oratab $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/
+   cp /etc/oratab "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/
    
    symLinkFiles;
 }
@@ -33,28 +33,53 @@ function moveFiles {
 ########### Symbolic link DB files ############
 function symLinkFiles {
 
-   if [ ! -L $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora ]; then
-      ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/spfile$ORACLE_SID.ora $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora
+   if [ ! -L "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora ]; then
+      ln -s "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/spfile"$ORACLE_SID".ora "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora
    fi;
    
-   if [ ! -L $ORACLE_HOME/dbs/orapw$ORACLE_SID ]; then
-      ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/orapw$ORACLE_SID $ORACLE_HOME/dbs/orapw$ORACLE_SID
+   if [ ! -L "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID" ]; then
+      ln -s "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/orapw"$ORACLE_SID" "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID"
    fi;
    
-   if [ ! -L $ORACLE_HOME/network/admin/sqlnet.ora ]; then
-      ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/sqlnet.ora $ORACLE_HOME/network/admin/sqlnet.ora
+   if [ ! -L "$ORACLE_HOME"/network/admin/sqlnet.ora ]; then
+      ln -s "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/sqlnet.ora "$ORACLE_HOME"/network/admin/sqlnet.ora
    fi;
 
-   if [ ! -L $ORACLE_HOME/network/admin/listener.ora ]; then
-      ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/listener.ora $ORACLE_HOME/network/admin/listener.ora
+   if [ ! -L "$ORACLE_HOME"/network/admin/listener.ora ]; then
+      ln -s "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/listener.ora "$ORACLE_HOME"/network/admin/listener.ora
    fi;
 
-   if [ ! -L $ORACLE_HOME/network/admin/tnsnames.ora ]; then
-      ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora
+   if [ ! -L "$ORACLE_HOME"/network/admin/tnsnames.ora ]; then
+      ln -s "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/tnsnames.ora "$ORACLE_HOME"/network/admin/tnsnames.ora
    fi;
 
    # oracle user does not have permissions in /etc, hence cp and not ln 
-   cp $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/oratab /etc/oratab
+   cp "$ORACLE_BASE"/oradata/dbconfig/"$ORACLE_SID"/oratab /etc/oratab
+
+}
+
+########### Undoing the symbolic links ############
+function undoSymLinkFiles {
+
+   if [ -L "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora ]; then
+      rm "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora
+   fi;
+
+   if [ -L "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID" ]; then
+      rm "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID"
+   fi;
+
+   if [ -L "$ORACLE_HOME"/network/admin/sqlnet.ora ]; then
+      rm "$ORACLE_HOME"/network/admin/sqlnet.ora
+   fi;
+
+   if [ -L "$ORACLE_HOME"/network/admin/listener.ora ]; then
+      rm "$ORACLE_HOME"/network/admin/listener.ora
+   fi;
+
+   if [ -L "$ORACLE_HOME"/network/admin/tnsnames.ora ]; then
+      rm "$ORACLE_HOME"/network/admin/tnsnames.ora
+   fi;
 
 }
 
@@ -86,17 +111,32 @@ EOF
 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #
 ###################################
 
+# Only EE is supported for 19c on ARM64 platform
+if [ "$(arch)" == "aarch64" ] || [ "$(arch)" == "arm64" ]; then
+  if { [ "${ORACLE_EDITION^^}" != "" ] && [ "${ORACLE_EDITION^^}" != "ENTERPRISE" ]; }; then
+    echo "${ORACLE_EDITION} edition is not supported on ARM64 platform.";
+    exit 1;
+  fi;
+fi;
+
 # Check whether container has enough memory
+if [[ -f /sys/fs/cgroup/cgroup.controllers ]]; then
+   memory=$(cat /sys/fs/cgroup/memory.max)
+else
+   memory=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)
+fi
+
+# Default memory to 2GB, if not able to fetch memory restrictions from cgroups
+export ALLOCATED_MEMORY=$((${memory:=2147483648}/1024/1024))
+
 # Github issue #219: Prevent integer overflow,
-# only check if memory digits are less than 11 (single GB range and below) 
-if [ `cat /sys/fs/cgroup/memory/memory.limit_in_bytes | wc -c` -lt 11 ]; then
-   if [ `cat /sys/fs/cgroup/memory/memory.limit_in_bytes` -lt 2147483648 ]; then
-      echo "Error: The container doesn't have enough memory allocated."
-      echo "A database container needs at least 2 GB of memory."
-      echo "You currently only have $((`cat /sys/fs/cgroup/memory/memory.limit_in_bytes`/1024/1024/1024)) GB allocated to the container."
-      exit 1;
-   fi;
-fi;
+# only check if memory digits are less than 11 (single GB range and below)
+if [[ ${memory} != "max" && ${#memory} -lt 11 && ${memory} -lt 2147483648 ]]; then
+   echo "Error: The container doesn't have enough memory allocated."
+   echo "A database container needs at least 2 GB of memory."
+   echo "You currently only have $ALLOCATED_MEMORY MB allocated to the container."
+   exit 1;
+fi
 
 # Check that hostname doesn't container any "_"
 # Github issue #711
@@ -111,6 +151,47 @@ trap _int SIGINT
 # Set SIGTERM handler
 trap _term SIGTERM
 
+# Setting up ORACLE_PWD if podman secret is passed on
+ if [ -e '/run/secrets/oracle_pwd' ]; then
+    ORACLE_PWD="$(cat '/run/secrets/oracle_pwd')"
+    export ORACLE_PWD
+ fi
+
+# Creation of Observer only section
+if [ "${DG_OBSERVER_ONLY}" = "true" ]; then
+   if [ -z "${DG_OBSERVER_NAME}" ]; then
+      # Auto generate the observer name if not given
+      DG_OBSERVER_NAME="observer-$(openssl rand -hex 4)"
+      export DB_OBSERVER_NAME
+   fi 
+   export DG_OBSERVER_DIR=${ORACLE_BASE}/oradata/${DG_OBSERVER_NAME}
+
+   # Calling the script to create observer
+   "$ORACLE_BASE"/"$CREATE_OBSERVER_FILE" "$DG_OBSERVER_NAME" "$PRIMARY_DB_CONN_STR" "${ORACLE_PWD:?'ORACLE_PWD not set. Exiting...'}" "$DG_OBSERVER_DIR"
+
+   if [ ! -f "$DG_OBSERVER_DIR/observer.log" ]; then
+      # Display the content of nohup.out to show errors
+      if [ -f "$DG_OBSERVER_DIR/nohup.out" ]; then
+         cat "$DG_OBSERVER_DIR"/nohup.out
+         echo "Observer is not able to start. Exiting..."
+      else
+         echo "Observer creation and startup fail !! Exiting..."
+      fi
+      exit 1
+   else
+      # Tail on observer log and wait (otherwise container will exit)
+      echo "The following output is now a tail of the observer.log:"
+      tail -f "$DG_OBSERVER_DIR"/observer.log &
+      childPID=$!
+      wait $childPID
+
+      # Show nohup output and exit
+      echo "Exiting..."
+      cat "$DG_OBSERVER_DIR"/nohup.out
+      exit 0;
+   fi
+fi
+
 # Default for ORACLE SID
 if [ "$ORACLE_SID" == "" ]; then
    export ORACLE_SID=ORCLCDB
@@ -145,61 +226,106 @@ export ORACLE_PDB=${ORACLE_PDB^^}
 export ORACLE_CHARACTERSET=${ORACLE_CHARACTERSET:-AL32UTF8}
 
 # Call relinkOracleBinary.sh before the database is created or started
+# shellcheck disable=SC1090
 . "$ORACLE_BASE/$RELINK_BINARY_FILE"
 
 # Check whether database already exists
-if [ -d $ORACLE_BASE/oradata/$ORACLE_SID ]; then
+if [ -f "$ORACLE_BASE"/oradata/."${ORACLE_SID}""${CHECKPOINT_FILE_EXTN}" ] && [ -d "$ORACLE_BASE"/oradata/"${ORACLE_SID}" ]; then
    symLinkFiles;
    
    # Make sure audit file destination exists
-   if [ ! -d $ORACLE_BASE/admin/$ORACLE_SID/adump ]; then
-      mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
+   if [ ! -d "$ORACLE_BASE"/admin/"$ORACLE_SID"/adump ]; then
+      mkdir -p "$ORACLE_BASE"/admin/"$ORACLE_SID"/adump
    fi;
    
    # Start database
-   $ORACLE_BASE/$START_FILE;
+   "$ORACLE_BASE"/"$START_FILE";
+
+   # In case of the prebuiltdb extended image container, provision changing password by ORACLE_PWD
+   if [ -n "${ORACLE_PWD}" ] && [ -e "${ORACLE_BASE}/oradata/${ORACLE_SID}/.prebuiltdb" ]; then
+      "${ORACLE_BASE}"/"${PWD_FILE}" "${ORACLE_PWD}"
+   fi
    
 else
+  undoSymLinkFiles;
+
   # Remove database config files, if they exist
-  rm -f $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora
-  rm -f $ORACLE_HOME/dbs/orapw$ORACLE_SID
-  rm -f $ORACLE_HOME/network/admin/sqlnet.ora
-  rm -f $ORACLE_HOME/network/admin/listener.ora
-  rm -f $ORACLE_HOME/network/admin/tnsnames.ora
-   
+  rm -f "$ORACLE_HOME"/dbs/spfile"$ORACLE_SID".ora
+  rm -f "$ORACLE_HOME"/dbs/orapw"$ORACLE_SID"
+  rm -f "$ORACLE_HOME"/network/admin/sqlnet.ora
+  rm -f "$ORACLE_HOME"/network/admin/listener.ora
+  rm -f "$ORACLE_HOME"/network/admin/tnsnames.ora
+
+  # Clean up incomplete database
+  rm -rf "$ORACLE_BASE"/oradata/"$ORACLE_SID"
+  cp /etc/oratab oratab.bkp
+  sed "/^#/!d" oratab.bkp > /etc/oratab
+  rm -f oratab.bkp
+  rm -rf "$ORACLE_BASE"/cfgtoollogs/dbca/"$ORACLE_SID"
+  rm -rf "$ORACLE_BASE"/admin/"$ORACLE_SID"
+
+  # clean up zombie shared memory/semaphores
+  ipcs -m | awk ' /[0-9]/ {print $2}' | xargs -n1 ipcrm -m 2> /dev/null
+  ipcs -s | awk ' /[0-9]/ {print $2}' | xargs -n1 ipcrm -s 2> /dev/null
+
   # Create database
-  $ORACLE_BASE/$CREATE_DB_FILE $ORACLE_SID $ORACLE_PDB $ORACLE_PWD || exit 1;
+  "$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
+    # 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}"
+  fi
 
   # Move database operational files to oradata
   moveFiles;
-   
+
+  # Execute setup script for extensions
+  "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/extensions/setup
+
   # Execute custom provided setup scripts
-  $ORACLE_BASE/$USER_SCRIPTS_FILE $ORACLE_BASE/scripts/setup
+  "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/setup
+
+   # Setup TCPS with the database
+  if [ "${ENABLE_TCPS}" = "true" ]; then
+    "${ORACLE_BASE}"/"${CONFIG_TCPS_FILE}"
+  fi
+
 fi;
 
 # Check whether database is up and running
-$ORACLE_BASE/$CHECK_DB_FILE
-if [ $? -eq 0 ]; then
+"$ORACLE_BASE"/"$CHECK_DB_FILE"
+status=$?
+
+if [ $status -eq 0 ]; then
   echo "#########################"
   echo "DATABASE IS READY TO USE!"
   echo "#########################"
-  
-  # Execute custom provided startup scripts
-  $ORACLE_BASE/$USER_SCRIPTS_FILE $ORACLE_BASE/scripts/startup
-
-  echo "DATABASE IS READY TO USE!" > /u01/status/database.status
 
+  # Execute startup script for extensions
+  "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/extensions/startup
+  # Execute custom provided startup scripts
+  "$ORACLE_BASE"/"$USER_SCRIPTS_FILE" "$ORACLE_BASE"/scripts/startup
+  
 else
   echo "#####################################"
   echo "########### E R R O R ###############"
-  echo "DATABASE SETUP WAS NOT SUCCESSFUL!" |& tee /u01/status/database.status
+  echo "DATABASE SETUP WAS NOT SUCCESSFUL!"
   echo "Please check output for further info!"
   echo "########### E R R O R ###############" 
   echo "#####################################"
 fi;
 
+# Exiting the script without waiting on the tail logs
+if [ "$1" = "--nowait" ]; then
+   # Creating state-file for identifyig container of the prebuiltdb extended image
+   touch "${ORACLE_BASE}/oradata/${ORACLE_SID}/.prebuiltdb"
+   exit $status;
+fi
+
 # Tail on alert log and wait (otherwise container will exit)
 echo "The following output is now a tail of the alert.log:"
-tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert*.log &
+tail -f "$ORACLE_BASE"/diag/rdbms/*/*/trace/alert*.log &
 childPID=$!
 wait $childPID
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/runUserScripts.sh b/smp-docker/images/oracle/oracle-db-19.3.0/runUserScripts.sh
index 3ebf2305b..edc2628e5 100755
--- a/smp-docker/images/oracle/oracle-db-19.3.0/runUserScripts.sh
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/runUserScripts.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # LICENSE UPL 1.0
 #
-# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
 #
 # Since: July, 2017
 # Author: gerald.venzl@oracle.com
@@ -19,15 +19,15 @@ if [ -z "$SCRIPTS_ROOT" ]; then
 fi;
 
 # Execute custom provided files (only if directory exists and has files in it)
-if [ -d "$SCRIPTS_ROOT" ] && [ -n "$(ls -A $SCRIPTS_ROOT)" ]; then
+if [ -d "$SCRIPTS_ROOT" ] && [ -n "$(ls -A "$SCRIPTS_ROOT")" ]; then
 
   echo "";
   echo "Executing user defined scripts"
 
-  for f in $SCRIPTS_ROOT/*; do
+  for f in "$SCRIPTS_ROOT"/*; do
       case "$f" in
           *.sh)     echo "$0: running $f"; . "$f" ;;
-          *.sql)    echo "$0: running $f"; echo "exit" | $ORACLE_HOME/bin/sqlplus -s "/ as sysdba" @"$f"; echo ;;
+          *.sql)    echo "$0: running $f"; echo "exit" | "$ORACLE_HOME"/bin/sqlplus -s "/ as sysdba" @"$f"; echo ;;
           *)        echo "$0: ignoring $f" ;;
       esac
       echo "";
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/setPassword.sh b/smp-docker/images/oracle/oracle-db-19.3.0/setPassword.sh
index cd140cd38..79ce7df2f 100755
--- a/smp-docker/images/oracle/oracle-db-19.3.0/setPassword.sh
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/setPassword.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # LICENSE UPL 1.0
 #
-# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
 # 
 # Since: November, 2016
 # Author: gerald.venzl@oracle.com
@@ -10,9 +10,14 @@
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 # 
 
+if [ -e "${ORACLE_BASE}/oradata/${ORACLE_SID}/.prebuiltdb" ] && [ -n "${ORACLE_PWD}" ] && [ "${ORACLE_PWD}" != "$1" ]; then
+      echo "WARNING: The database password can not be changed for this container having a prebuilt database. The original password exists in the container environment. Your new password has been ignored!"
+      exit 1
+fi
+
 ORACLE_PWD=$1
-ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
-ORACLE_PDB="`ls -dl $ORACLE_BASE/oradata/$ORACLE_SID/*/ | grep -v pdbseed | awk '{print $9}' | cut -d/ -f6`"
+ORACLE_SID="$(grep "$ORACLE_HOME" /etc/oratab | cut -d: -f1)"
+ORACLE_PDB="$(ls -dl "$ORACLE_BASE"/oradata/"$ORACLE_SID"/*/ | grep -v -e pdbseed -e "$ARCHIVELOG_DIR_NAME" | awk '{print $9}' | cut -d/ -f6)"
 ORAENV_ASK=NO
 source oraenv
 
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/setupLinuxEnv.sh b/smp-docker/images/oracle/oracle-db-19.3.0/setupLinuxEnv.sh
index 42994830a..5a8ed8465 100755
--- a/smp-docker/images/oracle/oracle-db-19.3.0/setupLinuxEnv.sh
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/setupLinuxEnv.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # LICENSE UPL 1.0
 #
-# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
 #
 # Since: December, 2016
 # Author: gerald.venzl@oracle.com
@@ -13,14 +13,16 @@
 # Setup filesystem and oracle user
 # Adjust file permissions, go to /opt/oracle as user 'oracle' to proceed with Oracle installation
 # ------------------------------------------------------------
-mkdir -p $ORACLE_BASE/scripts/setup && \
-mkdir $ORACLE_BASE/scripts/startup && \
-ln -s $ORACLE_BASE/scripts /docker-entrypoint-initdb.d && \
-mkdir $ORACLE_BASE/oradata && \
-mkdir -p $ORACLE_HOME && \
-chmod ug+x $ORACLE_BASE/*.sh && \
-yum -y install oracle-database-preinstall-19c openssl && \
+mkdir -p "$ORACLE_BASE"/scripts/setup && \
+mkdir "$ORACLE_BASE"/scripts/startup && \
+mkdir -p "$ORACLE_BASE"/scripts/extensions/setup && \
+mkdir "$ORACLE_BASE"/scripts/extensions/startup && \
+ln -s "$ORACLE_BASE"/scripts /docker-entrypoint-initdb.d && \
+mkdir "$ORACLE_BASE"/oradata && \
+mkdir -p "$ORACLE_HOME" && \
+chmod ug+x "$ORACLE_BASE"/*.sh && \
+yum -y install oracle-database-preinstall-19c openssl hostname && \
 rm -rf /var/cache/yum && \
-ln -s $ORACLE_BASE/$PWD_FILE /home/oracle/ && \
+ln -s "$ORACLE_BASE"/"$PWD_FILE" /home/oracle/ && \
 echo oracle:oracle | chpasswd && \
-chown -R oracle:dba $ORACLE_BASE
+chown -R oracle:dba "$ORACLE_BASE"
diff --git a/smp-docker/images/oracle/oracle-db-19.3.0/startDB.sh b/smp-docker/images/oracle/oracle-db-19.3.0/startDB.sh
index 2a88ecd7f..5da043d8c 100755
--- a/smp-docker/images/oracle/oracle-db-19.3.0/startDB.sh
+++ b/smp-docker/images/oracle/oracle-db-19.3.0/startDB.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # LICENSE UPL 1.0
 #
-# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
 #
 # Since: November, 2016
 # Author: gerald.venzl@oracle.com
@@ -13,7 +13,7 @@
 
 # Check that ORACLE_HOME is set
 if [ "$ORACLE_HOME" == "" ]; then
-  script_name=`basename "$0"`
+  script_name=$(basename "$0")
   echo "$script_name: ERROR - ORACLE_HOME is not set. Please set ORACLE_HOME and PATH before invoking this script."
   exit 1;
 fi;
diff --git a/smp-docker/images/oracle/weblogic-14.1.1.0/container-scripts/createAndStartEmptyDomain.sh b/smp-docker/images/oracle/weblogic-14.1.1.0/container-scripts/createAndStartEmptyDomain.sh
index 9b0fc88ec..d5eb9a79a 100755
--- a/smp-docker/images/oracle/weblogic-14.1.1.0/container-scripts/createAndStartEmptyDomain.sh
+++ b/smp-docker/images/oracle/weblogic-14.1.1.0/container-scripts/createAndStartEmptyDomain.sh
@@ -37,7 +37,7 @@ if [ ! -e ${DOMAIN_HOME}/servers/${ADMIN_NAME}/logs/${ADMIN_NAME}.log ]; then
    echo "Create Domain"
    PROPERTIES_FILE=/u01/oracle/properties/domain.properties
    if [ ! -e "$PROPERTIES_FILE" ]; then
-      echo "A properties file [$PROPERTIES_FILE] with the username and password needs to be supplied."
+      echo "A properties file with the username and password needs to be supplied."
       exit
    fi
 
-- 
GitLab