Oracle資料庫管理——表資料庫高水位及shrink操作
segment shrink分為兩個階段:
1、資料重組(compact):透過一系列insert、delete操作,將資料儘量排列在段的前面。
在這個過程中需要在表上加RX鎖,即只在需要移動的行上加鎖。由於涉及到rowid的改變,需要enable row movement.
同時要disable基於rowid的trigger.這一過程對業務影響比較小。
2、HWM調整:第二階段是調整HWM位置,釋放空閒資料塊。此過程需要在表上加X鎖,會造成表上的所有DML語句阻塞。
在業務特別繁忙的
上可能造成比較大的影響。 shrink space語句兩個階段都執行。 shrink space compact只執行第一個階段。
如果系統業務比較繁忙,可以先執行shrink space compact重組資料,然後在業務不忙的時候再執行shrink space降低HWM釋放空閒資料塊。
shrink必須開啟行遷移功能。
alter table table_name enable row movement ;
注意:alter table XXX enable row movement語句會造成引用表XXX的物件(如儲存過程、包、檢視等)變為無效。執行完成後,最好執行一下utlrp.sql來編譯無效的物件。
語法:
alter table <table_name> shrink space [ <null> | compact | cascade ];
alter table <table_name> shrink space compcat;
收縮表,相當於把塊中資料打結實了,但會保持 high water mark;
alter table <tablespace_name> shrink space;
收縮表,降低 high water mark;
alter table <tablespace_name> shrink space cascade;
收縮表,降低 high water mark,並且相關索引也要收縮一下下。
alter index idxname shrink space; 回縮索引
1:普通表 Sql指令碼,改指令碼會生成相應的語句
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;
2:分割槽表的處理 進行shrink space時 發生ORA-10631錯誤.shrink space有一些限制. 在表上建有函式索引(包括全文索引)會失敗。
Sql指令碼,改指令碼會生成相應的語句
select ‘alter table ‘||table_name||’ enable row movement;’||chr(10)||’alter table ‘||table_name||’ shrink space;’||chr(10) from user_tables where ;
select ‘alter index ‘||index_name||’ shrink space;’||chr(10) from user_indexes where uniqueness=’NONUNIQUE’ ;
select ‘alter table ‘||segment_name||’ modify subpartition ‘||partition_name||’ shrink space;’||chr(10) from user_segments where segment_type=’TABLE SUBPARTITION’ ‘;
另外,對於頻繁操作的表可以快取到記憶體中 oracle的db_buffer_pool由三部分組成:
buffer_pool_defualt
buffer_pool_keep
buffer_pool_recycle
如果要把表釘死在記憶體中,也就是把表釘在keep區。
相關的命令為:
alter table ….. storage(buffer_pool keep);
這句命令把表示表如果快取的話是快取在keep區。
可以透過語句:
select table_name from dba_tables where buffer_pool=’KEEP’;
查詢到改表是放在keep區中的。 但是不意味著表已經被快取了。
下面的語句把表快取:
alter table …. cache;
可以透過
select table_name from dba_ tables where rtrim(cache)=’Y’
查詢到該表已經被快取了。
加入到keep區的表不是說不能被移出記憶體,不過是比較不容易移出記憶體。
也可以手工來移出記憶體,命令如下:
alter table … nocache;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30484956/viewspace-2678181/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE資料庫降低高水位線方法Oracle資料庫
- 大資料表的truncate,列刪除,shrink回收高水位大資料
- Hive資料庫及表的基本操作Hive資料庫
- 基本 SQL 之資料庫及表管理SQL資料庫
- Oracle資料庫管理Oracle資料庫
- Oracle資料庫高水位釋放——LOB欄位空間釋放Oracle資料庫
- 值得白嫖的資料庫常用操作語句彙總(資料庫、資料表、資料操作)資料庫
- 靜默建立oracle資料庫及克隆資料庫Oracle資料庫
- python資料庫-MySQL資料庫高階查詢操作(51)Python資料庫MySql
- MySQL(一) 資料表資料庫的基本操作MySql資料庫
- ORACLE資料庫裡表匯入SQL Server資料庫Oracle資料庫SQLServer
- Oracle 資料庫 10g:自我管理資料庫Oracle資料庫
- oracle資料庫兩表資料比較Oracle資料庫
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- Oracle資料庫表碎片整理Oracle資料庫
- 資料庫PostrageSQL-管理資料庫資料庫SQL
- 【Falsk 使用資料庫】---- 資料庫基本操作資料庫
- 資料庫操作資料庫
- 資料庫操作·資料庫
- aix下oracle資料庫管理AIOracle資料庫
- oracle資料庫之plsql視覺化操作建表Oracle資料庫SQL視覺化
- Oracle資料庫中分割槽表的操作方法Oracle資料庫
- Oracle 資料庫常見檔案及相關操作Oracle資料庫
- 為Oracle資料庫表建立自動增長序列及Oracle的常見操作Oracle資料庫
- [原創] Oracle資料庫資源管理Oracle資料庫
- MySQL資料庫資料管理MySql資料庫
- 認識及操作SQL Server 資料庫SQLServer資料庫
- 常用操作 / 資料庫操作資料庫
- 資料庫管理資料庫
- MySQL終端管理資料庫操作指南MySql資料庫
- oracle資料庫叢集新增表空間操作規範Oracle資料庫
- Oracle資料庫中分割槽表的操作方法(轉)Oracle資料庫
- Oracle 資料庫整理表碎片Oracle資料庫
- Oracle資料庫開發——表(概念)Oracle資料庫
- Oracle資料庫快速Drop 大表Oracle資料庫
- oracle清除資料庫表空間Oracle資料庫
- 修改Oracle資料庫表的大小Oracle資料庫
- 瀚高資料庫自定義操作符'!~~'資料庫