我正在研究一个Web应用程序,在那里我需要警告用户在给定的数据库用户的表空间中运行空间。 该应用程序不知道DB系统用户的凭据,因此我无法查询dba_users,dba_free_space inetc等视图。

我的问题是,在Oracle中有一种方法,让用户了解他们的表空间中剩下多少空间?

谢谢!

有帮助吗?

解决方案

宽恕我对这个问题的无知,因为我相信数据存储上可用的视图是dba_free_space等。

我意识到为记录的用户,有user_free_space ..查看它们。 修改版的查询版本这里是答案我的问题。

查询如下:(在Logged用户的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 中返回可用空间

其他提示

创建存储的包作为具有必要权限的用户。您可能必须创建一个新用户。授予在包上执行需要它的任何用户。该软件包需要拥有访问DBA视图所需的所有过程和功能,但应仔细编码以避免访问“太多”信息。您可能希望在非特权用户的帐户中编写第二个包以封装逻辑。

这是非常复杂的,因为用户很有可能:

  1. 接收“空间出空间”错误,即使它们具有特权,包括其默认表空间,也有足够的空间。当它们插入到由您没有配额的表空间上的其他用户拥有的表中时,可能会发生这种情况。在这种情况下,您的用户可能无法访问确定是否有空闲空间所需的视图
  2. 能够继续插入数据,即使表空间上没有可用空间,它们有一个配额 - 它们甚至可能在其默认表空间上都没有配额。 所以,除非你有一个相当简单的案例,否则你真的必须非常清楚用户在更深层级别与数据库交互的方式,并从更多的数据库全文的角度看一下自由空间。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top