查询以显示数据库和数据文件中的所有表空间

时间:2016-03-24 20:04:58

标签: oracle oracle11g oracle10g

如何编写查询以显示数据库中的所有表空间,假设db及其相应的数据文件属于用户SCOTT。我可以连接到SCOTT帐户并查看它但我喜欢连接到sys as sysdba以查看所有表空间和数据文件属于SCOTT。

4 个答案:

答案 0 :(得分:4)

在oracle中,一般来说,我将在下一节中提到一些事实:

  • 每个数据库都可以有多个Schema / User(逻辑分区)。
  • 每个数据库都可以有许多表空间(逻辑分区)。
  • 架构是属于用户的对象集(表,索引,视图等)。
  • 在Oracle中,可以将用户视为架构。
  • 数据库分为称为表空间的逻辑存储单元,它将相关的逻辑结构组合在一起。例如,表空间通常将应用程序的所有对象分组,以简化某些管理操作。您可能有一个用于应用程序数据的表空间和一个用于应用程序索引的表空间。

因此,您的问题,"看到所有表空间和数据文件属于SCOTT"有点不对劲。

但是,有些DBA视图包含有关所有数据库对象的信息,无论所有者如何。只有具有DBA权限的用户才能访问这些视图: DBA_DATA_FILES,DBA_TABLESPACES,DBA_FREE_SPACE,DBA_SEGMENTS。

因此,以sysdba身份连接到您的数据库并通过这些有用的视图运行查询。 例如,此查询可以帮助您查找用户对象所在的所有表空间及其数据文件:

SELECT DISTINCT sgm.TABLESPACE_NAME , dtf.FILE_NAME
FROM DBA_SEGMENTS sgm
JOIN DBA_DATA_FILES dtf ON (sgm.TABLESPACE_NAME = dtf.TABLESPACE_NAME)
WHERE sgm.OWNER = 'SCOTT'

答案 1 :(得分:0)

SELECT a.file_name,
       substr(A.tablespace_name,1,14) tablespace_name,
       trunc(decode(A.autoextensible,'YES',A.MAXSIZE-A.bytes+b.free,'NO',b.free)/1024/1024) free_mb,
       trunc(a.bytes/1024/1024) allocated_mb,
       trunc(A.MAXSIZE/1024/1024) capacity,
       a.autoextensible ae
FROM (
     SELECT file_id, file_name,
            tablespace_name,
            autoextensible,
            bytes,
            decode(autoextensible,'YES',maxbytes,bytes) maxsize
     FROM   dba_data_files
     GROUP BY file_id, file_name,
              tablespace_name,
              autoextensible,
              bytes,
              decode(autoextensible,'YES',maxbytes,bytes)
     ) a,
     (SELECT file_id,
             tablespace_name,
             sum(bytes) free
      FROM   dba_free_space
      GROUP BY file_id,
               tablespace_name
      ) b
WHERE a.file_id=b.file_id(+)
AND A.tablespace_name=b.tablespace_name(+)
ORDER BY A.tablespace_name ASC; 

答案 2 :(得分:0)

如果要获取当前数据库实例中使用的所有表空间的列表,可以使用DBA_TABLESPACES视图,如以下SQL脚本示例所示:

SQL> connect SYSTEM/fyicenter
Connected.

SQL> SELECT TABLESPACE_NAME, STATUS, CONTENTS
  2  FROM USER_TABLESPACES;
TABLESPACE_NAME                STATUS    CONTENTS
------------------------------ --------- ---------
SYSTEM                         ONLINE    PERMANENT
UNDO                           ONLINE    UNDO
SYSAUX                         ONLINE    PERMANENT
TEMP                           ONLINE    TEMPORARY
USERS                          ONLINE    PERMANENT

http://dba.fyicenter.com/faq/oracle/Show-All-Tablespaces-in-Current-Database.html

答案 3 :(得分:-2)

数据库,表空间和数据文件都不属于任何用户。你是从MS SQL背景来的吗?

select tablespace_name, 
       file_name
from dba_tablespaces
order by tablespace_name, 
         file_name;