2011-05-13 79 views
9

我正在研究一個Web應用程序,我需要警告用戶他們的空間不足以滿足給定的數據庫用戶表空間。 應用程序不知道數據庫的系統用戶的憑據,所以我不能查詢像dba_users,dba_free_space ..等等的意見。如何爲用戶獲得表空間中的可用空間(Oracle)

我的問題是,Oracle有沒有辦法讓用戶找出他們在表空間剩餘多少空間?

謝謝!

回答

17

原諒關於這個問題我的無知,因爲我認爲僅適用於數據存儲是DBA_FREE_SPACE等我意識到,對於登錄的用戶中,有user_free_space觀點..

..意見他們。 查詢提到here的修改版本將是我的問題的答案。

查詢如下:(獲取留在登錄用戶的DEFAULT_TABLESPACE的空間)

SELECT 
    ts.tablespace_name, 
    TO_CHAR(SUM(NVL(fs.bytes,0))/1024/1024, '99,999,990.99') AS MB_FREE 
FROM 
    user_free_space fs, 
    user_tablespaces ts, 
    user_users us 
WHERE 
    fs.tablespace_name(+) = ts.tablespace_name 
AND ts.tablespace_name(+) = us.default_tablespace 
GROUP BY 
    ts.tablespace_name; 

它將返回可用空間MB

+0

謝謝,不知道。我知道user_tables和類似的意見,但不知道那個。 – redcayuga 2011-05-20 19:12:27

2

創建一個存儲包作爲具有必要特權的用戶。您可能必須創建一個新用戶。將包上的EXECUTE授予任何需要它的用戶。這些包需要具有訪問DBA視圖所需的所有過程和功能,但應仔細編碼以避免訪問「太多」信息。您可能想要在非特權用戶的賬戶中編寫第二個包來封裝邏輯。

+0

謝謝,我想我找到了另一個解決方案。 – Emrah 2011-05-16 18:10:42

1

這可能是非常複雜的,因爲它很可能對於用戶來說:

  1. 即使他們擁有權限的表空間(包括其默認表空間)有足夠的空間,也會收到「空間不足」錯誤。當他們插入到您的用戶沒有配額的表空間中的其他用戶擁有的表中時,可能會發生這種情況。在這種情況下,您的用戶可能無法訪問確定是否有空餘空間所需的視圖,
  2. 即使在他們擁有配額的表空間上沒有可用空間,仍然能夠繼續插入數據 - 他們的默認表空間甚至沒有配額。

因此,除非您有一個相當簡單的情況,否則您必須非常清楚用戶與數據庫在更深層次上交互的方式,並從更多的數據庫整體角度來看待可用空間。