如何编写查询以显示数据库中的所有表空间,假设db及其相应的数据文件属于用户SCOTT。我可以连接到SCOTT帐户并查看它但我喜欢连接到sys as sysdba以查看所有表空间和数据文件属于SCOTT。
答案 0 :(得分:4)
在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;