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資料庫
- Oracle資料庫高水位釋放——LOB欄位空間釋放Oracle資料庫
- 基本 SQL 之資料庫及表管理SQL資料庫
- phpMyAdmin管理資料庫和資料表PHP資料庫
- Oracle資料庫表碎片整理Oracle資料庫
- python資料庫-MySQL資料庫高階查詢操作(51)Python資料庫MySql
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- 值得白嫖的資料庫常用操作語句彙總(資料庫、資料表、資料操作)資料庫
- Oracle 資料庫整理表碎片Oracle資料庫
- Oracle DG管理資料庫屬性Oracle資料庫
- Oracle資料庫日期格式轉換操作Oracle資料庫
- Oracle dos連線資料庫基本操作Oracle資料庫
- 【Falsk 使用資料庫】---- 資料庫基本操作資料庫
- 資料庫操作資料庫
- 資料庫操作·資料庫
- 資料庫管理-第221期 Oracle的高可用-04(20240717)資料庫Oracle
- 資料庫PostrageSQL-管理資料庫資料庫SQL
- Oracle資料庫-----資料庫的基本概念Oracle資料庫
- oracle 備份資料庫,匯出資料庫Oracle資料庫
- DataX將MySql資料庫資料同步到Oracle資料庫MySql資料庫Oracle
- Agile PLM資料庫表結構(Oracle)資料庫Oracle
- 【SQL】Oracle資料庫資料量及效能資訊收集SQLOracle資料庫
- oracle資料庫建立、刪除索引等操作Oracle資料庫索引
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- idea內建資料庫 + sql語句庫表操作Idea資料庫SQL
- MySQL資料庫資料管理MySql資料庫
- Oracle資料庫配置Oracle資料庫
- DataX將Oracle資料庫資料同步到達夢資料庫Oracle資料庫
- Oracle資料庫遷移至PolarDb(阿里雲資料庫)Oracle資料庫阿里
- 查詢資料庫表及表欄位資料庫
- MySQL 資料庫操作MySql資料庫
- mongodb資料庫操作MongoDB資料庫
- 資料庫基本操作資料庫
- MongoDB 資料庫操作MongoDB資料庫
- laravel 資料庫操作Laravel資料庫
- 【SQL】Oracle資料庫通過job定期重建同步表資料SQLOracle資料庫
- Oracle資料庫分割槽表SPLIT操作導致歸檔瘋漲Oracle資料庫
- 瀚高資料庫自定義操作符'!~~'資料庫