|
| 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 |
0 commit comments