[Oracle] 컬럼 코멘트, 인덱스, PARTITION, 테이블 스페이스 조회

업무와 상관없이 두고두고 쓰는 몇가지 쿼리들.. 저장해두고 쓰자

 

1. 테이블, 컬럼 코멘트 조회

SELECT A.OWNER, A.TABLE_NAME, B,COMMENTS, A,COLUMN_NAME
, ( SELECT X.COMMENTS
FROM ALL_COL_COMMENTS X
WHERE X.OWNER = A.OWNER
AND X.TABLE_NAME = A.TABLE_NAME
AND X.COLUMN_NAME = A.COLUMN_NAME
-- AND X.COMMENTS LIKE '%%' -- 컬럼 코멘트
) COL_COMMENTS
, A.DATA_TYPE
, A.DATA_LENGTH
, A.DATA_PRECISION
, A.DATA_SCALE
FROM ALL_TAB_COLS A, ALL_TAB_COMMENTS B
WHERE 1=1
AND A.TABLE_NAME LIKE '%테이블 명%' -- 테이블 명
AND B.OWNER = A.OWNER
AND B.TABLE_NAME = A.TABLE_NAME
-- AND A.COUMN_NAME LIKE '%%' -- 컬럼 명
ORDER BY A.TABLE_NAME, A.COLUMN_ID
;

 

2. 인덱스 조회 

SELECT A.*
, B.COLUMN_EXPRESSION
FROM ALL_IND_COLUMNS A
, ALL_IND_EXPRESSIONS B
WHERE A.TABLE_NAME = '테이블 명' -- 테이블 명
AND B.TABLE_NAME(+) = A.TABLE_NAME
AND B.INDEX_NAME(+) = A.INDEX_NAME
AND B.COLUMN_POSITION(+) = A.COLUMN_POSITION
ORDER BY 2, 6;

 

3. PARTITION 조회

SELECT A.TABLE_OWNER
, A.TABLE_NAME
, B.PARTITIONING_TYPE
, B.SUBPARTITIONING_TYPE
, B.PARTITION_COUNT
, (SELECT LISTAGG(IX.COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY IX.COLUMN_POSITION)
FROM ALL_PART_KEY_COLUMNS IX
WHERE IX.NAME = A.TABLE_NAME) COLUMN_NAME
, A.HIGH_VALUE
, A.SEGMENT_CREATED
, A.PARTITION_NAME
FROM ALL_TAB_PARTITIONS A
, ALL_PART_TABLES B
WHERE 1=1
AND A.TABLE_NAME = '테이블 명' -- 테이블 명
AND B.TABLE_NAME = A.TABLE_NAME
;

 

4. 테이블 스페이스

SELECT * FROM DBA_TABLESPACES;
SELECT SUBSTR(A.TABLESPACE_NAME, 1, 30) TABLESPACE
, ROUND(SUM(A.TOTAL1)/1024/1024,1) TOTALMB
, ROUND(SUM(A.TOTAL1)/1024/1024,1) - ROUND(SUM(A.SUM1)/1024/1024,1) USEDMB
, ROUND(SUM(A.SUM1)/1024/1024,1) FREEMB
, ROUND((ROUND(SUM(A.TOTAL1)/1024/1024.1) - ROUND(SUM(A.SUM1)/1024/1024.1))/(ROUND(SUM(A.TOTAL1)/1024/1024,1))*100,2) "UESD%"
FROM (
SELECT TABLESPACE_NAME, 0 TOTAL1, SUM(BYTES) SUM1, MAX(BYTES) MAXB, COUNT(BYTES) CNT
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
UNION
SELECT TABLESPACE_NAME, SUM(BYTES) TOTAL1, 0, 0, 0
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME
) A
GROUP BY A.TABLESPACE_NAME
ORDER BY TABLESPACE
;

 

5. DB 락 확인

SELECT * FROM V$LOCKED_OBJECT;
SELECT A.*, B.OBJECT_NAME, B.OWNER, B.OBJECT_TYPE
FROM V$LOCKED_OBJECT A
, DBA_OBJECTS B
WHERE A.OBJECT_ID = B.OBJECT_ID;
SELECT DISTINCT X.SESSION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL
, A.PROGRAM, B.ADDRESS, B.PIECE, B.SQL_TEXT
FROM V$LOCKED_OBJECT X, V$SESSION A, V$SQLTEXT B, DBA_OBEJECTS D
WHERE X.SESSION_ID = A.SID
AND X.OBJECT_ID = D.OBJECT_ID
AND A.SQL_ADDRESS = B.ADDRESS
ORDER BY B.ADDRESS, B.PIECE;