DBA Script
#!/bin/bash
# Purpose: Rebuild select set of indexes.
# Version: 2019.20.27
# Dependencies: inc_system.sh,inc_sqlplus.sh
######################################
# Preamble: 2018.10.01 #
######################################
set -a; DIR_SCRIPTS="/u01/app/scripts"; source $DIR_SCRIPTS/inc_system.sh
sFullName=$(basename "$0"); me=${sFullName%.*}
sSLog="$DIR_LOGS/$me.sess.log"; sHLog="$DIR_LOGS/$me.hist.log"; > $sSLog
if [[ $MAINT_WINDOW -eq 1 ]]; then printf "Maintenance Window Detected - Exiting\n"; exit; fi
# User Vars
usrOraSid="dnasolo"; # ORACLE_SID
usrSchema="OSIBANK"; # Schema of indexes to rebuild
usrWhere="index_name LIKE 'WH_%'"; # WHERE string to use.
usrIdxParallel=24; # PARALLEL value to use on index rebuilds.
usrMode=1; # 0=Show cmds (but dont run them). 1=Run the cmds.
######################################
# Init Script Actions\Functions\Vars #
######################################
source $DIR_LIB/inc_sqlplus.sh
export ORACLE_SID="$usrOraSid";
######################################
# Start #
######################################
clear; log "$sSLog" "$sFullName Started"; linesep
SysVars_show
printf "ORACLE_SID: $ORACLE_SID\n"
printf "usrSchema: $usrSchema\n"
printf "usrIdxParallel: $usrIdxParallel\n"
printf "usrMode: $usrMode\n"
linesep "="
sleep 3
# Create Cmd to Rebuild Indexes
unset IFS
sSQL="SELECT trim(tablespace_name) || ',' || trim(index_name) FROM dba_indexes "
sSQL="$sSQL WHERE $usrWhere "
sSQL="$sSQL AND owner='$usrSchema' "
sSQL="$sSQL AND index_type='NORMAL' "
sSQL="$sSQL AND index_name NOT LIKE 'SYS%' "
sSQL="$sSQL ORDER BY index_name;"
###echo $sSQL; pause
aINDEXES=$(xsql "$sSQL");
# Processing Loop
for ts_idx in ${aINDEXES[}; do
IFS=, read -a aTS_IDX <<< "$ts_idx"
sTablespace=${aTS_IDX[0]}
sIndex=${aTS_IDX[1]}
sSQLIdx="ALTER INDEX $usrSchema.$sIndex REBUILD PARALLEL $usrIdxParallel ONLINE NOLOGGING TABLESPACE $sTablespace;"
log "$sSLog" "$sSQLIdx"
if $usrMode -eq 1 ?; then
CMD=$(xsql "$sSQLIdx");
fi
# Reset PARALLEL
sSQLResetPar="ALTER INDEX $usrSchema.$sIndex PARALLEL 1;"
log "$sSLog" "$sSQLResetPar"
if $usrMode -eq 1 ?; then
CMD=$(xsql "$sSQLResetPar");
fi
done
- End #
log "$sSLog" "$sFullName Ended [Elapse Time: $(elapse)]"; echo $(linesep "=") >> $sHLog; cat $sSLog >> $sHLog; tail -32768 $sHLog > $sHLog.tmp; mv $sHLog.tmp $sHLog @]