——维护数据库表空间常用语句
SELECT a.tablespace_name,
a.bytes total,
b.bytes used,
c.bytes free,
(b.bytes * 100) / a.bytes "% USED ",
(c.bytes * 100) / a.bytes "% FREE "
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c
WHERE a.tablespace_name = b.tablespace_name
AND a.tablespace_name = c.tablespace_name;
它得到的结果是表空间的名称、表空间的大小、已使用大小、可用的大小、已用百分比、可用百分比。
——Oracle Shrink 收缩表
select ' alter table '||table_name||' enable row movement; ' from user_tables
union all
select 'alter table '||table_name||' shrink space cascade; ' from user_tables;
enable row movement——翻译为允许行移动。
行迁移,意思就是,一个现存的行允许改变其
行迁移,意思就是,一个现存的行允许改变其rowid(物理存储地址),通常情况下,数据行在分配了空间之后,行的rowid就固定了,即使以后行长度超出预留的空间,也不会将其移动,在长数据行的情况下,表会产生行链接,对于io来说,行链接是不利的,为了性能,就需要将行调整为在单个物理存储地址下能保存行的所有信息,这需要行迁移。
另外在flashback的时候,由于原始版本的行占据了相应的物理地址,所以,也需要行迁移。
其它的,比如说在收缩段空间的情况下,由于要把所有段数据向段前挤压,大部分行都需要改变其物理地址,也需要行迁移。
shrink space cascade
——给空表分配空间
Select 'alter table '||table_name||' allocate extent;' from user_tables where segment_created = 'NO'
UNION ALL
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;