dba_segments和dba_tables的不同
create table tset as select * from dba_objects;
select count(*) from tset;
select table_name,blocks,empty_blocks from dba_tables
where table_name=’TSET’;
select segment_name,bytes,blocks,extents from dba_segments
where segment_name=’TSET’;
问题来了,从dba_tables查询的blocks是空的,不按常理出牌啊~~什么鬼,什么鬼
select table_name,blocks,empty_blocks,last_analyzed from dba_tables
where table_name=’TSET’;
last_analyzed是分析的时间,为空值表示没有分析,所以执行语句分析下看看
analyze table tset compute statistics;
1071+80=1151
好像还少一个blocks,不是好像,就是少一个block。(先放这吧,不确定能找到为什么)。
以上是我发现dba_tables和dba_segments的blocks数量不一致后查询网络得出的;
大概个人总结以下:
1.dba_segments中的blocks对应的是dba_tables中的blocks+empty_blocks
2.
The dba_tables view describes a "logical" structure whiledba_segments describes the "physical" data segment, like a data file.
Also, columns like "blocks" are different between dba_tables and dba_segments. In dba_tables, the "blocks" are calculated when you run dbms_stats, while indba_segments, "blocks" is the actual number of blocks used by the object on disk.
(不解释,解释不了,我感觉只是感觉理解了),附上链接:http://www.dba-oracle.com/t_difference_dba_tables_dba_segments.htm
oracle社区里有个不是使用CTAS创建表来说明dba_segments和dba_tables不一致的问题,我重复一遍吧:
1. create table tset1 as select * from dba_objects where 1=0;
select segment_name,bytes,blocks,extents from dba_segments
where segment_name=’TSET1’;
插播:
TSET1表的行数为0;默认分配一个extent,一个extent=8 blocks,一个block=8k(65536/1024/8)
oracle 11g不是延迟段分配的吗(默认)?
好吧,先不管了,下次再说吧,插播到此结束。
2.select table_name,blocks,empty_blocks from dba_tables where table_name=’TSET1’;
analyze table tset1 compute statistics;
select table_name,blocks,empty_blocks from dba_tables where table_name=’TSET1’;
3.insert into tset1 select * from dba_objects;
commit;
4. select segment_name,bytes,blocks,extents from dba_segments
where segment_name=’TSET1’;
select table_name,blocks,empty_blocks from dba_tables
where table_name=’TSET1’;
analyze table tset1 comput statistics;
select table_name,blocks,empty_blocks from dba_tables
where table_name=’TSET1’;
1068+83=1151,还是不等于1152
附上oracle社区的链接,上面的测试结果是相等的哦!
https://community.oracle.com/thread/582356?start=0&tstart=0
转载于:https://www.cnblogs.com/cnmarkao/p/5147761.html
dba_segments和dba_tables的不同相关推荐
- DBA_SEGMENTS - 查看数据库对象所分配的物理存储空间
如何查看某个数据库对象(TABLE, INDEX ....)所占得物理存储空间 SELECT SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,EXTENTS,BLO ...
- oracle+system空间满了,oracle审计导致system表空间爆满的处理方法
现象描述: 开发人员通过plsql登录或者操作数据库,提示如下错误: ORA-00604: error occurred at recursive SQL level 1 ORA-01653: una ...
- Oracle找出需要建立索引的表
文章讨论的是本来应该建立索引而因为疏忽,或者考虑不周全而没有建立的情况 select distinct sp.OBJECT_NAME,round(ds.bytes/1024/1024,2) MB,nu ...
- Oracle 统计信息备份/表分析
众所周知,统计信息直接影响到Oracle优化器最后的执行计划,所以定期收集统计信息成为DBA一项常规的工作,但是,对于一些大表,比如数据量超过几千万条,表分析后却有可能会导致应用系统一些SQL执行计划 ...
- 混合列压缩(HCC)在OLAP及OLTP场景中的测试
作者:李敏,云和恩墨交付工程师. 2019年度 ACOUG活动启动啦!为了感恩和回馈一直支持社区工作的技术爱好者.会员.嘉宾和合作伙伴,2019年度,我们汇集了行业大咖最新的精彩主题跟大家分享,更有惊 ...
- ORACLE计算表引占用空间大小
在ORACLE数据库中,如何计算一个表所占用的存储空间呢?我们可以通过系统视图DBA_SEGMENTS.USER_SEGMETNS.DBA_TABLES来查看一个表所占空间的大小,如下所示: SELE ...
- 杂乱无章之Oracle(一)
1. 设置共享池大小 SQL>ALTER SYSTEM SET SHARED_POOL_SIZE=32M; 2. 数据库高速缓冲区(database buffer cache):SQL ...
- oracle water,对于Oracle High Water Mark(HWM)的理解
在网上看到不少关于Oracle High Water Mark(HWM)的理解,但是都弄的不太清楚,而且有些说法是不对的,所以还是逼迫自己写篇文章来学习一下,如有不恰当之处请指教,呵呵~ 先看看官方对 ...
- --查看某个表及其组件所占的各个表空间的大小
--查看某个表及其组件所占的各个表空间的大小 select sum(bytes) as mb, tablespace_name from (select sum(bytes / 1024 / 10 ...
最新文章
- 利用Facebook开源项目来赚钱不再只是梦
- 第一阶段冲刺最后一天
- mysql5.7主从
- SAP WebIDE里本地运行Fiori应用后,会自动生成一个新的Destination
- 博客系统知多少:揭秘那些不为人知的学问(二)
- python查询sql_Python处理SQL语句(提供SQL查询平台使用)
- 前端为什么说github很重要_私域流量|为什么说私域流量很重要?
- php 常用编译参数,php编译参数,不用怕!!
- zookeeper学习笔记001-Address already in use: bind启动报错
- 从技术上解读大数据的应用现状和开源未来! | 技术头条
- 是真的!华为2019年应届博士年薪最高达201万
- 相似文档查找算法之 simHash
- 证券交易2-券商柜台系统
- 键盘按键与键码的对照表的对照表
- PostgreSQL 报ERROR: column c.relhasoids does not exist
- android 8 音质,体验中国好音质 8款HiFi音质手机推荐
- 统计计算机软件应用作业,SPSS统计软件期末作业
- 系统集成项目管理工程师立项管理案例分析题
- 最新UI作品集源文件文件模板Sketch和Adobe XD源文件格式
- subprocess句柄无效