oracle Shrink命令的使用

2021-12-30 00:44:59 字數 2635 閱讀 5239

從10g開始,oracle開始提供shrink的命令,假如我們的表空間中支援自動段空間管理 (assm),就可以使用這個特性縮小段,即降低hwm。 

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 *** enable row movement語句會造成引用表***的物件(如儲存過程、包、檢視等)變為無效。執行完成後,最好執行一下utlrp.sql來編譯無效的物件。 

語法: 

alter table shrink space [ | compact | cascade ]; 

alter table shrink space compcat;   www.2cto.com  

收縮表,相當於把塊中資料打結實了,但會保持 high water mark; 

alter table shrink space; 

收縮表,降低 high water mark; 

alter table 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』 ;    www.2cto.com  

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;   

作者 13594135

Linux 命令 與命令相關的命令

hash 第一次請求時會遍歷磁碟找命令,此時命令的路徑會以 形式儲存,執行hash命令會找到命令的路徑,第二次命令直接去hash表中找 hash r可以清除這個 man 安裝man的時候除了man還要安裝man pages man只包含了最基本的,詳細的資訊由man pages提供 1 使用者命令 ...

Linux ipcs命令與ipcrm命令的用法詳解

以下是對linux中的ipcs命令與ipcrm命令的用法進行了介紹,需要的朋友可以過來參考下 是linux uinx上提供關於一些程序間通訊方式的資訊,包括共享記憶體,訊息佇列,訊號 ipcs用法 ipcs a 是預設的輸出資訊 列印出當前系統中所有的程序間通訊方式的資訊 ipcs m 列印出使用共...

常用的linux命令 rcp命令

命令格式 rcp 引數 原始檔 目標檔案 命令功能 rcp命令用在遠端複製檔案或者目錄,如同時指定倆個以上的檔案或目錄,且最後的目的地是乙個已經存在的目錄,則它會把前面指定的所有檔案或目錄複製到該目錄中 命令例項 1.將當前目錄下的test1 複製到名為 webserver1的遠端系統中 rcp t...