久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

oracle刪除數(shù)據(jù)但表空間占用率沒有減小的情況

瀏覽:23日期:2023-03-12 15:25:29
目錄
  • oracle刪除數(shù)據(jù)但表空間占用率沒有減小
  • oracle 大表刪除數(shù)據(jù)后,回收空間的問題
    • 一般有一下幾種方法
  • 總結(jié)

    oracle刪除數(shù)據(jù)但表空間占用率沒有減小

    使用delete刪除數(shù)據(jù)表空間使用率并沒有減少;

    如果只保留少數(shù)數(shù)據(jù)可以使用這個(gè)方法:

    先將要保留的數(shù)據(jù)insert到另外一張表中,然后執(zhí)行sql:

    truncate table tablename DROP STORAGE;

    解釋: 直接刪除表,并且釋放存儲(chǔ)空間。truncate的意思是清空表數(shù)據(jù), “DROP STORAGE”是釋放存儲(chǔ)空間。

    然后在將備份數(shù)據(jù)還原;

    oracle 大表刪除數(shù)據(jù)后,回收空間的問題

    在oracle中由于表結(jié)構(gòu)設(shè)計(jì)不合理或者需要清楚老數(shù)據(jù)的時(shí)候,經(jīng)常需要對(duì)大表數(shù)據(jù)進(jìn)行清理。

    一般有一下幾種方法

    1.刪除大部分?jǐn)?shù)據(jù),留下小部分?jǐn)?shù)據(jù)。我們可以把需要保留的數(shù)據(jù)轉(zhuǎn)移到別的表,然后再把大表drop掉,然后改名就行了;

    a) create table tablename_min as select * from tablename_max a where 需要保留的數(shù)據(jù).

    b) drop table tablename_max ;

    c) rename tablename_min as tablename_max ;

    這樣就能清除這個(gè)大表的hwm,而且釋放掉其他空間。

    2.當(dāng)刪除的數(shù)據(jù)只是一小部分?jǐn)?shù)據(jù)的話,第一種方法就不適用了。比如 3億條數(shù)據(jù),你刪除一億條數(shù)據(jù)的話,用1就不合適。

    這時(shí)我們就應(yīng)該考慮使用shrink table的方式。

    a) 我們可以先用delete from tablename_max;

    b) 由于我們進(jìn)行了數(shù)據(jù)的delete 所以造成了 tablename_max 這張表的數(shù)據(jù)稀疏,數(shù)據(jù)塊并沒有減少,hwm也沒有減少,這樣就會(huì)影響全表掃描需要訪問更多的數(shù)據(jù)塊。這時(shí)我們可以通過shrink來重組數(shù)據(jù)使數(shù)據(jù)分布更緊密,同時(shí)降低HWM釋放空閑數(shù)據(jù)塊。

    c)由于需要移動(dòng)行數(shù)據(jù),數(shù)據(jù)的rowid會(huì)發(fā)生變化,所以需要設(shè)置表的row movement屬性:

    alter table tablename_max enable row movement; --開啟行遷移功能。
    alter table tablename_max shrink space compact;--(可以在壓縮期間進(jìn)行DML操作和查詢) ,收縮表,不會(huì)降低hwm
    alter table tablename_max shrink space; --( 調(diào)整HWM時(shí)將阻塞DML操作),收縮表,并且降低hwm
    alter table tablename_max shrink space cascade;--收縮表并降低hwm,并且回收相應(yīng)的索引。

    由于我們刪除了大量的數(shù)據(jù) ,相應(yīng)的索引也進(jìn)行了刪除,這時(shí)需要對(duì)索引進(jìn)行收縮。

    alter index idxname shrink space;

    注意:shrink table只會(huì)針對(duì)assm(自動(dòng)段空間管理)的表有用,否則會(huì)報(bào): ORA-10635: Invalid segment or tablespace type。

    alter table tablename_max enable row movement語句會(huì)造成引用表tablename_max的對(duì)象(如存儲(chǔ)過程、包、視圖等)變?yōu)闊o效。執(zhí)行完成后,最好執(zhí)行一下utlrp.sql來編譯無效的對(duì)象。

    由于是通過DML操作進(jìn)行的,會(huì)產(chǎn)生大量redo,注意archivelog目錄的空間大小問題;同時(shí)undo表空間也會(huì)暴增。

    總結(jié)

    以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持。

    標(biāo)簽: Oracle
    相關(guān)文章:
    主站蜘蛛池模板: 肥乡县| 灵璧县| 临沧市| 宁武县| 丹巴县| 西和县| 日土县| 和顺县| 巨鹿县| 丰宁| 罗江县| 和林格尔县| 曲松县| 建湖县| 六盘水市| 广昌县| 马关县| 禄劝| 长宁区| 越西县| 东乡| 石林| 阿巴嘎旗| 阳新县| 钟山县| 六枝特区| 蒙自县| 高雄县| 伽师县| 泊头市| 乌兰浩特市| 柳林县| 文安县| 马边| 广州市| 定南县| 竹北市| 盐津县| 江阴市| 邢台市| 临安市|