8000 Adding 11gXE-small · utPLSQL/docker-scripts@f7d75e2 · GitHub
[go: up one dir, main page]

Skip to content

Commit f7d75e2

Browse files
committed
Adding 11gXE-small
1 parent a7edf6d commit f7d75e2

File tree

6 files changed

+402
-0
lines changed

6 files changed

+402
-0
lines changed

11.2.0.2-xe-small/Checksum.xe

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dd7881a55569d890241f11cd0eeb7d48 oracle-xe-11.2.0-1.0.x86_64.rpm.zip

11.2.0.2-xe-small/Dockerfile

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# LICENSE UPL 1.0
2+
#
3+
# Copyright (c) 1982-2016 Oracle and/or its affiliates. All rights reserved.
4+
#
5+
# ORACLE DOCKERFILES PROJECT
6+
# --------------------------
7+
# This is the Dockerfile for Oracle Database 11g Release 2 Express Edition
8+
#
9+
# REQUIRED FILES TO BUILD THIS IMAGE
10+
# ----------------------------------
11+
# (1) oracle-xe-11.2.0-1.0.x86_64.rpm.zip
12+
# Download Oracle Database 11g Release 2 Express Edition for Linux x64
13+
# from http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html
14+
#
15+
# HOW TO BUILD THIS IMAGE
16+
# -----------------------
17+
# Put the downloaded file in the same directory as this Dockerfile
18+
# Run:
19+
# $ docker build -t oracle/database:11.2.0.2-xe .
20+
#
21+
# IMPORTANT
22+
# ---------
23+
# Oracle XE requires Docker 1.10.0 and above:
24+
# Oracle XE uses shared memory for MEMORY_TARGET and needs at least 1 GB.
25+
# Docker only supports --shm-size since Docker 1.10.0
26+
#
27+
# Pull base image
28+
# ---------------
29+
FROM oraclelinux:7-slim
30+
31+
# Maintainer
32+
# ----------
33+
MAINTAINER Gerald Venzl <gerald.venzl@oracle.com>
34+
35+
# Environment variables required for this build (do NOT change)
36+
# -------------------------------------------------------------
37+
ENV ORACLE_BASE=/u01/app/oracle \
38+
ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe \
39+
ORACLE_SID=XE \
40+
INSTALL_FILE_1="oracle-xe-11.2.0-1.0.x86_64.rpm.zip" \
41+
INSTALL_DIR="$HOME/install" \
42+
CONFIG_RSP="xe.rsp" \
43+
RUN_FILE="runOracle.sh" \
44+
ORACLE_PWD="oracle" \
45+
PWD_FILE="setPassword.sh" \
46+
CHECK_DB_FILE="checkDBStatus.sh"
47+
48+
# Use second ENV so that variable get substituted
49+
ENV PATH=$ORACLE_HOME/bin:$PATH
50+
51+
# Copy binaries
52+
# -------------
53+
COPY $INSTALL_FILE_1 $CONFIG_RSP $RUN_FILE $PWD_FILE $CHECK_DB_FILE $INSTALL_DIR/
54+
55+
# Install Oracle Express Edition
56+
# ------------------------------
57+
58+
RUN yum -y install unzip libaio bc initscripts net-tools openssl && \
59+
rm -rf /var/cache/yum && \
60+
cd $INSTALL_DIR && \
61+
unzip $INSTALL_FILE_1 && \
62+
rm $INSTALL_FILE_1 && \
63+
cat() { declare -A PROC=(["/proc/sys/kernel/shmmax"]=4294967295 ["/proc/sys/kernel/shmmni"]=4096 ["/proc/sys/kernel/shmall"]=2097152 ["/proc/sys/fs/file-max"]=6815744); [[ ${PROC[$1]} == "" ]] && /usr/bin/cat $* || echo ${PROC[$1]}; } && \
64+
free() { echo "Swap: 2048 0 2048"; } && \
65+
export -f cat free && \
66+
rpm -i Disk1/*.rpm && \
67+
unset -f cat free && \
68+
mkdir -p $ORACLE_BASE/scripts/setup && \
69+
mkdir $ORACLE_BASE/scripts/startup && \
70+
ln -s $ORACLE_BASE/scripts /docker-entrypoint-initdb.d && \
71+
mkdir $ORACLE_BASE/oradata && \
72+
chown -R oracle:dba $ORACLE_BASE && \
73+
mv $INSTALL_DIR/$CONFIG_RSP $ORACLE_BASE/ && \
74+
mv $INSTALL_DIR/$RUN_FILE $ORACLE_BASE/ && \
75+
mv $INSTALL_DIR/$PWD_FILE $ORACLE_BASE/ && \
76+
mv $INSTALL_DIR/$CHECK_DB_FILE $ORACLE_BASE/ && \
77+
ln -s $ORACLE_BASE/$PWD_FILE / && \
78+
cd $HOME && \
79+
rm -rf $INSTALL_DIR && \
80+
chmod ug+x $ORACLE_BASE/*.sh
81+
82+
VOLUME ["$ORACLE_BASE/oradata"]
83+
EXPOSE 1521 8080
84+
HEALTHCHECK --interval=1m --start-period=5m \
85+
CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
86+
87+
CMD exec $ORACLE_BASE/$RUN_FILE

11.2.0.2-xe-small/checkDBStatus.sh

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#!/bin/bash
2+
# LICENSE UPL 1.0
3+
#
4+
# Copyright (c) 1982-2017 Oracle and/or its affiliates. All rights reserved.
5+
#
6+
# Since: May, 2017
7+
# Author: gerald.venzl@oracle.com
8+
# Description: Checks the status of Oracle Database.
9+
# Return codes: 0 = Database is open and ready to use
10+
# 1 = Database is not open
11+
# 2 = Sql Plus execution failed
12+
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
13+
#
14+
15+
POSITIVE_RETURN="OPEN"
16+
ORACLE_SID="`grep $ORACLE_HOME /etc/oratab | cut -d: -f1`"
17+
18+
# Check Oracle DB status and store it in status
19+
status=`su -p oracle -c "sqlplus -s / as sysdba" << EOF
20+
set heading off;
21+
set pagesize 0;
22+
select status from v\\$instance;
23+
exit;
24+
EOF`
25+
26+
# Store return code from SQL*Plus
27+
ret=$?
28+
29+
# SQL Plus execution was successful and database is open
30+
if [ $ret -eq 0 ] && [ "$status" = "$POSITIVE_RETURN" ]; then
31+
exit 0;
32+
# Database is not open
33+
elif [ "$status" != "$POSITIVE_RETURN" ]; then
34+
exit 1;
35+
# SQL Plus execution failed
36+
else
37+
exit 2;
38+
fi;

11.2.0.2-xe-small/runOracle.sh

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
#!/bin/bash
2+
3+
############# Execute custom scripts ##############
4+
function runUserScripts {
5+
6+
SCRIPTS_ROOT="$1";
7+
8+
# Check whether parameter has been passed on
9+
if [ -z "$SCRIPTS_ROOT" ]; then
10+
echo "$0: No SCRIPTS_ROOT passed on, no scripts will be run";
11+
exit 1;
12+
fi;
13+
14+
# Execute custom provided files (only if directory exists and has files in it)
15+
if [ -d "$SCRIPTS_ROOT" ] && [ -n "$(ls -A $SCRIPTS_ROOT)" ]; then
16+
17+
echo "";
18+
echo "Executing user defined scripts"
19+
20+
for f in $SCRIPTS_ROOT/*; do
21+
case "$f" in
22+
*.sh) echo "$0: running $f"; . "$f" ;;
23+
*.sql) echo "$0: running $f"; echo "exit" | su -p oracle -c "$ORACLE_HOME/bin/sqlplus / as sysdba @$f"; echo ;;
24+
*) echo "$0: ignoring $f" ;;
25+
esac
26+
echo "";
27+
done
28+
29+
echo "DONE: Executing user defined scripts"
30+
echo "";
31+
32+
fi;
33+
34+
}
35+
36+
########### Move DB files ############
37+
function moveFiles {
38+
if [ ! -d $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID ]; then
39+
su -p oracle -c "mkdir -p $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/"
40+
fi;
41+
42+
su -p oracle -c "mv $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/"
43+
su -p oracle -c "mv $ORACLE_HOME/dbs/orapw$ORACLE_SID $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/"
44+
su -p oracle -c "mv $ORACLE_HOME/network/admin/listener.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/"
45+
su -p oracle -c "mv $ORACLE_HOME/network/admin/tnsnames.ora $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/"
46+
mv /etc/sysconfig/oracle-xe $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/
47+
48+
cp /etc/oratab $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/
49+
50+
symLinkFiles;
51+
}
52+
53+
########### Symbolic link DB files ############
54+
function symLinkFiles {
55+
56+
if [ ! -L $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora ]; then
57+
ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/spfile$ORACLE_SID.ora $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora
58+
fi;
59+
60+
if [ ! -L $ORACLE_HOME/dbs/orapw$ORACLE_SID ]; then
61+
ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/orapw$ORACLE_SID $ORACLE_HOME/dbs/orapw$ORACLE_SID
62+
fi;
63+
64+
if [ ! -L $ORACLE_HOME/network/admin/listener.ora ]; then
65+
ln -sf $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/listener.ora $ORACLE_HOME/network/admin/listener.ora
66+
fi;
67+
68+
if [ ! -L $ORACLE_HOME/network/admin/tnsnames.ora ]; then
69+
ln -sf $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora
70+
fi;
71+
72+
if [ ! -L /etc/sysconfig/oracle-xe ]; then
73+
ln -s $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/oracle-xe /etc/sysconfig/oracle-xe
74+
fi;
75+
76+
cp $ORACLE_BASE/oradata/dbconfig/$ORACLE_SID/oratab /etc/oratab
77+
}
78+
79+
########### SIGTERM handler ############
80+
function _term() {
81+
echo "Stopping container."
82+
echo "SIGTERM received, shutting down database!"
83+
/etc/init.d/oracle-xe stop
84+
}
85+
86+
########### SIGKILL handler ############
87+
function _kill() {
88+
echo "SIGKILL received, shutting down database!"
89+
/etc/init.d/oracle-xe stop
90+
}
91+
92+
############# Create DB ################
93+
function createDB {
94+
# Auto generate ORACLE PWD if not passed on
95+
export ORACLE_PWD=${ORACLE_PWD:-"`openssl rand -hex 8`"}
96+
echo "ORACLE PASSWORD FOR SYS AND SYSTEM: $ORACLE_PWD";
97+
98+
sed -i -e "s|###ORACLE_PWD###|$ORACLE_PWD|g" $ORACLE_BASE/$CONFIG_RSP && \
99+
/etc/init.d/oracle-xe configure responseFile=$ORACLE_BASE/$CONFIG_RSP
100+
101+
# Listener
102+
echo "# listener.ora Network Configuration File:
103+
104+
SID_LIST_LISTENER =
105+
(SID_LIST =
106+
(SID_DESC =
107+
(SID_NAME = PLSExtProc)
108+
(ORACLE_HOME = $ORACLE_HOME)
109+
(PROGRAM = extproc)
110+
)
111+
)
112+
113+
LISTENER =
114+
(DESCRIPTION_LIST =
115+
(DESCRIPTION =
116+
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
117+
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
118+
)
119+
)
120+
121+
DEFAULT_SERVICE_LISTENER = (XE)" > $ORACLE_HOME/network/admin/listener.ora
122+
123+
# TNS Names.ora
124+
echo "# tnsnames.ora Network Configuration File:
125+
126+
XE =
127+
(DESCRIPTION =
128+
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
129+
(CONNECT_DATA =
130+
(SERVER = DEDICATED)
131+
(SERVICE_NAME = XE)
132+
)
133+
)
134+
135+
EXTPROC_CONNECTION_DATA =
136+
(DESCRIPTION =
137+
(ADDRESS_LIST =
138+
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
139+
)
140+
(CONNECT_DATA =
141+
(SID = PLSExtProc)
142+
(PRESENTATION = RO)
143+
)
144+
)
145+
" > $ORACLE_HOME/network/admin/tnsnames.ora
146+
147+
su -p oracle -c "sqlplus / as sysdba <<EOF
148+
EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
149+
150+
ALTER DATABASE ADD LOGFILE GROUP 4 ('$ORACLE_BASE/oradata/$ORACLE_SID/redo04.log') SIZE 50m;
151+
ALTER DATABASE ADD LOGFILE GROUP 5 ('$ORACLE_BASE/oradata/$ORACLE_SID/redo05.log') SIZE 50m;
152+
ALTER DATABASE ADD LOGFILE GROUP 6 ('$ORACLE_BASE/oradata/$ORACLE_SID/redo06.log') SIZE 50m;
153+
ALTER SYSTEM SWITCH LOGFILE;
154+
ALTER SYSTEM SWITCH LOGFILE;
155+
ALTER SYSTEM CHECKPOINT;
156+
ALTER DATABASE DROP LOGFILE GROUP 1;
157+
ALTER DATABASE DROP LOGFILE GROUP 2;
158+
159+
ALTER SYSTEM SET db_recovery_file_dest='';
160+
exit;
161+
EOF"
162+
163+
# Move database operational files to oradata
164+
moveFiles;
165+
}
166+
167+
############# MAIN ################
168+
169+
# Set SIGTERM handler
170+
trap _term SIGTERM
171+
172+
# Set SIGKILL handler
173+
trap _kill SIGKILL
174+
175+
# Check whether database already exists
176+
if [ -d $ORACLE_BASE/oradata/$ORACLE_SID ]; then
177+
symLinkFiles;
178+
# Make sure audit file destination exists
179+
if [ ! -d $ORACLE_BASE/admin/$ORACLE_SID/adump ]; then
180+
su -p oracle -c "mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump"
181+
fi;
182+
fi;
183+
184+
/etc/init.d/oracle-xe start | grep -qc "Oracle Database 11g Express Edition is not configured"
185+
if [ "$?" == "0" ]; then
186+
# Check whether container has enough memory
187+
if [ `df -Pk /dev/shm | tail -n 1 | awk '{print $2}'` -lt 1048576 ]; then
188+
echo "Error: The container doesn't have enough memory allocated."
189+
echo "A database XE container needs at least 1 GB of shared memory (/dev/shm)."
190+
echo "You currently only have $((`df -Pk /dev/shm | tail -n 1 | awk '{print $2}'`/1024)) MB allocated to the container."
191+
exit 1;
192+
fi;
193+
194+
# Create database
195+
createDB;
196+
197+
# Execute custom provided setup scripts
198+
runUserScripts $ORACLE_BASE/scripts/setup
199+
fi;
200+
201+
# Check whether database is up and running
202+
$ORACLE_BASE/$CHECK_DB_FILE
203+
if [ $? -eq 0 ]; then
204+
echo "#########################"
205+
echo "DATABASE IS READY TO USE!"
206+
echo "#########################"
207+
208+
# Execute custom provided startup scripts
209+
runUserScripts $ORACLE_BASE/scripts/startup
210+
211+
else
212+
echo "#####################################"
213+
echo "########### E R R O R ###############"
214+
echo "DATABASE SETUP WAS NOT SUCCESSFUL!"
215+
echo "Please check output for further info!"
216+
echo "########### E R R O R ###############"
217+
echo "#####################################"
218+
fi;
219+
220+
echo "The following output is now a tail of the alert.log:"
221+
tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert*.log &
222+
childPID=$!
223+
wait $childPID

11.2.0.2-xe-small/setPassword.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/bin/bash
2+
3+
ORACLE_PWD=$1
4+
5+
su -p oracle -c "sqlplus / as sysdba << EOF
6+
ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
7+
ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
8+
exit;
9+
EOF"

0 commit comments

Comments
 (0)
0