Skip to content

Instantly share code, notes, and snippets.

@marcelo-ochoa
Created August 12, 2020 20:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcelo-ochoa/ed5e79d39beaa685ed8364b3ee141f03 to your computer and use it in GitHub Desktop.
Save marcelo-ochoa/ed5e79d39beaa685ed8364b3ee141f03 to your computer and use it in GitHub Desktop.
#!/bin/bash
# LICENSE UPL 1.0
#
# Copyright (c) 1982-2018 Oracle and/or its affiliates. All rights reserved.
#
# Since: November, 2016
# Author: gerald.venzl@oracle.com
# Description: Creates an Oracle Database based on following parameters:
# $ORACLE_SID: The Oracle SID and CDB name
# $ORACLE_PDB: The PDB name
# $ORACLE_PWD: The Oracle password
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
set -e
# Check whether ORACLE_SID is passed on
export ORACLE_SID=${1:-ORCLCDB}
# Check whether ORACLE_PDB is passed on
export ORACLE_PDB=${2:-ORCLPDB1}
# Auto generate ORACLE PWD if not passed on
export ORACLE_PWD=${3:-"`openssl rand -base64 8`1"}
echo "ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: $ORACLE_PWD";
restore_spfile() {
rman target /<<EOF
startup nomount force;
restore spfile from '/opt/oracle/scripts/setup/spfile.bks';
create pfile from spfile;
exit;
EOF
}
restore_database() {
rman target /<<EOF
create spfile from pfile;
shutdown immediate;
startup nomount;
restore controlfile from '/opt/oracle/scripts/setup/control.bks';
alter database mount;
restore database;
report schema;
recover database noredo;
alter database open resetlogs;
exit;
EOF
}
upgrade_database() {
sleep 5;
sqlplus /nolog<<EOF
conn / as sysdba;
startup migrate;
exit;
EOF
(cd $ORACLE_HOME/rdbms/admin;$ORACLE_HOME/perl/bin/perl catctl.pl -n 4 catupgrd.sql)
sqlplus /nolog<<EOF
conn / as sysdba;
shutdown immediate;
startup;
exit;
EOF
}
# Create network related config files (sqlnet.ora, tnsnames.ora, listener.ora)
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))
)
)
DEDICATED_THROUGH_BROKER_LISTENER=ON
DIAG_ADR_ENABLED = off
" > $ORACLE_HOME/network/admin/listener.ora
# Start LISTENER and run DBCA
lsnrctl start
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
# make some required directories it not exists
mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
mkdir -p $ORACLE_BASE/fast_recovery_area
# Check init-db.tar format
if [ -f /opt/oracle/scripts/setup/init-db.tar ]; then
(cd /opt/oracle/scripts/setup;tar xf init-db.tar)
fi;
# Check init-db.tar.gz format
if [ -f /opt/oracle/scripts/setup/init-db.tar.gz ]; then
(cd /opt/oracle/scripts/setup;tar xfz init-db.tar.gz)
fi;
# Check whether database already exists
if [ -f /opt/oracle/scripts/setup/spfile.bks ]; then
# start process of restore from rman full backup, first spfile
restore_spfile;
# be sure that compatible value is this version in pfile
sed -i "s/^\*\.compatible=.*/*.compatible='19.3.0.0.0'/" $ORACLE_HOME/dbs/init$ORACLE_SID.ora
EXIT_CODE=0;
restore_database || EXIT_CODE=$?
if [ $EXIT_CODE -eq 1 ]; then
upgrade_database;
fi;
# reset password for SYS
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=$ORACLE_PWD ignorecase=n force=y format=12
chown oracle:oinstall $ORACLE_HOME/dbs/orapw$ORACLE_SID
echo "$ORACLE_SID:$ORACLE_HOME:N" >> /etc/oratab
fi;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment