-- 收縮表段(shrink space)
--====================
一、表的增長方式
?? ?當表被創建后,隨著記錄的不斷插入,組成表的區間會被填滿,如果啟用了自動擴展,則當區間填滿后,會分配新的區間。假定高水
?? ?位線隨著記錄的增加從最左端往右端來移動,當到底部區間的尾端時,則新的區間將會被分配。
?? ?
二、表可收縮的原理
?? ?隨著記錄的增加高水位線不斷的右移,記錄的刪除不會導致高水位線往回(左)移動
?? ?刪除記錄后的空閑空間(高水位線左側)盡管可以使用,但其稀疏性導致空間空閑
?? ?注:完整的表掃描所耗費的時間不會因為記錄的減少(刪除)而減少
三、使用 alter table tbname shrink space 來收縮表段
?? ? 1. 實現原理
?? ??? ?實質上構造一個新表(在內部表現為一系列的DML操作,即將副本插入新位置,刪除原來位置的記錄)
?? ??? ?靠近末尾處(右端)數據塊中的記錄往開始處(左端)的空閑空間處移動(DML操作),不會引起DML觸發器
?? ??? ?當所有可能的移動被完成,高水位線將會往左端移動(DDL操作)
?? ??? ?新的高水位線右邊的空閑空間被釋放(DDL操作)
?? ??? ?
?? ? 2. 實現前提條件
?? ??? ?必須啟用行記錄轉移(enable row movement)
?? ??? ?僅僅適用于堆表,且位于自動段空間管理的表空間(堆表包括:標準表,分區表,物化視圖容器,物化視圖日志表)
?? ?
?? ? 3. 不能實現收縮的表
?? ??? ?群集表
?? ??? ?具有LONG類型列的表
?? ??? ?LOB段(盡管表本身可以被縮小),注,10gR2以后版本支持對LOB段的收縮
?? ??? ?具有基于提交的物化視圖的表(因為禁用了觸發器)
?? ??? ?具有rowid物化視圖的表(因為rowid發生了變化)
?? ??? ?IOT映射表IOT溢出段
?? ??? ?索引基于函數的表
?? ??? ?未啟用行記錄轉移的堆表
?? ??? ?
?? ? 4. 段收縮的優點
?? ??? ?提高緩存利用率,提高OLTP的性能
??? ??? ?減少磁盤I/O,提高訪問速度,節省磁盤空間
??? ??? ?段收縮是在線的,索引在段收縮期間維護,不要求額外的磁盤空間
??? ??? ?
?? ? 5. 兩個選項
?? ??? ?cascade:縮小表及其索引,并移動高水位線,釋放空間
?? ??? ?compact:僅僅是縮小表和索引,并不移動高水位線,不釋放空間
?? ??? ?alter table tbname shrink space 相當于帶cascade參數
四、實戰演習
1. 查看需要收縮的表段的基本情況,此處為表big_table ???
2. 刪除記錄之后,進行收縮表段 ???
3. 驗證cascade與compact的差異 ???
五、語法總結: ?? ???
六、批量收縮腳本
1. 普通表(根據相應需求修改下面的語句生產相應腳本)?? ?
2. 分區表的處理
?? ?分區表進行shrink space時發生ORA-10631錯誤.shrink space有一些限制.
?? ?在表上建有函數索引(包括全文索引)會失敗。???
? 3. 附show_space腳本(來自Tom大師) ???
七、快捷參考
有關性能優化請參考
??? Oracle硬解析與軟解析
??? 共享池的調整與優化(Sharedpool Tuning)
??? Oracle表緩存(cachingtable)的使用
?
有關ORACLE體系結構請參考
??? Oracle表空間與數據文件
??? Oracle密碼文件
??? Oracle參數文件
??? Oracle聯機重做日志文件(ONLINE LOG FILE)
? ?? Oracle歸檔日志
??? Oracle回滾(ROLLBACK)和撤銷(UNDO)
??? Oracle實例和Oracle數據庫(Oracle體系結構)
?
有關閃回特性請參考
??? Oracle閃回特性(FLASHBACK DATABASE)
??? Oracle閃回特性(FLASHBACK DROP & RECYCLEBIN)
??? Oracle閃回特性(Flashback Query、FlashbackTable)
??? Oracle閃回特性(Flashback Version、Flashback Transaction)
?
有關基于用戶管理的備份和備份恢復的概念請參考
??? Oracle冷備份
??? Oracle熱備份
??? Oracle備份恢復概念
??? Oracle實例恢復
??? Oracle基于用戶管理恢復的處理 (詳細描述了介質恢復及其處理)
??? SYSTEM表空間管理及備份恢復
??? SYSAUX表空間管理及恢復
?
有關RMAN的備份恢復與管理請參考
??? RMAN 概述及其體系結構
??? RMAN 配置、監控與管理
??? RMAN 備份詳解
??? RMAN 還原與恢復
??? RMAN 備份路徑困惑(使用plus archivelog時)
?
有關ORACLE故障請參考
??? ORA-32004的錯誤處理
??? ORA-01658錯誤
??? CRS-0215錯誤處理
??? 對參數FAST_START_MTTR_TARGET= 0 的誤解及設定
??? SPFILE錯誤導致數據庫無法啟動(ORA-01565)
?
有關ASM請參考
??? 創建ASM實例及ASM數據庫
??? ASM 磁盤、目錄的管理
?
有關SQL/PLSQL請參考
??? SQLPlus常用命令
??? SQL 基礎 --> 集合運算(UNION與UNION ALL)
??? SQL 基礎 --> 常用函數
??? SQL 基礎 --> 多表查詢
??? SQL 基礎 --> 過濾和排序
??? SQL 基礎 --> 子查詢
??? SQL 基礎 --> 層次化查詢(STARTBY ... CONNECT BY PRIOR)
??? SQL 基礎 --> ROLLUP與CUBE運算符實現數據匯總
??? PL/SQL --> 游標
??? PL/SQL --> 異常處理(Exception)
??? PL/SQL --> 語言基礎
??? PL/SQL --> 流程控制
??? PL/SQL --> 隱式游標(SQL%FOUND)
??? PL/SQL --> 存儲過程
??? PL/SQL --> 函數
??? PL/SQL --> 動態SQL
?
有關ORACLE其它特性
??? 使用OEM,SQL*Plus,iSQL*Plus 管理Oracle實例
??? 日志記錄模式(LOGGING、FORCE LOGGING 、NOLOGGING)
??? OralceOMF 功能詳解
??? Oracle用戶、對象權限、系統權限 ?
??? Oracle角色、配置文件
??? Oracle分區表
??? Oracle外部表
??? 使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)
??? 簇表及簇表管理(Index clustered tables)
??? SQL*Loader使用方法
??? 啟用用戶進程跟蹤
??? 配置非默認端口的動態服務注冊
??? systemsys,sysoper sysdba 的區別
??? ORACLE_SID、DB_NAME、INSTANCE_NAME、DB_DOMIAN、GLOBAL_NAME
??? Oracle補丁全集 (Oracle 9i 10g 11g Path)
??? Oracle10.2.0.1 升級到10.2.0.4
?? ??? ? ?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
