#
# Version 1 20191021
# Manual
# The purpose of this script is to automaticall manage tablespaces without human intervention
# Version 1 capabilites
# Autonomously manage non TEMP non UNDO tablespaces
# 1 parameter Tablespace Threshold : Define at utilzation % action is taken
# 2 parameter Target Utilization : Define target utilizaion % as safe
# 3 parameter Mount Point utilization where warning to increase storage is mailed out
# 4 parameter Mount Point utlization where autonomous script will not add space till OS utilization is reduced by adding storage
# 5 parameter BTS support Email
# Parameters to be configured
# CFG_NOTIFICATION_EMAIL Emails to notify. ( Emails are case sensitive )
# CFG_MAX_DB_FILE_SIZE_KB=16000000
# CFG_LOG_DIR=$HOME/dba/temp
# CFG_LOG_FILE=autonomous.log
# CFG_LOG_FILE_DAILY=autonomous_daily.log
#
#
#!/usr/bin/ksh
#
# Autonomous Tablespace Management
#
# Function Main
# Read /etc/oratab
# Get DB SID
# Get HOME
# Get DB Version
# Get status Y databases
#
HOSTNAME=`hostname`
DATE_HH=`date +"%H"`
DATE_MM=`date +"%M"`
#
# THRESHOLD Define Usage % before auto tablespace management kicks in ( 84 b4 aleart kicks in )
# UTIL_TARGET Defines what is the Prefered Health utilization ( 80)
#
clear
if [ $# -lt 5 ] ; then
echo " Configure CFG_* PARAMETER B4 1st RUN "
echo " This script accepts 5 parameters and optionally additional 2 emails"
echo " Calulations are ALL in KB where applicable "
echo " 1) Treshold in % Tablespace Utilization trigger point"
echo " 2) Target_utilization in % Tablespace mgt to bring utiliation to target"
echo " 3) OS used threshold which will trigger alert to increase storage "
echo " 4) OS used limit which prevents auto extend "
echo " 5) EMAIL GROUP to notify of activities by script "
echo " Usage Example : AutoTSMgt.sh 92 85 85 95 "
exit 1
fi
THRESHOLD=`echo $1`
UTIL_TARGET=`echo $2`
#16G =16000000 KB
CFG_MAX_DB_FILE_SIZE_KB=16000000
CFG_LOG_DIR=$HOME/dba/temp
CFG_LOG_FILE=autonomous.log
CFG_LOG_FILE_DAILY=autonomous_daily.log
CFG_NOTIFICATION_EMAIL_1=wow@163.com
CFG_NOTIFICATION_EMAIL_3=`echo $6`
CFG_NOTIFICATION_EMAIL_4=`echo $7`
#
VAR_OS_USED_SPACE_THRESHOLD=`echo $3`
VAR_OS_USED_SPACE_LIMIT=`echo $4`
CFG_NOTIFICATION_EMAIL_2=`echo $5`
VAR_OS_TYPE=`uname | tr "[:upper:]" "[:lower:]"`
echo $VAR_OS_TYPE
#
#Checking for SQL errors
#
CheckSQL()
{
cat /tmp/error.log | grep ORA
if [ $? -eq 0 ]; then
VAR_ERROR_MESSAGE=`cat /tmp/error.log | grep ORA `
if [ "$VAR_ERROR_MESSAGE" == "ORA-01034: ORACLE not available" ]; then
echo $VAR_ERROR_MESSAGE
LogMessage "$VAR_ERROR_MESSAGE "
echo "Skipping database $ORACLE_SID, database should be up based on oratab entry. Please investigate"
LogMessage "Skipping database $ORACLE_SID, database should be up based on oratab entry. Please investigate"
FLAG_SKIPDB=true
else
LogMessage "$VAR_ERROR_MESSAGE "
LogMessage "Exiting Autonomous Management please resolve above error"
echo "$VAR_ERROR_MESSAGE "
echo "Exiting Autonomous Management please resolve above error"
cat /dev/null > /tmp/error.log
MailOut
echo $VAR_ERROR_MESSAGE
exit 1
fi
fi
}
DBModeCheck()
{
db_mode=`sqlplus -s "/ as sysdba" <<EOF
set heading off feedback off verify off
select open_mode from v\\$database;
exit
EOF`
echo "$ORACLE_SID is $db_mode"
if db_mode='READ WRITE'; then
return 0
else
return 1
fi
}
#
#Get block size of db
#
GetDbBlockSize()
{
DB_BLOCK_SIZE=`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
whenever sqlerror exit sql.sqlcode
set linesize 200
set pagesize 0
set feedback off
set trimspool on
select value from v\\$parameter where NAME='db_block_size';
exit;
!`
CheckSQL
#LogMessage " Database block size is $DB_BLOCK_SIZE bytes"
}
#
# Mail Function
#
MailOut()
{
#VAR_MESSAGE=$1
#echo this is the Message to be mailed "$VAR_MESSAGE"
VAR_MAILX=`which mailx`
echo $VAR_MAILX
LogMessage "Email notification sent"
echo "Email notification sent"
#echo `$VAR_MAILX -s "AUTO TABLESPACE MANAGEMENT" $CFG_NOTIFICATION_EMAIL < $CFG_LOG_DIR/$CFG_LOG_FILE_DAILY`
echo `$VAR_MAILX -s "Autonomous Tablespace Management" $CFG_NOTIFICATION_EMAIL_1 $CFG_NOTIFICATION_EMAIL_2 $CFG_NOTIFICATION_EMAIL_3 $CFG_NOTIFICATION_EMAIL_4 < $CFG_LOG_DIR/$CFG_LOG_FILE_DAILY`
#$SCRIPT_DIR/mailx.sh "Alert: $HOSTNAME ${ORACLE_SID} Error in autonomous.log" $CFG_LOG_DIR/$CFG_LOG_FILE_DAILY
#cat $CFG_LOG_DIR/$CFG_LOG_FILE_DAILY >> $CFG_LOG_DIR/$CFG_LOG_FILE
cat /dev/null > $CFG_LOG_DIR/$CFG_LOG_FILE_DAILY
}
#
#LOG WRITER FUNCTION
#
LogMessage()
{
VAR_MESSAGE=$1
echo `date "+%D +%T"` $VAR_MESSAGE >> $CFG_LOG_DIR/$CFG_LOG_FILE_DAILY
echo `date "+%D +%T"` $VAR_MESSAGE >> $CFG_LOG_DIR/$CFG_LOG_FILE
}
#
#ADD RESIZE FUNTION
#
AddResize()
{
VAR_LIST_OF_TS=`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200
set pagesize 0
set feedback off
set trimspool on
select tablespace_name from dba_tablespace_usage_metrics where used_percent >= $THRESHOLD and tablespace_name not like ('TEMP%') and tablespace_name not like('UNDO%');
exit;
!`
CheckSQL
for TABLESPACE in $VAR_LIST_OF_TS ; do
#echo "CRURRENTLY WORKING ON TABLESPACE $TABLESPACE "
VAR_KBYTES_TO_ADD=`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200
set pagesize 0
set feedback off
set trimspool on
select round(round(round(a.used_percent,0)/$UTIL_TARGET*a.tablespace_size*b.block_size/1024,0)-floor(a.tablespace_size*b.block_size/1024),0) from dba_tablespace_usage_metrics a,dba_tablespaces b where a.tablespace_name=b.tablespace_name and a.tablespace_name='$TABLESPACE';
exit;
!`
CheckSQL
echo ""
LogMessage " $VAR_KBYTES_TO_ADD KB needs to be added into tablespace $TABLESPACE"
echo " $VAR_KBYTES_TO_ADD KB needs to be added into tablespace $TABLESPACE"
VAR_DATA_FILE_LIST=`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200
set pagesize 0
set feedback off
set trimspool on
select file_name from dba_data_files where tablespace_name='$TABLESPACE' and bytes/1024 < $CFG_MAX_DB_FILE_SIZE_KB order by file_name;
exit;
!`
CheckSQL
#### LOOP THROUGH ALL FILES IN TABLESAPCE
#### GET SIZE OF FILE
#####echo $VAR_DATA_FILE_LIST
for FILENAME in $VAR_DATA_FILE_LIST ; do
#echo $VAR_KBYTES_TO_ADD
#echo $FILENAME
#echo $VAR_DATA_FILE_LIST
VAR_FILE_SIZE_KB=`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200
set pagesize 0
set feedback off
set trimspool on
select bytes/1024 from dba_data_files where file_name='$FILENAME';
exit;
!`
#echo CURRENT_FILE SIZE is $VAR_FILE_SIZE_KB
#echo $VAR_KBYTES_TO_ADD KB TO BE ADDED
let VAR_FINAL_SINGLE_FILE_SIZE="$VAR_FILE_SIZE_KB + $VAR_KBYTES_TO_ADD"
#echo "$VAR_FINAL_SINGLE_FILE_SIZE equal $VAR_FILE_SIZE_KB plus $VAR_KBYTES_TO_ADD"
#echo ""
### IF amout ot add is eq 0 or less that 0 no conenction to db and break out of loop
if [ $VAR_KBYTES_TO_ADD -gt 0 ]; then
if [ $VAR_FINAL_SINGLE_FILE_SIZE -lt $CFG_MAX_DB_FILE_SIZE_KB ]; then
echo SIZE OF VAR_FINAL_SINGLE_FILE_SIZE $VAR_FINAL_SINGLE_FILE_SIZE IS LESS THAN CFG_MAX_DB_FILE_SIZE_KB $CFG_MAX_DB_FILE_SIZE_KB
#echo "RESIZING DATAFIE TO $VAR_FINAL_SINGLE_FILE_SIZE"
#LogMessage "RESIZING DATAFIE TO $VAR_FINAL_SINGLE_FILE_SIZE"
#LogMessage "RESIZING DATAFIE TO $VAR_FINAL_SINGLE_FILE_SIZE"
#echo ""
`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200 pagesize 0 feedback off trimspool on
define OS_IN_NUM=$VAR_FINAL_SINGLE_FILE_SIZE
column OS_OUT_NUM new_value ROUNDUP_IN_NUM
SELECT CEIL(&OS_IN_NUM / 1024) as OS_OUT_NUM FROM DUAL;
alter database datafile '$FILENAME' resize &ROUNDUP_IN_NUM M;
exit;
!`
CheckSQL
LogMessage " $ORACLE_SID $TABLESPACE $FILENAME resized to $VAR_FINAL_SINGLE_FILE_SIZE K"
echo " $ORACLE_SID $TABLESPACE $FILENAME resized to $VAR_FINAL_SINGLE_FILE_SIZE K"
VAR_KBYTES_TO_ADD=0
elif [ $VAR_FINAL_SINGLE_FILE_SIZE -gt $CFG_MAX_DB_FILE_SIZE_KB ]; then
echo SIZE TO ADD EXCEEDS VAR MAX DB FILE SIZE KB
echo RESIZIZING $FILE TO $CFG_MAX_DB_FILE_SIZE_KB KB
`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200 pagesize 0 feedback off trimspool on
define OS_IN_NUM=$CFG_MAX_DB_FILE_SIZE_KB
column OS_OUT_NUM new_value ROUNDUP_IN_NUM
SELECT CEIL(&OS_IN_NUM / 1024) as OS_OUT_NUM FROM DUAL;
alter database datafile '$FILENAME' resize &ROUNDUP_IN_NUM M;
exit;
!`
CheckSQL
LogMessage " $ORACLE_SID $TABLESPACE $FILENAME resized to $CFG_MAX_DB_FILE_SIZE_KB K"
echo " $ORACLE_SID $TABLESPACE $FILENAME resized to $CFG_MAX_DB_FILE_SIZE_KB K"
let VAR_KBYTES_TO_ADD="$VAR_KBYTES_TO_ADD - (CFG_MAX_DB_FILE_SIZE_KB - $VAR_FILE_SIZE_KB)"
echo remaining KBYTES TO ADD $VAR_KBYTES_TO_ADD
fi
elif [ $VAR_FINAL_SINGLE_FILE_SIZE -le 0 ]; then
break
fi
#let CTR_FILES=CTR_FILES+1
#TABLESPACE=$TABLESPACE
done
###BBBB
CTR_FILES=`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200 pagesize 0 feedback off trim on
select count(*) from dba_data_files where tablespace_name='$TABLESPACE';
exit;
!`
CheckSQL
#echo TOTAL NUMBER OF FILES $CTR_FILES
#### ADD DATAFILE TO TABLESPACE if conditions met.
TABLESPACE=$(echo $TABLESPACE|tr "[:upper:]" "[:lower:]")
echo $TABLESPACE
if [[ $VAR_KBYTES_TO_ADD -gt 0 && $VAR_KBYTES_TO_ADD -lt $CFG_MAX_DB_FILE_SIZE_KB ]]; then
echo ADDING DATAFILE OF SIZE $VAR_KBYTES_TO_ADD
let CTR_FILES=CTR_FILES+1
VAR_NEW_DATA_FILENAME=$DATABASE_MOUNT/$ORACLE_SID/dbf/$TABLESPACE"_f"$CTR_FILES.dbf
echo $VAR_NEW_DATA_FILENAME
`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200 pagesize 0 feedback off trimspool on
alter tablespace $TABLESPACE add datafile '$VAR_NEW_DATA_FILENAME' SIZE $VAR_KBYTES_TO_ADD K;
exit;
!`
CheckSQL
LogMessage " $ORACLE_SID $TABLESPACE $FILENAME of size $VAR_KBYTES_TO_ADD K added"
echo " $ORACLE_SID $TABLESPACE $FILENAME of size $VAR_KBYTES_TO_ADD K added"
elif [[ $VAR_KBYTES_TO_ADD -gt 0 && $VAR_KBYTES_TO_ADD -gt $CFG_MAX_DB_FILE_SIZE_KB ]]; then
echo ADDING 1 FILE OF MAX SIZE
let CTR_FILES=CTR_FILES+1
VAR_NEW_DATA_FILENAME=$DATABASE_MOUNT/$ORACLE_SID/dbf/$TABLESPACE"_f"$CTR_FILES.dbf
echo $VAR_NEW_DATA_FILENAME
`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200 pagesize 0 feedback off trimspool on
alter tablespace $TABLESPACE add datafile '$VAR_NEW_DATA_FILENAME' SIZE $CFG_MAX_DB_FILE_SIZE_KB K;
exit;
!`
CheckSQL
LogMessage " $ORACLE_SID $TABLESPACE $FILENAME of size $CFG_MAX_DB_FILE_SIZE_KB K added"
echo " $ORACLE_SID $TABLESPACE $FILENAME of size $CFG_MAX_DB_FILE_SIZE_KB K added"
fi
done
}
#
#PRE CHECK FUUNCTION for Normal Tablesapces
#High level calculation space required
#Check OS Free Space
#Check 1 mount point for data files
#Check OS Threshild limits
#Call addresize function if prereq met
#
PreCheckNTS()
{
CTR_NO_OF_TS_UTIL_GT_THRESHOLD=`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
whenever sqlerror exit sql.sqlcode
set linesize 200
set pagesize 0
set feedback off
set trimspool on
select count(*) from dba_tablespace_usage_metrics where used_percent > $THRESHOLD;
exit;
!`
CheckSQL
LogMessage " $CTR_NO_OF_TS_UTIL_GT_THRESHOLD tablespace(s) above $THRESHOLD %"
echo " $CTR_NO_OF_TS_UTIL_GT_THRESHOLD tablespace(s) above $THRESHOLD %"
if [ $CTR_NO_OF_TS_UTIL_GT_THRESHOLD -ge 1 ]; then
#echo "Perform Tablespace resize activity"
#echo "Calculate total storage to add"
SPACE_REQUIRED_AT_OS=`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set pagesize 0 feedback off trim on
col AAA format 999999999999
select sum((used_percent/$UTIL_TARGET)*tablespace_size*$DB_BLOCK_SIZE/1024)-sum(tablespace_size*$DB_BLOCK_SIZE/1024) as AAA from dba_tablespace_usage_metrics where used_percent >= $THRESHOLD;
exit;
!`
#echo "Space requried at OS is $SPACE_REQUIRED_AT_OS K"
#echo "ENSURE THAT THERE IS ONLY 1 MOUNTPOINT FOR DATAFILES ELSE EXIT"
CTR_NO_DATAFILE_MOUNT_POINT=`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200
set pagesize 0
set feedback off
set trimspool on
select count (distinct substr(file_name, 0, instr(file_name,'/',2)-1)) from dba_data_files;
exit;
!`
if [ $CTR_NO_DATAFILE_MOUNT_POINT -gt 1 ]; then
LogMessage "Error : THERE ARE MORE THAN 1 DATAFILE MOUNT POINTS"
echo "Error : THERE ARE MORE THAN 1 DATAFILE MOUNT POINTS"
LogMessage "Error : THERE SHOULD ONLY BE 1 EXITING"
echo "Error : THERE SHOULD ONLY BE 1 EXITING"
MailOut
echo Error : THERE ARE MORE THAN 1 DATAFILE MOUNT POINTS. PLEASE CONTACT DBA TEAM
exit 1
else
#LogMessage "There is one mount point for datafiles"
DATABASE_MOUNT=`$ORACLE_HOME/bin/sqlplus -S /nolog << ! | tee /tmp/error.log
connect / as sysdba
set linesize 200
set pagesize 0
set feedback off
set trimspool on
select distinct substr(file_name, 0, instr(file_name,'/',2)-1) from dba_data_files;
exit;
!`
case $VAR_OS_TYPE in
solaris|sunos)
#LogMessage "The operating system is linux or solaris"
OS_FREE_SPACE=`df -k $DATABASE_MOUNT | grep -v Mounted | awk '{print $4}'`
OS_USED_SPACE=`df -k $DATABASE_MOUNT | grep -v Mounted | awk '{print $3}'`
let OS_TOTAL_SPACE="$OS_USED_SPACE + $OS_FREE_SPACE"
echo $OS_TOTAL_SPACE
;;
linux)
#LogMessage "The operating system is linux or solaris"
OS_FREE_SPACE=`df -kP $DATABASE_MOUNT | grep -v Mounted | awk '{print $4}'`
OS_USED_SPACE=`df -kP $DATABASE_MOUNT | grep -v Mounted | awk '{print $3}'`
let OS_TOTAL_SPACE="$OS_USED_SPACE + $OS_FREE_SPACE"
echo $OS_TOTAL_SPACE
;;
hpux)
#LogMessage "The operating system is HPUX"
LogMessage "The operating system $VAR_OS_TYPE is not supported exiting"
echo "The operating system $VAR_OS_TYPE is not supported exiting"
MailOut
echo "Error The operating system $VAR_OS_TYPE is not supported exiting"
exit 1
;;
aix)
#LogMessage "The operating system is AIX "
OS_FREE_SPACE=`df -k $DATABASE_MOUNT | grep -v Mounted | awk '{print $3}'`
OS_TOTAL_SPACE=`df -k $DATABASE_MOUNT | grep -v Mounted | awk '{print $2}'`
;;
*)
LogMessage "The operating system $VAR_OS_TYPE is not supported exiting"
echo "The operating system $VAR_OS_TYPE is not supported exiting"
MailOut
echo "Error The operating system $VAR_OS_TYPE is not supported exiting"
exit 1
;;
esac
#OS_FREE_SPACE=`df -k $DATABASE_MOUNT | grep -v Mounted | awk '{print $3}'`
#OS_TOTAL_SPACE=`df -k $DATABASE_MOUNT | grep -v Mounted | awk '{print $2}'`
LogMessage "There is one mount point for datafiles $DATABASE_MOUNT"
LogMessage "Mount point free KB : $OS_FREE_SPACE "
LogMessage "Mount point total KB : $OS_TOTAL_SPACE "
LogMessage "Space required KB : $SPACE_REQUIRED_AT_OS "
echo "There is one mount point for datafiles $DATABASE_MOUNT"
echo "Mount point free KB : $OS_FREE_SPACE "
echo "Mount point total KB : $OS_TOTAL_SPACE "
echo "Space required KB : $SPACE_REQUIRED_AT_OS "
EST_PERCENT_OS_USED_AFTER_ADD=$((100- ((($OS_FREE_SPACE*100) - ($SPACE_REQUIRED_AT_OS*100)) / $OS_TOTAL_SPACE*100/100) ))
LogMessage " Estimated OS used space after adding approx $EST_PERCENT_OS_USED_AFTER_ADD%"
echo " Estimated OS used space after adding approx $EST_PERCENT_OS_USED_AFTER_ADD%"
if [ $EST_PERCENT_OS_USED_AFTER_ADD -gt $VAR_OS_USED_SPACE_LIMIT ]; then
LogMessage "Error : Estimated used space $EST_PERCENT_OS_USED_AFTER_ADD% is higher than OS used space limit $VAR_OS_USED_SPACE_LIMIT %"
LogMessage "Error : $ORACLE_SID INSUFFICIENT SPACE in $DATABASE_MOUNT TO SAFELY ADD OR RESIZE TABLESPACE."
LogMessage "Error : Please add more storage [ BTS ACTION ] "
LogMessage "Error : Autonomous Tablespace Managment exited, please resolve above limitation"
echo "Error : $ORACLE_SID INSUFFICIENT SPACE in $DATABASE_MOUNT TO SAFELY ADD OR RESIZE TABLESPACE."
echo "Error : Please add more storage [ BTS ACTION ]"
echo "Error : Autonomous Tablespace Managment exited, please resolve above limitation"
MailOut
echo "Error : $ORACLE_SID INSUFFICIENT SPACE in $DATABASE_MOUNT TO SAFELY ADD OR RESIZE TABLESPACE."
exit 1
elif [ $EST_PERCENT_OS_USED_AFTER_ADD -gt $VAR_OS_USED_SPACE_THRESHOLD ]; then
LogMessage "Utilization above defined os used space threshold , please plan to add storage. [ BTS ACTION ]"
LogMessage "Proceeding to Add Or Resize Tablespace"
echo "Utilization above defined os used space threshold , please plan to add storage. [ BTS ACTION ]"
echo "Proceeding to Add Or Resize Tablespace"
AddResize
elif [ $EST_PERCENT_OS_USED_AFTER_ADD -le $VAR_OS_USED_SPACE_THRESHOLD ]; then
LogMessage "Proceeding to add or resize tablespace. "
LogMessage "Estimated used $EST_PERCENT_OS_FREE_AFTER % less than threshold of $VAR_OS_USED_SPACE_THRESHOLD %"
echo "Proceeding to add or resize tablespace. "
echo "Estimated used $EST_PERCENT_OS_FREE_AFTER % less than threshold of $VAR_OS_USED_SPACE_THRESHOLD %"
AddResize
fi
fi
elif [ $CTR_NO_OF_TS_UTIL_GT_THRESHOLD -eq 0 ]; then
LogMessage "Tablespace Utilization Healthy"
echo "Tablespace Utilization Healthy"
fi
}
#
#Temp Tablespace Precheck
#
#PreCheckTTS()
#
#UNDO Tablespace Precheck
#
#PreCheckUTS()
#
#
#LOOP for all database in oratabl : Y
#Call PreCheckNTS function for each database
#
LogMessage "Autonomous Tablespace Management started "
LogMessage " Operating system $VAR_OS_TYPE"
LogMessage " TS THRESHOLD $THRESHOLD %"
LogMessage " TS Util Target $UTIL_TARGET %"
LogMessage " OS USED THRESHOLD $VAR_OS_USED_SPACE_THRESHOLD %"
LogMessage " OS USED LIMIT $VAR_OS_USED_SPACE_LIMIT %"
LogMessage " MAX ind file sz $CFG_MAX_DB_FILE_SIZE_KB KB"
LogMessage " Contact $CFG_NOTIFICATION_EMAIL_1 $CFG_NOTIFICATION_EMAIL_2 $CFG_NOTIFICATION_EMAIL_3 $CFG_NOTIFICATION_EMAIL_4"
echo "Autonomous Tablespace Management started "
echo " Operating system $VAR_OS_TYPE"
echo " TS THRESHOLD $THRESHOLD %"
echo " TS Util Target $UTIL_TARGET %"
echo " OS USED THRESHOLD $VAR_OS_USED_SPACE_THRESHOLD %"
echo " OS USED LIMIT $VAR_OS_USED_SPACE_LIMIT %"
echo " MAX ind file sz $CFG_MAX_DB_FILE_SIZE_KB KB"
echo " Contact $CFG_NOTIFICATION_EMAIL_1 $CFG_NOTIFICATION_EMAIL_2 $CFG_NOTIFICATION_EMAIL_3 $CFG_NOTIFICATION_EMAIL_4"
if [ $VAR_OS_TYPE = 'solaris' ]; then
VAR_ORATAB=/var/opt/oracle/oratab
LogMessage "$VAR_ORATAB used"
elif [ $VAR_OS_TYPE = 'sunos' ]; then
VAR_ORATAB=/var/opt/oracle/oratab
LogMessage "$VAR_ORATAB used"
else
VAR_ORATAB=/etc/oratab
LogMessage "$VAR_ORATAB used"
fi
cat $VAR_ORATAB | sort | while read ORATAB_LINE
do
case $ORATAB_LINE in
\#*) ;; # comment-line in oratab
"") ;;
*) if [ `echo $ORATAB_LINE | cut -f 3 -d :` = 'Y' ]
then
#echo FUNCTION MAIN, ORATAB_LINE value is $ORATAB_LINE
ORACLE_SID=`echo $ORATAB_LINE | cut -f 1 -d :`
export ORACLE_SID
ORACLE_HOME=`echo $ORATAB_LINE | cut -f 2 -d :`
export ORACLE_HOME
LogMessage " Managing Database $ORACLE_SID"
echo " Managing Database $ORACLE_SID"
#GetSQLError # test function
FLAG_SKIPDB=false
GetDbBlockSize
if [ $FLAG_SKIPDB == "true" ]; then
FLAG_SKIPDB=false
else
if DBModeCheck; then
PreCheckNTS
else
echo "$ORACLE_SID is a Standby Database thus skipping it"
fi
fi
#PreCheckTTS
#PreCheckUTS
fi
;;
esac
done
LogMessage "Autonomous Tablespace Management Ended"
#cat $CFG_LOG_DIR/$CFG_LOG_FILE_DAILY | grep added resized
if grep added $CFG_LOG_DIR/$CFG_LOG_FILE_DAILY; then
MailOut
else
cat /dev/null > $CFG_LOG_DIR/$CFG_LOG_FILE_DAILY
fi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现