행위

"ORACLE 테이블스페이스"의 두 판 사이의 차이

DB CAFE

1번째 줄: 1번째 줄:
= 테이블 스페이스 =
+
테이블 스페이스
  
 
----
 
----
13번째 줄: 13번째 줄:
 
==> DEFAUT TABLESPACE로 설정된 부분을 확인
 
==> DEFAUT TABLESPACE로 설정된 부분을 확인
  
 +
----
 
==테이블스페이스 변경==
 
==테이블스페이스 변경==
 
===유저의 DEFAULT TABLESPACE 변경===
 
===유저의 DEFAULT TABLESPACE 변경===
23번째 줄: 24번째 줄:
 
ALTER INDEX 인덱스명 REBUILD TABLESPACE [테이블 스페이스명];
 
ALTER INDEX 인덱스명 REBUILD TABLESPACE [테이블 스페이스명];
  
출처: http://gyh214.tistory.com/173 [에몽이's ORACLE!?]
 
 
===TABLESPACE 수정이나 삭제시 ONLINE/OFFLINE 설정===
 
===TABLESPACE 수정이나 삭제시 ONLINE/OFFLINE 설정===
 
ALTER TABLESPACE [테이블 스페이스명] ONLINE
 
ALTER TABLESPACE [테이블 스페이스명] ONLINE
41번째 줄: 41번째 줄:
 
       AUTOEXTEND ON NEXT 10M MAXSIZE 10M;
 
       AUTOEXTEND ON NEXT 10M MAXSIZE 10M;
 
   ==> 10M씩 자동증가
 
   ==> 10M씩 자동증가
 
+
----
 
==TABLESPACE 삭제==
 
==TABLESPACE 삭제==
  
58번째 줄: 58번째 줄:
 
   ==> 물리적파일까지 삭제한다.
 
   ==> 물리적파일까지 삭제한다.
  
 +
----
 
==TABLESPACE 생성==
 
==TABLESPACE 생성==
  
71번째 줄: 72번째 줄:
 
UNIFORM SIZE 1M  
 
UNIFORM SIZE 1M  
 
==> (옵션)
 
==> (옵션)
 
 
  
 
===TABLESPACE 생성2===
 
===TABLESPACE 생성2===
115번째 줄: 114번째 줄:
 
         (UNIFORMSIZE를 할당 할 수 없고 AUTOALLOCATE만 가능)
 
         (UNIFORMSIZE를 할당 할 수 없고 AUTOALLOCATE만 가능)
  
==테이블스페이스별 파일 목록을 보기==
+
==테이블스페이스 정보 확인==
 
+
===테이블스페이스별 파일 목록을 보기===
 
 
 
<source lang="sql">  
 
<source lang="sql">  
 
SELECT SUBSTRB(TABLESPACE_NAME, 1, 10) AS "테이블스페이스"
 
SELECT SUBSTRB(TABLESPACE_NAME, 1, 10) AS "테이블스페이스"
126번째 줄: 124번째 줄:
 
</source>  
 
</source>  
  
==테이블스페이스별 정보 보기==  
+
===테이블스페이스별 정보 보기===
 
 
 
<source lang="sql">  
 
<source lang="sql">  
 
SELECT A.TABLESPACE_NAME AS "TABLESPACE"
 
SELECT A.TABLESPACE_NAME AS "TABLESPACE"
144번째 줄: 141번째 줄:
  
  
==테이블스페이스별 사용하는 파일의 크기 합 보기==
+
===테이블스페이스별 사용하는 파일의 크기 합 보기===
 
 
 
 
 
<source lang="sql"> SELECT SUBSTRB(TABLESPACE_NAME, 1, 10) AS TABLESPACE
 
<source lang="sql"> SELECT SUBSTRB(TABLESPACE_NAME, 1, 10) AS TABLESPACE
 
 
     , TO_CHAR(SUM(BYTES), '9,999,999,999,990') AS BYTES
 
     , TO_CHAR(SUM(BYTES), '9,999,999,999,990') AS BYTES
 
     , TO_CHAR(SUM(BLOCKS), '9,999,999,990') AS BLOCKS
 
     , TO_CHAR(SUM(BLOCKS), '9,999,999,990') AS BLOCKS
 +
  FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME
 +
UNION ALL
 +
SELECT '총계', TO_CHAR(SUM(BYTES), '9,999,999,999,990') AS BYTES, TO_CHAR(SUM(BLOCKS), '9,999,999,990') AS BLOCKS
 +
  FROM DBA_DATA_FILES;
 +
</source>
  
  FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME UNION ALL SELECT '총계', TO_CHAR(SUM(BYTES), '9,999,999,999,990') AS BYTES, TO_CHAR(SUM(BLOCKS), '9,999,999,990') AS BLOCKS FROM DBA_DATA_FILES; </source>
+
===테이블스페이스별 디스크 사용량 보기===   
 
 
==테이블스페이스별 디스크 사용량 보기==   
 
 
 
<source lang="sql"> SELECT A.TABLESPACE_NAME AS "TABLESPACE"
 
  
 +
<source lang="sql">
 +
SELECT A.TABLESPACE_NAME AS "TABLESPACE"
 
     , A.INIT AS "INIT(K)"
 
     , A.INIT AS "INIT(K)"
 
     , A.NEXT AS "NEXT(K)"
 
     , A.NEXT AS "NEXT(K)"
168번째 줄: 165번째 줄:
 
     , TO_CHAR(D.BLOCKS, '9,999,990') AS "사용블럭"
 
     , TO_CHAR(D.BLOCKS, '9,999,990') AS "사용블럭"
 
     , TO_CHAR(100 * NVL(D.BLOCKS, 0) / B.BLOCKS, '999.99') AS "사용율%"
 
     , TO_CHAR(100 * NVL(D.BLOCKS, 0) / B.BLOCKS, '999.99') AS "사용율%"
 
 
   FROM (SELECT TABLESPACE_NAME
 
   FROM (SELECT TABLESPACE_NAME
 
 
                 , INITIAL_EXTENT / 1024 AS INIT
 
                 , INITIAL_EXTENT / 1024 AS INIT
 
                 , NEXT_EXTENT / 1024 AS NEXT
 
                 , NEXT_EXTENT / 1024 AS NEXT
187번째 줄: 182번째 줄:
 
           GROUP BY  TABLESPACE_NAME) D
 
           GROUP BY  TABLESPACE_NAME) D
  
  WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+) AND A.TABLESPACE_NAME = C.TABLESPACE_NAME(+) AND A.TABLESPACE_NAME = D.TABLESPACE_NAME(+) ORDER BY A.TABLESPACE_NAME; </source>
+
  WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+) AND A.TABLESPACE_NAME = C.TABLESPACE_NAME(+) AND A.TABLESPACE_NAME = D.TABLESPACE_NAME(+)  
 
+
ORDER BY A.TABLESPACE_NAME;  
==테이블스페이스의 테이블 명 보기== 
+
</source>
  
 +
===테이블스페이스의 테이블 명 보기=== 
 
<source lang="sql">  
 
<source lang="sql">  
 
SELECT TABLESPACE_NAME, TABLE_NAME  
 
SELECT TABLESPACE_NAME, TABLE_NAME  
198번째 줄: 194번째 줄:
 
</source>
 
</source>
  
==공간의 90% 이상을 사용하고 있는 Tablespace==  
+
===공간의 90% 이상을 사용하고 있는 Tablespace==
 
 
 
<source lang="sql"> SELECT X.TABLESPACE_NAME
 
<source lang="sql"> SELECT X.TABLESPACE_NAME
 
     , TOTAL_SIZE / 1024 / 1024 TOTAL_SIZE
 
     , TOTAL_SIZE / 1024 / 1024 TOTAL_SIZE
210번째 줄: 205번째 줄:
 
           FROM      DBA_EXTENTS
 
           FROM      DBA_EXTENTS
 
           GROUP BY  TABLESPACE_NAME) Y
 
           GROUP BY  TABLESPACE_NAME) Y
 +
WHERE X.TABLESPACE_NAME = Y.TABLESPACE_NAME(+) AND Y.USED_SIZE > .9 * X.TOTAL_SIZE;
 +
</source>
  
WHERE X.TABLESPACE_NAME = Y.TABLESPACE_NAME(+) AND Y.USED_SIZE > .9 * X.TOTAL_SIZE; </source>
+
===Object별 테이블스페이스 및 데이터파일===   
 
 
==Object별 테이블스페이스 및 데이터파일==   
 
  
 
<source lang="sql">
 
<source lang="sql">
  SELECT   DISTINCT E.SEGMENT_NAME, E.TABLESPACE_NAME, F.FILE_NAME
+
  SELECT DISTINCT E.SEGMENT_NAME, E.TABLESPACE_NAME, F.FILE_NAME
 
   FROM DBA_EXTENTS E
 
   FROM DBA_EXTENTS E
 
     , DBA_DATA_FILES F
 
     , DBA_DATA_FILES F
223번째 줄: 218번째 줄:
 
   AND E.TABLESPACE_NAME NOT IN ('SYSTEM', 'TOOLS'); </source>
 
   AND E.TABLESPACE_NAME NOT IN ('SYSTEM', 'TOOLS'); </source>
  
==Tablespace별 Table, Index 개수==  
+
===Tablespace별 Table, Index 개수===
  
 
<source lang="sql">
 
<source lang="sql">
 
 
SELECT OWNER
 
SELECT OWNER
 
 
     , TABLESPACE_NAME
 
     , TABLESPACE_NAME
 
     , SUM(DECODE(SEGMENT_TYPE, 'TABLE', 1, 0))
 
     , SUM(DECODE(SEGMENT_TYPE, 'TABLE', 1, 0))
 
     , SUM(DECODE(SEGMENT_TYPE, 'INDEX', 1, 0))
 
     , SUM(DECODE(SEGMENT_TYPE, 'INDEX', 1, 0))
 +
  FROM DBA_SEGMENTS WHERE SEGMENT_TYPE IN ('TABLE', 'INDEX') GROUP BY OWNER, TABLESPACE_NAME;
 +
</source>
  
  FROM DBA_SEGMENTS WHERE SEGMENT_TYPE IN ('TABLE', 'INDEX') GROUP BY OWNER, TABLESPACE_NAME; </source>
+
===파일위치별 테이블스페이스 아는 방법===   
 
 
==위치별 space를 아는 방법==   
 
 
<source lang="sql">
 
<source lang="sql">
  
246번째 줄: 239번째 줄:
 
           FROM DBA_FREE_SPACE
 
           FROM DBA_FREE_SPACE
 
         GROUP BY  FILE_ID) B
 
         GROUP BY  FILE_ID) B
 +
WHERE A.FILE_ID = B.FILE_ID
 +
  AND A.TABLESPACE_NAME = UPPER('&테이블스페이스명')
 +
ORDER BY A.FILE_NAME; </source>
  
WHERE A.FILE_ID = B.FILE_ID AND A.TABLESPACE_NAME = UPPER('&테이블스페이스명') ORDER BY A.FILE_NAME; </source>
+
===현재 Extension 횟수가 MaxExtents의 80% 이상인 경우===   
 
 
==현재 Extension 횟수가 MaxExtents의 80% 이상인 경우==   
 
 
<source lang="sql"> SELECT TABLESPACE_NAME
 
<source lang="sql"> SELECT TABLESPACE_NAME
 
     , OWNER
 
     , OWNER
261번째 줄: 255번째 줄:
 
</source>
 
</source>
  
==테이블의 익스텐트 정보 조회==
+
===테이블의 익스텐트 정보 조회===
 
<source lang="sql">
 
<source lang="sql">
  
 
/*
 
/*
 
 
     오라클에서 스토리지 구조는 아래와 같다.
 
     오라클에서 스토리지 구조는 아래와 같다.
     테이블 스페이스 -> 세그먼트 -> 익스텐트 -> 블록 -> OS 범위 -> 데이터 파일 -> 운영체제 블록
+
     테이블 스페이스 -> 세그먼트 -> 익스텐트 -> 블록 -> OS 범위 -> 데이터 파일 -> 운영체제 블록    
   
 
 
     세그먼트의 이름,
 
     세그먼트의 이름,
 
     해당 세그먼트의 최대 익스텐트 개수,
 
     해당 세그먼트의 최대 익스텐트 개수,
 
     익스텐트 아이디
 
     익스텐트 아이디
     해당 세그먼트의 최대 익스텐트 개수 - 최대 익스텐트 아이디
+
     해당 세그먼트의 최대 익스텐트 개수 - 최대 익스텐트 아이디    
   
 
 
     딕셔너리 관리 테이블스페이스로 생성한 것으로 조회를 한다.
 
     딕셔너리 관리 테이블스페이스로 생성한 것으로 조회를 한다.
   
 
 
 
*/  
 
*/  
  
 
SELECT B.SEGMENT_NAME
 
SELECT B.SEGMENT_NAME
 
 
     , B.MAX_EXTENTS
 
     , B.MAX_EXTENTS
 
     , MAX(C.EXTENT_ID) AS EXTENT_ID
 
     , MAX(C.EXTENT_ID) AS EXTENT_ID
 
     , B.MAX_EXTENTS - MAX(C.EXTENT_ID) AS DIFF
 
     , B.MAX_EXTENTS - MAX(C.EXTENT_ID) AS DIFF
 
 
   FROM USER_TABLESPACES A
 
   FROM USER_TABLESPACES A
 
 
     , USER_SEGMENTS B
 
     , USER_SEGMENTS B
 
     , USER_EXTENTS C
 
     , USER_EXTENTS C
 +
WHERE A.EXTENT_MANAGEMENT = 'DICTIONARY'
 +
  AND B.TABLESPACE_NAME = A.TABLESPACE_NAME
 +
  AND C.SEGMENT_NAME = B.SEGMENT_NAME
 +
GROUP BY B.SEGMENT_NAME, B.MAX_EXTENTS
 +
HAVING B.MAX_EXTENTS - MAX(C.EXTENT_ID) <= 50
 +
ORDER BY B.MAX_EXTENTS - MAX(C.EXTENT_ID);
 +
</source>
  
WHERE A.EXTENT_MANAGEMENT = 'DICTIONARY' AND B.TABLESPACE_NAME = A.TABLESPACE_NAME AND C.SEGMENT_NAME = B.SEGMENT_NAME GROUP BY B.SEGMENT_NAME, B.MAX_EXTENTS HAVING B.MAX_EXTENTS - MAX(C.EXTENT_ID) <= 50 ORDER BY B.MAX_EXTENTS - MAX(C.EXTENT_ID); </source>
+
===ROLLBACK SEGMENT의 사용상황 보기===   
 
 
 
 
 
 
==ROLLBACK SEGMENT의 사용상황 보기==   
 
 
<source lang="sql">
 
<source lang="sql">
 
--: EXTENTS = 현재 할당된 EXTENT의 수 --: EXTENDS = 마지막 트랜잭션에 의해 할당된 EXTENT의 수
 
--: EXTENTS = 현재 할당된 EXTENT의 수 --: EXTENDS = 마지막 트랜잭션에 의해 할당된 EXTENT의 수
  
 
SELECT SUBSTRB(A.SEGMENT_NAME, 1, 10) AS SEGMENT_NAME
 
SELECT SUBSTRB(A.SEGMENT_NAME, 1, 10) AS SEGMENT_NAME
 
 
     , SUBSTRB(A.TABLESPACE_NAME, 1, 10) AS TABLESPACE_NAME
 
     , SUBSTRB(A.TABLESPACE_NAME, 1, 10) AS TABLESPACE_NAME
 
     , TO_CHAR(A.SEGMENT_ID, '99,999') AS SEG_ID
 
     , TO_CHAR(A.SEGMENT_ID, '99,999') AS SEG_ID
307번째 줄: 295번째 줄:
 
     , TO_CHAR((A.INITIAL_EXTENT + (B.EXTENTS - 1) * A.NEXT_EXTENT) / 1000000, '9,999.999') AS "ALLOC(MB)"
 
     , TO_CHAR((A.INITIAL_EXTENT + (B.EXTENTS - 1) * A.NEXT_EXTENT) / 1000000, '9,999.999') AS "ALLOC(MB)"
 
     , TO_CHAR(XACTS, '9,999') AS XACTS
 
     , TO_CHAR(XACTS, '9,999') AS XACTS
 
 
   FROM DBA_ROLLBACK_SEGS A
 
   FROM DBA_ROLLBACK_SEGS A
 
 
     , V$ROLLSTAT B
 
     , V$ROLLSTAT B
 
 
  WHERE A.SEGMENT_ID = B.USN(+) ORDER BY 1; </source>
 
  WHERE A.SEGMENT_ID = B.USN(+) ORDER BY 1; </source>

2018년 8월 27일 (월) 16:42 판

thumb_up 추천메뉴 바로가기


테이블 스페이스


1 테이블스페이스 확인[편집]

SELECT * FROM DBA_DATA_FILES ; SELECT * FROM DBA_TABLESPACES ;

2 TEMP TABLESPACE 확인[편집]

SELECT * FROM DBA_TEMP_FILES ;

3 현재 유저의 DEFAULT TABLESPACE 확인[편집]

SELECT * FROM USER_USERS ; ==> DEFAUT TABLESPACE로 설정된 부분을 확인


4 테이블스페이스 변경[편집]

4.1 유저의 DEFAULT TABLESPACE 변경[편집]

ALTER USER [유저명] DEFAULT TABLESPACE [테이블 스페이스명]

4.2 테이블의 TABLESPACE 변경[편집]

ALTER TABLE [테이블명] MOVE TABLESPACE [테이블 스페이스명]

4.3 인덱스의 TABLESPACE 변경[편집]

ALTER INDEX 인덱스명 REBUILD TABLESPACE [테이블 스페이스명];

4.4 TABLESPACE 수정이나 삭제시 ONLINE/OFFLINE 설정[편집]

ALTER TABLESPACE [테이블 스페이스명] ONLINE ALTER TABLESPACE [테이블 스페이스명] OFFLINE

4.5 TABLESPACE의 물리적인 파일의 이름 또는 위치변경[편집]

ALTER TABLESPACE RENAME A TO B

4.6 TABLESPACE 사이즈 관리[편집]

사이즈 조정

ALTER DATABASE DATAFILE 'C:\경로\TEST1.DBF' RESIZE 10M;

 ==> 공간이 가득차면 실행
데이터파일 추가

ALTER TABLESPACE [테이블 스페이스명] ADD DATAFILE 'C:\경로\TEST2.DBF' SIZE 10M;

 ==> 공간이 가득차면 실행 

ALTER TABLESPACE [테이블 스페이스명] ADD DATAFILE 'C:\경로\TEST2.DBF' SIZE 10M

      AUTOEXTEND ON NEXT 10M MAXSIZE 10M;
 ==> 10M씩 자동증가

5 TABLESPACE 삭제[편집]

DROP TABLESPACE [테이블 스페이스명] INCLUDE CONTENTS;

 ==> 테이블스페이스 내의 객체(테이블,인덱스등)를 다 지운다.

DROP TABLESPACE [테이블 스페이스명] INCLUDING CONTENTS;

 ==> 테이블스페이스의 모든 세그먼트를 삭제한다.
 ==> 단, 데이타가 있는 테이블스페이스는 삭제할수 없다.

DROP TABLESPACE [테이블 스페이스명] CASCADE CONSTRAINTS;

 ==> 삭제된 테이블스페이스 내의 테이블의 기본키와 유일키를 참조하는
       다른 테이블스페이스의 테이블로부터 참조무결성 제약 조건을 삭제한다.        

DROP TABLESPACE [테이블 스페이스명] INCLUDING CONTENTS AND DATAFILES;

 ==> 물리적파일까지 삭제한다.

6 TABLESPACE 생성[편집]

CREATE TABLESPACE [테이블 스페이스명] DATAFILE 'C:\경로\TEST.DBF'SIZE 10M ==> 여기까지 작성하면 기본적인 사항에 대해서만 생성된다. AUTOEXTEND ON NEXT 10M ==> (옵션)데이타 파일 용량초과시 자동증가설정 MAXSIZE 100M ==> (옵션)데이타파일 최대크기지정 EXTENT MANAGEMENT LOCAL ==> (옵션) UNIFORM SIZE 1M ==> (옵션)

6.1 TABLESPACE 생성2[편집]

CREATE TABLESPACE [테이블 스페이스명]
DATAFILE 'C:\경로\TEST.DBF'
SIZE 10M
DEFAULT STORAGE(
   INITIAL 80K  ==> 테이블 스페이스의 맨 첫번째 EXTENTS의 크기
   NEXT 80K  ==> 다음 EXTENTS의 크기
   MINNEXTENTS 1  ==> 생성할 EXTENTS의 최소값
   MAXNEXTENTS 121  ==> 생성할 EXTENTS의 최대값
   PCTINCREASE 80  ==> EXTENTS의 증가율,(DEFAULT값은 50%)
) ONLINE ;

7 TEMP TABLESPACE 생성[편집]

CREATE TEMPORARY TABLESPACE [테이블 스페이스명]
TEMPFILE 'C:\경로\TEST_TEMP.DBF'
SIZE 10M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 512K
  ==> LOCALY MANAGED TABLESPACE NUIFORM SIZE만 생성가능하다.
      (주의)AUTOALLOCATE, EXTENT MANAGEMENT DICIONARY OPTION을 사용하면 ORA-25319 ERROR 발생한다.
  ==> RENAME 이 불가능하다.

===TEMP TABLESPACE를 DEFAULT TABLESPACE로 변경===

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE [테이블 스페이스명]

8 UNDO TABLESPACE 생성[편집]

CREATE UNDO TABLESPACE [테이블 스페이스명] ==> 이부분만 다름. DATAFILE 'C:\경로\TEST_UNDO.DBF' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 100M

 ==> UNDO_MANAGEMENT와 UNDO_TABLESPACE, UNDO_RETENTION PARAMETER를 제공
 ==> 지역적으로 관리되는 익스텐트만 사용가능
 ==> 시스템에 의해 관리되는 익스텐트 할당만 사용가능하다.
       (UNIFORMSIZE를 할당 할 수 없고 AUTOALLOCATE만 가능)

9 테이블스페이스 정보 확인[편집]

9.1 테이블스페이스별 파일 목록을 보기[편집]

SELECT SUBSTRB(TABLESPACE_NAME, 1, 10) AS "테이블스페이스"
     ,  SUBSTRB(FILE_NAME, 1, 50) AS "파일명"
     ,  TO_CHAR(BLOCKS, '999,999,990') AS "블럭수"
     ,  TO_CHAR(BYTES, '99,999,999') AS "크기"
  FROM DBA_DATA_FILES ORDER BY TABLESPACE_NAME, FILE_NAME;

9.2 테이블스페이스별 정보 보기[편집]

SELECT A.TABLESPACE_NAME AS "TABLESPACE"
     , A.INITIAL_EXTENT / 1024 AS "INIT(K)"
     , A.NEXT_EXTENT / 1024 AS "NEXT(K)"
     , A.MIN_EXTENTS AS "MIN"
     , A.MAX_EXTENTS AS "MAX"
     , A.PCT_INCREASE AS "PCT_INC(%)"
     , B.FILE_NAME AS "FILE_NAME"
     , B.BLOCKS * C.VALUE / 1024 / 1024 AS "SIZE(M)"
     , B.STATUS AS "STATUS"
  FROM DBA_TABLESPACES A
     ,  DBA_DATA_FILES B
     ,  V$PARAMETER C
 WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME AND C.NAME = 'db_block_size' ORDER BY 1, 2;


9.3 테이블스페이스별 사용하는 파일의 크기 합 보기[편집]

SELECT SUBSTRB(TABLESPACE_NAME, 1, 10) AS TABLESPACE
     , TO_CHAR(SUM(BYTES), '9,999,999,999,990') AS BYTES
     , TO_CHAR(SUM(BLOCKS), '9,999,999,990') AS BLOCKS
  FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME 
UNION ALL 
SELECT '총계', TO_CHAR(SUM(BYTES), '9,999,999,999,990') AS BYTES, TO_CHAR(SUM(BLOCKS), '9,999,999,990') AS BLOCKS 
  FROM DBA_DATA_FILES;

9.4 테이블스페이스별 디스크 사용량 보기[편집]

SELECT A.TABLESPACE_NAME AS "TABLESPACE"
     , A.INIT AS "INIT(K)"
     , A.NEXT AS "NEXT(K)"
     , A.MIN AS "MIN"
     , A.MAX AS "MAX"
     , A.PCT_INC AS "PCT_INC(%)"
     , TO_CHAR(B.TOTAL, '999,999,999,990') AS "총량(바이트)"
     , TO_CHAR(C.FREE, '999,999,999,990') AS "남은량(바이트)"
     , TO_CHAR(B.BLOCKS, '9,999,990') AS "총블럭"
     , TO_CHAR(D.BLOCKS, '9,999,990') AS "사용블럭"
     , TO_CHAR(100 * NVL(D.BLOCKS, 0) / B.BLOCKS, '999.99') AS "사용율%"
  FROM (SELECT TABLESPACE_NAME
                , INITIAL_EXTENT / 1024 AS INIT
                , NEXT_EXTENT / 1024 AS NEXT
                , MIN_EXTENTS AS MIN
                , MAX_EXTENTS AS MAX
                , PCT_INCREASE AS PCT_INC
           FROM      DBA_TABLESPACES) A
     , (SELECT    TABLESPACE_NAME, SUM(BYTES) AS TOTAL, SUM(BLOCKS) AS BLOCKS
           FROM      DBA_DATA_FILES
           GROUP BY  TABLESPACE_NAME) B
     , (SELECT    TABLESPACE_NAME, SUM(BYTES) AS FREE
           FROM      DBA_FREE_SPACE
           GROUP BY  TABLESPACE_NAME) C
     , (SELECT    TABLESPACE_NAME, SUM(BLOCKS) AS BLOCKS
           FROM      DBA_EXTENTS
           GROUP BY  TABLESPACE_NAME) D

 WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+) AND A.TABLESPACE_NAME = C.TABLESPACE_NAME(+) AND A.TABLESPACE_NAME = D.TABLESPACE_NAME(+) 
ORDER BY A.TABLESPACE_NAME;

9.5 테이블스페이스의 테이블 명 보기[편집]

SELECT TABLESPACE_NAME, TABLE_NAME 
  FROM USER_TABLES 
 WHERE TABLESPACE_NAME = UPPER('&테이블스페이스명') 
 ORDER BY TABLESPACE_NAME, TABLE_NAME;

9.6 공간의 90% 이상을 사용하고 있는 Tablespace[편집]

SELECT X.TABLESPACE_NAME
     , TOTAL_SIZE / 1024 / 1024 TOTAL_SIZE
     , USED_SIZE / 1024 / 1024 USED_SIZE
     , (ROUND(USED_SIZE / TOTAL_SIZE, 2)) * 100 USED_RATIO
  FROM (SELECT TABLESPACE_NAME, SUM(BYTES) TOTAL_SIZE
           FROM      DBA_DATA_FILES
           GROUP BY  TABLESPACE_NAME) X
     , (SELECT    TABLESPACE_NAME, SUM(BYTES) USED_SIZE
           FROM      DBA_EXTENTS
           GROUP BY  TABLESPACE_NAME) Y
 WHERE X.TABLESPACE_NAME = Y.TABLESPACE_NAME(+) AND Y.USED_SIZE > .9 * X.TOTAL_SIZE;

9.7 Object별 테이블스페이스 및 데이터파일[편집]

SELECT DISTINCT E.SEGMENT_NAME, E.TABLESPACE_NAME, F.FILE_NAME
  FROM DBA_EXTENTS E
     , DBA_DATA_FILES F
 WHERE E.FILE_ID = F.FILE_ID 
   AND E.SEGMENT_TYPE = 'TABLE' 
   AND E.TABLESPACE_NAME NOT IN ('SYSTEM', 'TOOLS');

9.8 Tablespace별 Table, Index 개수[편집]

SELECT OWNER
     , TABLESPACE_NAME
     , SUM(DECODE(SEGMENT_TYPE, 'TABLE', 1, 0))
     , SUM(DECODE(SEGMENT_TYPE, 'INDEX', 1, 0))
  FROM DBA_SEGMENTS WHERE SEGMENT_TYPE IN ('TABLE', 'INDEX') GROUP BY OWNER, TABLESPACE_NAME;

9.9 파일위치별 테이블스페이스 아는 방법[편집]

SELECT SUBSTRB(A.FILE_NAME, 1, 40) AS FILE_NAME
     , A.FILE_ID
     , B.FREE_BYTES / 1024 AS FREE_BYTES
     , B.MAX_BYTES / 1024 AS MAX_BYTES
  FROM DBA_DATA_FILES A
     , (SELECT FILE_ID, SUM(BYTES) AS FREE_BYTES, MAX(BYTES) AS MAX_BYTES
          FROM DBA_FREE_SPACE
         GROUP BY  FILE_ID) B
 WHERE A.FILE_ID = B.FILE_ID 
   AND A.TABLESPACE_NAME = UPPER('&테이블스페이스명') 
 ORDER BY A.FILE_NAME;

9.10 현재 Extension 횟수가 MaxExtents의 80% 이상인 경우[편집]

SELECT TABLESPACE_NAME
     , OWNER
     , SEGMENT_NAME
     , SEGMENT_TYPE
     , EXTENTS
     , MAX_EXTENTS
  FROM SYS.DBA_SEGMENTS S 
 WHERE EXTENTS / MAX_EXTENTS > .8 AND MAX_EXTENTS > 0 
 ORDER BY TABLESPACE_NAME, OWNER, SEGMENT_NAME;

9.11 테이블의 익스텐트 정보 조회[편집]

/*
    오라클에서 스토리지 구조는 아래와 같다.
    테이블 스페이스 -> 세그먼트 -> 익스텐트 -> 블록 -> OS 범위 -> 데이터 파일 -> 운영체제 블록     
    세그먼트의 이름,
    해당 세그먼트의 최대 익스텐트 개수,
    익스텐트 아이디
    해당 세그먼트의 최대 익스텐트 개수 - 최대 익스텐트 아이디     
    딕셔너리 관리 테이블스페이스로 생성한 것으로 조회를 한다.
*/ 

SELECT B.SEGMENT_NAME
     , B.MAX_EXTENTS
     , MAX(C.EXTENT_ID) AS EXTENT_ID
     , B.MAX_EXTENTS - MAX(C.EXTENT_ID) AS DIFF
  FROM USER_TABLESPACES A
     , USER_SEGMENTS B
     , USER_EXTENTS C
 WHERE A.EXTENT_MANAGEMENT = 'DICTIONARY' 
   AND B.TABLESPACE_NAME = A.TABLESPACE_NAME 
   AND C.SEGMENT_NAME = B.SEGMENT_NAME 
 GROUP BY B.SEGMENT_NAME, B.MAX_EXTENTS 
HAVING B.MAX_EXTENTS - MAX(C.EXTENT_ID) <= 50 
 ORDER BY B.MAX_EXTENTS - MAX(C.EXTENT_ID);

9.12 ROLLBACK SEGMENT의 사용상황 보기[편집]

--: EXTENTS = 현재 할당된 EXTENT의 수 --: EXTENDS = 마지막 트랜잭션에 의해 할당된 EXTENT의 수

SELECT SUBSTRB(A.SEGMENT_NAME, 1, 10) AS SEGMENT_NAME
     , SUBSTRB(A.TABLESPACE_NAME, 1, 10) AS TABLESPACE_NAME
     , TO_CHAR(A.SEGMENT_ID, '99,999') AS SEG_ID
     , TO_CHAR(A.MAX_EXTENTS, '999,999') AS MAX_EXT
     , TO_CHAR(B.EXTENTS, '999,999') AS EXTENTS
     , TO_CHAR(B.EXTENDS, '999,999') AS EXTENDS
     , TO_CHAR((A.INITIAL_EXTENT + (B.EXTENTS - 1) * A.NEXT_EXTENT) / 1000000, '9,999.999') AS "ALLOC(MB)"
     , TO_CHAR(XACTS, '9,999') AS XACTS
  FROM DBA_ROLLBACK_SEGS A
     , V$ROLLSTAT B
 WHERE A.SEGMENT_ID = B.USN(+) ORDER BY 1;