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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

oracle表空间如何压缩,Oracle里表空间的压缩

發布時間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle表空间如何压缩,Oracle里表空间的压缩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于table空間的收縮是一個老生常談的問題,不過卻是一個一直都沒有很透徹的討論清楚過的問題。借ks_reny的機會,談談個人看法,有不及之處,希望高手引領更深入研究此話題。

datafile是物理上的一個文件在下層就是基于文件系統的block塊了,而我們經常提到的segment,extent,數據庫的 block,這里都是oracle存儲是的邏輯上的單位,所以首先設想一下如果是你來實現delete或者drop的操作的時候,你會是真正的調用文件系統的API,而重新把datafile重新整理一遍嗎,我想你也不會如此的吧。這樣的話,每個delete或者是drop的操作將會帶來我們更多的痛苦。所以Oracle更不會如此,這就是為什么你的datafile的大小并沒有發生變化的原因,那么,文件系統上雖然沒有重新修理datafile,但是 oracle里卻通過自己的實現,通過對內部邏輯單元的處理,在邏輯上已經刪除了那些單元,從而storage manage知道以后如果需要的連續block這里可以滿足的話,就把這個碎片填上了。所以對于oracle來說,他很清楚這里是可用的,這樣利用率也就小了變話了。

所以這里要解決你的問題就要使我們的datafile瘦身,只有datafile瘦下來了,你的data又不變化了,利用率也就上升了。那么如何讓你的datafile瘦下來?

1. exp/imp expdp/impdp 這個雖然原始,也比較繁瑣,但是確實是一個非常穩定可靠的方法。

2. resize resize面臨一個問題,resize到多大,大了沒有意義,小了出現錯誤。

這里特地寫了一個sql腳本,你可以使用運行這個腳本的結果,就是你指定的file做resize的命令

SQL> variable blocksize number;

SQL> begin execute immediate 'select value from v$parameter where name = ''db_block_size''' into :blocksize; end;

2 /

SQL>print :blocksize;

SQL> select 'alter database datafile ''' ||

2 file_name || ''' resize ' ||

3 ceil( nvl(hwm,1)*:blocksize/1024/1024 ) || 'm;' cmd

4 from dba_data_files a,

5 ( select file_id,

6 max(block_id+blocks-1) hwm

7 from dba_extents

8 group by file_id ) b

9 where a.file_id = b.file_id(+) and b.file_id in (7, 8, 10);

CMD

--------------------------------------------------------------------------------

alter database datafile 'F:\DEVELOPER\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST\TESTTS1.02.DBF' resize 18m;

alter database datafile 'F:\DEVELOPER\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST\TESTTS1.01.DBF' resize 5m;

alter database datafile 'F:\DEVELOPER\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST\TESTTS1.03.DBF' resize 40m;

執行這里的sql語句就可以了,不過這里注意了,這里可以看到,實際上是用最大的blocks作為resize的標準,如果size超過,或者是已經擴展過的block 就會出現 文件包含在請求的 RESIZE 值以外使用的數據的錯誤了,所以這個方法,可行但是并不是很實際。這樣的case基本上只在做練習的時候出現。

3. 如果你是一個表或者少量的表在那個表空間,可以通過creat table as select ...的方式或者move的方式,move完成后再干掉表空間,干掉表空間的時候,including contents and datefiles就可以了。

總結

以上是生活随笔為你收集整理的oracle表空间如何压缩,Oracle里表空间的压缩的全部內容,希望文章能夠幫你解決所遇到的問題。

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