データベース内のすべてのテーブルスペースを表示するクエリを作成する方法は、dbとそれに対応するデータファイルがユーザーSCOTTに属していると想定しています。 SCOTTアカウントに接続してそれを表示できますが、sysdbaとしてsysに接続して、すべてのテーブルスペースとデータファイルがSCOTTに属していることを確認します。
Oracleには、一般的に言って、次のセクションで説明するいくつかの事実があります。
したがって、「すべてのテーブルスペースとデータファイルがSCOTTに属していることを確認する」という質問は少し間違っています。
ただし、一部のDBAビューには、所有者に関係なく、すべてのデータベースオブジェクトに関する情報が含まれています。これらのビューにアクセスできるのは、DBA権限を持つユーザーのみです:DBA_DATA_FILES、DBA_TABLESPACES、DBA_FREE_SPACE、DBA_SEGMENTS。
したがって、sysdbaとしてDBに接続し、これらの有用なビューを通じてクエリを実行します。たとえば、次のクエリは、ユーザーのオブジェクトが配置されているすべてのテーブルスペースとそのデータファイルを見つけるのに役立ちます。
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;