如何解決表空間不足問題(數據文件達到最大值)

如何解決表空間不足即數據文件達到最大值問題

Oracle在實際業務應用中,隨着業務的發展,數據量逐漸增多,會遇到一個普遍性問題,那就是表空間不足的問題。表空間不足問題的本質是數據文件中存儲數據的大小達到了數據文件容量的最大值。

如果,不幸的遇到了表空間不足的問題時,我們要該如何處理呢?

1、可以先查詢對應的表空間的最大空間,和可用空間,查找出哪個表空間查找不足的情況,具體代碼如下:

SELECT UPPER(F.TABLESPACE_NAME) "表空間名",
 D.TOT_GROOTTE_MB "表空間大小(M)",
 D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",
 TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
 2),
 '990.99') || '%' "使用比(%)",
 F.TOTAL_BYTES "空閒空間(M)",
 F.MAX_BYTES "最大塊(M)"
 FROM (SELECT TABLESPACE_NAME,
 ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
 ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
 FROM SYS.DBA_FREE_SPACE
 GROUP BY TABLESPACE_NAME) F,
 (SELECT DD.TABLESPACE_NAME,
 ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
 FROM SYS.DBA_DATA_FILES DD
 GROUP BY DD.TABLESPACE_NAME) D
 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
 ORDER BY F.TABLESPACE_NAME

結果如下:

 

2、然後可以根據表空間的使用情況,查詢表空間對應的具體數據文件的使用情況,代碼如下:

select t.TABLESPACE_NAME, --表空間名
 t.FILE_NAME, --文件名
 t.AUTOEXTENSIBLE, --是否自動擴展
 t.BYTES / 1024 / 1024, --表空間初始大小
 t.MAXBYTES / 1024 / 1024, --表空間最大擴展到多少
 b.CONTENTS, --表空間類型
 b.EXTENT_MANAGEMENT --表空間管理模式
 from dba_data_files t, dba_tablespaces b
 where t.TABLESPACE_NAME = b.TABLESPACE_NAME

結果如下:

 

3、通過上圖,可以發現USERS表空間對應的數據文件USERS01.DBF對應的數據文件大小隻有5M。這裏數據文件的大小明顯太小,不用多久就會出現空間不足的情況(這裏可能大家覺得數據文件是自動擴展的,而且最大值有3G,怎麼還會出現表空間不足的情況,那是由於在某些事物中會進行大批量數據處理時,特別是數據導入或者遷移的過程中,要大批量的插入數據,這時由於可用空間只有5M,明顯過小,因此就會出現表空間不足的情況)。

這裏可以通過兩種方法解決表空間不足的問題:

3.1、可以對數據文件USERS01.DBF進行擴充,具體代碼如下:

 alter database datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF'
 resize 100M ;

3.2、可以直接再增加一個數據文件USERS02.DBF,初始化大小爲100M,自動擴展,最大值爲500M的數據文件,具體代碼如下:

 alter tablespace USERS
add datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS02.DBF'
size 100m
autoextend on next 10m maxsize 500m

再次通過查詢數據文件使用情況語句,查詢一下剛剛增加和改變的數據文件,結果如下:

 

​總結:本文介紹如何解決表空間不足問題,即數據文件大小達到最大值時,該如何對其進行擴充或增加,從而從根本解決表空間不足的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章