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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Oracle减小数据文件大小

發布時間:2024/1/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle减小数据文件大小 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

收集表空間的統計信息,查詢表空間的使用率

-- 查詢非臨時表空間的使用率

SELECT d.Tablespace_Name,

?????? Space "SUM_SPACE(M)",

?????? Blocks "SUM_BLOCKS",

?????? Space - Nvl(Free_Space, 0) "USED_SPACE(M)",

?????? Round((1 - Nvl(Free_Space, 0) / Space) * 100, 2) "USED_RATE(%)",

?????? Free_Space "FREE_SPACE(M)"

? FROM (SELECT Tablespace_Name,

?????????????? Round(SUM(Bytes) / (1024 * 1024), 2) Space,

?????????????? SUM(Blocks) Blocks

????????? FROM Dba_Data_Files

???????? GROUP BY Tablespace_Name) d,

?????? (SELECT Tablespace_Name,

?????????????? Round(SUM(Bytes) / (1024 * 1024), 2) Free_Space

????????? FROM Dba_Free_Space

???????? GROUP BY Tablespace_Name) f

?WHERE d.Tablespace_Name = f.Tablespace_Name(+)

如果表空間的使用率較低,可以通過resize datafile減小數據文件的大小

需要清楚數據文件的真實使用空間,可以通過查詢dba_extents

SELECT Ddf.File_Name, De.File_Id, SUM(De.Bytes) / 1024 / 1024 AS Mb

? FROM Dba_Extents De

? JOIN Dba_Data_Files Ddf

??? ON De.File_Id = Ddf.File_Id

?GROUP BY Ddf.File_Name, De.File_Id;

可以看出DEV1_oim02.dbf 實際使用空間為304.6M,但實際存儲中可能存在很多存儲碎片,例如收縮到1024M,就會出現如下的錯誤。

SQL> alter database datafile 115 resize 1024M;

alter database datafile 115 resize 1024M

*

ERROR at line 1:

ORA-03297: file contains used data beyond requested RESIZE value

這種情況可能有以下原因

原因1:壓縮表空間大小,最小必須是該表空間目前最大塊段的大小

? ? ? ? ? ? ---可以通過移動表空間來收縮表空間大小。
原因2:表的初始大小分配的太大

? ? ? ? ? ? ---可以通過減小表或索引的初始大小來收縮表空間

但在實際過程中對于表空間中表比較多,且關系比較復雜的時候,操作是有難度的,可以直接找出最小可收縮大小。

找出目前DEV1_OIM最大的block_id

SELECT MAX(block_id)

? FROM dba_extents

?WHERE tablespace_name = 'DEV1_OIM';

?

MAX(BLOCK_ID)

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

1008888

Block大小

SQL>? show parameter db_block_size ;

?

NAME???????????????????????????????? TYPE??????? VALUE

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

db_block_size???????? ???????????????integer???? 8192

?

SQL> SELECT 1008888 * 8192 / 1024 / 1024 FROM Dual;

7881.9375

因此該表空間收縮到7882M是沒有問題的。

總結

以上是生活随笔為你收集整理的Oracle减小数据文件大小的全部內容,希望文章能夠幫你解決所遇到的問題。

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