【发布时间】:2016-07-12 13:40:28
【问题描述】:
假设db和它对应的数据文件属于用户SCOTT,如何编写查询来显示数据库中的所有表空间。我可以连接到 SCOTT 帐户并查看它,但我喜欢以 sysdba 的身份连接到 sys 以查看所有属于 SCOTT 的表空间和数据文件。
【问题讨论】:
-
数据库、表空间和数据文件都不属于任何用户。你是从 MS SQL 背景来的吗?
标签: oracle oracle11g oracle10g
假设db和它对应的数据文件属于用户SCOTT,如何编写查询来显示数据库中的所有表空间。我可以连接到 SCOTT 帐户并查看它,但我喜欢以 sysdba 的身份连接到 sys 以查看所有属于 SCOTT 的表空间和数据文件。
【问题讨论】:
标签: oracle oracle11g oracle10g
数据库、表空间和数据文件都不属于任何用户。您是从 MS SQL 背景开始的吗?
select tablespace_name,
file_name
from dba_tablespaces
order by tablespace_name,
file_name;
【讨论】:
select a.tablespace_name, b.file_name from dba_tablespaces a join dba_data_files b on (a.tablespace_name=b.tablespace_name) order by tablespace_name;
在 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'
【讨论】:
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;
【讨论】:
如果要获取当前数据库实例中使用的所有表空间的列表,可以使用 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
【讨论】: