我正在开发一个 web 应用程序,我需要警告用户他们在给定 db 用户的表空间中的空间不足。该应用程序不知道 db 系统用户的凭据,因此我无法查询 dba_users、dba_free_space..etc 等视图。
我的问题是,Oracle 中有没有办法让用户找出他们的表空间中还有多少空间?
谢谢!
我正在开发一个 web 应用程序,我需要警告用户他们在给定 db 用户的表空间中的空间不足。该应用程序不知道 db 系统用户的凭据,因此我无法查询 dba_users、dba_free_space..etc 等视图。
我的问题是,Oracle 中有没有办法让用户找出他们的表空间中还有多少空间?
谢谢!
请原谅我对这个主题的无知,因为我认为只有数据存储上可用的视图是 dba_free_space 等。
我意识到对于已登录的用户,他们有 user_free_space.. 视图。这里提到的查询的修改版本将是我的问题的答案。
查询如下:(获取登录用户的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 为单位返回可用空间
以具有必要权限的用户身份创建存储包。您可能必须创建一个新用户。将包上的 EXECUTE 授予任何需要它的用户。这些包需要具有访问 DBA 视图所需的所有过程和功能,但应仔细编码以避免访问“太多”信息。您可能希望在非特权用户的帐户中编写第二个包来封装逻辑。
这可能非常复杂,因为用户很有可能:
因此,除非您有一个相当简单的案例,否则您必须非常了解用户在更深层次上与数据库交互的方式,并从更全面的数据库角度看待可用空间。