#!/bin/sh
. $(dirname $0)/public_s.sh
cd;
#获取log文件名,必须调用getlogname函数;
getlogname $0;
log="$pub_result";
touch $log;
#自动扩展百分比,可为小数
limitpert=95; #阀值百分比
autopert=10; #自动增加原容量的百分比
[ "$debug" = "Y" ] && log=/dev/null;
echo "">>"$log";
echo "$dt">>"$log";
#获取表空间占用大于指定百分比的表空间信息
sql="
SELECT a.TBSPACE,a.OWNER,a.OWNERTYPE,a.DATATYPE,a1.TBSP_TYPE
,(b.TBSP_USED_PAGES/(b.TBSP_USED_PAGES+b.TBSP_FREE_PAGES+b.TBSP_PENDING_FREE_PAGES+0.000000001)*100.0000) USEDBL
,a.CREATE_TIME,a.TBSPACEID,a.TBSPACETYPE
,round((b.TBSP_TOTAL_PAGES+b.TBSP_PENDING_FREE_PAGES)*c.PAGESIZE*1.00/1024/1024,2) TBSP_TOTAL_PAGES_M
,round((b.TBSP_USABLE_PAGES+b.TBSP_PENDING_FREE_PAGES)*c.PAGESIZE*1.00/1024/1024,2) TBSP_USABLE_PAGES_M
,round(b.TBSP_USED_PAGES*c.PAGESIZE*1.00/1024/1024,2) TBSP_USED_PAGES_M
,round((b.TBSP_FREE_PAGES+b.TBSP_PENDING_FREE_PAGES)*c.PAGESIZE*1.00/1024/1024,2) TBSP_FREE_PAGES_M
,round(b.TBSP_PENDING_FREE_PAGES*c.PAGESIZE*1.00/1024/1024,2) TBSP_PENDING_FREE_PAGES_M
,b.TBSP_PAGE_TOP
,b.TBSP_NUM_RANGES,b.TBSP_NUM_CONTAINERS
,b.TBSP_INITIAL_SIZE TBSP_INITIAL_SIZE
,b.TBSP_CURRENT_SIZE*1.00/1024/1024 TBSP_CURRENT_SIZE_M
,b.TBSP_TOTAL_PAGES
FROM SYSCAT.TABLESPACES a
LEFT JOIN SYSIBMADM.SNAPTBSP A1
ON a.TBSPACEID=a1.TBSP_ID
JOIN SYSIBMADM.SNAPTBSP_PART b
ON a.TBSPACEID=b.TBSP_ID
JOIN SYSCAT.BUFFERPOOLS c
ON a.BUFFERPOOLID=c.BUFFERPOOLID
WHERE 1=1 AND a.DATATYPE NOT IN ('T','A') AND a.OWNERTYPE NOT IN ('S') AND a.TBSPACETYPE NOT IN ('S')
AND (b.TBSP_USED_PAGES/(b.TBSP_USED_PAGES+b.TBSP_FREE_PAGES+b.TBSP_PENDING_FREE_PAGES+0.000000001)*100.0000)>1.00*$limitpert
ORDER BY USEDBL DESC
fetch first 10 rows only
WITH UR ";
echo "$sql" >>$log;
db2cmd "$sql";
echo sqlcode is [$pub_sqlcode]
if [ "$pub_sqlcode" != "0" ]
then
echo "$pub_result" | tee -a "$log";
exit;
fi;
echo [$pub_result]...
splt=$pub_splt;
echo "$pub_result"|while read line
do
#echo "lineis $line";
tbspace=$(echo "$line" | cut -d "$splt" -f 1 );
owner=$(echo "$line" | cut -d "$splt" -f 2 );
ownertype=$(echo "$line" | cut -d "$splt" -f 3 );
datatype=$(echo "$line" | cut -d "$splt" -f 4 );
tbsp_type=$(echo "$line" | cut -d "$splt" -f 5 );
usedbl=$(echo "$line" | cut -d "$splt" -f 6 );
create_time=$(echo "$line" | cut -d "$splt" -f 7 );
tbspaceid=$(echo "$line" | cut -d "$splt" -f 8 );
tbspacetype=$(echo "$line" | cut -d "$splt" -f 9 );
tbsp_total_pages_m=$(echo "$line" | cut -d "$splt" -f 10);
tbsp_usable_pages_m=$(echo "$line" | cut -d "$splt" -f 11);
tbsp_used_pages_m=$(echo "$line" | cut -d "$splt" -f 12);
tbsp_free_pages_m=$(echo "$line" | cut -d "$splt" -f 13);
tbsp_pending_free_pages_m=$(echo "$line" | cut -d "$splt" -f 14);
tbsp_page_top=$(echo "$line" | cut -d "$splt" -f 15);
tbsp_num_ranges=$(echo "$line" | cut -d "$splt" -f 16);
tbsp_num_containers=$(echo "$line" | cut -d "$splt" -f 17);
tbsp_initial_size=$(echo "$line" | cut -d "$splt" -f 18);
tbsp_current_size_m=$(echo "$line" | cut -d "$splt" -f 19);
tbsp_total_pages=$(echo "$line" | cut -d "$splt" -f 20);
if [ "$tbspace" = "" ]
then
echo "无需扩展表空间!退出" | tee -a $log;
exit;
fi;
date >>$log;
echo "tablespace limit percent is [${limitpert}%] and autoextet percent is [${autopert}%]" | tee -a $log;
echo "tbspace is [$tbspace]" | tee -a $log;
echo "owner is [$owner]" | tee -a $log;
echo "ownertype is [$ownertype]" | tee -a $log;
echo "datatype is [$datatype ]" | tee -a $log;
echo "tbsp_type is [$tbsp_type]" | tee -a $log;
echo "usedbl is [$usedbl ]" | tee -a $log;
echo "create_time is [$create_time]" | tee -a $log;
echo "tbspaceid is [$tbspaceid]" | tee -a $log;
echo "tbspacetype is [$tbspacetype]" | tee -a $log;
echo "tbsp_total_pages_m is [$tbsp_total_pages_m ]" | tee -a $log;
echo "tbsp_usable_pages_m is [$tbsp_usable_pages_m]" | tee -a $log;
echo "tbsp_used_pages_m is [$tbsp_used_pages_m]" | tee -a $log;
echo "tbsp_free_pages_m is [$tbsp_free_pages_m]" | tee -a $log;
echo "tbsp_pending_free_pages_m is [$tbsp_pending_free_pages_m]" | tee -a $log;
echo "tbsp_page_top is [$tbsp_page_top]" | tee -a $log;
echo "tbsp_num_ranges is [$tbsp_num_ranges]" | tee -a $log;
echo "tbsp_num_containers is [$tbsp_num_containers]" | tee -a $log;
echo "tbsp_initial_size is [$tbsp_initial_size]" | tee -a $log;
echo "tbsp_current_size_m is [$tbsp_current_size_m]" | tee -a $log;
echo "tbsp_total_pages is [$tbsp_total_pages ]" | tee -a $log;
#计算每个容器按总容量的百分比平均扩展值,并生成sql扩展语句
sql2="
SELECT 'ALTER TABLESPACE '||a.TBSP_NAME||' EXTEND (File '''
||a.CONTAINER_NAME||''' '
||varchar(ceiling($tbsp_total_pages_m*$autopert*1.00/100000/$tbsp_num_containers))||'G) ON DBPARTITIONNUM (0)'
sql
/*
,a.TBSP_NAME,a.TBSP_ID,a.CONTAINER_NAME,a.CONTAINER_ID,a.CONTAINER_TYPE
,a.TOTAL_PAGES*b.PAGESIZE*1.00/1024/1024 TOTAL_PAGES_SIZE_M
,a.USABLE_PAGES*b.PAGESIZE*1.00/1024/1024 USABLE_PAGES_SIZE_M
,b.BUFFERPOOLID */
FROM SYSIBMADM.CONTAINER_UTILIZATION a LEFT JOIN SYSCAT.TABLESPACES b
ON a.TBSP_ID=b.TBSPACEID
WHERE a.TBSP_NAME IN ('$tbspace')";
#echo "$sql2" | tee -a $log;
#执行
db2cmd "$sql2";
if [ "$sqlcode" != "0" ]
then
echo "$pub_result,[$dt]退出!" | tee -a $log;
exit;
fi;
echo "$pub_result"|while read sline
do
echo "[运行SQL]:$sline";
db2cmd "$sline";
echo ;
echo "$pub_result,[$dt]!" | tee -a $log;
done;
done;