oracle 12c缩容磁盘组,oracle 表收缩
當(dāng)使用delete表數(shù)據(jù)后,空間無(wú)法釋放,可以使用表收縮釋放表空間;
注意:當(dāng)delete表大量數(shù)據(jù)的時(shí)候要注意undo,可以使用:alter ?table ?emp ?nologging; 讓其不生產(chǎn)日志
一、表的增長(zhǎng)方式
當(dāng)表被創(chuàng)建后,隨著記錄的不斷插入,組成表的區(qū)間會(huì)被填滿,如果啟用了自動(dòng)擴(kuò)展,則當(dāng)區(qū)間填滿后,會(huì)分配新的區(qū)間。假定高水
位線隨著記錄的增加從最左端往右端來(lái)移動(dòng),當(dāng)?shù)降撞繀^(qū)間的尾端時(shí),則新的區(qū)間將會(huì)被分配。
二、表可收縮的原理
隨著記錄的增加高水位線不斷的右移,記錄的刪除不會(huì)導(dǎo)致高水位線往回(左)移動(dòng)
刪除記錄后的空閑空間(高水位線左側(cè))盡管可以使用,但其稀疏性導(dǎo)致空間空閑
注:完整的表掃描所耗費(fèi)的時(shí)間不會(huì)因?yàn)橛涗浀臏p少(刪除)而減少
三、使用 alter table tbname shrink space 來(lái)收縮表段
1. 實(shí)現(xiàn)原理
實(shí)質(zhì)上構(gòu)造一個(gè)新表(在內(nèi)部表現(xiàn)為一系列的DML操作,即將副本插入新位置,刪除原來(lái)位置的記錄)
靠近末尾處(右端)數(shù)據(jù)塊中的記錄往開始處(左端)的空閑空間處移動(dòng)(DML操作),不會(huì)引起DML觸發(fā)器
當(dāng)所有可能的移動(dòng)被完成,高水位線將會(huì)往左端移動(dòng)(DDL操作)
新的高水位線右邊的空閑空間被釋放(DDL操作)
2. 實(shí)現(xiàn)前提條件
必須啟用行記錄轉(zhuǎn)移(enable row movement)
僅僅適用于堆表,且位于自動(dòng)段空間管理的表空間(堆表包括:標(biāo)準(zhǔn)表,分區(qū)表,物化視圖容器,物化視圖日志表)
3. 不能實(shí)現(xiàn)收縮的表
群集表
具有LONG類型列的表
LOB段(盡管表本身可以被縮小),注,10gR2以后版本支持對(duì)LOB段的收縮
具有基于提交的物化視圖的表(因?yàn)榻昧擞|發(fā)器)
具有rowid物化視圖的表(因?yàn)閞owid發(fā)生了變化)
IOT映射表IOT溢出段
索引基于函數(shù)的表
未啟用行記錄轉(zhuǎn)移的堆表
4. 段收縮的優(yōu)點(diǎn)
提高緩存利用率,提高OLTP的性能
減少磁盤I/O,提高訪問(wèn)速度,節(jié)省磁盤空間
段收縮是在線的,索引在段收縮期間維護(hù),不要求額外的磁盤空間
5. 兩個(gè)選項(xiàng)
cascade: 縮小表及其索引,并移動(dòng)高水位線,釋放空間
compact: 僅僅是縮小表和索引,并不移動(dòng)高水位線,不釋放空間
alter table tbname shrink space 相當(dāng)于帶cascade參數(shù)
實(shí)戰(zhàn)練習(xí):
1、首先刪除表里的數(shù)據(jù)
SQL> alter table FEE_COLLECT_TMP nologging; ? ----設(shè)置表不產(chǎn)生undo
SQL> delete from FEE_COLLECT_TMP where CUTOFFDAY='20170501';
SQL> commit;
2、收縮表
SQL> alter table FEE_COLLECT_TMP enable row movement; ? ? ? ? ? ? ? ? -->開啟row movement
SQL> alter table FEE_COLLECT_TMP shrink space; ? ? ? ? ? ? ? ? ? ? ? ?-->shrink成功
3、語(yǔ)法總結(jié):ALTER?TABLE??ENABLE?ROW?MOVEMENT???-->前提條件
ALTER?TABLE??SHRINK?SPACE?[??|?COMPACT?|?CASCADE?];
ALTER?TABLE??SHRINK?SPACE?COMPCAT;??-->縮小表和索引,不移動(dòng)高水位線,不釋放空間
ALTER?TABLE??SHRINK?SPACE;?????-->收縮表,降低高水位線;
ALTER?TABLE??SHRINK?SPACE?CASCADE;?-->收縮表,降低高水位線,并且相關(guān)索引也要收縮一下
ALTER?TABLE??MODIFY?LOB?(lob_column)?(SHRINK?SPACE);??-->收縮LOB段
ALTER?INDEX?IDXNAME?SHRINK?SPACE;?????-->索引段的收縮,同表段
#################################################################
1、收縮普通表,批量腳本
select'alter table '||table_name||' enable row movement;'||chr(10)||'alter table '||table_name||' shrink space;'||chr(10)from user_tables;
select'alter index '||index_name||' shrink space;'||chr(10)from user_indexes;
總結(jié)
以上是生活随笔為你收集整理的oracle 12c缩容磁盘组,oracle 表收缩的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网站可行性报告范文_邢台写可行性报告写立
- 下一篇: 清华大学-曾鸣-《ARM微控制器与嵌入式