含LOB的表实际容量计算方法

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 含LOB的表实际容量计算方法

前两天有一个开发库,报了ORA-01654的错误,提示的是SYS_IL000…$$的对象不能分配表空间了,首先这种SYS_IL的对象名称是系统默认为LOB大对象LOBINDEX设置的名称,其次开发人员检索dba_segments视图看这个LOB所属表的空间,似乎占比一般。

这次涉及的问题,就是如何计算包含LOB对象的表空间实际容量的方法,之所以是说实际容量,是因为仅检索表所占空间,并不能反映LOB的容量。

这篇文章《How to Compute the Size of a Table containing Outline CLOBs and BLOBs (文档 ID 118531.1)》,就介绍了计算方法,接下来的实验会以此为依据。

LOB是一种大对象类型,分为CLOB存储字符串类型,BLOB存储二进制类型。例如普通的VARCHAR2类型存储的字符串,容量不能超过4000字节,因此若是超过了,则可以用CLOB存储。LOB中的存储很奇特,若是4000字节以内,则和普通的VARCHAR2一样,若超过则会存储于和表不同的,一个特殊的LOB段中,并且会有一个INDEX段,因此简单来看,一个包含LOB的表,可能包含表段、LOB段和LOB INDEX段三个segment对象。但dba_segments中表的容量不包含LOB段的容量(CLOB/BLOB),因此包含LOB的表实际容量为, 
含LOB的表实际容量计算方法

实验: 
1.创建测试表和数据 
含LOB的表实际容量计算方法
TEST_TABLE表包含了两个CLOB列(超过4000字节),INSERT了1000条记录。

2.检索user_segments视图, 
含LOB的表实际容量计算方法
了解TEST_TABLE包含了五个段,一个TEST_TABLE表段,两个LOBINDEX段,两个LOBSEGMENT段,且计算所有段容量为12845056字节。

3.检索user_lobs视图, 
含LOB的表实际容量计算方法
可知这两个LOBSEGMENT段属于具体的列。

4.使用文章中提供的脚本, 
含LOB的表实际容量计算方法
dba_segments可以计算出表段容量。 
dba_segments和dba_lobs联合计算出LOBSEGMENT容量。 
dba_segments和dba_indexes根据INDEX类型为LOB计算出LOBINDEX容量。

提供用户名、表名参数, 
含LOB的表实际容量计算方法容量为1284506,和(2)结果一致。

总结: 
1.包含LOB对象的表,实际包含了表段、LOBSEGMENT和LOBINDEX三个对象类型,因此dba_segments仅检索表段则不是实际容量。 
2.根据LOB包含的对象类型,可以根据dba_segments、dba_lobs和dba_indexes来计算实际容量。

如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:bisal的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)

含LOB的表实际容量计算方法
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 含LOB的表实际容量计算方法


 上一篇
MySQL基础入门之常用命令介绍 MySQL基础入门之常用命令介绍
mysql 是数据库管理命令 通过mysql –help来查看相关参数及使用说明 **mysql –help   ** **            #mysql数据库管理命令** **Usage: mysql [OPTIONS]
下一篇 
经典的print_table学习 经典的print_table学习
最近上班路上读《Oracle性能优化与诊断案例精选》,发现eygle引用了一个非常方便的工具,原作者是大名鼎鼎的Tom,更加引起了我的关注。 我理解一些工具是方便了我们日常的工作需求,但同时由于其封装了一些细节,因此若只是知道用法,不知道实