How to view the correspondence between database objects and data files in ORACLE?

In the Oracle database, how do we check which database objects are contained in the tablespace or data file? How to view the table space and data file where the database object is located?
This article will provide some query scripts for your reference.

1. Check which objects a tablespace contains

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;

Also view the objects in the tablespace through the following SQL statement:

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';

Second, view a data file contains those database objects

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;

or

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. View which tablespace the database object belongs to

SELECT TABLE_NAME, TABLESPACE_NAME
  FROM USER_TABLES
 WHERE TABLE_NAME = '&TABLE_NAME';

4. View which data file the database object belongs to

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;

Guess you like

Origin blog.csdn.net/Ruishine/article/details/129881403