日期:2014-05-16 浏览次数:20427 次
表里面有long columns, oracle就不支持回缩了shrink
如果数据库可以停机的话,那么可以用exp/imp来代替解决
不行的话就加磁盘吧
shrink 表的一些操作整理
from 阿里dba组操作文档
一、目的
明确SHRINK TABLE操作的风险及标准流程,最大限度避免SHRINK TABLE操作带来的故障。
二、适用范围
l 优化操作中,为了优化表,分区,LOB的空间
l 操作对象包括:普通表,分区,子分区,LOB字段
l 只针对9i以上的数据库版本
备注:以下不支持shrink操作
Tables with a LONG column
on-commit materialized views
Tables with function-based indexes/bitmap join indexes
SECUREFILE LOBs
Compressed tables
三、风险评估
l ALTER TABLE *** ENABLE/DISABLE ROW MOVEMENT 会使依赖对象失效(10g)
l 不建议直接对表进行shrink space,为了减少锁表时间,先进行shrink space compact 进行空间整理,但不调整HW,然后再对表进行shrink space(注意UNDO空间的消耗)
l 基于表ROWID的物化视图,SHRINK完后需要REBUILD,不然原来的数据的DML操作,通过刷新无法同步
l 属于DDL,不会影响有关TABLE DML 的触发器
l shrink space 操作会阻塞DML和DDL,此时对表采用顺序读,时间根据表而定。
四、操作流程
1. 准备工作
a) 确认shrink space表的持续时间和期间无法操作表(包括查询)的风险,
b) 事先整理完成shrink 表的脚本和编译脚本(10g)
c) 确认原来表的大小@size,方便操作前后对比
d) 明确不能使用shrink space CASCADE操作
2. 执行过程(务必严格按照以下步骤)
a) alter table *** enable row movement
b) compile_dep_obj(only 10g)
c) alter table *** shrink space compact;
or alter table *** modify lob(***)(shrink space compact);
or alter table *** modify partition *** shrink space compact ;
or alter table *** modify partition *** lob(***)(shrink space compact);
d) 查看UNDO消耗 @undo
e) alter table *** shrink space;
or alter table *** modify lob(***)(shrink space);
or alter table *** modify partition *** shrink space;
or alter table *** modify partition *** lob(***)(shrink space);
f) alter table *** disable row movement
g) compile_dep_obj(only 10g)
h) shrink操作期间,查看数据库等待事件@active和锁情况@lock
i) 如果DB是定期收集统计信息的,建议使用REBUILD INDEX和并重新分析表,否则建议只使用SHRINK INDEX COMPACT,SHRINK INDEX操作
3. 验证方案
a) 常规检查:@dbcheck
b) 大小确认:@size
c) 数据库是否正常:@active
五、核心对象风险
不建议使用shrink space操作