日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HWM和delete,drop,truncate的关系

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HWM和delete,drop,truncate的关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HWM和delete,drop,truncate的關系 HWM和delete,drop,truncate的關系 =========================================================== ---------------------------------------------------------------

今天下午好好看了oracle中的HWM,也就是高水位線,高水位線是一個段內使用和未使用的數據塊的分界線。

Select * from user_tables where table_name=’TEST03’

其中有blocksempty_blocksnum_rows其中的blocks也就是此表所占用的block數量,empty_blocks空的blocknum_rows數據行數。User_tablesblocks也就是HWM

User_segment數據字典視圖:blocks就是此segment分配的blocks總數,header_block就是此段斷頭所在的數據塊編號等。

HWM的信息存儲在段頭中,根據段空間自動管理中是用位圖來管理段內的空間分配

Deletetruncatedrop和高水位線的關系

Delete

delete只是把刪除了高水位線下的block內的數據,但是不會降低高水位線,空閑的數據塊供以后數據插入使用,delete也不會回收表段的數據擴展,delete所作的只是更新了block的內的數據塊,不會對segmentHWMextent改變。

Truncate

truncate table test02 drop storage 截斷表,重置HWM,回收unusedblocktablespace中去供其余的對象使用

truncate的實質是:

truncate是新建一個segment然后與現有對象關聯, truncate table tablename drop toragesegment中會新建segment,重構的initial大小的段,但是initial不一定是一個擴展的大小,很有可能是多個extent組成了initial段的大小。create table storage(initial 6M),此時oracle會為表段分配初始段initial大小6M,很有可能就是由多個extent組成的!

Truncateflashback

早上truncate一個table 然后flashck出錯

flashback table test01 to timestamp to_timestamp('2011-9-13 17:00:00','yyyy-mm-dd hh24:mi:ss')

如果對table進行ddl操作,例如truncate然后再flashback,因為flashback利用的是放置在undo tablespace的回滾段,truncateddl沒有走回滾段,所以無法閃回表,也就會報上述的表的定義已經更改,所以truncate也叫截斷表,改變了表的“內部的一些東西”。

表內部零散blockstruncate

整理表內部的碎片,可以用truncate跟上reuse storage,重新導入/插入數據,由于重置了新的segment,所以也可以解決段的內部零散blocks

Drop

drop是直接刪除數據字典中的表的信息,當然也不存在段的任何信息,HWM也就沒有必要再提了。

(一般如果drop大的表時,先truncate然后再drop)

降低段的HWM

alter table test02 move會將hwm移動,但是在move時需要雙倍的表空間,如果表上有索引需要alter index indexname rebuild

alter table test02 shrink space收縮表 降低HWM

alter table test02 shrink space compact收縮表,但是不會降低HWM

(還可以利用expimpsegment中去來改變HWM,覺得可以新建segment然后exp,imp到新的segment來改變HWM,是否其中還有別的方法。)

回收段內的unused數據擴展但是并不能降低HWM

使用alter table test02 deallocate unused會回收unused狀態的extents,也就是會回收segment中高水位線以上的數據塊,但是并不能改變segment中的高水位線。

HWM和全表掃描:

oracle的全表掃描是讀取高水位線HWM一下的所有block,當用戶直接路徑插入行時,直接用append提示插入或sqlldr插入,數據塊直接置于HWM之上,不再使用extents中得unused block

直接插入和HWM

insert /*+append*/ into test01 values(1,'am')

(使用append 而且alter table tablename nologging模式會大量減少日志,只產生少數undoappend減少了空間的搜索,產生redo減少) 所以append方式會比平常的insert快,這里具體redo undo后續還要實際實驗。

?

SegmentHWM

create table test03 select * from test01 where 1<>1

即使此時test03中沒有任何數據,但是oracle中還是分配一個extent也就是8 blocks給此段,剛好db_block_size8K的也就是64K給此表段,此高水位線blocks0,然后后續的dml操作會增加HWM,如果沒有shrinkmove等操作,一般HWM都只會往上增,不會減少。

posted on 2012-11-15 22:13 Anders' Yan 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/yansc/archive/2012/11/15/2772336.html

總結

以上是生活随笔為你收集整理的HWM和delete,drop,truncate的关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。