Oracle データベースでは、どのデータベース オブジェクトがテーブルスペースまたはデータ ファイルに含まれているかをどのように確認しますか? データベース オブジェクトが配置されているテーブル スペースとデータ ファイルを表示する方法を教えてください。
この記事では、参照用にいくつかのクエリ スクリプトを提供します。
1. 表領域に含まれるオブジェクトを確認する
SELECT TABLESPACE_NAME,
SEGMENT_NAME,
SUM(BYTES)/1024/1024 SEGMENT_SIZE_M
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME='&TABLESPACE_NAME'
GROUP BY TABLESPACE_NAME,SEGMENT_NAME;
また、次の SQL ステートメントを使用して、テーブルスペース内のオブジェクトを表示します。
SELECT OWNER,
'TABLE' SEGMENT_TYPE,
TABLE_NAME SEGMENT_NAME
FROM DBA_TABLES
WHERE TABLESPACE_NAME='&TABLESPACE_NAME'
UNION ALL
SELECT OWNER,
'INDEX' SEGMENT_TYPE,
INDEX_NAME SEGMETN_NAME
FROM DBA_INDEXES
WHERE TABLESPACE_NAME='&TABLESPACE_NAME'
UNION ALL
SELECT OWNER,
'LOBSEGMENT' SGEMENT_TYPE,
SEGMENT_NAME SEGMENT_NAME
FROM DBA_LOBS
WHERE TABLESPACE_NAME='&TABLESPACE_NAME';
次に、これらのデータベース オブジェクトを含むデータ ファイルを表示します。
SELECT A.OWNER,
A.SEGMENT_NAME,
A.SEGMENT_TYPE,
B.FILE_NAME,
SUM(A.BYTES)/1024/1024 SEGMENT_SIZE_M
FROM DBA_EXTENTS A
INNER JOIN DBA_DATA_FILES B ON A.FILE_ID= B.FILE_ID
WHERE B.FILE_ID =&FILE_ID
GROUP BY A.OWNER,A.SEGMENT_NAME,A.SEGMENT_TYPE,B.FILE_NAME;
また
SELECT A.OWNER,
A.SEGMENT_NAME,
A.SEGMENT_TYPE,
B.FILE_NAME,
SUM(A.BYTES)/1024/1024 SEGMENT_SIZE_M
FROM DBA_EXTENTS A
INNER JOIN DBA_DATA_FILES B ON A.FILE_ID= B.FILE_ID
WHERE B.FILE_NAME ='&FILE_NAME'
GROUP BY A.OWNER,A.SEGMENT_NAME,A.SEGMENT_TYPE,B.FILE_NAME;
3. データベース オブジェクトが属するテーブルスペースを表示する
SELECT TABLE_NAME, TABLESPACE_NAME
FROM USER_TABLES
WHERE TABLE_NAME = '&TABLE_NAME';
4. データベース オブジェクトが属するデータ ファイルを表示する
SELECT A.OWNER,
A.SEGMENT_TYPE,
A.SEGMENT_NAME,
A.PARTITION_NAME,
A.TABLESPACE_NAME,
B.FILE_NAME,
SUM(A.BYTES)/1024/1024 SEGMENT_SIZE_M
FROM DBA_EXTENTS A
INNER JOIN DBA_DATA_FILES B ON A.FILE_ID= B.FILE_ID
WHERE A.OWNER='&OWNER'
AND A.SEGMENT_NAME='&SEGMENT_NAME'
GROUP BY A.OWNER,A.SEGMENT_TYPE,A.PARTITION_NAME,A.SEGMENT_NAME,A.TABLESPACE_NAME,B.FILE_NAME;