重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
這篇文章主要介紹“分析Oracle表數據庫高水位及shrink操作”,在日常操作中,相信很多人在分析Oracle表數據庫高水位及shrink操作問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”分析Oracle表數據庫高水位及shrink操作”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
成都創新互聯是專業的驛城網站建設公司,驛城接單;提供網站建設、網站設計,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行驛城網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
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
alter table
收縮表,相當于把塊中數據打結實了,但會保持 high water mark;
alter table
收縮表,降低 high water mark;
alter table
收縮表,降低 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;
到此,關于“分析Oracle表數據庫高水位及shrink操作”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注創新互聯網站,小編會繼續努力為大家帶來更多實用的文章!