通过shell脚本来统计段大小(r5笔记第14天)
今天到公司之后,就收到客户的邮件,他们提供了一个列表,希望我们能够们配合提供一份比较详细的报告,得到某些表在生产环境中所占的空间大小,他们需要根据这些信息来分析一个需求做相应的处理,这个问题处理起来还是很容易的,感觉分分钟搞定,但是自己去查看的时候,发现还是要考虑一些细节,
比如这个表如果是分区表,segment_type就会为TABLE PARTITION,对应的Index的segment_type就为INDEX PARTITION,如果表中含有lob列,就会在有两个相应的段,一个是数据lob段,一个是索引lob段。
所以像下面这样的表结构情况,就会生成4个段了。
create table a_part (id number,name varchar2(100),status varchar2(10),content clob)
partition by range(id)
(
partition p1 values less than (10),
partition p2 values less than (50),
partition p3 values less than (100)
);
因为列表比较长,一个一个去查也太没水平了,磨刀不误砍柴工,我就索引写了个shell脚本,很快就得到了结果,而且对于信息的分析也更加详实。 shell脚本的内容如下:
sqlplus -s n1/n1 <<EOF
set linesize 200
col segment_name format a25
set pages 50
set feedback off
set linesize 200
col table_name format a25
col segment_name format a25
select s.segment_name table_name,
s.segment_name,
s.segment_type,
sum(bytes) / 1024 / 1024 size_MB
from user_segments s
where segment_name = upper('$1')
and segment_type in ('TABLE', 'TABLE PARTITION')
group by s.segment_name, s.segment_type
union all
select l.table_name,s.segment_name, s.segment_type, sum(s.bytes)/1024/1024 size_MB
from user_segments s, user_lobs l
where s.segment_name = l.segment_name
and l.table_name = upper('$1')
and s.segment_type in ( 'LOB PARTITION')
group by l.table_name, s.segment_name, s.segment_type
union all
select s.segment_name table_name,
s.segment_name,
s.segment_type,
sum(bytes) / 1024 / 1024 size_MB
from user_segments s
where segment_name segment_name in
(select index_name from user_indexes where table_name = upper('$1'))
and segment_type in ('INDEX', 'INDEX PARTITION')
group by s.segment_name, s.segment_type;
EOF
脚本运行的结果如下:
TABLE_NAME SEGMENT_NAME SEGMENT_TYPE SIZE_MB
------------------------- ------------------------- ------------------ ----------
A_PART A_PART TABLE PARTITION 11
SYS_LOB0000091627C00004$$ LOB PARTITION .1875
SYS_IL0000091627C00004$$ INDEX PARTITION .1875
IDX_A_PART INDEX PARTITION 12
可以看到对于表A_PART,得到的段信息也是一目了然,如果需要统计多个维度的信息,稍作修改即可,还是比较方便的。
如果为非分区表,结果就相对简单很多,也是一目了然。
TABLE_NAME SEGMENT_NAME SEGMENT_TYPE SIZE_MB
------------------------- ------------------------- ------------------ ----------
TEST TEST TABLE 2
IDX_TEST INDEX .5
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 搭建Blynk开源物联网服务端(1)---基本搭建
- 搭建Blynk开源物联网服务端(2)---开始使用
- NPM安装模块报错:Error: sha1-W+8rAcUcgURBLVhzyvg+IvHsa4Q= integrity checksum failed when using sha1: wanted
- OPA Gatekeeper 策略入门
- 给Linux命令行加个问候语
- RaspberryPi接入HomeKit
- React Fetch请求
- React使用代理解决跨域问题
- React登录跳转遇到的问题
- 响应式架构与 RxJava 在有赞零售的实践
- Centos 7搭建Gitlab服务器超详细Centos 7搭建Gitlab服务器超详细(搭建成功)
- Netty之旅二:口口相传的高性能Netty到底是什么?
- 前端知识复习(一)
- Powershell运行脚本报错:此系统上禁止运行脚本
- git rebase解决合并冲突