Oracle Fusion Middleware & Application Server

Wednesday, May 29, 2019

Oracle 19c for AIX and HP-UX available

After Oracle released the Oracle Database 19c (19.3) for Linux and Solaris, now you can download as well the Oracle Database 19c (19.3) for IBM AIX and HP-UX ia64.

The software can be found under https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html



Happy download :-)


Tuesday, May 14, 2019

Flexible Patching Concept for Optimized WebLogic Image on Docker

In the last days I was publishing my Optimized WebLogic Image on Docker Solution, see following links:

The previous version of my Optimized WebLogic Image was based on fixed patch numbers, so not really flexible.

My latest update contains now the possibility to apply during the Image build multiple WebLogic Patches, just the OPatch Patch 28186730 is mandatory.

The latest sources you can find under my GitHub Repository https://github.com/DirkNachbar/Docker/tree/master/OracleWebLogic

The flexible patching concept is mainly based on Gerald Venzl's Patch Apply Solution for Oracle Database Docker Images https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance/samples/applypatch, I took his solution as base and modified it for the usage for WebLogic 12.2.1.3.0 and aligned as well my Dockerfile.

Now you just have to download your desired patches and place them into the folder dockerfiles/12.2.1.3/patches/00n

For example you want to apply directly at the Image build the Oracle CPU April 2019 (29016089) and the WebLogic Patch 29637821, just download the 2 patches plus the mandatory OPatch Patch 28186730. Place the OPatch Patch 28186730 into the directory dockerfiles/12.2.1.3/patches. The Oracle CPU April 2019 (29016089) you place into dockerfiles/12.2.1.3/patches/001 and the WebLogic Patch 29637821 you place into dockerfiles/12.2.1.3/patches/002

#
cd dockerfiles/12.2.1.3/patches
tree
├── 001
│   └── p29016089_122130_Generic.zip
├── 002
│   └── p29637821_122130_Generic.zip
├── applyPatches.sh
└── p28186730_139400_Generic.zip

In case you want to add a 3rd patch, simply create the folder dockerfiles/12.2.1.3/patches/003 and place your patch zip file there.
The applyPatches.sh script, which is executed while the Image build will take care of anything ;-)

Finally follow the instructions on how to build the image and how to start your Container from my GitHub Repository https://github.com/DirkNachbar/Docker/tree/master/OracleWebLogic

After you have started your WebLogic Server Container, you can verify the patch apply with following steps:

#
$ docker exec -it <Your Container Name> /bin/bash
[root@b08c600a5766 oracle]$ su - oracle
[oracle@b08c600a5766 ~]$ cd /u01/oracle/
[oracle@b08c600a5766 ~]$ export ORACLE_HOME=`pwd`
[oracle@b08c600a5766 ~]$ $ORACLE_HOME/OPatch/opatch lsinv
Oracle Interim Patch Installer version 13.9.4.2.0
Copyright (c) 2019, Oracle Corporation.  All rights reserved.
. . .
. . .
Interim patches (6) :

Patch  29637821     : applied on Tue May 14 12:53:46 UTC 2019
Unique Patch ID:  22888395
Patch description:  "One-off"
   Created on 24 Apr 2019, 22:39:34 hrs PST8PDT
   Bugs fixed:
     29637821

Patch  29016089     : applied on Tue May 14 12:53:14 UTC 2019
Unique Patch ID:  22640288
Patch description:  "WLS PATCH SET UPDATE 12.2.1.3.190416"
   Created on 31 Jan 2019, 00:50:49 hrs PST8PDT
   Bugs fixed:
     23076695, 23103220, 25387569, 25488428, 25580220, 25665727, 25750303
     25800186, 25987400, 25993295, 26026959, 26080417, 26098043, 26144830
     26145911, 26248394, 26267487, 26268190, 26353793, 26439373, 26473149
     26499391, 26502060, 26547016, 26589850, 26608537, 26624375, 26626528
     26731253, 26791760, 26806438, 26828499, 26835012, 26929163, 26936500
     26943614, 26985581, 27033250, 27055227, 27086845, 27111664, 27117282
     27118731, 27131483, 27187631, 27213775, 27234961, 27272911, 27284496
     27397287, 27411153, 27417245, 27445260, 27469756, 27486993, 27516977
     27561226, 27603087, 27617877, 27693510, 27803728, 27819370, 27912485
     27927071, 27928833, 27934864, 27947832, 27948303, 27988175, 28071913
     28103938, 28110087, 28138954, 28140800, 28142116, 28149607, 28166483
     28171852, 28172380, 28311332, 28313163, 28319690, 28360225, 28375173
     28375702, 28409586, 28503638, 28550962, 28559579, 28594324, 28626991
     28632521, 28651365, 28748179, 28774974, 28874066, 28891448, 28895280
     28958819, 28984617, 29140508, 29140516, 29140540, 29140549, 29140551
     29140555
. . .
. . .
--------------------------------------------------------------------------------

OPatch succeeded.



Thursday, May 9, 2019

Updated Version of Optimized WebLogic Image on Docker

Yesterday I published my solution for an optimized WebLogic Image on Docker (https://dirknachbar.blogspot.com/2019/05/optimized-weblogic-image-on-docker.html). The yesterdays version was limited to the usage of Oracle Server JRE 8u152, due to an Oracle Bug 27117282.

So I updated my Optimized Solution, that you can integrate the necessary patches (Patch for OPatch Util and the latest CPU April 2019 for WebLogic 12.2.1.3.0), in order that you are able to use an actual Oracle Server JRE, e.g. Oracle Server JRE 8u202. But this requires that you have a My Oracle Support Login in order to download the 2 required patches.

The new Sources can be found under my GitHub Repo https://github.com/DirkNachbar/Docker/tree/master/OracleWebLogic

You just have to download the following 2 patches from My Oracle Support:

Place the 2 zip files in the subdirectory dockerfiles/12.2.1.3

After that you can start to build your Oracle Server JRE Image as described in my yesterdays blogpost or in the README.md on my GitHub Repo, followed by the Docker Image build for the Oracle WebLogic Server 12.2.1.3.0 including the Patches.
This time you have to use instead of the option "-o" (stands for optimized) the option "-p" (stands for patch). This will update your OPatch Utility with the OPatch Patch 28186730 and apply afterwards the latest CPU April 2019 on your WebLogic Server 12.2.1.3.0 Software Home, so that you can use an actual Oracle Server JRE (e.g. 8u202) to create your WebLogic Domain without errors.


Wednesday, May 8, 2019

Optimized WebLogic Image on Docker

As I am currently busy with optimizing Docker Images for Oracle stuff, I want to share with you my latest optimization for Oracle WebLogic Server 12.2.1.3.0 as Docker Image.

Under the Oracle GitHub Repository https://github.com/oracle/docker-images/tree/master/OracleWebLogic you can find all necessary files to build a Docker Image for Oracle WebLogic 12.2.1.x, which are quite useful, but the disadvantage of this image is the size. The Docker Image will be 2.93 GB !
So I spent some time and optimized the Docker build and my optimized Docker image is only 1.4 GB, so more than 50% space savings ;-)

 # Docker Images
$ docker images
REPOSITORY           TAG                  IMAGE ID            CREATED             SIZE
oracle/weblogic      12.2.1.3-optimized   854be1c2bbb9        7 minutes ago       1.4GB
oracle/weblogic      12.2.1.3-generic     ba0d1c2dc430        25 minutes ago      2.93GB

The complete showcase you can find under my GitHub Repository https://github.com/DirkNachbar/Docker/tree/master/OracleWebLogic, just clone the Repo and perform following steps.

Download at first following software from Oracle Technology Network:

After the download of the required installation files, build at first the Oracle Server JRE Image

#
$ cd dockerfiles/12.2.1.3/serverjre
$ ./buildDockerImage.sh
$ docker images | grep serverjre
REPOSITORY           TAG                  IMAGE ID            CREATED             SIZE
oracle/serverjre     8                    63b4768f6557        About an hour ago   387MB

As next you can build the Oracle WebLogic Server 12.2.1.3.0 Image

#
cd dockerfiles
$ ./buildDockerImage.sh -v 12.2.1.3 -o

Checking if required packages are present and valid...
fmw_12.2.1.3.0_wls_Disk1_1of1.zip: OK
=====================
Building image 'oracle/weblogic:12.2.1.3-optimized' ...
Sending build context to Docker daemon    839MB
Step 1/17 : FROM oracle/serverjre:8 as base
 ---> 63b4768f6557
Step 2/17 : LABEL maintainer="dirk.nachbar@trivadis.com"
 ---> Running in 9bfcf5aaa1d4
Removing intermediate container 9bfcf5aaa1d4
 ---> 6cff4f8712d8
. . .
. . .
Step 13/17 : FROM base
 ---> 718f0506dfb8
Step 14/17 : COPY --chown=oracle:oracle --from=builder $ORACLE_HOME $ORACLE_HOME
 ---> 46ee0e3fd822
Step 15/17 : COPY --chown=oracle:oracle --from=builder $JAVA_HOME $JAVA_HOME
 ---> bddc30cf710e
Step 16/17 : WORKDIR ${ORACLE_HOME}
 ---> Running in b7a122dc521b
Removing intermediate container b7a122dc521b
 ---> 1b2aa03acef6
Step 17/17 : CMD ["/u01/oracle/createAndStartEmptyDomain.sh"]
 ---> Running in 296506a7fc03
Removing intermediate container 296506a7fc03
 ---> 854be1c2bbb9
Successfully built 854be1c2bbb9
Successfully tagged oracle/weblogic:12.2.1.3-optimized

  WebLogic Docker Image for 'optimized' version 12.2.1.3 is ready to be extended:

    --> oracle/weblogic:12.2.1.3-optimized

  Build completed in 258 seconds.

$ docker images
REPOSITORY           TAG                  IMAGE ID            CREATED             SIZE
oracle/weblogic      12.2.1.3-optimized   854be1c2bbb9        24 minutes ago      1.4GB

Now create and run your Oracle WebLogic Server 12.2.1.3.0 Container:

#
$ docker run -d --name <ContainerName> \
             -p 7001:7001 -p 9002:9002 \
             -v <Host Path to subdirectory properties>:/u01/oracle/properties \
             -e ADMINISTRATION_PORT_ENABLED=true -e DOMAIN_NAME=<DomainName> \
             oracle/weblogic:12.2.1.3-optimized

$ docker logs -f <ContainerName>

# For Example:

$ docker run -d --name wls12213optimized \
             -p 7001:7001 -p 9002:9002 \
             -v /work/OracleWebLogic/dockerfiles/12.2.1.3/properties:/u01/oracle/properties \
             -e ADMINISTRATION_PORT_ENABLED=true -e DOMAIN_NAME=OptimizedDomain \
             oracle/weblogic:12.2.1.3-optimized

$ docker logs -f wls12213optimized
. . .
. . .
<May 8, 2019 8:56:16,862 AM UTC> <Notice> <WebLogicServer> <BEA-000329> <Started the WebLogic Server Administration Server "AdminServer" for domain "OptimizedDomain" running in production mode.> 
<May 8, 2019 8:56:16,864 AM UTC> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure[1]" is now listening on 127.0.0.1:7002 for protocols iiops, t3s, ldaps, https.> 
<May 8, 2019 8:56:16,865 AM UTC> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure" is now listening on 172.17.0.2:7002 for protocols iiops, t3s, ldaps, https.> 
<May 8, 2019 8:56:16,865 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 172.17.0.2:7001 for protocols iiop, t3, ldap, snmp, http.> 
<May 8, 2019 8:56:16,866 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default[1]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap, snmp, http.> 
<May 8, 2019 8:56:16,866 AM UTC> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure[1]" is now listening on 127.0.0.1:7002 for protocols iiops, t3s, ldaps, https.> 
<May 8, 2019 8:56:16,866 AM UTC> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure" is now listening on 172.17.0.2:7002 for protocols iiops, t3s, ldaps, https.> 
<May 8, 2019 8:56:16,867 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 172.17.0.2:7001 for protocols iiop, t3, ldap, snmp, http.> 
<May 8, 2019 8:56:16,867 AM UTC> <Notice> <Server> <BEA-002613> <Channel "Default[1]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap, snmp, http.> 
<May 8, 2019 8:56:16,881 AM UTC> <Notice> <WebLogicServer> <BEA-000360> <The server started in RUNNING mode.> 
<May 8, 2019 8:56:16,911 AM UTC> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.> 

With a little bit work of adding multi stage build in the Dockerfile, you are able to save more than 50% of the space in your Docker Image ;-)


No Metrics visible for Standalone Oracle HTTP Server in Cloud Control 13c

Currently I had the problem within Oracle Cloud Control 13c (13.3), that when I added an Oracle HTTP Server Standalone 12.2.1.x, Cloud Control 13c was not able to display any kinds of metrics from the Oracle HTTP Server.


As you can see from the above screenshot, Cloud Control was able to show me the correct status (UP), but Cloud Control could not see any metrics or even no configured Virtual Hosts.

The problem is within the Oracle HTTP Server 12.2.1.x, as the Oracle HTTP Server doesn't contain all required dms jar files.

To solve this problem, simply apply the patch 22860384, which is available for following Oracle HTTP Server Releases:
  • 12.2.1.0.0
  • 12.2.1.1.0
  • 12.2.1.2.0


Download the patch for your Oracle HTTP Server Release, copy the patch to the server on which your Oracle HTTP Server is running and apply the patch:

# Stop your Oracle HTTP Server
$ cd $DOMAIN_HOME/bin
$ ./stopComponent <OHS Component Name>

# extract the zip file and go into the subdirectory 22860384
$ cd 22860384
$ $ORACLE_HOME/OPatch/opatch apply

Oracle Interim Patch Installer version 13.9.1.0.0
Copyright (c) 2019, Oracle Corporation.  All rights reserved.


Oracle Home       : /appl/oracle/product/fmw-webtier-12.2.1.2.0
Central Inventory : /appl/oracle/oraInventory
   from           : /appl/oracle/product/fmw-webtier-12.2.1.2.0/oraInst.loc
OPatch version    : 13.9.1.0.0
OUI version       : 13.9.1.0.0
Log file location : /appl/oracle/product/fmw-webtier-12.2.1.2.0/cfgtoollogs/opatch/opatch2019-05-08_13-21-31PM_1.log


OPatch detects the Middleware Home as "/appl/oracle/product/fmw-webtier-12.2.1.2.0"

Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   22860384

Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.

Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/appl/oracle/product/fmw-webtier-12.2.1.2.0')


Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '22860384' to OH '/appl/oracle/product/fmw-webtier-12.2.1.2.0'
ApplySession: Optional component(s) [ oracle.jmx, 12.2.1.0.0, higher version 12.2.1.2.0 found. ]  not present in the Oracle Home or a higher version is found.

Patching component oracle.jrf.thirdparty.jee, 12.2.1.2.0...

Patching component oracle.jrf.thirdparty.jee, 12.2.1.2.0...
Patch 22860384 successfully applied.
Log file location: /appl/oracle/product/fmw-webtier-12.2.1.2.0/cfgtoollogs/opatch/opatch2019-05-08_13-21-31PM_1.log

OPatch succeeded.

# Startup your Oracle HTTP Server
$ cd $DOMAIN_HOME/bin
$ ./startComponent <OHS Component Name>

Now wait some minutes or if you are not really patient, perform on the Oracle Cloud Control Agent 13 multiple times "emctl upload agent"

After some time you should be able now to see in your configured Oracle HTTP Server Target in the Oracle Cloud Control 13c all metrics and even configured Virtual Hosts.



Friday, May 3, 2019

WildFly 16 Docker Image with Oracle JDBC Driver

Today some a bit off-topic blogpost from my usual classic Oracle blogpost, but with a bit of Oracle :-)

As more and more of my customers are moving away from Oracle WebLogic Server to JBoss/WildFly, I have create a small Docker Image with WildFly 16 including the Oracle JDBC Driver and a DataSource based on the Oracle JDBC Driver (18.3).

The full showcase you can find in my GitHub Repository https://github.com/DirkNachbar/Docker/tree/master/WildFly

Simply clone the repository to your machine hosting your Docker.

At first you will need to align the oracle-driver.cli script to reflect your required DataSource settings to connect to your Oracle Database

# Snippet from oracle-driver.cli
data-source add --name=<DataSourceName> --driver-name="oracle" --jndi-name="java:<JNDI Lookup Name>" --statistics-enabled="true" --user-name="<Oracle Username>" --password="<Oracle User Password>" --initial-pool-size="<Initial Pool Size>" --max-pool-size="<Max Pool Size>" --min-pool-size="<Minimal Pool Size>" --connection-url="jdbc:oracle:thin:@<Oracle Database Servername>:<Listener Port>/<Database ServiceName>" --check-valid-connection-sql="select 1 from dual"

# For example:
data-source add --name=testDS --driver-name="oracle" --jndi-name="java:/jdbc/testDS" --statistics-enabled="true" --user-name="soe" --password="soe" --initial-pool-size="25" --max-pool-size="50" --min-pool-size="20" --connection-url="jdbc:oracle:thin:@oraxe18c:1521/XEPDB1" --check-valid-connection-sql="select 1 from dual"
#

Now you can build the WildFly 16 Image:

In case you dont provide the --build-arg WILDFLY_ADMIN_PWD, the admin user of your WildFly will get the default password admin.

$ docker build [--build-arg WILDFLY_ADMIN_PWD=<your admin password>] -t wildfly .
# For Example:
$ docker build --build-arg WILDFLY_ADMIN_PWD=Oracle18c -t wildfly .

After the build is completed you can start your WildFly 16 Container with following command:

$ docker run -d --name wildfly \
      [--network=<Your bridged network>] \
      -p <Your Host Port>:8080 -p <Your Host Port>:9990 \
      -e TZ=<Your Timezone> \
      wildfly

Now you can access the HAL Management Console of your WildFly 16 with your forwarded port of the Docker Container Port 9990, login with admin and your provided password in the --build-arg WILDFLY_ADMIN_PWD or if you didnt used the --build-arg you the password "admin"



After the Login, click on the option "Configuration"



On the Configuration screen navigate to "Subsystems / Datasources & Drivers / JDBC Drivers / oracle" to check your deployed JDBC Driver



On the Configuration screen navigate to "Subsystems / Datasources & Drivers / Datasources / testDS" to check your created DataSource





Optimizing the Optimized Docker Image for Oracle XE 18c (18.4.0) including Archivelog

On 1st May 2019 I was publishing a solution on how to optimize the Docker image for Oracle XE 18c from 8.7 GB down to 5.41 GB (https://dirknachbar.blogspot.com/2019/05/optimized-docker-image-for-oracle-xe.html).

In the last 2 days I was playing a bit more with my optimized Docker image for Oracle XE 18c and I was able to downsize the Docker image once again to a current size of 4.02 GB. So its more than 50% of savings from the original Docker image size.

$ docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
oracle/database      18.4.0-xe           2018ad58d2f3        16 hours ago        4.02GB
$

I mainly removed unnecessary directories from the $ORACLE_HOME and several binaries, which are not required in my opinion and I strip some of the big binaries to remove the comments from them.

You can find the optimized optimized Docker Image for Oracle XE 18c (18.4) in my GitHub Repository https://github.com/DirkNachbar/Docker/tree/master/OracleXE

Here is the list of directories and binaries which I removed from the image in order to come down to 4.02 GB:

# Snippet from Dockerfile.xe
RUN cd $INSTALL_DIR && \
    yum -y install $INSTALL_FILE_1 && \
    rm -rf /var/cache/yum && \
    rm -f $INSTALL_FILE_1 && \
    rm -rf $ORACLE_HOME/demo && \
    rm -rf $ORACLE_HOME/dmu && \
    rm -rf $ORACLE_HOME/javavm && \
    rm -rf $ORACLE_HOME/md && \
    rm -rf $ORACLE_HOME/nls/demo && \
    rm -rf $ORACLE_HOME/odbc && \
    rm -rf $ORACLE_HOME/rdbms/demo && \
    rm -rf $ORACLE_HOME/R && \
    rm -rf $ORACLE_HOME/instantclient && \
    rm -rf $ORACLE_HOME/inventory && \
    rm -rf $ORACLE_HOME/deinstall && \
    rm -r  $ORACLE_HOME/lib/ra_aix_ppc64.zip && \
    rm -r  $ORACLE_HOME/lib/ra_hpux_ia64.zip && \
    rm -r  $ORACLE_HOME/lib/ra_solaris*.zip && \
    rm -f  $ORACLE_HOME/lib/ra_windows64.zip && \
    rm -f  $ORACLE_HOME/lib/ra_zlinux64.zip && \
    rm -rf $ORACLE_HOME/crs && \
    rm -f  $ORACLE_HOME/bin/asmcmd && \
    rm -f  $ORACLE_HOME/bin/asmcmdcore && \
    rm -f  $ORACLE_HOME/bin/bdschecksw && \
    rm -f  £ORACLE_HOME/bin/dbv && \
    rm -f  $ORACLE_HOME/bin/ldap* && \
    rm -f  $ORACLE_HOME/bin/dbfs_client && \
    rm -f  $ORACLE_HOME/bin/afdboot && \
    rm -f  $ORACLE_HOME/bin/exp && \
    rm -f  $ORACLE_HOME/bin/imp && \
    rm -f  $ORACLE_HOME/bin/*.exe && \
    rm -f  $ORACLE_HOME/bin/lcsscan && \
    rm -f  $ORACLE_HOME/bin/dgmgrl && \
    rm -f  $ORACLE_HOME/bin/nid && \
    rm -f  $ORACLE_HOME/bin/orion && \
    rm -f  $ORACLE_HOME/bin/procob && \
    rm -f  $ORACLE_HOME/bin/setasmgid && \
    rm -f  $ORACLE_HOME/bin/wrap && \
    rm -f  $ORACLE_HOME/bin/*0 && \
    rm -f  $ORACLE_HOME/bin/tnsping && \
    rm -f  $ORACLE_HOME/bin/tkprof && \
    rm -f  $ORACLE_HOME/bin/srvctl && \
    rm -f  $ORCALE_HOME/bin/wrc && \
    rm -rf $ORACLE_HOME/sdk && \
    strip --remove-section=.comment $ORACLE_HOME/bin/oracle && \
    strip --remove-section=.comment $ORACLE_HOME/bin/rman && \
    strip --remove-section=.comment $ORACLE_HOME/bin/tnslsnr

I will continue to try to downsize the Docker image for Oracle XE 18c a bit more within the next days and will post updates on these topic.


Thursday, May 2, 2019

Oracle 19c for Solaris available

After the availability of the latest Oracle 19c Database for Linux platforms, Oracle has released now the Oracle 19c (19.3) Database for Solaris.

The software can be found under Oracle Technology Network: https://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle19c-solarisx86-5466166.html



Currently there is only the SPARC (64-bit) version available.


Wednesday, May 1, 2019

Optimized Docker Image for Oracle XE 18c (18.4.0) including Archivelog

In my current project I am mainly working with Oracle XE 18c (18.4.0) under Docker.

One pain point is size of the Docker Image for Oracle XE 18c, in case you will use the Scripts from https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance for the build of Oracle XE 18c you will have an image size of 8.7 GB, which is not quite handy :-)

So I invested some time and have done some modifications on the Dockerfile.xe from the Oracle GitHub Repository, which is mainly to adopt multi stage and to remove some unnecessary directories from the $ORACLE_HOME, so that I finally come to an image size of 5.41 GB instead of 8.7 GB.

On top I have added some volumes to the Dockerfile.xe for fast recovery area and some tools (which are containing RMAN backup scripts) and a post setup script which will turn on the archivelog mode and flashback.

The full showcase you can find in my GitHub Repository https://github.com/DirkNachbar/Docker/tree/master/OracleXE

Just clone my above mentioned GitHub Repo, download the Oracle XE 18c rpm file from Oracle Technology Network https://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html and place it in the subdirectory 18.4.0.

On top you will need to create 4 directories on your Docker host, which will be the target directories for the following volume mapping:

  • /opt/oracle/oradata
  • /opt/oracle/diag
  • /opt/oracle/fast_recovery_area
  • /opt/oracle/tools

$ groupadd -g 54321 oinstall
$ useradd -d /home/oracle -m -g oinstall [-G docker] -u 54321 oracle
# Depending on your disk layout you will need to create 4 directories
# e.g. you have one mount point called u01, create the following 4 directories below and switch the ownership to the oracle user
$ mkdir -p /u01/diag
$ mkdir -p /u01/oradata
$ mkdir -p /u01/fast_recovery_area
$ mkdir -p /u01/tools
$ chown -R oracle:oinstall /u01/diag
$ chown -R oracle:oinstall /u01/oradata
$ chown -R oracle:oinstall /u01/fast_recovery_area
$ chown -R oracle:oinstall /u01/tools

Now you can execute the build of your Docker Image for Oracle XE 18c

$ ./buildDockerImage.sh -v 18.4.0 -x
. . .
Successfully built ac71812fa9d3
Successfully tagged oracle/database:18.4.0-xe


  Oracle Database Docker Image for 'xe' version 18.4.0 is ready to be extended: 
    
    --> oracle/database:18.4.0-xe

  Build completed in 697 seconds.

$ docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
oracle/database      18.4.0-xe           ac71812fa9d3        About an hour ago   5.41GB

Finally create your Docker Container:

docker run -d --name oraxe18c \
              -p 1521:1521
              -e ORACLE_PWD=[your password] \
              -e ORACLE_CHARACTERSET=[your characterset] \
              -e TZ=[your timezone] \
              -v [host directory for oradata]:/opt/oracle/oradata \
              -v [host directory for diag]:/opt/oracle/diag \
              -v [host directory for fast_recovery_area]:/opt/oracle/fast_recovery_area \
              -v [host directory for tools]:/opt/oracle/tools \
              [--network [your bridged network] \
              oracle/database:18.4.0-xe

# For Example
docker run -d --name oraxe18c \
              -p 1521:1521
              -e ORACLE_PWD=Oracle18c \
              -e ORACLE_CHARACTERSET=AL32UTF8 \
              -e TZ=Europe/Zurich \
              -v /u01/oradata:/opt/oracle/oradata \
              -v /u01/diag:/opt/oracle/diag \
              -v /u01/fast_recovery_area:/opt/oracle/fast_recovery_area \
              -v /u01/tools:/opt/oracle/tools \
              --network mynet \
              oracle/database:18.4.0-xe

Now you have a running Oracle XE 18c Container, your oradata, diag, fast_recovery_area and tools directories are mounted on your Docker Host and you can perform standard backups with RMAN against your Oracle XE 18c.

vi /u01/tools/full_bkp.rman

connect target sys/[your password]
run {
    backup database plus archivelog;
}

# For Example
connect target sys/Oracle18c
run {
    backup database plus archivelog;
}

# Now perform your RMAN Backup
docker exec -it oraxe18c rman @/opt/oracle/tools/full_bkp.rman