Skip to content

Instantly share code, notes, and snippets.

@dbernheisel
Created November 14, 2016 20:47
Show Gist options
  • Select an option

  • Save dbernheisel/85ad468661e24e79584a2711c0b7745b to your computer and use it in GitHub Desktop.

Select an option

Save dbernheisel/85ad468661e24e79584a2711c0b7745b to your computer and use it in GitHub Desktop.
-- https://github.com/rsim/oracle-enhanced/blob/master/RUNNING_TESTS.md
GRANT unlimited tablespace, create session, create table, create sequence, create procedure, create trigger, create view, create materialized view, create database link, create synonym, create type, ctxapp TO test IDENTIFIED BY test;
#!/bin/bash
source $ORACLE_BASE/startup-functions.sh
# Remove database config files
rm -f $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora
rm -f $ORACLE_HOME/dbs/orapw$ORACLE_SID
rm -f $ORACLE_HOME/network/admin/tnsnames.ora
createDB;
# unmodified
# LICENSE CDDL 1.0 + GPL 2.0
#
# Copyright (c) 1982-2016 Oracle and/or its affiliates. All rights reserved.
#
# ORACLE DOCKERFILES PROJECT
# --------------------------
# This is the Dockerfile for Oracle Database 12c Release 1 Enterprise Edition
#
# REQUIRED FILES TO BUILD THIS IMAGE
# ----------------------------------
# (1) linuxamd64_12102_database_1of2.zip
# linuxamd64_12102_database_2of2.zip
# Download Oracle Database 12c Release 1 Enterprise Edition for Linux x64
# from http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
#
# HOW TO BUILD THIS IMAGE
# -----------------------
# Put all downloaded files in the same directory as this Dockerfile
# Run:
# $ docker build -t oracle/database:12.1.0.2-ee .
#
# Pull base image
# ---------------
FROM oraclelinux:latest
# Maintainer
# ----------
MAINTAINER Gerald Venzl <gerald.venzl@oracle.com>
# Environment variables required for this build (do NOT change)
# -------------------------------------------------------------
ENV ORACLE_BASE=/opt/oracle \
ORACLE_HOME=/opt/oracle/product/12.1.0.2/dbhome_1 \
INSTALL_FILE_1="linuxamd64_12102_database_1of2.zip" \
INSTALL_FILE_2="linuxamd64_12102_database_2of2.zip" \
INSTALL_RSP="db_inst.rsp" \
CONFIG_RSP="dbca.rsp.tmpl" \
PWD_FILE="setPassword.sh" \
PERL_INSTALL_FILE="installPerl.sh" \
RUN_FILE="runOracle.sh"
# Use second ENV so that variable get substituted
ENV INSTALL_DIR=$ORACLE_BASE/install \
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH \
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib \
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
# Copy binaries
# -------------
COPY $INSTALL_FILE_1 $INSTALL_FILE_2 $INSTALL_RSP $PERL_INSTALL_FILE $INSTALL_DIR/
COPY $RUN_FILE $CONFIG_RSP $PWD_FILE $ORACLE_BASE/
# Setup filesystem and oracle user
# Adjust file permissions, go to /opt/oracle as user 'oracle' to proceed with Oracle installation
# ------------------------------------------------------------
RUN mkdir -p $ORACLE_BASE/oradata && \
chmod ug+x $ORACLE_BASE/$PWD_FILE && \
chmod ug+x $ORACLE_BASE/$RUN_FILE && \
groupadd -g 500 dba && \
groupadd -g 501 oinstall && \
useradd -d /home/oracle -g dba -G oinstall,dba -m -s /bin/bash oracle && \
echo oracle:oracle | chpasswd && \
yum -y install oracle-rdbms-server-12cR1-preinstall unzip wget tar openssl && \
yum clean all && \
chown -R oracle:dba $ORACLE_BASE
# Replace place holders
# ---------------------
RUN sed -i -e "s|###ORACLE_EDITION###|EE|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
# Start installation
# -------------------
USER oracle
RUN cd $INSTALL_DIR && \
unzip $INSTALL_FILE_1 && \
rm $INSTALL_FILE_1 && \
unzip $INSTALL_FILE_2 && \
rm $INSTALL_FILE_2 && \
$INSTALL_DIR/database/runInstaller -silent -force -waitforcompletion -responsefile $INSTALL_DIR/$INSTALL_RSP -ignoresysprereqs -ignoreprereq && \
rm -rf $INSTALL_DIR/database && \
ln -s $ORACLE_BASE/$PWD_FILE $HOME/ && \
echo "DEDICATED_THROUGH_BROKER_LISTENER=ON" >> $ORACLE_HOME/network/admin/listener.ora && \
echo "DIAG_ADR_ENABLED = off" >> $ORACLE_HOME/network/admin/listener.ora;
# Check whether Perl is working
RUN chmod u+x $INSTALL_DIR/installPerl.sh && \
$ORACLE_HOME/perl/bin/perl -v || \
$INSTALL_DIR/installPerl.sh
USER root
RUN $ORACLE_BASE/oraInventory/orainstRoot.sh && \
$ORACLE_HOME/root.sh && \
rm -rf $INSTALL_DIR
USER oracle
WORKDIR /home/oracle
# VOLUME ["$ORACLE_BASE/oradata"]
EXPOSE 1521 5500
# Define default command to start Oracle Database.
CMD $ORACLE_BASE/$RUN_FILE
FROM oracle/database:12.1.0.2-ee
MAINTAINER David Bernheisel <david.bernheisel@scimedsolutions.com>
ENV ORACLE_BASE=/opt/oracle \
ORACLE_HOME=/opt/oracle/product/12.1.0.2/dbhome_1 \
ORACLE_SID="ORCLCDB" \
ORACLE_PDB="ORCLPDB1" \
ORACLE_PWD="oracle"
# Use second ENV so that variable get substituted
ENV INSTALL_DIR=$ORACLE_BASE/install \
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch/:/usr/sbin:$PATH \
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib \
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
USER root
COPY startup-functions.sh createDB.sh startDB.sh $ORACLE_BASE/
RUN chmod ug+x $ORACLE_BASE/startDB.sh $ORACLE_BASE/createDB.sh $ORACLE_BASE/startup-functions.sh&&\
chown oracle:dba $ORACLE_BASE/startDB.sh $ORACLE_BASE/createDB.sh $ORACLE_BASE/startup-functions.sh
USER oracle
WORKDIR /home/oracle
RUN bash $ORACLE_BASE/createDB.sh
COPY create_test_user.sql /home/oracle/
RUN bash $ORACLE_BASE/startDB.sh &&\
sqlplus sys/$ORACLE_PWD@//localhost:1521/$ORACLE_SID as sysdba @create_test_user.sql
CMD $ORACLE_BASE/startDB.sh
#!/bin/bash
########### Move DB files ############
function moveFiles {
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/tnsnames.ora $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/
symLinkFiles;
}
########### 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
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
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
fi;
# oracle user does not have permissions in /etc, hence cp and not ln
cp $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/oratab /etc/oratab
}
########### SIGINT handler ############
function _int() {
echo "Stopping container."
echo "SIGINT received, shutting down database!"
sqlplus / as sysdba <<EOF
shutdown immediate;
EOF
lsnrctl stop
}
########### SIGTERM handler ############
function _term() {
echo "Stopping container."
echo "SIGTERM received, shutting down database!"
sqlplus / as sysdba <<EOF
shutdown immediate;
EOF
lsnrctl stop
}
########### SIGKILL handler ############
function _kill() {
echo "SIGKILL received, shutting down database!"
sqlplus / as sysdba <<EOF
shutdown abort;
EOF
lsnrctl stop
}
############# Create DB ################
function createDB {
# Auto generate ORACLE PWD
ORACLE_PWD=`openssl rand -base64 8`
echo "ORACLE AUTO GENERATED PASSWORD FOR SYS, SYSTEM AND PDBAMIN: $ORACLE_PWD";
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
mkdir -p $ORACLE_HOME/network/admin
echo "NAME.DIRECTORY_PATH= {TNSNAMES, EZCONNECT, HOSTNAME}" > $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))
)
)
" > $ORACLE_HOME/network/admin/listener.ora
# Start LISTENER and run DBCA
lsnrctl start &&
dbca -silent -responseFile $ORACLE_BASE/dbca.rsp ||
cat /opt/oracle/cfgtoollogs/dbca/$ORACLE_SID/$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
sqlplus / as sysdba << EOF
ALTER SYSTEM SET control_files='$ORACLE_BASE/oradata/$ORACLE_SID/control01.ctl' scope=spfile;
ALTER PLUGGABLE DATABASE $ORACLE_PDB SAVE STATE;
EOF
rm $ORACLE_BASE/dbca.rsp
# Move database operational files to oradata
moveFiles;
}
############# Start DB ################
function startDB {
# Make sure audit file destination exists
if [ ! -d $ORACLE_BASE/admin/$ORACLE_SID/adump ]; then
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
fi;
lsnrctl start
sqlplus / as sysdba << EOF
STARTUP;
EOF
}
############# MAIN ################
# Check whether container has enough memory
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;
# Set SIGINT handler
trap _int SIGINT
# Set SIGTERM handler
trap _term SIGTERM
# Set SIGKILL handler
trap _kill SIGKILL
# Default for ORACLE SID
if [ "$ORACLE_SID" == "" ]; then
export ORACLE_SID=ORCLCDB
fi;
# Default for ORACLE PDB
if [ "$ORACLE_PDB" == "" ]; then
export ORACLE_PDB=ORCLPDB1
fi;
# Check whether database already exists
if [ -d $ORACLE_BASE/oradata/$ORACLE_SID ]; then
symLinkFiles;
startDB;
else
# 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/tnsnames.ora
createDB;
fi;
echo "#########################"
echo "DATABASE IS READY TO USE!"
echo "#########################"
tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert*.log &
childPID=$!
wait $childPID
#!/bin/bash
source $ORACLE_BASE/startup-functions.sh
# symLinkFiles;
startDB;
#!/bin/bash
############# Start DB ################
function startDB {
# Make sure audit file destination exists
if [ ! -d $ORACLE_BASE/admin/$ORACLE_SID/adump ]; then
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
fi;
lsnrctl start
sqlplus / as sysdba << EOF
STARTUP;
EOF
}
########### 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
# 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
# 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
# fi;
# # oracle user does not have permissions in /etc, hence cp and not ln
# cp $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/oratab /etc/oratab
# }
########### Move DB files ############
function moveFiles {
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/tnsnames.ora $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/
# symLinkFiles;
}
############# Create DB ################
function createDB {
echo "ORACLE AUTO GENERATED PASSWORD FOR SYS, SYSTEM AND PDBAMIN: $ORACLE_PWD";
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
mkdir -p $ORACLE_HOME/network/admin
echo "NAME.DIRECTORY_PATH= {TNSNAMES, EZCONNECT, HOSTNAME}" > $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))
)
)
" > $ORACLE_HOME/network/admin/listener.ora
# Start LISTENER and run DBCA
lsnrctl start &&
dbca -silent -responseFile $ORACLE_BASE/dbca.rsp ||
cat /opt/oracle/cfgtoollogs/dbca/$ORACLE_SID/$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
sqlplus / as sysdba << EOF
ALTER SYSTEM SET control_files='$ORACLE_BASE/oradata/$ORACLE_SID/control01.ctl' scope=spfile;
ALTER PLUGGABLE DATABASE $ORACLE_PDB SAVE STATE;
EOF
rm $ORACLE_BASE/dbca.rsp
# Move database operational files to oradata
# moveFiles;
}
# Default for ORACLE SID
if [ "$ORACLE_SID" == "" ]; then
export ORACLE_SID=ORCLCDB
fi;
# Default for ORACLE PDB
if [ "$ORACLE_PDB" == "" ]; then
export ORACLE_PDB=ORCLPDB1
fi;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment