Oracle10g 如何为用户(Oracle)获取表空间中的可用空间

Oracle10g 如何为用户(Oracle)获取表空间中的可用空间,oracle10g,tablespace,Oracle10g,Tablespace,我正在开发一个web应用程序,需要警告用户给定db用户表空间中的空间不足。 应用程序不知道数据库系统用户的凭据,因此我无法查询诸如dba_用户、dba_空闲空间等视图 我的问题是,在Oracle中有没有一种方法可以让用户知道他们的表空间中还有多少空间留给他们 谢谢 以具有必要权限的用户身份创建存储包。您可能需要创建一个新用户。将包上的EXECUTE授予任何需要它的用户。这些包需要具有访问DBA视图所需的所有过程和功能,但应仔细编码以避免访问“过多”信息。您可能想在非特权用户的帐户中编写第二个包来

我正在开发一个web应用程序,需要警告用户给定db用户表空间中的空间不足。 应用程序不知道数据库系统用户的凭据,因此我无法查询诸如dba_用户、dba_空闲空间等视图

我的问题是,在Oracle中有没有一种方法可以让用户知道他们的表空间中还有多少空间留给他们


谢谢

以具有必要权限的用户身份创建存储包。您可能需要创建一个新用户。将包上的EXECUTE授予任何需要它的用户。这些包需要具有访问DBA视图所需的所有过程和功能,但应仔细编码以避免访问“过多”信息。您可能想在非特权用户的帐户中编写第二个包来封装逻辑。

请原谅我对这个问题的无知,因为我认为只有dba\u free\u space等才是数据存储可用的视图

我意识到对于登录的用户,有用户可用空间。。他们的看法。 上述查询的修改版本将是我问题的答案

查询如下:(获取登录用户的默认_表空间上的剩余空间)


它将返回MB的可用空间这可能非常复杂,因为用户很可能:

  • 接收“空间不足”错误,即使它们拥有权限的表空间(包括默认表空间)有足够的空间。当它们插入到另一个用户拥有的表中时,可能会发生这种情况,该用户位于您的用户没有配额的表空间中。在这种情况下,您的用户可能无法访问确定是否有可用空间所需的视图
  • 能够继续插入数据,即使在表空间上没有可用空间,它们也有配额——它们的默认表空间上甚至可能没有配额

  • 因此,除非你有一个非常简单的案例,否则你真的必须非常清楚用户在更深层次上与数据库交互的方式,并从更全面的数据库角度看待可用空间。

    谢谢,我想我找到了另一个解决方案。谢谢,我不知道。我知道user_表和类似的视图,但不知道。它将返回可用空间(MB),乘以
    user_users
    中具有特定表空间作为
    默认表空间的用户数量。因此,只有当user\u用户在每个加入的表空间中只包含一行时,它才能正常工作。
    
    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;