### DB2表空间管理及查看脚本解析 #### 核心知识点概述 本文将深入解析一个专门用于管理DB2数据库中表空间的脚本。该脚本的主要功能是监测特定表空间(例如“TBS_DW_USER”)的使用情况,并在达到预定阈值时自动删除符合一定条件的数据表,以确保表空间的使用率不会超过预设的最大值。通过这样的机制,可以有效避免因表空间不足而导致的数据库性能问题。 #### 脚本逻辑与执行流程 脚本主要分为两部分:第一部分为实际执行逻辑的Shell脚本;第二部分则为配置Cron定时任务以定期执行此脚本文档。下面将分别对这两部分进行详细介绍。 ### Shell脚本详解 该脚本的主要目标是对表空间中的分表规则明确的表进行删除操作,以保证有足够的表空间预留。 #### 脚本执行流程: 1. **环境配置**:首先通过执行`. /home/db2app/.profile`来加载用户的环境变量,确保脚本能够访问到DB2相关的环境配置。 2. **阈值设置**:脚本定义了一些重要的阈值,例如当表空间使用率达到50%或数据表创建时间超过22天时,就会触发删除操作。 3. **SQL语句构造**:脚本构建了一个复杂的SQL查询,用以筛选出需要被删除的数据表。具体来说,它通过以下步骤实现: - 识别表空间为“TBS_DW_USER”的所有数据表。 - 排除特定命名模式的数据表,如包含“DIM”、“LOG”等关键字的表。 - 按照表大小降序排列。 - 计算表空间使用量,并根据阈值确定是否需要删除。 4. **执行SQL命令**:构建好的SQL语句将被执行,并将结果存储在文本文件中(`tbopres.txt`)。 5. **日志记录与处理**:针对每个执行的SQL命令,脚本都会记录执行时间和结果到日志文件中(`tbopres.log`)。 6. **资源释放**:脚本会重置数据库连接并终止当前的DB2会话。 ### Cron定时任务配置 为了使脚本能够定期自动执行,还需要配置Cron定时任务。该脚本中包含了Cron定时任务的配置指令。 #### Cron定时任务配置详解: 1. **定时执行**:配置文件中指定了脚本将在每天的12点和15点执行,确保数据表的清理工作能够定期进行。 2. **日志记录**:Cron执行的命令将会将输出重定向至`/dev/null`,这意味着所有的输出都会被丢弃,除非是错误输出。 3. **参数传递**:Cron任务调用脚本时并不传递任何参数,所有必要的配置都已在脚本内部定义好。 ### SQL语句分析 脚本中构建的SQL查询非常复杂,涉及到多个子查询,包括`WITH`子句的使用,以便更高效地筛选出需要被删除的表。 #### SQL查询分析: 1. **子查询**:通过使用`WITH`子句定义了两个临时表`a`和`bas`,其中`a`用于计算各个表的大小和创建时间,而`bas`则用于累积计算所有表的总大小。 2. **条件过滤**:脚本中定义了一系列的过滤条件,以确保只删除那些不重要的、非关键性的数据表。 3. **动态SQL构造**:最终,脚本会基于筛选结果动态构造出一系列的SQL命令,这些命令用于激活未记录的初始空表以及删除指定的数据表。 ### 总结 通过对该脚本的详细解析,我们可以看到它不仅实现了对DB2数据库表空间的有效管理,还能够自动进行维护操作,从而确保系统的稳定性和性能。同时,通过合理的阈值设置和定时任务的配置,进一步提高了自动化程度和效率。对于DBA和系统管理员而言,这是一个非常实用且高效的工具。



















1.sh文件
#!/bin/sh
#表空间管理作业,请不要删除,现操作系统已经在正常调用
#调用时间,每天的17:00
#crontab -e 打开,可编辑
. /home/db2app/.profile
#脚本删除创建时间在22天前的表或总数大于400*0.5的表,保证数据量不能大于总空间的50%和创建日期不能大于22天的
db2 connect to esopdb;
res=tbopres.txt
sql="
with a as
(
select
rownumber() over(order by npages desc) as od,
'DB2INFO.'||tabname tabname,
decimal(sum(npages)*1.00*32768/(1024*1024*1024),4,2) GUSAGE,
create_time ct
from syscat.tables
where tbspace='TBS_DW_USER' and type='T'
and OWNER='DB2APP' and TABSCHEMA='DB2INFO'
and
(
tabname not like 'DIM%' and tabname not like '%LOG%' and tabname not like '%ESOP%' and tabname not like '%PROC%'
and tabname not like '%DM%' and tabname not like '%MM%'
)
group by tabname,npages,create_time
order by GUSAGE desc
),
b as
select a_s.od,a_s.tabname,a_s.gusage,
case a_s.od
when 1 then a_s.gusage
else (select sum(a_d.gusage) from a as a_d where a_d.od<=a_s.od) end as tot,
a_s.ct
from a as a_s
order by a_s.od
)
select cast('alter table '||b.tabname||' activate not logged initially with empty table ; drop table '
||b.tabname||replace(' ;--od:'||cast(b.od as char(3))||',gusage:'||cast(b.gusage as char(10))||',total:'
||cast(cast(b.tot as decimal(5,2)) as char(10))||',percent:'||cast(cast(b.tot/400 as decimal(5,2)) as char(10))
||',created before '||cast(days(current_date)-days(ct) as char(2))||' days '||'--','00.','0.') as varchar(300)) as sql
from b
where b.tot>=400*0.5 or days(current_date)-days(ct)>=22
order by b.od,days(current_date)-days(b.ct) desc
"
#执行不出现标题类的内容
db2 -x $sql>$res
#分行并读取每行
tr ";" "\n" <${res} | while read line
do
echo ` date +"%Y%m%d %H:%M:%S" `>>${res}.log
db2 -tvx $line | tee -i -a ${res%".txt"}.log
done
db2 connect reset;
db2 terminate;
剩余8页未读,继续阅读

- buickbgd2015-03-21已下载,资源不错,感谢上传。

- 粉丝: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 互联网+时代下的小学数学作业设计与评改策略-(3).doc
- 大连理工大学本科本科大学本科方案设计书(方案设计书)基于Android的手机电池保姆软件的方案设计书与实现.doc
- 大数据背景下企业财务管理的挑战与变革分析.docx
- EXCEL在隧道监控量测数据研究中的应用29294.doc
- 企业信息化治理项目实施方案建议.pptx
- 大数据背景下的会计统计方法在企业财务管理中的应用.docx
- 以创新创业能力培养为核心的计算机专业实践课程教学改革.docx
- 区块链技术下会计核算的应用分析.docx
- ARM的轨道检测仪嵌入式系统设计方案.doc
- 惠普虚拟化概述-虚拟化.docx
- 统计云大数据平台运营规划设计.docx
- 第1章-计算机组装.ppt
- 计算机网络安全面临的威胁及其防范措施分析.docx
- 基于JSP的网上超市购物系统方案设计书与实现48301.doc
- 信息化时代中职财会专业选择性课改探索.docx
- 计算机c语言二级考试复习资料大全.doc


