Configure repos source
# cd /etc/yum.repos.d # wget http://yum.oracle.com/public-yum-ol7.repo
The official website points out that the version to be installed is enable =1, so you need to modify the. repo file.
Download RMP-GPG-KEY
- wget http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
What oracle-rdbms-server-11gR2-preinstall package does
- (1) automatically install the RPM package required by oracle
- (2) automatically create oracle users and group groups
- (3) automatically configure kernel parameters of / etc/sysctl.conf
- (4) automatically configure the / etc/security/limits.conf parameter
- (5) turn off NUMA=OFF (turn off inconsistent memory access)
Install necessary software
groupadd dba && useradd -m -G dba oracle && mkdir /u01 && chown oracle:dba /u01 yum install -y oracle-rdbms-server-11gR2-preinstall glibc-static wget unzip && yum clean all
Save script
mkdir -p /install cd /install wget https://raw.githubusercontent.com/MaksymBilenko/docker-oracle-ee-11g/master/oracle-11g-ee-base/install/oracle-11g-ee.rsp wget https://github.com/MaksymBilenko/docker-oracle-ee-11g/blob/master/oracle-11g-ee-base/install/oracle_install.sh wget https://raw.githubusercontent.com/MaksymBilenko/docker-oracle-ee-11g/master/entrypoint.sh
Download Oracle installation package
Download address on official website: https://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-linx8664soft-100572.html
# Please execute the modify download link, AuthParam will expire automatically wget -q -O linux.x64_11gR2_database_1of2.zip https://download.oracle.com/otn/linux/oracle11g/R2/linux.x64_11gR2_database_1of2.zip?AuthParam=1561389203_9ccc19db849275e4a7d668f4607586ee # Please execute the modify download link, AuthParam will expire automatically wget -q -O linux.x64_11gR2_database_2of2.zip https://download.oracle.com/otn/linux/oracle11g/R2/linux.x64_11gR2_database_2of2.zip?AuthParam=1561389203_9ccc19db849275e4a7d668f4607586ee
Execute the script oracle_install.sh
#!/bin/bash set -e #Delete limits cause of docker limits issue cat /etc/security/limits.conf | grep -v oracle | tee /etc/security/limits.conf #Please download the zip package of oracle echo 'Downloading linux.x64_11gR2_database_1of2.zip' wget -q -O linux.x64_11gR2_database_1of2.zip http://10.0.1.4:8080/linux.x64_11gR2_database_1of2.zip #Please download the zip package of oracle echo 'Downloading linux.x64_11gR2_database_2of2.zip' wget -q -O linux.x64_11gR2_database_2of2.zip http://10.0.1.4:8080/linux.x64_11gR2_database_2of2.zip echo 'Unzipping' unzip -q linux.x64_11gR2_database_1of2.zip unzip -q linux.x64_11gR2_database_2of2.zip rm -f linux*.zip mv database /home/oracle/ su oracle -c 'cd /home/oracle/database && ./runInstaller -ignorePrereq -ignoreSysPrereqs -silent -responseFile /install/oracle-11g-ee.rsp -waitForCompletion 2>&1' rm -rf /home/oracle/database mv /u01/app/oracle/product /u01/app/oracle-product #/u01/app/oraInventory/orainstRoot.sh #/u01/app/oracle/product/11.2.0/EE/root.sh #$ORACLE_HOME/bin/dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname EE.oracle.docker -sid EE -responseFile NO_VALUE -totalMemory 2048 -emConfiguration LOCAL -sysPassword oracle -systemPassword oracle -dbsnmpPassword oracle
Note: the script is saved in the / install directory. Please cd to this directory and execute the script with root permission.
Set Oracle parameters
# vi ~/.bash_profile export DBCA_TOTAL_MEMORY=4096 export WEB_CONSOLE="true" export CHARACTER_SET=ZHS16GBK export DB_NAME=ORCL export DB_SID=ORCL export DB_PASSWORD=ORCL123456 export ORACLE_SID=ORCL export ORACLE_HOME=/u01/app/oracle/product/11.2.0/EE PATH=$PATH:$ORACLE_HOME/bin export PATH #####After saving, execute the source ~ /. Bash? Profile. # . ~/.bash_profile
Execute the entrypoint.sh script
#!/bin/bash set -e # Prevent owner issues on mounted folders echo "Preparing oracle installer." chown -R oracle:dba /u01/app/oracle rm -f /u01/app/oracle/product ln -s /u01/app/oracle-product /u01/app/oracle/product #Run Oracle root scripts echo "Running root scripts." /u01/app/oraInventory/orainstRoot.sh 2>&1 echo | /u01/app/oracle/product/11.2.0/EE/root.sh 2>&1 || true impdp () { set +e DUMP_FILE=$(basename "$1") DUMP_NAME=${DUMP_FILE%.dmp} cat > /tmp/impdp.sql << EOL -- Impdp User CREATE USER IMPDP IDENTIFIED BY IMPDP; ALTER USER IMPDP ACCOUNT UNLOCK; GRANT dba TO IMPDP WITH ADMIN OPTION; -- New Scheme User create or replace directory IMPDP as '/docker-entrypoint-initdb.d'; create tablespace $DUMP_NAME datafile '/u01/app/oracle/oradata/$DUMP_NAME.dbf' size 1000M autoextend on next 100M maxsize unlimited; create user $DUMP_NAME identified by $DUMP_NAME default tablespace $DUMP_NAME; alter user $DUMP_NAME quota unlimited on $DUMP_NAME; alter user $DUMP_NAME default role all; grant all to $DUMP_NAME; exit; EOL su oracle -c "NLS_LANG=.$CHARACTER_SET $ORACLE_HOME/bin/sqlplus -S / as sysdba @/tmp/impdp.sql" su oracle -c "NLS_LANG=.$CHARACTER_SET $ORACLE_HOME/bin/impdp IMPDP/IMPDP directory=IMPDP dumpfile=$DUMP_FILE $IMPDP_OPTIONS" #Disable IMPDP user echo -e 'ALTER USER IMPDP ACCOUNT LOCK;\nexit;' | su oracle -c "NLS_LANG=.$CHARACTER_SET $ORACLE_HOME/bin/sqlplus -S / as sysdba" set -e } case "$1" in '') #Check for mounted database files if [ "$(ls -A /u01/app/oracle/oradata)" ]; then echo "found files in /u01/app/oracle/oradata Using them instead of initial database" echo "EE:$ORACLE_HOME:N" >> /etc/oratab chown oracle:dba /etc/oratab chown 664 /etc/oratab rm -rf /u01/app/oracle-product/11.2.0/EE/dbs ln -s /u01/app/oracle/dbs /u01/app/oracle-product/11.2.0/EE/dbs #Startup Database su oracle -c "/u01/app/oracle/product/11.2.0/EE/bin/tnslsnr &" su oracle -c 'echo startup\; | $ORACLE_HOME/bin/sqlplus -S / as sysdba' else echo "Database not initialized. Initializing database." export IMPORT_FROM_VOLUME=true if [ -z "$CHARACTER_SET" ]; then export CHARACTER_SET="AL32UTF8" fi #printf "Setting up:\nprocesses=$processes\nsessions=$sessions\ntransactions=$transactions\n" mv /u01/app/oracle-product/11.2.0/EE/dbs /u01/app/oracle/dbs ln -s /u01/app/oracle/dbs /u01/app/oracle-product/11.2.0/EE/dbs echo "Starting tnslsnr" su oracle -c "/u01/app/oracle/product/11.2.0/EE/bin/tnslsnr &" #create DB for SID: EE echo "Running initialization by dbca" su oracle -c "$ORACLE_HOME/bin/dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname EE.oracle.docker -sid EE -responseFile NO_VALUE -characterSet $CHARACTER_SET -totalMemory $DBCA_TOTAL_MEMORY -emConfiguration LOCAL -dbsnmpPassword oracle -sysPassword oracle -systemPassword oracle" # echo "Configuring Apex console" # cd $ORACLE_HOME/apex # su oracle -c 'echo -e "0Racle$\n8080" | $ORACLE_HOME/bin/sqlplus -S / as sysdba @apxconf > /dev/null' # su oracle -c 'echo -e "${ORACLE_HOME}\n\n" | $ORACLE_HOME/bin/sqlplus -S / as sysdba @apex_epg_config_core.sql > /dev/null' # su oracle -c 'echo -e "ALTER USER ANONYMOUS ACCOUNT UNLOCK;" | $ORACLE_HOME/bin/sqlplus -S / as sysdba > /dev/null' # echo "Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed" fi if [ $WEB_CONSOLE == "true" ]; then echo 'Starting web management console' su oracle -c 'echo EXEC DBMS_XDB.sethttpport\(8080\)\; | $ORACLE_HOME/bin/sqlplus -S / as sysdba' else echo 'Disabling web management console' su oracle -c 'echo EXEC DBMS_XDB.sethttpport\(0\)\; | $ORACLE_HOME/bin/sqlplus -S / as sysdba' fi if [ $IMPORT_FROM_VOLUME ]; then echo "Starting import from '/docker-entrypoint-initdb.d':" for f in /docker-entrypoint-initdb.d/*; do echo "found file /docker-entrypoint-initdb.d/$f" case "$f" in *.sh) echo "[IMPORT] $0: running $f"; . "$f" ;; *.sql) echo "[IMPORT] $0: running $f"; echo "exit" | su oracle -c "NLS_LANG=.$CHARACTER_SET $ORACLE_HOME/bin/sqlplus -S / as sysdba @$f"; echo ;; *.dmp) echo "[IMPORT] $0: running $f"; impdp $f ;; *) echo "[IMPORT] $0: ignoring $f" ;; esac echo done echo "Import finished" echo else echo "[IMPORT] Not a first start, SKIPPING Import from Volume '/docker-entrypoint-initdb.d'" echo "[IMPORT] If you want to enable import at any state - add 'IMPORT_FROM_VOLUME=true' variable" echo fi echo "Database ready to use. Enjoy! ;)" ## ## Workaround for graceful shutdown. ## while [ "$END" == '' ]; do sleep 1 trap "su oracle -c 'echo shutdown immediate\; | $ORACLE_HOME/bin/sqlplus -S / as sysdba'" INT TERM done ;; *) echo "Database is not configured. Please run '/entrypoint.sh' if needed." exec "$@" ;; esac
If nothing unusual happens, it's over.