programing

단일 쿼리에서 모든 테이블 공간 이름, 할당된 크기, 여유 크기, 용량을 가져오는 방법?

minimums 2023. 9. 5. 20:05
반응형

단일 쿼리에서 모든 테이블 공간 이름, 할당된 크기, 여유 크기, 용량을 가져오는 방법?

데이터베이스의 모든 테이블 영역에 대한 정보를 아래 형식으로 가져오려면 어떻게 해야 합니까?

TABLESPACE_NAME | FILE_NAME |  ALLOCATED_MB  | FREE_MB |  CAPACITY |

모든 테이블 공간의 일별 크기를 다른 테이블에 자동으로 저장하는 방법이 있습니까?사실 나는 매일 테이블 공간에 대한 체크리스트를 준비해야 합니다.따라서 매일 테이블 공간 크기에 대한 정보를 저장하는 테이블을 기준으로 자동으로 테이블 공간 크기 세부 정보를 이메일로 보내는 프런트 엔드를 생성하고 싶지 않습니다.

아래 쿼리를 사용하여 Oracle에서 모든 테이블스페이스 세부 정보를 가져옵니다.DBA 테이블에 액세스하는 데 필요한 권한이 있다고 가정합니다.

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; 
Select a.tablespace_name,a.file_name,a.bytes/1024/1024 TABLESPACE_SIZE_MB,
Sum(b.bytes)/1024/1024 FREE_IN_MB from dba_free_space b,dba_data_files a
Where a.tablespace_name = b.tablespace_name
AND a.file_id = b.file_id
GROUP by a.tablespace_name, a.file_name,a.bytes/1024/1024
Order by a.tablespace_name, a.file_name;

이 쿼리를 실행하면 도움이 될 수 있습니다.

위 내용이 유용합니다.이것이 여기에도 도움이 되기를 바랍니다.

https://ora-data.blogspot.in/2016/12/how-to-find-details-of-tablespace.html

다른 명령을 사용하여 테이블스페이스 세부사항을 확인합니다. 위 명령이 작동하지 않을 수 있습니다.

SQL>select round((bytes/1024)/1024,0) "Used Space(MB)",
round(total,0) "Allocated size(MB)",
round(max,0) "Maximum allowable(MB)",
round(max-(BYTES/1024)/1024,0) "Effective free(MB)",
round(((max-(BYTES/1024)/1024)/max)*100,2) "FREE(%)"
from SYS.SM$TS_USED,
(select sum((BYTES/1024)/1024) total, sum((decode(MAXBYTES,0,bytes,maxbytes)/1024)/1024) max
from dba_data_files where tablespace_name='&1') where tablespace_name='&1'; 

Oracle에서는 아래 링크를 참조하십시오.

Oracle에서 테이블 크기를 계산하는 방법

https://forums.oracle.com/thread/2160787

COLUMN TABLE_NAME FORMAT A32
COLUMN OBJECT_NAME FORMAT A32
COLUMN OWNER FORMAT A10

SELECT
   owner, table_name, TRUNC(sum(bytes)/1024/1024) Meg
FROM
(SELECT segment_name table_name, owner, bytes
 FROM dba_segments
 WHERE segment_type = 'TABLE'
 UNION ALL
 SELECT i.table_name, i.owner, s.bytes
 FROM dba_indexes i, dba_segments s
 WHERE s.segment_name = i.index_name
 AND   s.owner = i.owner
 AND   s.segment_type = 'INDEX'
 UNION ALL
 SELECT l.table_name, l.owner, s.bytes
 FROM dba_lobs l, dba_segments s
 WHERE s.segment_name = l.segment_name
 AND   s.owner = l.owner
 AND   s.segment_type = 'LOBSEGMENT'
 UNION ALL
 SELECT l.table_name, l.owner, s.bytes
 FROM dba_lobs l, dba_segments s
 WHERE s.segment_name = l.index_name
 AND   s.owner = l.owner
 AND   s.segment_type = 'LOBINDEX')
WHERE owner in UPPER('&owner')
GROUP BY table_name, owner
HAVING SUM(bytes)/1024/1024 > 10  /* Ignore really small tables */
ORDER BY SUM(bytes) desc
;

SQL에서 아래 참조

데이터베이스의 모든 테이블 크기 가져오기

언급URL : https://stackoverflow.com/questions/19240276/how-to-get-all-table-space-name-allocated-size-free-size-capacity-from-single

반응형