#! /bin/ksh

cd /home/orapfpr

. .profile

export ts=`date +%y%m%d_%H%M%S`

export SPACE_MGMT_HOME=/home/orapfpr/scripts/space_mgmt

export PHYWRT_HOME=$SPACE_MGMT_HOME/config/physical_writes

export PHYWRT_DIFF_HOME=$SPACE_MGMT_HOME/config/physical_write_diffs

export NEXT_EXTENT_HOME=$SPACE_MGMT_HOME/config/next_extent_data

export NNE_HOME=$SPACE_MGMT_HOME/config/no_next_extent

export DIFF_HOME=$SPACE_MGMT_HOME/config/diff_files

export FREE_XTN_HOME=$SPACE_MGMT_HOME/config/free_extent_data

export ALLOC_XTN_HOME=$SPACE_MGMT_HOME/config/alloc_extent_data

export LOGFILE_HOME=$SPACE_MGMT_HOME/log_files

export DBRHome=$SPACE_MGMT_HOME/config/db_read

export CONFIG_HOME=$SPACE_MGMT_HOME/table_files

export HISTORY_HOME=$SPACE_MGMT_HOME/table_history_files

export LOGFILE1=$SPACE_MGMT_HOME/config/table_master_list/table_master_list

export LOGFILE2=$SPACE_MGMT_HOME/config/alloc_extent_data/sorted_extents2

export LOGFILE3=$SPACE_MGMT_HOME/config/free_extent_data/free_extent_data

export LOGFILE4=$SPACE_MGMT_HOME/config/db_read/db_read_errors

export LOGFILE5=$SPACE_MGMT_HOME/config/temp/table_scan_list

export TABLE_CONFIG_FILES_T1=$CONFIG_HOME

export TABLE_CONFIG_FILES_T2=$CONFIG_HOME

export interval=60

export linediff=250

export TESTFILE=$SPACE_MGMT_HOME/check_test

export SCANFILE=$LOGFILE_HOME/table_scan.sql

export HOME=/home/orapfpr/scripts

export DBA3="gs1114@stl.rural.usda.gov"

export DBA2="lm1076@stl.rural.usda.gov"

export DBA1="lb1088@stl.rural.usda.gov"

export LOC1="Mitchell.Clem@Unisys.com"

export PAGER1="3142450893@archwireless.net"

 

touch $SPACE_MGMT_HOME/scripts/recent_changes

rm $SPACE_MGMT_HOME/scripts/recent_changes

 

echo "set linesize 100

set heading off

set pagesize 0

set echo off

set feedback off

select name||';'||to_char(created, 'DD-MON-YY HH24:MI:SS')

from v\$database;

 quit

   " | sqlplus -s "/ as sysdba" >> $LOGFILE4.$ts

 

# Check for Cloning Activity

 

touch $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

rm $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

date >> $SPACE_MGMT_HOME/config/db_read/db_read_errors_history.txt

more $LOGFILE4.$ts  >> $SPACE_MGMT_HOME/config/db_read/db_read_errors_history.txt

 

more $LOGFILE4.$ts | tail -1 | read db_name_and_date

more $LOGFILE4.$ts | tail -1 | cut -f1 -d';' | read db_name

more $LOGFILE4.$ts | tail -1 | cut -f2 -d';' | read db_creation_date

echo $db_name_and_date >> $SPACE_MGMT_HOME/config/db_read/db_name_and_date.txt

 

more $SPACE_MGMT_HOME/config/db_read/db_name_and_date.txt | tail -2 | head -1 | read previous_db_name_and_date

echo $previous_db_name_and_date |  cut -f1 -d';' | read previous_db_name

echo $previous_db_name_and_date |  cut -f2 -d';' | read previous_db_creation_date

 

more $LOGFILE4.$ts | grep -c 'ORA-01034' | read db_availability

more $LOGFILE4.$ts | egrep -c 'ORA-|ERROR|Error|error' | read other_errors_found

 

if [ "$db_availability" -ne 0 ]

then

   date >> $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   #more $LOGFILE4.$ts >> $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   echo 'Space Mgmt Scan: DB '$db_name' is DOWN' >> $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   echo $db_name | read subject_of_email

   mailx -m -s "Database is Down" $DBA3 $DBA2 $DBA1 $LOC1 $PAGER1 < $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   exit

elif [ "$other_errors_found" -gt 0 ]

then

   date >> $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   #more $LOGFILE4.$ts >> $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   echo 'Space Mgmt Scan: Error on Select: Scan Cancelled Until Select Completes' >> $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   echo $db_name | read subject_of_email

   mailx -m -s "$subject_of_email" $DBA3 $DBA2 $DBA1 $LOC1 $PAGER1 < $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   exit

elif [ "$db_name" != "$previous_db_name" ]

then

   date >> $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   #more $LOGFILE4.$ts >> $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   echo 'Space Mgmt Scan: '$db_name' Scanning Resumed after DB Down Condition' >> $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   echo $db_name | read subject_of_email

   mailx -m -s "$subject_of_email" $DBA3 $DBA2 $DBA1 $LOC1 $PAGER1 < $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   exit

elif [ "$db_creation_date" != "$previous_db_creation_date" ]

then

   rm $LOGFILE_HOME/extent_data.*

   rm $SPACE_MGMT_HOME/table_files/table_config_files_T1/*

   rm $SPACE_MGMT_HOME/table_history_files/*

   echo 'Space Mgmt Scan: '$db_name' Recreated or Cloned'$db_creation_date' :Re-scanning All' >> $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

   echo $db_name | read subject_of_email

   mailx -m -s "$subject_of_email" $DBA3 $DBA2 $DBA1 $LOC1 $PAGER1 < $SPACE_MGMT_HOME/config/db_read/db_read_errors.txt

else

echo 'All checks OK' >/dev/null

fi

 

#touch $NNE_HOME/sendfile

#rm $NNE_HOME/sendfile

#let p=1

#touch $NNE_HOME/untables.lst

#ls $NNE_HOME/untables.* | wc -l | read q

#while [ "$p" -le "$q" ]

#do

#ls $NNE_HOME/untables.* | cut -f"$p" -d' ' | read filename

#echo $filename$p | read filename_no

#more $filename_no >> $NNE_HOME/sendfile

#let p=$p+1

#done

#touch $NNE_HOME/sendfile

#more $NNE_HOME/sendfile | wc -l | read table_count

#if [ "$table_count" -gt 0 ]

#then

#mailx -m -s "Urgent! ORA-1653 No-Next-Extent Error Imminent!" $DBA3 < $NNE_HOME/sendfile

#mailx -m -s "Urgent! ORA-1653 No-Next-Extent Error Imminent!" $DBA3 $DBA2 $DBA1 $LOC1 $PAGER1 < $NNE_HOME/sendfile

#fi

 

more $DBRHome/db_name_and_date.txt | wc -l | read lines_in_file

let lines_to_delete=$lines_in_file-100

if [ "$lines_to_delete" -gt 100 ]

then

more $DBRHome/db_name_and_date.txt | sed "1,$lines_to_delete"d > $DBRHome/db_name_and_date.temp

mv $DBRHome/db_name_and_date.temp $DBRHome/db_name_and_date.txt

fi

 

more $DBRHome/db_read_errors_history.txt | wc -l | read lines_in_file

let lines_to_delete=$lines_in_file-100

if [ "$lines_to_delete" -gt 100 ]

then

more $DBRHome/db_read_errors_history.txt | sed "1,$lines_to_delete"d > $DBRHome/db_read_errors_history.temp

mv $DBRHome/db_read_errors_history.temp $DBRHome/db_read_errors_history.txt

fi

 

date '+%y' | read logfile_removal

rm "$LOGFILE4"."$logfile_removal"*

 

echo "set linesize 200

set heading off

set pagesize 0

set echo off

set feedback off

select

FILE_ID||':'||

TABLESPACE_NAME||':'||

BYTES||':'||

BLOCK_ID

from dba_free_space;

 quit

   " | sqlplus -s "/ as sysdba"  >> $LOGFILE3.$ts

 

sort -r $LOGFILE3.$ts > $SPACE_MGMT_HOME/config/free_extent_data/sorted_free_extents.$ts

rm $LOGFILE3.$ts

 

cd $FREE_XTN_HOME

ls $FREE_XTN_HOME/sorted_free_extents.0[3456789]* | wc -l | read file_count

let dc="$file_count-2"

ls $FREE_XTN_HOME/sorted_free_extents.0[3456789]* | head -"$dc" | sed 's/^/rm /' > $SPACE_MGMT_HOME/scripts/d3.sh

chmod 700 $SPACE_MGMT_HOME/scripts/d3.sh

$SPACE_MGMT_HOME/scripts/d3.sh

#echo 'file_count='$file_count

 

# Determine which tablespaces have had change in free space condition

 

# Check to be sure all free_extent files are nonzero in size

# Check to be sure all free_extent_files are not too great a difference in size

 

wc -l $FREE_XTN_HOME/sorted_free_extents.* | cut -f1 -d' ' | head -1 | read previous_file_lines

#echo 'previus_file_lines='$previous_file_lines

wc -l $FREE_XTN_HOME/sorted_free_extents.* | cut -f1 -d' ' | head -2 | tail -1 | read current_file_lines

wc -l $FREE_XTN_HOME/sorted_free_extents.* | cut -f2 -d' ' | head -2 | tail -1 | read current_extent_file_name

#echo 'current_file_lines='$current_file_lines

let delta1="$previous_file_lines"-"$current_file_lines"

#echo 'delta1='$delta1

if [ "$delta1" -lt 0 ]

then

let delta1=0-"$delta1"

#echo 'delta1='$delta1

fi

if [ "$current_file_lines" -eq 0 ]

then

#mailx -m -s "Zero-byte Free Extent File Detected - Scan Aborted" $DBA3

#ls -l  "$SPACE_MGMT_HOME"/config/free_extent_data/"$current_extent_file_name"

#rm "$SPACE_MGMT_HOME"/config/free_extent_data/"$current_extent_file_name"

#echo "file lines was zero"

exit

fi

if [ "$delta1" -gt "$linediff" ]

then

#echo 'delta1 was greater than '$linediff

#mailx -m -s "Large Free Extent File Difference Detected - DBA Verify Status" $DBA3

exit

fi

 

#echo 'Continue on to compute differences file...'

 

ls -l $SPACE_MGMT_HOME/config/free_extent_data/sorted_free_extents.* | wc -l | read free_xts_baseline

#echo 'free_xts_baseline='$free_xts_baseline

if [ "$free_xts_baseline" -gt 1 ]

then

   ls "$SPACE_MGMT_HOME"/config/free_extent_data/sorted_free_extents.* | tail -2 | head -1 | read previous_free_xtn_scan

   #echo $previous_free_xtn_scan

   cd "$SPACE_MGMT_HOME"/config/free_extent_data

   ls "$SPACE_MGMT_HOME"/config/free_extent_data/sorted_free_extents."$ts" | tail -1 | read current_free_xtn_scan

   #echo $current_free_xtn_scan

   diff "$previous_free_xtn_scan" "$current_free_xtn_scan" > "$DIFF_HOME"/f_xt_dif."$ts"

   wc -l "$DIFF_HOME"/f_xt_dif."$ts" | cut -f1 -d' ' | read free_xtn_diffs_found

#echo 'free_xtn_diffs_found='$free_xtn_diffs_found

   if [ $free_xtn_diffs_found -gt 0 ]

   then

      more "$DIFF_HOME"/f_xt_dif."$ts" | grep ':' | cut -f2 -d':' | sort -ur > "$LOGFILE_HOME"/ts_list

      #mailx -m -s "free space changed" "$DBA3"  < "$LOGFILE_HOME"/ts_list

   else

      exit >/dev/null

   fi

fi

 

echo "set linesize 200

set heading off

set pagesize 0

set echo off

set feedback off

select a.file#||':'||

b.tablespace_name||':'||

a.phywrts||':'||

a.phyblkwrt

from v\$filestat a, dba_data_files b

where a.file# = b.file_id

order by a.phyblkwrt;

quit

   " | sqlplus -s "/ as sysdba"  >> $PHYWRT_HOME/physical_write_data.$ts

 

echo "set linesize 200

set heading off

set pagesize 0

set echo off

set feedback off

select

OWNER||'.'||

SEGMENT_NAME||':'||

TABLESPACE_NAME||':'||

NEXT_EXTENT

from dba_segments;

 quit

    " | sqlplus -s "/ as sysdba"  >>  $NEXT_EXTENT_HOME/next_extents.$ts

 

echo "set linesize 200

set heading off

set pagesize 0

set echo off

set feedback off

select

EXTENT_ID||':'||

OWNER||'.'||

SEGMENT_NAME||':'||

TABLESPACE_NAME||':'||

BYTES||':'||

FILE_ID||':'||

BLOCK_ID

from dba_extents;

 quit

  " | sqlplus -s "/ as sysdba"  >> "$LOGFILE2"."$ts"

 

cd $ALLOC_XTN_HOME

ls $ALLOC_XTN_HOME/sorted_extents2."$logfile_removal"* | wc -l | read file_count

let dc="$file_count-1"

ls $ALLOC_XTN_HOME/sorted_extents2."$logfile_removal"* | head -"$dc" | sed 's/^/rm /' > $SPACE_MGMT_HOME/scripts/d2.sh

chmod 700 $SPACE_MGMT_HOME/scripts/d2.sh

$SPACE_MGMT_HOME/scripts/d2.sh

 

touch $SPACE_MGMT_HOME/scripts/d2.sh

rm $SPACE_MGMT_HOME/scripts/d2.sh

touch $SPACE_MGMT_HOME/scripts/d3.sh

rm $SPACE_MGMT_HOME/scripts/d3.sh

 

#head -2 $SPACE_MGMT_HOME/scripts/version_table | tail -1 | read HIST_MGR

#export HIST_MGR

#echo "$HIST_MGR"

#"$HIST_MGR" "$ts"

$SPACE_MGMT_HOME/scripts/history_mgr_v4.sh $ts

exit > /dev/null