nothing special but maybe this might help someone. this is a simple bash script which automates the installation of the oracle 12c binaries and creates an initial oracle database. all you have to do is to download the sources, adjust the parameters in the configuration section and execute the script. if you keep the script as it is (except for SOURCEPATH) you will get the following:
ORACLE_SID=orcl ORACLE_BASE=/opt/oracle/product/base ORACLE_HOME=/opt/oracle/product/base/12.1.0.1 oraInventory=/opt/oracle/oraInventory /oradata/orcl/... for the database files standard oracle user and oracle groups
this is for redhat6 based distributions only (rhel6, ol6, centos6 (not supported, but works)).
as the script installs the required linux software you should have the yum repositories available somehow ( either you are connected to the internet or you have a local copy of the repositories ).
btw: the logs can be found in the home of the oracle user.
btw2: the script does not create the limits (ulimit) recommended by oracle as the defaults should be fine for testing
#!/bin/bash
##################################################
# CONFIGURATION SECTION #
##################################################
# ** location of the database source files
SOURCEPATH=/home/daniel/Downloads
# ** name of the first source file
SOURCE1=linuxamd64_12c_database_1of2.zip
# ** name of the second source file
SOURCE2=linuxamd64_12c_database_2of2.zip
# ** working directory for extracting the source
WORKDIR=/opt/oracle/stage
# ** the oracle top directory
ORATOPDIR=/opt/oracle
# ** the oracle inventory
ORAINVDIR=${ORATOPDIR}/oraInventory
# ** the ORACLE_BASE to use
ORACLE_BASE=${ORATOPDIR}/product/base
# ** the ORACLE_HOME to use
ORACLE_HOME=${ORACLE_BASE}/12.1.0.1
# ** base directory for the oracle database files
ORABASEDIR=/oradata
# the ORACLE_SID to use
ORACLE_SID=orcl
# ** the owner of the oracle software
ORAOWNER=oracle
# ** the primary installation group
ORAINSTGROUP=oinstall
# ** the dba group
ORADBAGROUP=dba
# ** the oper group
ORAOPERGROUP=oper
# ** the backup dba group
ORABACKUPDBA=backupdba
# ** the dataguard dba group
ORADGBAGROUP=dgdba
# ** the transparent data encryption group
ORAKMBAGROUP=kmdba
##################################################
# MAIN SECTION #
##################################################
PFILE=${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
# print the header
_header() {
echo "*** ---------------------------- ***"
echo "*** -- starting oracle 12c setup ***"
echo "*** ---------------------------- ***"
}
# print simple log messages to screen
_log() {
echo "****** $1 "
}
# check for the current os user
_check_user() {
if [ $(id -un) != "${1}" ]; then
_log "you must run this as ${1}"
exit 0
fi
}
# create the user and the groups
_create_user_and_groups() {
_log "*** checking for group: ${ORAINSTGROUP} "
getent group ${ORAINSTGROUP}
if [ "$?" -ne "0" ]; then
/usr/sbin/groupadd ${ORAINSTGROUP} 2> /dev/null || :
fi
_log "*** checking for group: ${ORADBAGROUP} "
getent group ${ORADBAGROUP}
if [ "$?" -ne "0" ]; then
/usr/sbin/groupadd ${ORADBAGROUP} 2> /dev/null || :
fi
_log "*** checking for group: ${ORAOPERGROUP} "
getent group ${ORAOPERGROUP}
if [ "$?" -ne "0" ]; then
/usr/sbin/groupadd ${ORAOPERGROUP} 2> /dev/null || :
fi
_log "*** checking for group: ${ORABACKUPDBA} "
getent group ${ORABACKUPDBA}
if [ "$?" -ne "0" ]; then
/usr/sbin/groupadd ${ORABACKUPDBA} 2> /dev/null || :
fi
_log "*** checking for group: ${ORADGBAGROUP} "
getent group ${ORADGBAGROUP}
if [ "$?" -ne "0" ]; then
/usr/sbin/groupadd ${ORADGBAGROUP} 2> /dev/null || :
fi
_log "*** checking for group: ${ORAKMBAGROUP} "
getent group ${ORAKMBAGROUP}
if [ "$?" -ne "0" ]; then
/usr/sbin/groupadd ${ORAKMBAGROUP} 2> /dev/null || :
fi
_log "*** checking for user: ${ORAOWNER} "
getent passwd ${ORAOWNER}
if [ "$?" -ne "0" ]; then
/usr/sbin/useradd -g ${ORAINSTGROUP} -G ${ORADBAGROUP},${ORAOPERGROUP},${ORABACKUPDBA},${ORADGBAGROUP},${ORAKMBAGROUP} \
-c "oracle software owner" -m -d /home/${ORAOWNER} -s /bin/bash ${ORAOWNER}
fi
}
# create the directories
_create_dirs() {
_log "*** creating: ${WORKDIR} "
mkdir -p ${WORKDIR}
chown ${ORAOWNER}:${ORAINSTGROUP} ${WORKDIR}
_log "*** creating: ${ORATOPDIR} "
mkdir -p ${ORATOPDIR}
chown ${ORAOWNER}:${ORAINSTGROUP} ${ORATOPDIR}
_log "*** creating: ${ORACLE_BASE} "
mkdir -p ${ORACLE_BASE}
chown ${ORAOWNER}:${ORAINSTGROUP} ${ORACLE_BASE}
_log "*** creating: ${ORACLE_HOME} "
mkdir -p ${ORACLE_HOME}
chown ${ORAOWNER}:${ORAINSTGROUP} ${ORACLE_HOME}
_log "*** creating: ${ORABASEDIR} "
mkdir -p ${ORABASEDIR}
chown ${ORAOWNER}:${ORAINSTGROUP} ${ORABASEDIR}
_log "*** creating: ${ORABASEDIR}/${ORACLE_SID} "
mkdir -p ${ORABASEDIR}/${ORACLE_SID}
chown ${ORAOWNER}:${ORAINSTGROUP} ${ORABASEDIR}/${ORACLE_SID}
_log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/rdo1 "
mkdir -p ${ORABASEDIR}/${ORACLE_SID}/rdo1
_log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/rdo2 "
mkdir -p ${ORABASEDIR}/${ORACLE_SID}/rdo2
_log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/dbf "
mkdir -p ${ORABASEDIR}/${ORACLE_SID}/dbf
_log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/arch "
mkdir -p ${ORABASEDIR}/${ORACLE_SID}/arch
_log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/admin "
mkdir -p ${ORABASEDIR}/${ORACLE_SID}/admin
_log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/admin/adump "
mkdir -p ${ORABASEDIR}/${ORACLE_SID}/admin/adump
_log "*** creating: ${ORABASEDIR}/${ORACLE_SID}/pdbseed "
mkdir -p ${ORABASEDIR}/${ORACLE_SID}/pdbseed
chown -R ${ORAOWNER}:${ORADBAGROUP} ${ORABASEDIR}/${ORACLE_SID}
}
# extract the source files
_extract_sources() {
cp ${SOURCEPATH}/${SOURCE1} ${WORKDIR}
cp ${SOURCEPATH}/${SOURCE2} ${WORKDIR}
chown ${ORAOWNER}:${ORAINSTGROUP} ${WORKDIR}/*
_log "*** extracting: ${SOURCE1} "
su - ${ORAOWNER} -c "unzip -d ${WORKDIR} ${WORKDIR}/${SOURCE1}"
_log "*** extracting: ${SOURCE2} "
su - ${ORAOWNER} -c "unzip -d ${WORKDIR} ${WORKDIR}/${SOURCE2}"
}
# install required software
_install_required_software() {
_log "*** installing required software "
yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh \
libgcc libstdc++ libstdc++-devel libaio libaio-devel libXext libXtst libX11 libXau libxcb libXi make sysstat
}
# install oracle software
_install_oracle_software() {
_log "*** installing oracle software"
su - ${ORAOWNER} -c "cd ${WORKDIR}/database; ./runInstaller oracle.install.option=INSTALL_DB_SWONLY \
ORACLE_BASE=${ORACLE_BASE} \
ORACLE_HOME=${ORACLE_HOME} \
UNIX_GROUP_NAME=${ORAINSTGROUP} \
oracle.install.db.DBA_GROUP=${ORADBAGROUP} \
oracle.install.db.OPER_GROUP=${ORAOPERGROUP} \
oracle.install.db.BACKUPDBA_GROUP=${ORABACKUPDBA} \
oracle.install.db.DGDBA_GROUP=${ORADGBAGROUP} \
oracle.install.db.KMDBA_GROUP=${ORAKMBAGROUP} \
FROM_LOCATION=../stage/products.xml \
INVENTORY_LOCATION=${ORAINVDIR} \
SELECTED_LANGUAGES=en \
oracle.install.db.InstallEdition=EE \
DECLINE_SECURITY_UPDATES=true -silent -ignoreSysPrereqs -ignorePrereq -waitForCompletion"
${ORAINVDIR}/orainstRoot.sh
${ORACLE_HOME}/root.sh
}
# create a very minimal pfile
_create_pfile() {
_log "*** creating pfile "
echo "instance_name=${ORACLE_SID}" > ${PFILE}
echo "db_name=${ORACLE_SID}" >> ${PFILE}
echo "db_block_size=8192" >> ${PFILE}
echo "control_files=${ORABASEDIR}/${ORACLE_SID}/rdo1/control01.ctl,${ORABASEDIR}/${ORACLE_SID}/rdo2/control02.ctl" >> ${PFILE}
echo "sga_max_size=512m" >> ${PFILE}
echo "sga_target=512m" >> ${PFILE}
echo "diagnostic_dest=${ORABASEDIR}/${ORACLE_SID}/admin" >> ${PFILE}
echo "audit_file_dest=${ORABASEDIR}/${ORACLE_SID}/admin/adump" >> ${PFILE}
echo "enable_pluggable_database=true" >> ${PFILE}
}
# create the database
_create_database() {
_log "*** creating database "
# escaping the dollar seems not to work in EOF
echo "alter pluggable database pdb\$seed close;" > ${ORABASEDIR}/${ORACLE_SID}/admin/seedhack.sql
echo "alter pluggable database pdb\$seed open;" >> ${ORABASEDIR}/${ORACLE_SID}/admin/seedhack.sql
su - ${ORAOWNER} -c "export ORACLE_HOME=${ORACLE_HOME};export LD_LIBRARY_PATH=${LD_LIBRARY_PATH};export PATH=${ORACLE_HOME}/bin:${PATH};export ORACLE_SID=${ORACLE_SID};export PERL5LIB=${ORACLE_HOME}/rdbms/admin; sqlplus / as sysdba <<EOF
shutdown abort
startup force nomount pfile=${PFILE}
create spfile from pfile='${PFILE}';
startup force nomount
CREATE DATABASE \"${ORACLE_SID}\"
MAXINSTANCES 8
MAXLOGHISTORY 5
MAXLOGFILES 16
MAXLOGMEMBERS 5
MAXDATAFILES 1024
DATAFILE '${ORABASEDIR}/${ORACLE_SID}/dbf/system01.dbf' SIZE 1024m REUSE AUTOEXTEND ON NEXT 8m MAXSIZE 2g EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE '${ORABASEDIR}/${ORACLE_SID}/dbf/sysaux01.dbf' SIZE 1024m REUSE AUTOEXTEND ON NEXT 8m MAXSIZE 2g
DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '${ORABASEDIR}/${ORACLE_SID}/dbf/temp01.dbf' SIZE 1024m REUSE AUTOEXTEND ON NEXT 8m MAXSIZE 2g
UNDO TABLESPACE \"UNDOTBS1\" DATAFILE '${ORABASEDIR}/${ORACLE_SID}/undotbs01.dbf' SIZE 1024m REUSE AUTOEXTEND ON NEXT 8m MAXSIZE 2g
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
LOGFILE GROUP 1 ('${ORABASEDIR}/${ORACLE_SID}/rdo1/redo01_1.log', '${ORABASEDIR}/${ORACLE_SID}/rdo2/redo01_2.log') SIZE 64m,
GROUP 2 ('${ORABASEDIR}/${ORACLE_SID}/rdo1/redo02_1.log', '${ORABASEDIR}/${ORACLE_SID}/rdo2/redo02_2.log') SIZE 64m,
GROUP 3 ('${ORABASEDIR}/${ORACLE_SID}/rdo1/redo03_1.log', '${ORABASEDIR}/${ORACLE_SID}/rdo2/redo03_2.log') SIZE 64m
USER SYS IDENTIFIED BY \"sys\" USER SYSTEM IDENTIFIED BY \"system\"
enable pluggable database
seed file_name_convert=('${ORABASEDIR}/${ORACLE_SID}/dbf/system01.dbf', '${ORABASEDIR}/${ORACLE_SID}/pdbseed/system01.dbf'
,'${ORABASEDIR}/${ORACLE_SID}/dbf/sysaux01.dbf', '${ORABASEDIR}/${ORACLE_SID}/pdbseed/sysaux01.dbf'
,'${ORABASEDIR}/${ORACLE_SID}/dbf/temp01.dbf', '${ORABASEDIR}/${ORACLE_SID}/pdbseed/temp01.dbf'
,'${ORABASEDIR}/${ORACLE_SID}/dbf/undotbs01.dbf', '${ORABASEDIR}/${ORACLE_SID}/pdbseed/undotbs01.dbf');
startup force
alter session set \"_oracle_script\"=true;
start ${ORABASEDIR}/${ORACLE_SID}/admin/seedhack.sql
host perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -l /home/${ORAOWNER} -b catalog $ORACLE_HOME/rdbms/admin/catalog.sql;
host perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -l /home/${ORAOWNER} -b catblock $ORACLE_HOME/rdbms/admin/catblock.sql;
host perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -l /home/${ORAOWNER} -b catproc $ORACLE_HOME/rdbms/admin/catproc.sql;
host perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -l /home/${ORAOWNER} -b catoctk $ORACLE_HOME/rdbms/admin/catoctk.sql;
host perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -l /home/${ORAOWNER} -b pupbld -u SYSTEM/system $ORACLE_HOME/sqlplus/admin/pupbld.sql;
connect "SYSTEM"/"system"
host perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -l /home/${ORAOWNER} -b hlpbld -u SYSTEM/system -a 1 $ORACLE_HOME/sqlplus/admin/help/hlpbld.sql 1helpus.sql;
connect / as sysdba
start $ORACLE_HOME/rdbms/admin/utlrp.sql
set lines 264 pages 9999
col owner for a30
col status for a10
col object_name for a30
col object_type for a30
col comp_name for a80
col PDB_NAME for a30
col PDB_ID for 999
select owner,object_name,object_type,status from dba_objects where status 'VALID';
select comp_name,status from dba_registry;
select pdb_id,pdb_name from dba_pdbs;
exit;
EOF"
}
# add oracle environment to .bash_profile
_create_env() {
_log "*** adding environment to .bash_profile "
echo "ORACLE_BASE=${ORACLE_BASE}" >> /home/${ORAOWNER}/.bash_profile
echo "ORACLE_HOME=${ORACLE_HOME}" >> /home/${ORAOWNER}/.bash_profile
echo "ORACLE_SID=${ORACLE_SID}" >> /home/${ORAOWNER}/.bash_profile
echo "LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}" >> /home/${ORAOWNER}/.bash_profile
echo "PATH=${ORACLE_HOME}/bin:${PATH}" >> /home/${ORAOWNER}/.bash_profile
echo "export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH PATH" >> /home/${ORAOWNER}/.bash_profile
}
_header
_check_user "root"
_create_user_and_groups
_create_dirs
_install_required_software
_extract_sources
_install_oracle_software
_create_pfile
_create_database
_create_env
once the script finished simply do:
su - oracle sqlplus / as sysdba
… and start playing around.


Great work – Thank you very much
great script and it worked for the most part till it needed to create the database.
getting the below error. Any help will be highly appreciated:
———————-
****** *** creating database
SQL*Plus: Release 12.1.0.2.0 Production on Thu May 14 12:00:43 2020
Copyright (c) 1982, 2014, Oracle. All rights reserved.
ERROR:
ORA-12547: TNS:lost contact