ALTER TABLESPACE COALESCE

一般该命令用于字典管理表空间的时代,合并数据字典中连续的单个独立空闲空间成一个整体,也就是合并表空间碎片。

在本地管理表空间的时代,其还有一个作用,为唤醒SMON来清理创建在PERM表空间中的 temporary段。

如果运行DDL语句,如CTAS,CREATE IDX等,会现在对应的表空间中创建一个以HEADER_FILE.HEADER_BLOCK为名称的临时段,创建好后,通过修改数据字典将其转换为数据段

如果进程异常被终止,PMON在清理完成用户进程后,会提请SMON进行对临时段相关数据字典的清理工作。

今天遇到一个案例:
用户表空间被大量占用,检查表空间的段,发现一个TEMP段在上面
查看活跃的会话,找不到正在执行DDL的语句

查询SELECT * FROM dba_extents WHERE  segment_type LIKE 'TEMP%'
数据为空,说明临时段的盘区已经被回收,位图已经被更改
但是不知何种原因,SMON没有起来清理数据字段
检查SMON的状态,其一直在SMON TIME上哈起,也不是由于忙而来不及清理

考虑客户是核心系统,就没有去TRC SMON,怕造成不必要的麻烦

参考:
EVENT: DROP_SEGMENTS - Forcing cleanup of TEMPORARY segments [ID 47400.1]
设置 EVENT进行了清理
alter session set events 'immediate trace name DROP_SEGMENTS level TS#+1';


另外根据
How To Determine The Cause Of a Large TEMPORARY Segment In PERMANENT Tablespace [ID 106717.1]
使用
ALTER TABLESPACE coalesce;

也可以强制SMON进行清理

记录一下

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8242091/viewspace-749266/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8242091/viewspace-749266/

你可能感兴趣的