web-dev-qa-db-ja.com

データベースおよびデータファイル内のすべてのテーブルスペースを表示するクエリ

データベース内のすべてのテーブルスペースを表示するクエリを作成する方法は、dbとそれに対応するデータファイルがユーザーSCOTTに属していると想定しています。 SCOTTアカウントに接続してそれを表示できますが、sysdbaとしてsysに接続して、すべてのテーブルスペースとデータファイルがSCOTTに属していることを確認します。

6
mlhazan

Oracleには、一般的に言って、次のセクションで説明するいくつかの事実があります。

  • 各データベースには、多くのスキーマ/ユーザー(論理部門)を含めることができます。
  • 各データベースには、多くのテーブルスペース(論理部)を含めることができます。
  • スキーマは、ユーザーに属するオブジェクト(テーブル、インデックス、ビューなど)のセットです。
  • 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'
13
MMKarami
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; 
1
Muhammad Arslan