oracle高水位线
| ?ORACLE在邏輯存儲(chǔ)上分4個(gè)粒度:?表空間,?段,?區(qū)?和?塊. ? ??????1.1?塊:?是粒度最小的存儲(chǔ)單位,現(xiàn)在標(biāo)準(zhǔn)的塊大小是8K,ORACLE每一次I/O操作也是按塊來(lái)操作的,也就是說(shuō)當(dāng)ORACLE從數(shù)據(jù)文件讀數(shù)據(jù)時(shí),是讀取多少個(gè)塊,而不是多少行.??每一個(gè)Block里可以包含多個(gè)row. ? ???????1.2?區(qū):?由一系列相鄰的塊而組成,這也是ORACLE空間分配的基本單位,舉個(gè)例子來(lái)說(shuō),當(dāng)我們創(chuàng)建一個(gè)表Dave時(shí),首先ORACLE會(huì)分配一區(qū)的空間給這個(gè)表,隨著不斷的INSERT數(shù)據(jù)到Dave,原來(lái)的這個(gè)區(qū)容不下插入的數(shù)據(jù)時(shí),ORACLE是以區(qū)為單位進(jìn)行擴(kuò)展的,也就是說(shuō)再分配多少個(gè)區(qū)給Dave,而不是多少個(gè)塊. ? ???????1.3?段:?是由一系列的區(qū)所組成,?一般來(lái)說(shuō),?當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí)(表,索引),就會(huì)分配一個(gè)段給這個(gè)對(duì)象.?所以從某種意義上來(lái)說(shuō),段就是某種特定的數(shù)據(jù).如CREATE TABLE Dave,這個(gè)段就是數(shù)據(jù)段,而CREATE INDEX ON Dave(NAME), ORACLE同樣會(huì)分配一個(gè)段給這個(gè)索引,但這是一個(gè)索引段了.查詢段的信息可以通過(guò)數(shù)據(jù)字典: SELECT * FROM USER_SEGMENTS來(lái)獲得. ? ???????1.4?表空間:?包含段,區(qū)及塊.表空間的數(shù)據(jù)物理上儲(chǔ)存在其所在的數(shù)據(jù)文件中.一個(gè)數(shù)據(jù)庫(kù)至少要有一個(gè)表空間 | ||
| ORACLE用HWM來(lái)界定一個(gè)段中使用的塊和未使用的塊。由于空間是為新插入的行保留的,并且要適應(yīng)現(xiàn)有行的增長(zhǎng)。被占用的最高空間稱為最高使用標(biāo)記?(HWM) ? ? ? ? ?1.當(dāng)我們創(chuàng)建一個(gè)表時(shí), ORACLE就會(huì)為這個(gè)對(duì)象分配一個(gè)段, 在這個(gè)段中即使我們未插入任何記錄, 也至少有一個(gè)區(qū)被分配, 第一 ? ? ? ? ? ? ?個(gè)區(qū)的第一個(gè)塊就稱為段頭塊(SEGMENT_HEADER), 段頭中就儲(chǔ)存了一些信息, 其中HWM的信息就存儲(chǔ)在此。 ? ? ? ? ? ?此時(shí), 因?yàn)榈谝?個(gè)區(qū)的第一塊用于存儲(chǔ)段頭的一些信息, 雖然沒(méi)有存儲(chǔ)任何實(shí)際的記錄, 但也算是被使用, 此時(shí)HWM是位于第2個(gè) ? ? ? ? ? ? ?塊, 當(dāng)我們不斷插入數(shù)據(jù)后, 第一個(gè)塊已經(jīng)放不下后面新插入的數(shù)據(jù), 此時(shí), ORACLE將高水位之上的塊用于存儲(chǔ)新增數(shù)據(jù), 同時(shí), ? ? ? ? ? ? HWM本身也向上移, 也就是說(shuō), 當(dāng)我們不斷插入數(shù)據(jù)時(shí), HWM會(huì)不斷上移, 這樣, 在HWM之下的, 就表示使用過(guò)的塊。 HWM之上 ? ? ? ? ? ? 的就表示已分配但從未使用過(guò)的塊。 ????????2 .HWM在插入數(shù)據(jù)時(shí), 當(dāng)現(xiàn)有空間不足而進(jìn)行空間的擴(kuò)展時(shí)會(huì)向上移, 但刪除數(shù)據(jù)時(shí)不會(huì)往下移。 ? ? ? ??3 .HWM本身的信息是存儲(chǔ)在段頭?: ? ? ? ? ? ? ? ? ? 在段空間是手工管理方式時(shí), ORACLE是通過(guò)FREELIST(一個(gè)單向鏈表)來(lái)管理段內(nèi)的空間分配, ? ? ? ? ? ? ? ? ? 在段空間是自動(dòng)管理方式時(shí), ORACLE是通過(guò)BITMAP來(lái)管理段內(nèi)的空間分配。 ????????4 .ORACLE的全表掃描是讀取高水位標(biāo)記(HWM)以下的所有塊。 ? ? ? ? 5.HWM通常增長(zhǎng)的幅度為一次5個(gè)數(shù)據(jù)塊,原則上HWM只會(huì)增大,不會(huì)縮小,即使將表中的數(shù)據(jù)全部刪除,HWM還是為原值,但 ? ? ? ? ? ?是如果我們?cè)诒砩鲜褂昧藅runcate命令,則該表的HWM會(huì)被重新置為0,這條高水位線在日常的增刪操作中只會(huì)上漲,不會(huì)下跌 ?所以問(wèn)題就產(chǎn)生了, 當(dāng)用戶發(fā)出一個(gè)全表掃描時(shí), ORACLE始終必須從段一直掃描到HWM, 即使它什么也沒(méi)有發(fā)現(xiàn)。 該任務(wù)延長(zhǎng)了全表 ?掃描的時(shí)間。 | ||
| 低HWM: ??? 在管理段的時(shí)候通常有兩種方法:手動(dòng)管理段空間(Manual Segment Space Management )和自動(dòng)段空間(Automatic Segment Space Management) 在手動(dòng)段空間管理(Manual Segment Space Management)中,段中只有一個(gè)HWM,但是在Oracle 9i Release1才添加的自動(dòng)段空間管理(Automatic Segment Space Management)中,又有了一個(gè)低HWM的概念出來(lái)。為什么有了HWM還又有一個(gè)低HWM呢,這個(gè)是因?yàn)樽詣?dòng)段空間管理的特性造成的。 在手段段空間管理中,當(dāng)數(shù)據(jù)插入以后,如果是插入到新的數(shù)據(jù)塊中,數(shù)據(jù)塊就會(huì)被自動(dòng)格式化等待數(shù)據(jù)訪問(wèn)。而在自動(dòng)段空間管理中,數(shù)據(jù)插入到新的數(shù)據(jù)塊以后,數(shù)據(jù)塊并沒(méi)有被格式化,而是在第一次訪問(wèn)這個(gè)數(shù)據(jù)塊的時(shí)候才格式化這個(gè)塊。所以我們又需要一條水位線,用來(lái)標(biāo)示已經(jīng)被格式化的塊。這條水位線就叫做低HWM。一般來(lái)說(shuō),低HWM肯定是低于等于HWM的。 | ||
| HWM數(shù)據(jù)庫(kù)的操作有如下影響: a) 全表掃描通常要讀出直到HWM標(biāo)記的所有的屬于該表數(shù)據(jù)庫(kù)塊,即使該表中沒(méi)有任何數(shù)據(jù)。 b) 即使HWM以下有空閑的數(shù)據(jù)庫(kù)塊,鍵入在插入數(shù)據(jù)時(shí)使用了append關(guān)鍵字,則在插入時(shí)使用HWM以上的數(shù)據(jù)塊,此時(shí)HWM會(huì)自動(dòng)增大。 | ||
| 使用delete不能使高水位線降低,使用truncate可以使用高水位線降低,所以當(dāng)刪除整表數(shù)據(jù)或者分區(qū)最好是用truncate, ? TRUNCATE命令回收了由delete命令產(chǎn)生的空閑空間為了保留由delete命令產(chǎn)生的空閑空間,可以使用TRUNCATE TABLE 55LINUX REUSE STORAGE.用此命令后,該表還會(huì)是原先的1024塊 ? 采用TRUNCATE語(yǔ)句刪除一個(gè)表的數(shù)據(jù)的時(shí)候,類似于重新建立了表,不僅把數(shù)據(jù)都刪除了,還把HWM給清空恢復(fù)為0。所以如果需要把表清空,在有可能利用TRUNCATE語(yǔ)句來(lái)刪除數(shù)據(jù)的時(shí)候就利用TRUNCATE語(yǔ)句來(lái)刪除表,特別是那種數(shù)據(jù)量有可能很大的臨時(shí)存儲(chǔ)表。 | ||
| 在9i的時(shí)候,一個(gè)很成熟的碎片整理技術(shù)。 整理表碎片通常的方法是move表 高水位以下合并碎片,不移動(dòng)高水位 當(dāng)然move是不能在線進(jìn)行的, 不跟參數(shù)表還是在原來(lái)的表空間 而且move后相應(yīng)的索引也會(huì)失效,需要重建 如果以后還要繼續(xù)向這個(gè)表增加數(shù)據(jù),沒(méi)有必要move,只是釋放出來(lái)的空間,只能這個(gè)表用,其他的表或者segment無(wú)法使用該空間 | table在進(jìn)行move操作時(shí),我們只能對(duì)它進(jìn)行select的操作,DML會(huì)全部阻塞(move生成的undo和redo是非常少的)。反過(guò)來(lái)說(shuō),當(dāng)我們的一個(gè)session對(duì)table進(jìn)行DML操作且沒(méi)有commit時(shí),? | ? |
| ? ? ?oracle在10g時(shí)候提供了shrink space碎片整理功能,不僅能整理碎片還可以收縮高水位,索引也不需要重建。 shrink的一個(gè)優(yōu)點(diǎn)是能在線進(jìn)行,不影響表上的DML操作,當(dāng)然,并發(fā)的DML操作在shrink結(jié)束的時(shí)刻會(huì)出現(xiàn)短暫的block;? ? SHRINK(收縮) TABLE(表空間收縮) 實(shí)質(zhì)上構(gòu)造一個(gè)新表(在內(nèi)部表現(xiàn)為一系列的DML操作,即將副本插入新位置,刪除原來(lái)位置的記錄)靠近末尾處(右端)數(shù)據(jù)塊中的記錄往開始處(左端)的空閑空間處移動(dòng)(DML操作),不會(huì)引起DML觸發(fā)器當(dāng)所有可能的移動(dòng)被完成,高水位線將會(huì)往左端移動(dòng)(DDL操作),新的高水位線右邊的空閑空間被釋放(DDL操作) ???? ???從10g開始, ORACLE開始提供SHRINK的命令, 假如我們的表空間中支持自動(dòng)段空間管理(ASSM), 就可以使用這個(gè)特性縮小段, 即降低HWM。 10g的這個(gè)新特性,?必須啟用行記錄轉(zhuǎn)移(enable row movement)僅僅適用于堆表,且位于自動(dòng)段空間管理的表空間(堆表包括:標(biāo)準(zhǔn)表,分區(qū)表,物化視圖容器,物化視圖日志表) ???????如果經(jīng)常在表上執(zhí)行DML操作, 會(huì)造成數(shù)據(jù)庫(kù)塊中數(shù)據(jù)分布稀疏, 浪費(fèi)大量空間。 同時(shí)也會(huì)影響權(quán)標(biāo)掃描的性能。 因?yàn)槿頀呙栊枰L問(wèn)更多的數(shù)據(jù)塊。從oracle10g開始, 表可以通過(guò)SHRINK來(lái)重組數(shù)據(jù)使數(shù)據(jù)分布更緊密, 同時(shí)降低HWM釋放空閑數(shù)據(jù)塊。??????? | shrink必須開啟行遷移功能。 segment shrink分為兩個(gè)階段: 1 數(shù)據(jù)重組(compact): 執(zhí)行ALTER TABLE test SHRINK SPACE compact: 通過(guò)一系列insert、delete操作, 將數(shù)據(jù)盡量排列在段的前面。 在這個(gè)過(guò)程中需要在表上加RX鎖, 即只在需要移動(dòng)的行上加鎖。由于涉及到rowid的改變, 需要enable row movement, 同時(shí)要disable基于rowid的trigger。 這一過(guò)程對(duì)業(yè)務(wù)影響比較小。 2. HWM調(diào)整: 執(zhí)行ALTER TABLE test SHRINK SPACE: 調(diào)整HWM位置, 釋放空閑數(shù)據(jù)塊第一步中的結(jié)果已經(jīng)存儲(chǔ)到磁盤,不會(huì)重新在整理碎片,只是收縮高水位,釋放空間。此過(guò)程需要在表上加X鎖, 會(huì)造成表上的所有DML語(yǔ)句阻塞。在業(yè)務(wù)特別繁忙的系統(tǒng)上可能造成比較大的影響。 ? ? 如果系統(tǒng)業(yè)務(wù)比較繁忙, 可以先執(zhí)行shrink space compact重組數(shù)據(jù), 然后在業(yè)務(wù)不忙的時(shí)候再執(zhí)行shrink space降低HWM釋放空閑數(shù)據(jù)塊。 ? ? | ? |
| 我們先看下shrink的工作原理,shrink的算法是從segment的底部開始,移動(dòng)row到segment的頂部,移動(dòng)的過(guò)程相當(dāng)于delete/insert操作的組合,在這個(gè)過(guò)程中會(huì)產(chǎn)生大量的undo和redo信息。在HP Unix上還存在BUG,在10.1.0.3.0中,在shrink的時(shí)候可能會(huì)觸發(fā)BUG 3888229,產(chǎn)生巨大數(shù)量的redo和undo。move是直接移動(dòng)數(shù)據(jù)塊的位置,鑒于上面的原因,在使用shrink的時(shí)候,耗時(shí)可能非常長(zhǎng),通常慢于move。 對(duì)于空間的要求,shrink不需要額外的空間,move需要兩倍的空間。 通過(guò)上面的分析,shrink雖然有online的特性,但是也存在很多問(wèn)題,所以,在進(jìn)行表碎片整理的時(shí)候,還是建議停機(jī)檢修,使用move,以下是一些move時(shí)候的注意點(diǎn):? | ? | |
| 1. move過(guò)程中需要額外的表空間,需要的大小大約等于當(dāng)前表中數(shù)據(jù)量的大小,move結(jié)束后立即釋放該額外空間。? 2. move過(guò)程中對(duì)表加排它鎖,會(huì)影響其他session的DML操作。? 3. move操作并不會(huì)維護(hù)索引,因此move完畢后需要對(duì)索引rebuild。? 4. move操作會(huì)降低HWM,但是并不會(huì)釋放HWM以上的空塊,也就是說(shuō),move只會(huì)對(duì)HWM以下的塊進(jìn)行操作。? 5. move操作的一些相關(guān)測(cè)試數(shù)據(jù):以2000000數(shù)據(jù)(233M)為例,刪除800000條數(shù)據(jù),執(zhí)行move操作。? 大概用時(shí)4秒,共產(chǎn)生了319K的redo,56K的undo。表由233M縮小至145M。? 6. move操作可以完全消除行遷移。? 7. move操作后,為表分配的數(shù)據(jù)段位置發(fā)生了改變,即段頭塊的位置發(fā)生了改變。 | shrink過(guò)程中并沒(méi)有用到額外的表空間。 shrink操作其實(shí)可以分為兩步:? 第一步:對(duì)數(shù)據(jù)進(jìn)行重組,即只會(huì)整理碎片,不會(huì)降低高水位,也就是說(shuō)不會(huì)釋放空間。? 通過(guò)一系列的delete/insert組合來(lái)完成,具體的語(yǔ)法是 alter table t1 shrink space compact。該過(guò)程會(huì)在表上加共享鎖,在移動(dòng)的行中加排它鎖。并且會(huì)維護(hù)索引。? 第二步:降低HWM,回收空間,與move不同的是,shrink可以回收HWM以上的塊。該過(guò)程會(huì)在表上加排它鎖,因此業(yè)務(wù)繁忙時(shí)并不適合執(zhí)行該降低HWM的操作。 shrink操作會(huì)維護(hù)索引,但是不會(huì)對(duì)索引進(jìn)行碎片整理。如果加入cascade選項(xiàng),那么維護(hù)索引的同時(shí)會(huì)對(duì)索引進(jìn)行碎片整理。 shrink操作的一些相關(guān)測(cè)試數(shù)據(jù):以2000000數(shù)據(jù)(233M)為例,刪除800000條數(shù)據(jù),分兩步執(zhí)行shrink操作。? 數(shù)據(jù)重組大概用時(shí)1分鐘58秒,共產(chǎn)生了895M的redo,353M的undo。回收HWM階段僅用1秒,產(chǎn)生了4K的redo,1K的undo。表由233M縮小至226M。 shrink操作不能完全消除行遷移。 shrink操作后,為表分配的數(shù)據(jù)段位置并沒(méi)有發(fā)生變化,即段頭塊的位置沒(méi)有改變。 | ? |
| create table HWM as select * from dba_objects;SQL> SELECT segment_name, segment_type, blocks FROM dba_segmentsWHERE segment_name='HWM'; DBA_SEGMENTS.BLOCKS 表示分配給這個(gè)表的所有的數(shù)據(jù)庫(kù)塊的數(shù)目SQL> ANALYZE TABLE hwm ESTIMATE STATISTICS; SQL> SELECT table_name,num_rows,blocks,empty_blocksFROM user_tablesWHERE table_name='HWM';USER_TABLES.BLOCKS表示已經(jīng)使用過(guò)的數(shù)據(jù)庫(kù)塊的數(shù)目,即水線。
USER_TABLES.EMPTY_BLOCKS 代表分配給該表,
但是在水線以上的數(shù)據(jù)庫(kù)塊,即從來(lái)沒(méi)有使用的數(shù)據(jù)塊。BLOCKS + EMPTY_BLOCKS (700+323=1023)比DBA_SEGMENTS.BLOCKS少1個(gè)數(shù)據(jù)庫(kù)塊,
這是因?yàn)橛幸粋€(gè)數(shù)據(jù)庫(kù)塊被保留用作segment header。
DBA_SEGMENTS.BLOCKS 表示分配給這個(gè)表的所有的數(shù)據(jù)庫(kù)塊的數(shù)目。
USER_TABLES.BLOCKS表示已經(jīng)使用過(guò)的數(shù)據(jù)庫(kù)塊的數(shù)目。SQL> SELECT COUNT (DISTINCTDBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)||DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) "Used"FROM hwm;有多少塊容納數(shù)據(jù)SQL> delete from hwm;
SQL> commit;
SQL> ANALYZE TABLE hwm ESTIMATE STATISTICS;
SQL> SELECT table_name,num_rows,blocks,empty_blocksFROM user_tablesWHERE table_name='HWM';SQL> TRUNCATE TABLE hwm;
SQL> ANALYZE TABLE hwm ESTIMATE STATISTICS;
SQL> SELECT table_name,num_rows,blocks,empty_blocksFROM user_tablesWHERE table_name='HWM'; ? | ? | |
| move | alter table xxx move ? ? --壓縮快之后所有索引都會(huì)失效,需要重建一下索引 ? 高水位以下合并碎片,同時(shí)壓縮表,不移動(dòng)高水位。 | ? |
| 釋放未 使用空 間 | DEALLOCATE UNUSED為釋放HWM上面的未使用空間,但是并不會(huì)釋放HWM下面的自由空間,也不會(huì)移動(dòng)HWM的位置. Alter??table table_name deallocate unused | ? |
| 查詢失效索引語(yǔ)句 | select index_name,table_name,tablespace_name,status From dba_indexes Where owner='ISC' And status<>'VALID'; | ? |
| ? | select file_id,bytes/1024/1024 from dba_free_space where tablespace_name='TEST'; | ? |
| ? | 普通表 ?????????Sql腳本,改腳本會(huì)生成相應(yīng)的語(yǔ)句 ?????????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; ?????????分區(qū)表 ?????????進(jìn)行shrink space時(shí) 發(fā)生ORA-10631錯(cuò)誤.shrink space有一些限制. ?????????在表上建有函數(shù)索引(包括全文索引)會(huì)失敗。 ?????????Sql腳本,改腳本會(huì)生成相應(yīng)的語(yǔ)句???? | ? |
| ? | 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' '; | ? |
| 啟動(dòng)關(guān)閉行遷移 | alter table?table_name?enable row movement ; alter table?table_name disable row movement;? 注意, alter table table_name row movement語(yǔ)句會(huì)造成引用表table_name的對(duì)象(如存儲(chǔ)過(guò)程、包、視圖等)變?yōu)闊o(wú)效。 需要執(zhí)行utlrp.sql來(lái)編譯無(wú)效的對(duì)象。? | ? |
| 把碎片率高的表找出,按表的空間大小排序找出來(lái),不支持壓縮表 | select 'drop table ' || segment_name || ' purge;', sum(bytes)/1024/1024 Mbytese? from user_segments a , user_tables b where segment_type='TABLE' ? and a.segment_name=b.TABLE_NAME? and b.COMPRESSION='DISABLED'? group by segment_name,COMPRESSION? order by sum(bytes)/1024/1024 desc; | ? |
| SHRINK(收縮)? | alter table table_name shrink space [<null> | compact | cascade] ; 大表可同時(shí)降低表自身和表空間的高水位線,小表則只可以降低表自身的高水位線 ? 收縮表, 相當(dāng)于把塊中數(shù)據(jù)打結(jié)實(shí)了, 但會(huì)保持high water mark 。 ? 收縮表, 降低high water mark, 并把相關(guān)索引也要收縮一下。 回縮索引。 | ? |
| ? 統(tǒng)計(jì)信息 | 因?yàn)樗械男畔⒍际歉鶕?jù)dba_tables,表的信息是根據(jù)統(tǒng)計(jì)信息得到的,所以如果統(tǒng)計(jì)信息不準(zhǔn)確,那么整個(gè)搜索的結(jié)果都可能是錯(cuò)誤的 exec dbms_stats.gather_table_stats('user','table_name'); exec dbms_stats.gather_table_stats(user,'test1',estimate_percent=>100); exec dbms_stats.gather_table_stats(user,'ISC_USER',CASCADE=>TRUE); ? select table_name,last_analyzed from user_tables where table_name = 'ISC_USER' order by last_analyzed desc ; | ? |
| ?查找數(shù)據(jù)庫(kù)中某個(gè)表空間下,可以實(shí)際存儲(chǔ)和需要的表空間差別最大的表 | SELECT NUM_ROWS,AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9 NEED, BLOCKS*8/1024 TRUE, (BLOCKS*8/1024-AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9) RECOVER_MB, TABLE_NAME FROM dba_tables WHERE tablespace_name='PSAPSR3' AND BLOCKS*8/1024-AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9>100 SELECT table_name, ROUND((blocks * 8/1024), 2) "高水位空間 M", ROUND((num_rows * avg_row_len / 1024/1024), 2) "真實(shí)使用空間 M", ROUND((blocks * 10 / 100) * 8, 2) "預(yù)留空間(pctfree) M", ROUND((blocks * 8 - (num_rows * avg_row_len / 1024) -blocks * 8 * 10 / 100), 2) "浪費(fèi)空間 M", ((blocks * 8-(num_rows * avg_row_len / 1024))/1024)/(blocks * 8/1024) "浪費(fèi)空間 %" FROM user_tables WHERE table_name = 'ISC_USER'; | ? |
| Oracle 9i: ???????(1)如果是INEXTENT,?可以使alter table tablename deallocate unused將HWM以上所有沒(méi)使用的空間釋放 ???????(2)?如果MINEXTENT >HWM?則釋放MINEXTENTS?以上的空間。如果要釋放HWM以上的空間則使用KEEP 0。 ???????SQL>alter table tablesname deallocate unused keep 0; ???????(3)truncate table drop storage(缺省值)命令可以將MINEXTENT?之上的空間完全釋放(交還給操作系統(tǒng)),并且重置HWM。 ???????(4)如果僅是要移動(dòng)HWM,而不想讓表長(zhǎng)時(shí)間鎖住,可以用truncate table reuse storage,僅將HWM重置。 ???????(5)ALTER TABLE MOVE會(huì)將HWM移動(dòng),但在MOVE時(shí)需要雙倍的表空間,而且如果表上有索引的話,需要重構(gòu)索引 ???????(6)DELETE表不會(huì)重置HWM,也不會(huì)釋放自由的空間(也就是說(shuō)DELETE空出來(lái)的空間只能給對(duì)象本身將來(lái)的INSERT/UPDATE使用,不能給其它的對(duì)象使用) ? Oracle 10g: ???????(1)可以使用alter table test_tab shrink space命令來(lái)聯(lián)機(jī)移動(dòng)hwm, ???????(2)如果要同時(shí)壓縮表的索引,可以發(fā)布:alter table test_tab shrink space cascade | ? | |
?
總結(jié)
以上是生活随笔為你收集整理的oracle高水位线的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Iptables防火墙原理
- 下一篇: 好用的yum