#!/bin/bash
#### 脚本说明 ####
#scp_dir参数指定脚本执行路径,只在当前脚本中有效,如替换路径需要更新get_pdbs.sql、temp.sql和tab.sql中输出txt的路径
# get_pdbs.sql 获取pdb清单含PDB$SEED
# temp.sql 在cdb模式下获取temp表空间使用情况输出至oracle_usage.sql
# tab.sql 在各pdb中获取业务表空间和undo表空间使用情况输出至oracle_usage.sql
#告警阈值可以修改 part3中threshould参数
#本脚本运行需要检查scp_dir路径下具有get_pdbs.sql、temp.sql和tab.sql
#本脚本最终结果将返回oracle_usage.txt附件至告警邮件中
#################
scp_dir='/home/oracle/scripts/tablespace_mon'
arch_dir='/home/oracle/scripts/tablespace_mon/tabspace_mon_arch'
############### part1: 获取当前实例所有pdb并将列表输出至pdblist.txt #################
#echo "pdblist.txt will be replaced if already exsist."
source /etc/profile
source ~/.bash_profile
sqlplus / as sysdba << EOF
@$scp_dir/get_pdbs.sql
exit;
EOF
################ part2: 获取各pdb表空间的使用情况并输出oracle_usage.txt ###############
#oracle_usage是否存在,是则清空,否则创建
if [ -f $scp_dir/oracle_usage.txt ]; then
#echo "oracle_usage.txt is already exsists."
echo " ">$scp_dir/oracle_usage.txt
else
#echo "oracle_usage.txt will be created."
touch $scp_dir/oracle_usage.txt
fi
IFS=$'\n'
source /etc/profile
source ~/.bash_profile
sqlplus / as sysdba << EOF
@$scp_dir/temp.sql
exit;
EOF
#是否启用pdb模式,是则循环,否则直接查询
pdb_list=($(awk -v scp_dir=$scp_dir '{print $1}' $scp_dir/pdblist.txt))
if [ ${#pdb_list[*]}==0 ]; then
sqlplus / as sysdba << EOF
@$scp_dir/tab.sql
exit;
EOF
else
for pdb in `cat $scp_dir/pdblist.txt`;
do
#登录db,alter session到当前pdb
source /etc/profile
source ~/.bash_profile
sqlplus / as sysdba << EOF
oracle 19c 表空间监控 含temp及pdb区分
最新推荐文章于 2024-05-16 15:33:38 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)