programing

데이터베이스 및 데이터 파일의 모든 테이블스페이스를 표시하기 위한 쿼리

javamemo 2023. 6. 24. 08:44
반응형

데이터베이스 및 데이터 파일의 모든 테이블스페이스를 표시하기 위한 쿼리

데이터베이스에 있는 모든 테이블스페이스를 표시하기 위한 쿼리 작성 방법은 사용자 SCOT에 속한다고 가정합니다.SCOT 계정에 연결하여 확인할 수 있지만 sysas sysdba에 연결하여 모든 테이블스페이스와 데이터 파일이 SCOT에 속하는지 확인하고 싶습니다.

오라클에서는 일반적으로 다음 섹션에서 언급할 여러 가지 사실이 있습니다.

  • 각 데이터베이스는 많은 스키마/사용자(논리 분할)를 가질 수 있습니다.
  • 각 데이터베이스는 많은 테이블스페이스(논리적 분할)를 가질 수 있습니다.
  • 스키마는 사용자에게 속한 개체(테이블, 인덱스, 보기 등)의 집합입니다.
  • Oracle에서는 사용자를 스키마와 동일하게 간주할 수 있습니다.
  • 데이터베이스는 관련 논리 구조를 함께 그룹화하는 테이블스페이스라는 논리 저장 단위로 나뉩니다.예를 들어 테이블스페이스는 일반적으로 응용프로그램의 모든 개체를 그룹화하여 일부 관리 작업을 단순화합니다.응용프로그램 데이터를 위한 테이블스페이스와 응용프로그램 인덱스를 위한 테이블스페이스가 있을 수 있습니다.

따라서 "모든 테이블스페이스와 데이터 파일이 SCOT에 속하는지 확인하는 것"이라는 당신의 질문은 약간 틀렸습니다.

그러나 소유자에 관계없이 모든 데이터베이스 개체에 대한 정보를 포함하는 일부 DBA 보기가 있습니다.DBA 권한이 있는 사용자만 DBA_DATA_FILES, DBA_TABLESPACE, DBA_FREE_SPACE, DBA_SEGENGS 등의 보기에 액세스할 수 있습니다.

따라서 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'

현재 데이터베이스 인스턴스에 사용되는 모든 테이블스페이스 목록을 가져오려면 다음 SQL 스크립트 예제와 같이 DBA_TABLESPACE 보기를 사용할 수 있습니다.

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

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; 

데이터베이스, 테이블스페이스 또는 데이터 파일은 사용자에게 속하지 않습니다.MS SQL 배경에서 이 문제를 해결할 수 있습니까?

select tablespace_name, 
       file_name
from dba_tablespaces
order by tablespace_name, 
         file_name;

언급URL : https://stackoverflow.com/questions/36209102/query-to-display-all-tablespaces-in-a-database-and-datafiles

반응형