在一个数据库使用下面SQL找出了一批需要降低高水位线的表,其中有几个表没有数据,于是我打算用TRUNCATE来降低高水位线HWM

SELECT a.owner, 

       a.segment_name, 

       a.segment_type, 

       a.tablespace_name, 

       a.blocks              "real block", 

       a.bytes / 1024 / 1024 "realSizeMB", 

       b.last_analyzed, 

       b.num_rows 

FROM   dba_segments a, 

       dba_tables b 

WHERE  a.owner = b.owner 

       AND a.segment_name = b.table_name 

       AND B.partitioned = 'NO' 

       AND b.num_rows < 5000 

       AND a.blocks > 1000 

       AND a.bytes / 1024 / 1024 > 500 

ORDER  BY 6 DESC 

我们先看看其中一个表的空间使用情况,如下所示,结果我对该表执行了TRUNCATE后,发现高水位线HWM根本没有变化

SQL> exec show_space('INV_MONTH_END_LOCATION', 'INVENTORY');

Unformatted Blocks .....................               0

FS1 Blocks (0-25)  .....................               0

FS2 Blocks (25-50) .....................               0

FS3 Blocks (50-75) .....................               0

FS4 Blocks (75-100).....................               0

Full Blocks        .....................               0

Total Blocks............................         434,176

Total Bytes.............................   3,556,769,792

Total MBytes............................           3,392

Unused Blocks...........................         434,142

Unused Bytes............................   3,556,491,264

Last Used Ext FileId....................              40

Last Used Ext BlockId...................               9

Last Used Block.........................              34

 

PL/SQL procedure successfully completed.

 

SQL> exec show_space('INV_MONTH_END_LOCATION', 'INVENTORY');

Unformatted Blocks .....................               0

FS1 Blocks (0-25)  .....................               0

FS2 Blocks (25-50) .....................               0

FS3 Blocks (50-75) .....................               0

FS4 Blocks (75-100).....................               0

Full Blocks        .....................               0

Total Blocks............................         434,176

Total Bytes.............................   3,556,769,792

Total MBytes............................           3,392

Unused Blocks...........................         434,142

Unused Bytes............................   3,556,491,264

Last Used Ext FileId....................              40

Last Used Ext BlockId...................               9

Last Used Block.........................              34

 

PL/SQL procedure successfully completed.

当时傻眼了,难道我搞错了, 难道TRUNCATE不会释放存储空间,降低高水位线?于是查了一下资料,确认TRUNCATE会释放存储空间,降低高水位线。那么问题出在哪里呢?于是我对该表重新收集了一下统计信息后发现依然如此

SQL> exec dbms_stats.gather_table_stats('INVENTORY','INV_MONTH_END_LOCATION', cascade=>true);

 

PL/SQL procedure successfully completed.

最后我生成了创建该表的SQL语句,终于发现了问题。如下截图所示。initial与next决定创建segment及扩展segment,initial表示初始化时分配给该表的段大小为3,556,769,792Byte。也就是3392MB。但是已经不知道当时谁建表示设定了这个参数,于是只能DROP掉这个表,然后修改该参数重新创建该表。

另外,如果是这个情况下,使用ALTER MOVE也是不能释放表空间,降低高水位线的。切记切记。

最新文章

  1. C#委托的介绍(delegate、Action、Func、predicate)
  2. 3.创建第一个android项目
  3. NGUI Sprite 和 Label 改变Layer 或父物体后 未更新深度问题
  4. Ajax注册验证js代码
  5. Java-使用js进行编码,后台解码。
  6. android usb host 读写USB设备
  7. 【转】eclipse android 设置及修改生成apk的签名文件 -- custom debug keystore
  8. JavaScript-学习一获取表单的值
  9. Unity UGUI之Canvas&amp;EventSystem
  10. BZOJ_3012_[Usaco2012 Dec]First!_trie树+拓扑排序
  11. TopCoder Div2
  12. tolua 转换 std::shared_ptr
  13. mysql学习一 常用语句
  14. C#使用Dotfuscator混淆代码的加密方法
  15. 钉钉消息通知机器人python版
  16. Enrolment注册插件
  17. Java内存空间的分配及回收
  18. Reservoir sampling
  19. Keras学习笔记(完结)
  20. MVC用非Entity Framework将数据显示于视图(二)

热门文章

  1. T-Sql(五)xml操作
  2. golang 字符串操作实例
  3. Spring对事务管理的支持的发展历程--转
  4. Global eval. What are the options?
  5. centos7 mysql数据库安装和配置
  6. BroadcastReceiver注册、使用及其权限
  7. Java操作Sqlite数据库-jdbc连接
  8. 用Vagrant和Ansible搭建持续交付平台
  9. JS验证图片格式和大小并预览
  10. 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果)