- Session
+ 전체 세션 개수
SELECT COUNT(*) TOTAL_SESSION_CNT FROM V$SESSION ; |
+ 세션 정보
SELECT A.ID SESSION_ID , A.DB_USERNAME USER_NAME , REPLACE2(REPLACE2(A.COMM_NAME, 'SOCKET-', NULL), '-SERVER', NULL) CLIENT_IP , A.CLIENT_APP_INFO -- 알티베이스 4 버전에서 사용 시 제거 , A.CLIENT_PID , A.SESSION_STATE , DECODE(A.AUTOCOMMIT_FLAG, 1, 'ON', 'OFF') AUTOCOMMIT , DECODE(A.LOGIN_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + A.LOGIN_TIME / (24*60*60), 'YY/MM/DD HH:MI:SS')) LOGIN_TIME , DECODE(A.IDLE_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + A.IDLE_START_TIME / (24*60*60), 'YY/MM/DD HH:MI:SS')) IDLE_TIME , NVL(LTRIM(B.QUERY), 'NONE') CURRENT_QUERY FROM V$SESSION A LEFT OUTER JOIN V$STATEMENT B ON A.CURRENT_STMT_ID = B.ID ; |
+ SYSDBA 권한으로 접속 중인 세션 정보
SELECT A.ID SESSION_ID , A.DB_USERNAME USER_NAME , REPLACE2(REPLACE2(A.COMM_NAME, 'SOCKET-', NULL), '-SERVER', NULL) CLIENT_IP , A.CLIENT_APP_INFO -- 알티베이스 4 버전에서 사용 시 제거 , A.CLIENT_PID , A.SESSION_STATE , DECODE(A.AUTOCOMMIT_FLAG, 1, 'ON', 'OFF') AUTOCOMMIT , DECODE(A.LOGIN_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + A.LOGIN_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LOGIN_TIME , DECODE(A.IDLE_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') +A.IDLE_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) IDLE_TIME , NVL(LTRIM(B.QUERY), 'NONE') CURRENT_QUERY FROM V$SESSION A LEFT OUTER JOIN V$STATEMENT B ON A.CURRENT_STMT_ID = B.ID WHERE A.SYSDBA_FLAG = 1 ; |
- Statement
+ TIMED_STATISTICS 활성화 방법
ALTER SYSTEM SET TIMED_STATISTICS=1; |
+ 전체 쿼리 개수
SELECT COUNT(*) AS TOTAL_STMT_CNT FROM V$STATEMENT ; |
+ 쿼리 정보
SELECT SESSION_ID , ID STMT_ID , TX_ID , ROUND((PARSE_TIME+VALIDATE_TIME+OPTIMIZE_TIME)/1000000, 1) PREPARE_TIME , ROUND(FETCH_TIME/1000000, 1) FETCH_TIME , ROUND(EXECUTE_TIME/1000000, 1) EXECUTE_TIME , ROUND(TOTAL_TIME/1000000, 1) TOTAL_TIME , EXECUTE_FLAG , DECODE(LAST_QUERY_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + LAST_QUERY_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LAST_START_TIME , NVL(LTRIM(QUERY), 'NONE') QUERY FROM V$STATEMENT ORDER BY EXECUTE_TIME DESC ; |
+ 현재 수행 중인 쿼리 개수
SELECT COUNT(*) AS ACTIVE_STMT_CNT FROM V$STATEMENT WHERE EXECUTE_FLAG = 1 ; |
+ 장시간으로 수행 쿼리 정보
SELECT SESSION_ID , ID STMT_ID , TX_ID , ROUND((PARSE_TIME+VALIDATE_TIME+OPTIMIZE_TIME)/1000000, 1) PREPARE_TIME , ROUND(FETCH_TIME/1000000, 1) FETCH_TIME , ROUND(EXECUTE_TIME/1000000, 1) EXECUTE_TIME , ROUND(TOTAL_TIME/1000000, 1) TOTAL_TIME , DECODE(LAST_QUERY_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + LAST_QUERY_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LAST_START_TIME , NVL(LTRIM(QUERY), 'NONE') QUERY FROM V$STATEMENT WHERE EXECUTE_FLAG = 1 AND EXECUTE_TIME/1000000 > 600 -- 쿼리 수행 시간 조건을 변경하면 이 조건의 값을 변경하면 된다. 값은 초 단위이다. ORDER BY EXECUTE_TIME DESC ; |
+ 장시간 수행되는 DML트랜잭션의 마지막 쿼리 정보
SELECT ST.SESSION_ID , SS.COMM_NAME CLIENT_IP , SS.CLIENT_PID , SS.CLIENT_APP_INFO , (BASE_TIME - TR.FIRST_UPDATE_TIME) AS UTRANS_TIME , ROUND(EXECUTE_TIME/1000000, 1) EXECUTE_TIME , ROUND(TOTAL_TIME/1000000, 1) TOTAL_TIME , DECODE(LAST_QUERY_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + LAST_QUERY_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LAST_START_TIME , NVL(LTRIM(ST.QUERY), 'NONE') QUERY FROM V$TRANSACTION TR, V$STATEMENT ST, V$SESSIONMGR, V$SESSION SS WHERE TR.ID = ST.TX_ID AND ST.SESSION_ID = SS.ID AND TR.FIRST_UPDATE_TIME != 0 -- 0:read only transaction AND (BASE_TIME - TR.FIRST_UPDATE_TIME) > 3600 -- 수행 시간 조건을 변경하고자 할 경우 이 조건의 값을 변경하면 된다. 값은 초 단위이다. ORDER BY UTRANS_TIME DESC ; |
+ 풀 스캔 쿼리 정보
SELECT SESSION_ID , S.COMM_NAME CLIENT_IP , S.CLIENT_PID , S.CLIENT_APP_INFO , DECODE(LAST_QUERY_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + LAST_QUERY_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LAST_START_TIME , ROUND((PARSE_TIME+VALIDATE_TIME+OPTIMIZE_TIME)/1000000, 1) PREPARE_TIME , ROUND(FETCH_TIME/1000000, 1) FETCH_TIME , ROUND(EXECUTE_TIME/1000000, 1) EXECUTE_TIME , ROUND(TOTAL_TIME/1000000, 1) TOTAL_TIME , NVL(LTRIM(QUERY), 'NONE') QUERY FROM V$STATEMENT T, V$SESSION S WHERE S.ID = T.SESSION_ID AND (MEM_CURSOR_FULL_SCAN > 0 OR DISK_CURSOR_FULL_SCAN > 0) AND UPPER(QUERY) NOT LIKE '%INSERT%' ORDER BY EXECUTE_TIME DESC ; |
+ 풀 스캔 쿼리 수행 횟수 통계
SELECT COUNT(EXECUTE_SUCCESS) EXECUTE_CNT , SUBSTR(LTRIM(QUERY), 1, 40) QUERY FROM V$STATEMENT WHERE (MEM_CURSOR_FULL_SCAN > 0 OR DISK_CURSOR_FULL_SCAN > 0) AND UPPER(QUERY) NOT LIKE '%INSERT%' GROUP BY QUERY ORDER BY EXECUTE_CNT DESC ; |
+ 세션 별 쿼리 목록
SELECT SESSION_ID , ID STMT_ID , TX_ID , SUBSTR(QUERY, 1, 100) QUERY FROM V$STATEMENT ORDER BY 1, 2 ; |
+ 세션 당 statement 생성 수
SELECT SE.ID SESSION_ID , COUNT(DISTINCT ST.ID) CURR_STMT_CNT_PER_SESSION FROM V$SESSION SE , V$STATEMENT ST WHERE 1=1 AND SE.ID=ST.SESSION_ID GROUP BY SE.ID ORDER BY SE.ID; |
- Service Thread
+ 서비스 스레드 상태
SELECT RUN_MODE , STATE , COUNT(*) CNT FROM V$SERVICE_THREAD GROUP BY RUN_MODE, STATE ; |
+ 서비스 스레드 경합 확인
SELECT NAME, MISS_COUNT, TRY_COUNT, ROUND(MISS_COUNT/TRY_COUNT*100, 2) PER FROM V$MUTEX WHERE NAME = 'MMT_SERVICE_THREAD_MUTEX' ORDER BY 4 DESC ; |
- Transaction & Lock
+ Transaction & lock 정보
SELECT TX.ID TX_ID , WAIT_FOR_TRANS_ID BLOCKED_TX_ID , DECODE(TX.STATUS, 0, 'BEGIN', 1, 'PRECOMMIT', 2, 'COMMIT_IN_MEMORY', 3, 'COMMIT', 4, 'ABORT', 5, 'BLOCKED', 6, 'END') STATUS , DECODE(TX.LOG_TYPE, 0, U1.USER_NAME, 'REPLICATION') USER_NAME , DECODE(TX.LOG_TYPE, 0, TX.SESSION_ID, RT.REP_NAME) SESSION_ID , DECODE(TX.LOG_TYPE, 0, ST.COMM_NAME, RR.PEER_IP) CLIENT_IP , DECODE(ST.AUTOCOMMIT_FLAG, 1, 'ON', 'OFF') AUTOCOMMIT , L.LOCK_DESC , DECODE(TX.FIRST_UPDATE_TIME, 0, '0', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + TX.FIRST_UPDATE_TIME / (60*60*24), 'MM/DD HH:MI:SS')) FIRST_UPDATE_TIME , U2.USER_NAME||'.'||T.TABLE_NAME TABLE_NAME , DECODE(TX.LOG_TYPE, 0, SUBSTR(ST.QUERY, 1, 10), 'REMOTE TX_ID '||REMOTE_TID) CURRENT_QUERY , DECODE(TX.DDL_FLAG, 0, 'NON-DDL', 'DDL') DDL , DECODE(TX.FIRST_UNDO_NEXT_LSN_FILENO, -1, '-', TX.FIRST_UNDO_NEXT_LSN_FILENO) 'LOGFILE#' FROM V$TRANSACTION TX, V$LOCK L LEFT OUTER JOIN (SELECT ST.*, SS.AUTOCOMMIT_FLAG, SS.DB_USERID, SS.COMM_NAME FROM V$STATEMENT ST, V$SESSION SS WHERE SS.ID = ST.SESSION_ID AND SS.CURRENT_STMT_ID = ST.ID) ST ON L.TRANS_ID = ST.TX_ID LEFT OUTER JOIN V$REPRECEIVER_TRANSTBL RT ON L.TRANS_ID = RT.LOCAL_TID LEFT OUTER JOIN V$REPRECEIVER RR ON RT.REP_NAME = RR.REP_NAME LEFT OUTER JOIN V$LOCK_WAIT LW ON L.TRANS_ID = LW.TRANS_ID LEFT OUTER JOIN SYSTEM_.SYS_USERS_ U1 ON ST.DB_USERID = U1.USER_ID, SYSTEM_.SYS_TABLES_ T LEFT OUTER JOIN SYSTEM_.SYS_USERS_ U2 ON T.USER_ID = U2.USER_ID WHERE TX.ID = L.TRANS_ID AND T.TABLE_OID = L.TABLE_OID AND TX.STATUS != 6 ORDER BY TX.ID, ST.ID, TX.FIRST_UPDATE_TIME DESC ; |
- redo logfile
+ 리두로그 파일 정보
SELECT OLDEST_ACTIVE_LOGFILE OLDEST_LOGFILE , CURRENT_LOGFILE CURRENT_LOGFILE , CURRENT_LOGFILE-OLDEST_ACTIVE_LOGFILE LOGFILE_GAP FROM V$ARCHIVE ; |
+ 리두로그 파일 prepare 대기 누적횟수
SELECT LF_PREPARE_WAIT_COUNT FROM V$LFG ; |
- GC
+ 메모리 GC gap
SELECT GC_NAME , SCNOFTAIL , MINMEMSCNINTXS , ADD_OID_CNT-GC_OID_CNT GC_GAP FROM V$MEMGC ; |
+ 메모리 DB GC가 대기하고 있는 트랜잭션에서 수행중인 쿼리
SELECT SESSION_ID , TOTAL_TIME , EXECUTE_TIME , TX_ID , QUERY FROM V$STATEMENT WHERE TX_ID IN (SELECT ID FROM V$TRANSACTION WHERE MEMORY_VIEW_SCN = (SELECT MINMEMSCNINTXS FROM V$MEMGC LIMIT 1)) AND EXECUTE_FLAG = 1 ORDER BY 2 DESC ; |
- Memory
+ 알티베이스의 메모리 사용 현황
SELECT NAME , ROUND(ALLOC_SIZE/1024/1024) 'ALLOC(M)' , ROUND(MAX_TOTAL_SIZE/1024/1024) 'MAX_TOTAL(M)' FROM V$MEMSTAT ORDER BY 3 DESC ; |
+ ALTIBASE의 메모리 사용량 합계
SELECT ROUND(SUM(ALLOC_SIZE)/1024/1024) 'ALLOC(M)' , ROUND(SUM(MAX_TOTAL_SIZE)/1024/1024) 'MAX_TOTAL(M)' FROM V$MEMSTAT ; |
- Tablespace (TBS)
+ 메모리 테이블 스페이스 사용량
// 버전 5.5.1이상. VOLATILE 테이블스페이스 사용량 조회 가능 SELECT ID TBS_ID , DECODE(TYPE, 0, 'MEMORY_DICTIONARY', 1, 'MEMORY_SYS_DATA', 2, 'MEMORY_USER_DATA', 8, 'VOLATILE_USER_DATA') TBS_TYPE , NAME TBS_NAME , TO_CHAR(DECODE(M.MAXSIZE, 140737488322560, D.MEM_MAX_DB_SIZE , 0 , T.TOTAL_PAGE_COUNT * T.PAGE_SIZE, M.MAXSIZE) /1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR( M.ALLOC_PAGE_COUNT * T.PAGE_SIZE / 1024 / 1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(NVL(M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT,T.TOTAL_PAGE_COUNT)*PAGE_SIZE/1024/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR(NVL(MT.USED, 0), '999,999,999') 'USED(M)' , TO_CHAR(DECODE(MAXSIZE, 140737488322560, (M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT)*T.PAGE_SIZE/ D.MEM_MAX_DB_SIZE ,0, (M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT) / T.TOTAL_PAGE_COUNT , (M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT) * T.PAGE_SIZE/ M.MAXSIZE) * 100 , '99.99') 'USAGE(%)' , DECODE(T.STATE,1,'OFFLINE',2,'ONLINE',5,'OFFLINE BACKUP',6,'ONLINE BACKUP',128,'DROPPED', 'DISCARDED') STATE , DECODE(M.AUTOEXTEND_MODE,1,'ON','OFF') 'AUTOEXTEND' FROM V$DATABASE D , V$TABLESPACES T , (SELECT SPACE_ID , SPACE_NAME , ALLOC_PAGE_COUNT , FREE_PAGE_COUNT , DECODE(MAX_SIZE, 0, (SELECT VALUE1 FROM V$PROPERTY WHERE NAME = 'VOLATILE_MAX_DB_SIZE'), MAX_SIZE) AS MAXSIZE , AUTOEXTEND_MODE FROM V$VOL_TABLESPACES UNION SELECT SPACE_ID , SPACE_NAME , ALLOC_PAGE_COUNT , FREE_PAGE_COUNT , MAXSIZE , AUTOEXTEND_MODE FROM V$MEM_TABLESPACES ) M LEFT OUTER JOIN(SELECT TABLESPACE_ID, ROUND(SUM((FIXED_USED_MEM + VAR_USED_MEM))/(1024*1024),3) USED FROM V$MEMTBL_INFO GROUP BY TABLESPACE_ID ) MT ON M.SPACE_ID = MT.TABLESPACE_ID WHERE T.ID = M.SPACE_ID; // 버전 5.3.3 용 쿼리. VOLATILE 테이블스페이스 정보 나오지 않음. SELECT ID TBS_ID , DECODE(TYPE, 0, 'MEMORY_DICTIONARY', 1, 'MEMORY_SYS_DATA', 2, 'MEMORY_USER_DATA', 8, 'VOLATILE_USER_DATA') TBS_TYPE , NAME TBS_NAME , DECODE(MAXSIZE, 140737488322560, 'UNDEFINED', 0, ROUND(ALLOCATED_PAGE_COUNT*PAGE_SIZE/1024/1024, 2), ROUND(MAXSIZE/1024/1024, 2)) 'MAX(M)' , ROUND(ALLOCATED_PAGE_COUNT * PAGE_SIZE / 1024 / 1024, 2) 'TOTAL(M)' , ROUND(NVL(M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT, TOTAL_PAGE_COUNT)*PAGE_SIZE/1024/1024, 2) 'ALLOC(M)' , MT.USED 'USED(M)' , DECODE(MAXSIZE, 140737488322560, ROUND((M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT)*PAGE_SIZE/ MEM_MAX_DB_SIZE*100, 2), 0, ROUND((M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT)*PAGE_SIZE/(ALLOCATED_PAGE_COUNT * PAGE_SIZE)*100, 2), ROUND((M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT)*PAGE_SIZE/MAXSIZE*100, 2)) 'USAGE(%)' , DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , DECODE(AUTOEXTEND_MODE, 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATABASE D , V$TABLESPACES T , V$MEM_TABLESPACES M , (SELECT TABLESPACE_ID, ROUND(SUM((FIXED_USED_MEM + VAR_USED_MEM))/(1024*1024), 3) USED FROM V$MEMTBL_INFO GROUP BY TABLESPACE_ID) MT WHERE T.ID = M.SPACE_ID AND ID = MT.TABLESPACE_ID ; // 버전 4 용 쿼리. 'SYS_TBS_MEMORY' 라는 하나의 테이블 스페이스만 나옴. SELECT 'SYS_TBS_MEMORY' AS TABLESPACE_NAME , ROUND(MEM_MAX_DB_SIZE/1024/1024, 2) AS 'MAX(M)' , ROUND(MEM_ALLOC_PAGE_COUNT * 32 / 1024, 2) AS 'TOTAL(M)' , ROUND((MEM_ALLOC_PAGE_COUNT - MEM_FREE_PAGE_COUNT) * 32 / 1024, 2) AS 'ALLOC(M)' , ROUND(MTBL.USED/1024/1024, 2) AS 'USED(M)' , ROUND(((MEM_ALLOC_PAGE_COUNT - MEM_FREE_PAGE_COUNT) * 32 * 1024 / MEM_MAX_DB_SIZE) * 100, 2) AS 'USAGE(%)' FROM V$DATABASE DB , (SELECT SUM(FIXED_USED_MEM+VAR_USED_MEM) AS USED FROM V$MEMTBL_INFO ) MTBL ; |
+ 전체 메모리 테이블스페이스 사용량
SELECT MEM_MAX_DB_SIZE/1024/1024 'MAX(M)' , ROUND(MEM_ALLOC_PAGE_COUNT*32/1024, 2) 'TOTAL(M)' , TRUNC((MEM_ALLOC_PAGE_COUNT-MEM_FREE_PAGE_COUNT)*32/1024, 2) 'ALLOC(M)' , (SELECT ROUND(SUM((FIXED_USED_MEM + VAR_USED_MEM))/(1024*1024), 3) FROM V$MEMTBL_INFO) 'USED(M)' , TRUNC(((MEM_ALLOC_PAGE_COUNT-MEM_FREE_PAGE_COUNT)*32*1024)/MEM_MAX_DB_SIZE, 4)*100 'USAGE(%)' FROM V$DATABASE ; |
+ 디스크 테이블 스페이스 사용량
// 버전 5.5.1 이상. 언두 테이블스페이스의 사용량도 확인 가능. SELECT T.ID TBS_ID , DECODE(TYPE, 3, 'SYSTEM_DISK_DATA', 4, 'DISK_USER_DATA', 5, 'SYSTEM_DISK_TEMP', 6, 'USER_DISK_TEMP', 7, 'SYSTEM_DISK_UNDO') TBS_TYPE , NAME TBS_NAME , TO_CHAR((D.MAX * PAGE_SIZE / 1024 /1024), '999,999,999') 'MAX(M)' , TO_CHAR((TOTAL_PAGE_COUNT * PAGE_SIZE)/1024/1024, '999,999,999') 'TOTAL(M)' , DECODE(TYPE, 7, TO_CHAR((U.TOTAL_EXT_CNT*PROP.EXTENT_SIZE)/1024/1024, '999,999,999') , TO_CHAR((ALLOCATED_PAGE_COUNT * PAGE_SIZE)/1024/1024, '999,999,999')) 'ALLOC(M)' , DECODE(TYPE, 3, TO_CHAR(NVL(DS.USED, 0)/1024/1024, '999,999,999'), 4, TO_CHAR(NVL(DS.USED, 0)/1024/1024, '999,999,999'), 7, TO_CHAR(((U.TX_EXT_CNT+U.USED_EXT_CNT+U.UNSTEALABLE_EXT_CNT) * PROP.EXTENT_SIZE)/1024/1024, '999,999,999') , LPAD('-', 12))'USED(M)' , DECODE(TYPE, 7, TO_CHAR((((U.TX_EXT_CNT+U.USED_EXT_CNT+U.UNSTEALABLE_EXT_CNT) * PROP.EXTENT_SIZE)/(D.MAX*PAGE_SIZE))*100, '999.99'), 3, TO_CHAR(NVL(DS.USED, 0)/(D.MAX*PAGE_SIZE)* 100, '99.99'), 4, TO_CHAR(NVL(DS.USED, 0)/(D.MAX*PAGE_SIZE)* 100, '99.99') , TO_CHAR((ALLOCATED_PAGE_COUNT/D.MAX) * 100, '99.99')) 'USAGE(%)' , DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , D.AUTOEXTEND FROM V$TABLESPACES T LEFT OUTER JOIN(SELECT SPACE_ID , SUM(TOTAL_USED_SIZE) USED FROM X$SEGMENT GROUP BY SPACE_ID) DS ON DS.SPACE_ID = T.ID , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND), 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID ) D , V$DISK_UNDO_USAGE U , (SELECT VALUE1 EXTENT_SIZE FROM V$PROPERTY WHERE NAME = 'SYS_UNDO_TBS_EXTENT_SIZE') PROP WHERE T.ID = D.SPACEID ; // 버전 5.3.3, 5.3.5 용 쿼리. 언두 테이블스페이스와 임시 테이블스페이스의 실 사용량(USED)을 구할 수 없음. SELECT NAME TBS_NAME , TO_CHAR(D.MAX * PAGE_SIZE / 1024 /1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL_PAGE_COUNT*PAGE_SIZE/1024/1024, '999,999,999') 'TOTAL(M)' , DECODE(TYPE, 7, TO_CHAR((SELECT (SUM(TOTAL_EXTENT_COUNT*PAGE_COUNT_IN_EXTENT)*PAGE_SIZE)/1024/1024 FROM V$UDSEGS)+ (SELECT (SUM(TOTAL_EXTENT_COUNT*PAGE_COUNT_IN_EXTENT)*PAGE_SIZE)/1024/1024 FROM V$TSSEGS), '999,999,999') , /* UNDO */ TO_CHAR((ALLOCATED_PAGE_COUNT*PAGE_SIZE)/1024/1024, '999,999,999')) 'ALLOC(M)' , DECODE(TYPE, 3, TO_CHAR(NVL(DS.USED, 0)/1024/1024, '999,999,999'), 4, TO_CHAR(NVL(DS.USED, 0)/1024/1024, '999,999,999') /* SYS_TEMP */ , LPAD('-', 12)) 'USED(M)' , DECODE(TYPE, 7, TO_CHAR(((SELECT SUM(TOTAL_EXTENT_COUNT*PAGE_COUNT_IN_EXTENT) FROM V$UDSEGS)+ (SELECT SUM(TOTAL_EXTENT_COUNT*PAGE_COUNT_IN_EXTENT) FROM V$TSSEGS)) / D.MAX* 100, '999.99') , /* UNDO */ 3, TO_CHAR(NVL(DS.USED, 0)/(D.MAX*PAGE_SIZE)* 100, '999.99') , 4, TO_CHAR(NVL(DS.USED, 0)/(D.MAX*PAGE_SIZE)* 100, '999.99') , /* TEMP */ TO_CHAR(ALLOCATED_PAGE_COUNT / D.MAX * 100, '99.99') ) 'USAGE(%)' -- USAGE(%) : MAX대비 USED. TEMP, UNDO 의 경우 MAX대비 ALLOC , DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , D.AUTOEXTEND FROM V$TABLESPACES T LEFT OUTER JOIN (SELECT SPACE_ID , SUM(TOTAL_USED_SIZE) USED FROM X$SEGMENT GROUP BY SPACE_ID ) DS ON DS.SPACE_ID = T.ID ,(SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND), 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID ) D WHERE T.ID = D.SPACEID ; // 버전 5.1.5 용 쿼리. 디스크 테이블의 구조 변경으로 디스크 테이블스페이스의 실 사용량(USED)을 구할 수 없고 할당 크기(ALLOC)만 알 수 있음. 언두 테이블스페이스와 임시 테이블스페이스의 실 사용량 구할 수 없음. SELECT NAME TBS_NAME , TO_CHAR(ROUND(D.MAX * PAGE_SIZE / 1024 /1024, 2)) 'MAX(M)' , ROUND(TOTAL_PAGE_COUNT * PAGE_SIZE / 1024 / 1024, 2) 'TOTAL(M)' , DECODE(TYPE, 7, ROUND((SELECT (SUM(total_page_count) * PAGE_SIZE)/1024/1024 FROM V$undo_seg)+ (SELECT (SUM(ALLOC_PAGE_COUNT) * PAGE_SIZE)/1024/1024 FROM v$tss_seg), 2) , ROUND(ALLOCATED_PAGE_COUNT * PAGE_SIZE / 1024 / 1024, 2)) 'ALLOC(M)' , DECODE(TYPE, 7, ROUND( ( (SELECT SUM(total_page_count) FROM V$undo_seg) + (SELECT SUM(ALLOC_PAGE_COUNT) FROM v$tss_seg ) ) / D.MAX * 100, 2) , ROUND(ALLOCATED_PAGE_COUNT / D.MAX * 100, 2)) 'USAGE(%)' , DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , D.AUTOEXTEND FROM V$TABLESPACES T ,(SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND), 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE T.ID = D.SPACEID ; // 버전 4 용 쿼리 SELECT TBS.NAME TBS_NAME , TO_CHAR(ROUND(DAT.MAX * TBS.PAGE_SIZE / 1024 /1024, 2)) 'MAX(M)' , ROUND(TBS.TOTAL_PAGE_COUNT * TBS.PAGE_SIZE / 1024 / 1024, 2) 'TOTAL(M)' , DECODE(TBS.TYPE, 5, ROUND( UNDO.ALLOC * TBS.PAGE_SIZE/1024/1024, 2) /* UNDO TABLESPACE*/ , ROUND( TBS.ALLOCATED_PAGE_COUNT * TBS.PAGE_SIZE / 1024 / 1024, 2) ) 'ALLOC(M)' , DECODE(TBS.TYPE, 3, '-' /* TEMP TABLESPACE */ , 5, ROUND( UNDO.USED * TBS.PAGE_SIZE /1024/1024, 2) /* UNDO TABLESPACE*/ , DECODE(SEG.USED, '', 0, ROUND((SEG.USED * TBS.PAGE_SIZE * TBS.A_EXTENT_PAGE_COUNT)/1024/1024, 2)) /* USER TABLESPACE & SYS_TBS_DATA */) 'USED(M)' , DECODE(TBS.TYPE, 5, ROUND( UNDO.ALLOC / DAT.MAX * 100, 2) --UNDO , ROUND( TBS.ALLOCATED_PAGE_COUNT / DAT.MAX * 100, 2) ) 'USAGE(%)' , DECODE(TBS.STATE, 1, 'ONLINE', 2, 'BEGIN BACKUP', 3, 'END BACKUP', 'NOT DEFINED') STATE , DAT.AUTOEXTEND FROM V$TABLESPACES TBS LEFT OUTER JOIN (SELECT SPACE_ID , SUM(EXTENT_TOTAL_COUNT) ALLOC , SUM(EXTENT_FULL_COUNT ) USED FROM X$SEGMENT GROUP BY SPACE_ID ) SEG ON TBS.ID = SEG.SPACE_ID ,(SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND), 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID ) DAT , (SELECT SUM(ALLOCATED_PAGE_COUNT) ALLOC , SUM(USED_PAGE_COUNT) USED FROM V$UNDO_TBS ) UNDO WHERE TBS.ID = DAT.SPACEID; |
+ 디스크 언두 테이블스페이스 사용량
SELECT T.NAME TBS_NAME , ROUND(D.MAX * PAGE_SIZE / 1024 /1024, 2) 'MAX(M)' , ROUND((TOTAL_PAGE_COUNT * PAGE_SIZE) / 1024 / 1024, 2) 'TOTAL(M)' , ROUND((U.TOTAL_EXT_CNT*PROP.EXTENT_SIZE)/1024/1024, 2) 'ALLOC(M)' , ROUND(((U.TX_EXT_CNT+U.USED_EXT_CNT+U.UNSTEALABLE_EXT_CNT) * PROP.EXTENT_SIZE)/1024/1024, 2) 'USED(M)' , ROUND((((U.TX_EXT_CNT+U.USED_EXT_CNT+U.UNSTEALABLE_EXT_CNT) * PROP.EXTENT_SIZE)/(D.MAX*PAGE_SIZE))*100, 2) 'USAGE(%)' , DECODE(STATE,1,'OFFLINE',2,'ONLINE',5,'OFFLINE BACKUP',6,'ONLINE BACKUP',128,'DROPPED', 'DISCARDED') STATE , D.AUTOEXTEND FROM V$TABLESPACES T , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D , V$DISK_UNDO_USAGE U , (SELECT VALUE1 EXTENT_SIZE FROM V$PROPERTY WHERE NAME = 'SYS_UNDO_TBS_EXTENT_SIZE') PROP WHERE T.ID = D.SPACEID AND T.ID = 3 ; |
+ 트랜잭션 별 언두 테이블스페이스 사용량
SELECT DECODE(TX.SESSION_ID, -1, 'REP('||REP.REP_NAME||')', TX.SESSION_ID) SESSION_ID , TX.ID TX_ID , DECODE(TX.STATUS, 0, 'BEGIN', 1, 'PRECOMMIT', 2, 'COMMIT_IN_MEMORY', 3, 'COMMIT', 4, 'ABORT', 5, 'BLOCKED', 6, 'END') TX_STATUS , RPAD(DECODE(ST.EXECUTE_FLAG, NULL, 'REP('||REP.REP_NAME||')', 1, 'SQL ING', 0, 'SQL END'), 10) SQL_STATUS , RPAD(DECODE(TX.LOG_TYPE, 1, 'REP '||REP.PEER_IP||':'||REP.PEER_PORT, S.COMM_NAME||' PID:'||S.CLIENT_PID), 40) CLIENT_IP , RPAD(DECODE(TX.LOG_TYPE, 1, 'REP('||REP.REP_NAME||')', S.CLIENT_APP_INFO), 15) CLIENT_APP_INFO , RPAD(DECODE(S.AUTOCOMMIT_FLAG, 1, 'ON', 0, 'OFF', NULL, 'REP('||REP.REP_NAME||')'), 10) AUTOCOMMIT , RPAD(DECODE(TX.LOG_TYPE, 1, 'REP('||REP.REP_NAME||')', S.UTRANS_TIME_LIMIT), 15) UTRANS_TIMEOUT , DECODE(ST.LAST_QUERY_START_TIME, NULL, TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + TX.FIRST_UPDATE_TIME / (60*60*24), 'YYYY-MM-DD HH:MI:SS'), TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + ST.LAST_QUERY_START_TIME / (60*60*24), 'YYYY-MM-DD HH:MI:SS')) LAST_QUERY_START_TIME , ((((TSS.TOTAL_EXTENT_COUNT+TSS.TOTAL_EXTDIR_COUNT)*TSS.PAGE_COUNT_IN_EXTENT)+((UDS.TOTAL_EXTENT_COUNT+UDS.TOTAL_EXTDIR_COUNT)*UDS.PAGE_COUNT_IN_EXTENT))*TBS.PAGE_SIZE) /1024/1024 UNDO_USAGE , DECODE(TX.LOG_TYPE, 1, 'REMOTE_TX_ID : '||REP_TX.REMOTE_TID, SUBSTR(ST.QUERY, 1, 30)) QUERY FROM V$TXSEGS TXS , V$TSSEGS TSS , V$UDSEGS UDS , V$TRANSACTION TX LEFT OUTER JOIN V$SESSION S ON TX.ID = S.TRANS_ID LEFT OUTER JOIN V$STATEMENT ST ON S.CURRENT_STMT_ID = ST.ID LEFT OUTER JOIN V$REPRECEIVER_TRANSTBL REP_TX ON TX.ID = REP_TX.LOCAL_TID LEFT OUTER JOIN V$REPRECEIVER REP ON REP_TX.REP_NAME = REP.REP_NAME , V$TABLESPACES TBS WHERE 1=1 AND UDS.SPACE_ID = 3 AND TXS.ID = UDS.TXSEG_ENTRY_ID AND TXS.ID = TSS.TXSEG_ENTRY_ID AND TXS.TRANS_ID = TX.ID AND TBS.ID = UDS.SPACE_ID ; |
+ 메모리 테이블스페이스 데이터 파일 체크포인트 경로
SELECT M.SPACE_ID TBS_ID, SPACE_NAME TBS_NAME, CHECKPOINT_PATH FROM V$MEM_TABLESPACES M, V$MEM_TABLESPACE_CHECKPOINT_PATHS C WHERE M.SPACE_ID = C.SPACE_ID ; |
+ 메모리 테이블스페이스 데이터 파일
SELECT MEM_DATA_FILE DATAFILE_NAME FROM V$STABLE_MEM_DATAFILES ; |
+ 디스크 테이블스페이스 데이터 파일
SELECT B.NAME TBS_NAME, A.ID 'FILE#', A.NAME DATAFILE_NAME, CURRSIZE*8/1024 'ALLOC(M)', ROUND(CASE2(A.MAXSIZE=0, CURRSIZE, A.MAXSIZE)*8/1024) 'MAX(M)', DECODE(AUTOEXTEND, 0, 'OFF', 'ON') 'AUTOEXTEND' FROM V$DATAFILES A, V$TABLESPACES B WHERE B.ID = A.SPACEID ORDER BY B.NAME, A.ID ; |
+ 디스크 테이블스페이스 데이터 파일 별 단일 페이지 Read I/O
SELECT B.NAME TBS_NAME, A.SINGLEBLKRDS READ_CNT_PER_PAGE, A.SINGLEBLKRDTIM READ_TIME_PER_PAGE, TRUNC(A.SINGLEBLKRDTIM/A.SINGLEBLKRDS,2) AVERAGE_TIME FROM V$FILESTAT A, V$DATAFILES B WHERE A.SPACEID = B.SPACEID AND A.FILEID = B.ID AND A.SINGLEBLKRDS > 0 ORDER BY AVERAGE_TIME DESC ; |
+ 임시 테이블스페이스 사용량
SELECT SUM(NORMAL_AREA_SIZE) SUM_NORMAL_AREA_SIZE FROM X$TEMPTABLE_STATS WHERE DROP_TIME = '19700101_090000' ; |
+ 트랜잭션 별 임시 테이블스페이스 사용량
SELECT NORMAL_AREA_SIZE FROM X$TEMPTABLE_STATS T, V$STATEMENT STMT WHERE T.TRANSACTION_ID = STMT.TX_ID ; |
+ 전체 테이블스페이스 상태
SELECT NAME TBS_NAME, DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARD') STATE FROM V$TABLESPACES ; |
- Disk Buffer
+ 디스크 버퍼 Hit Ratio
SELECT HIT_RATIO 'HIT_RATIO(%)' FROM V$BUFFPOOL_STAT ; |
- Object
+ 메모리 테이블 사용량
// 버전 6.5.1 이상. SELECT MT.USER_NAME , MT.TABLE_NAME , MT.PARTITION_NAME , TBS.NAME TBS_NAME , TO_CHAR((MU.FIXED_ALLOC_MEM+MU.VAR_ALLOC_MEM)/1024/1024, '999,999,999.9') 'ALLOC(M)' , TO_CHAR((MU.FIXED_USED_MEM+MU.VAR_USED_MEM)/1024/1024, '999,999,999.9') 'USED(M)' , TO_CHAR(((MU.FIXED_USED_MEM+MU.VAR_USED_MEM)/(MU.FIXED_ALLOC_MEM+MU.VAR_ALLOC_MEM))*100, '999.9') 'USAGE(%)' FROM (SELECT U.USER_NAME , T.TABLE_NAME , DECODE(T.IS_PARTITIONED, 'F', T.TABLE_OID, 'T', P.PARTITION_OID) TABLE_OID , DECODE(T.IS_PARTITIONED, 'F', RPAD('-', 14), 'T', P.PARTITION_NAME) PARTITION_NAME , DECODE(T.IS_PARTITIONED, 'F', T.TBS_ID, 'T', P.TBS_ID) TBS_ID FROM SYSTEM_.SYS_USERS_ U , SYSTEM_.SYS_TABLES_ T LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ P ON T.TABLE_ID = P.TABLE_ID WHERE 1=1 AND U.USER_ID <> 1 AND U.USER_ID = T.USER_ID AND T.TBS_ID IN (SELECT ID FROM V$TABLESPACES WHERE TYPE IN (1, 2, 8)) ) MT , V$MEMTBL_INFO MU , V$TABLESPACES TBS WHERE 1=1 AND MT.TABLE_OID = MU.TABLE_OID AND TBS.ID = MT.TBS_ID ORDER BY 1, 2, 3 ; // 버전 4 이상. SELECT A.USER_NAME , B.TABLE_NAME , D.NAME TBS_NAME , TO_CHAR((C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM)/1024/1024, '999,999,999.9') 'ALLOC(M)' , TO_CHAR((C.FIXED_USED_MEM+C.VAR_USED_MEM)/1024/1024, '999,999,999.9') 'USED(M)' , TO_CHAR(((C.FIXED_USED_MEM+C.VAR_USED_MEM)/(C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM))*100, '999.9') 'USAGE(%)' FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_TABLES_ B , V$MEMTBL_INFO C , V$TABLESPACES D WHERE 1=1 AND A.USER_NAME <> 'SYSTEM_' AND B.TABLE_TYPE = 'T' AND A.USER_ID = B.USER_ID AND B.TABLE_OID = C.TABLE_OID AND B.TBS_ID = D.ID ORDER BY USER_NAME, TBS_NAME, TABLE_NAME ; |
+ 큐
SELECT A.USER_NAME , B.TABLE_NAME , D.NAME TABLESPACE_NAME , C.TABLE_OID , TO_CHAR((C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM)/1024/1024, '999,999,999.9') 'ALLOC(M)' , TO_CHAR((C.FIXED_USED_MEM+C.VAR_USED_MEM)/1024/1024, '999,999,999.9') 'USED(M)' , TO_CHAR(((C.FIXED_USED_MEM+C.VAR_USED_MEM)/(C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM))*100, '999.9') 'USAGE(%)' FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_TABLES_ B , V$MEMTBL_INFO C , V$TABLESPACES D WHERE 1=1 AND A.USER_NAME <> 'SYSTEM_' AND B.TABLE_TYPE = 'Q' AND A.USER_ID = B.USER_ID AND B.TABLE_OID = C.TABLE_OID AND B.TBS_ID = D.ID ; |
+ Efficiency 가 낮은 메모리 테이블
// 할당 받은 전체 페이지에 비해 실제 사용이 낮은 테이블을 조회하는 쿼리. // 버전 6.5.1 이상. SELECT MT.USER_NAME , MT.TABLE_NAME , MT.PARTITION_NAME , TBS.NAME TBS_NAME , TO_CHAR((MU.FIXED_ALLOC_MEM+MU.VAR_ALLOC_MEM)/1024/1024, '999,999,999.9') 'ALLOC(M)' , TO_CHAR((MU.FIXED_USED_MEM+MU.VAR_USED_MEM)/1024/1024, '999,999,999.9') 'USED(M)' , TO_CHAR(((MU.FIXED_USED_MEM+MU.VAR_USED_MEM)/(MU.FIXED_ALLOC_MEM+MU.VAR_ALLOC_MEM))*100, '999.9') 'USAGE(%)' FROM (SELECT U.USER_NAME , T.TABLE_NAME , DECODE(T.IS_PARTITIONED, 'F', T.TABLE_OID, 'T', P.PARTITION_OID) TABLE_OID , DECODE(T.IS_PARTITIONED, 'F', RPAD('-', 14), 'T', P.PARTITION_NAME) PARTITION_NAME , DECODE(T.IS_PARTITIONED, 'F', T.TBS_ID, 'T', P.TBS_ID) TBS_ID FROM SYSTEM_.SYS_USERS_ U , SYSTEM_.SYS_TABLES_ T LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ P ON T.TABLE_ID = P.TABLE_ID WHERE 1=1 AND U.USER_ID <> 1 AND U.USER_ID = T.USER_ID AND T.TBS_ID IN (SELECT ID FROM V$TABLESPACES WHERE TYPE IN (1, 2, 8)) ) MT , V$MEMTBL_INFO MU , V$TABLESPACES TBS WHERE 1=1 AND MT.TABLE_OID = MU.TABLE_OID AND TBS.ID = MT.TBS_ID AND ROUND((FIXED_ALLOC_MEM+VAR_ALLOC_MEM)/1024/1024, 2) >= 1024 -- 메모리 테이블에 할당된 페이지가 1G 이상 AND ROUND((FIXED_USED_MEM+VAR_USED_MEM)/(FIXED_ALLOC_MEM+VAR_ALLOC_MEM+0.01)*100, 2) <= 50 -- USAGE가 50% 이하 ORDER BY 1, 2, 3 ; // 버전 4 이상. SELECT C.USER_NAME , B.TABLE_NAME , TO_CHAR((C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM)/1024/1024, '999,999,999.9') 'ALLOC(M)' , TO_CHAR((C.FIXED_USED_MEM+C.VAR_USED_MEM)/1024/1024, '999,999,999.9') 'USED(M)' , TO_CHAR(((C.FIXED_USED_MEM+C.VAR_USED_MEM)/(C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM))*100, '999.9') 'USAGE(%)' FROM V$MEMTBL_INFO A , SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_OID = B.TABLE_OID AND B.USER_ID = C.USER_ID AND ROUND((FIXED_ALLOC_MEM+VAR_ALLOC_MEM)/1024/1024, 2) >= 1024 -- 메모리 테이블에 할당된 페이지가 1G 이상 AND ROUND((FIXED_USED_MEM+VAR_USED_MEM)/(FIXED_ALLOC_MEM+VAR_ALLOC_MEM+0.01)*100, 2) <= 50 -- USAGE가 50% 이하 AND B.USER_ID <> 1 ORDER BY 'FREE(M)' DESC ; |
+ 메모리 인덱스, 큐 인덱스 사용량
SELECT U.USER_NAME, T.TABLE_NAME TABLE_NAME , B.INDEX_NAME , LPAD(I.IS_PARTITIONED, 14) INDEX_PARTITIONED , ROUND(((USED_NODE_COUNT + PREPARE_NODE_COUNT) / 15 * 32768)/1024/1024, 1) AS 'SIZE(MB)' FROM V$MEM_BTREE_HEADER B , SYSTEM_.SYS_INDICES_ I , SYSTEM_.SYS_TABLES_ T , SYSTEM_.SYS_USERS_ U WHERE 1=1 AND B.INDEX_ID = I.INDEX_ID AND I.TABLE_ID = T.TABLE_ID AND B.INDEX_TBS_ID <> 0 AND U.USER_ID = T.USER_ID ORDER BY TABLE_NAME, B.INDEX_ID ; |
+ 디스크 테이블
// 디스크 테이블의 사용량 정보. // 버전 5.3.3 이상. SELECT U.USER_NAME USER_NAME , TBL.TABLE_NAME TABLE_NAME , DECODE(TBL.IS_PARTITIONED, 'T', TBL.PARTITION_NAME, 'F', '-') PARTITIONED_TABLE , TBS.NAME TBS_NAME , TO_CHAR((D.MAX * TBS.PAGE_SIZE)/1024, '999,999,999,999') 'MAX(KB)' , TO_CHAR((TBS.EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.TOTAL_EXTENT_COUNT)/1024, '999,999,999,999') 'ALLOC(KB)' , TO_CHAR(SEG.TOTAL_USED_SIZE/1024, '999,999,999,999') 'USED(KB)' FROM (SELECT TBL.USER_ID , DECODE(TBL.IS_PARTITIONED, 'F', TBL.TABLE_OID, 'T', PT.PARTITION_OID) TABLE_OID , TBL.TABLE_NAME , PT.PARTITION_NAME , DECODE(TBL.IS_PARTITIONED, 'F', TBL.TBS_ID, 'T', PT.TBS_ID) TBS_ID , TBL.IS_PARTITIONED FROM SYSTEM_.SYS_TABLES_ TBL LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ PT ON TBL.TABLE_ID = PT.TABLE_ID WHERE TBL.TABLE_TYPE = 'T' ) TBL , (SELECT S.TABLE_OID, SUM(S.TOTAL_EXTENT_COUNT) TOTAL_EXTENT_COUNT, SUM(S.TOTAL_USED_SIZE) TOTAL_USED_SIZE FROM X$SEGMENT S WHERE S.SEGMENT_TYPE IN (6, 7) /* 6 : 테이블, 7 : LOB 데이터(6.1.1 이상), 5 : 인덱스 */ GROUP BY S.TABLE_OID) SEG , SYSTEM_.SYS_USERS_ U , V$TABLESPACES TBS , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE 1=1 AND SEG.TABLE_OID = TBL.TABLE_OID AND U.USER_ID = TBL.USER_ID AND D.SPACEID = TBL.TBS_ID AND TBS.ID = TBL.TBS_ID ORDER BY USER_NAME, TABLE_NAME, PARTITIONED_TABLE ; // 버전 5.1.5 SELECT U.USER_NAME USER_NAME , TBL.TABLE_NAME TABLE_NAME , DECODE(TBL.IS_PARTITIONED, 'T', TBL.PARTITION_NAME, 'F', '-') PARTITIONED_TABLE , TBS.NAME TBS_NAME , TO_CHAR((D.MAX * TBS.PAGE_SIZE)/1024/1024, '999,999,999') 'MAX(MB)' , TO_CHAR((TBS.EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/1024/1024, '999,999,999') 'ALLOC(MB)' FROM (SELECT TBL.USER_ID , DECODE(TBL.IS_PARTITIONED, 'F', TBL.TABLE_OID, 'T', PT.PARTITION_OID) TABLE_OID , TBL.TABLE_NAME , PT.PARTITION_NAME , DECODE(TBL.IS_PARTITIONED, 'F', TBL.TBS_ID, 'T', PT.TBS_ID) TBS_ID , TBL.IS_PARTITIONED FROM SYSTEM_.SYS_TABLES_ TBL LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ PT ON TBL.TABLE_ID = PT.TABLE_ID ) TBL , V$SEGMENT SEG , SYSTEM_.SYS_USERS_ U , V$TABLESPACES TBS , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE 1=1 AND SEG.SEGMENT_TYPE = 'TABLE' /* 'TABLE' : 테이블, 'INDEX' : 인덱스 */ AND SEG.TABLE_OID = TBL.TABLE_OID AND U.USER_ID = TBL.USER_ID AND D.SPACEID = TBL.TBS_ID AND TBS.ID = TBL.TBS_ID ORDER BY USER_NAME, PARTITIONED, TABLE_NAME, PARTITIONED_TABLE ; // 버전 4.3.9 SELECT U.USER_NAME 'USER_NAME' , TBL.TABLE_NAME 'TABLE_NAME' , TBS.NAME 'TBS_NAME' , TO_CHAR((TBS.TOTAL_PAGE_COUNT * TBS.PAGE_SIZE)/1024 , '999,999,999') 'TBS_MAX(KB)' , TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/1024, '999,999,999') 'ALLOC(KB)' , TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_FULL_COUNT)/1024, '999,999,999') 'USED(KB)' FROM X$SEGMENT SEG , SYSTEM_.SYS_TABLES_ TBL , V$TABLESPACES TBS , SYSTEM_.SYS_USERS_ U WHERE 1=1 AND SEG.TABLE_OID = TBL.TABLE_OID AND SEG.SPACE_ID = TBL.TBS_ID AND SEG.SPACE_ID = TBS.ID AND TBL.USER_ID = U.USER_ID AND TBL.TABLE_TYPE = 'T' AND SEG.SEGMENT_TYPE = 6 ORDER BY USER_NAME, TABLE_NAME ; |
+ 디스크 인덱스 사용량
// 디스크 인덱스의 사용량 정보. // 버전 5.3.3 이상. SELECT U.USER_NAME USER_NAME , I_LIST.TABLE_NAME , DECODE(I_LIST.PARTITION_NAME, NULL, '-', I_LIST.PARTITION_NAME) PARTITIONED_NAME , I_LIST.INDEX_NAME INDEX_NAME , DECODE(I_LIST.INDEX_PARTITION_NAME, NULL, '-', I_LIST.INDEX_PARTITION_NAME) PARTITIONED_INDEX , TBS.NAME TBS_NAME , TO_CHAR((D.MAX * TBS.PAGE_SIZE)/1024/1024, '999,999,999') 'MAX(MB)' , TO_CHAR((TBS.EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.TOTAL_EXTENT_COUNT)/1024/1024, '999,999,999') 'ALLOC(MB)' , TO_CHAR(SEG.TOTAL_USED_SIZE/1024/1024, '999,999,999') 'USED(MB)' FROM (SELECT T.TABLE_NAME , PT.PARTITION_NAME , I.INDEX_NAME , PI.INDEX_PARTITION_NAME , DECODE(T.IS_PARTITIONED, 'F', I.TABLE_ID, 'T', PT.TABLE_ID) TABLE_ID , DECODE(T.IS_PARTITIONED, 'F', T.TABLE_OID, 'T', PT.PARTITION_OID) TABLE_OID , DECODE(I.IS_PARTITIONED, 'F', I.TBS_ID, 'T', PI.TBS_ID) TBS_ID , I.INDEX_ID , T.USER_ID FROM SYSTEM_.SYS_INDICES_ I LEFT OUTER JOIN SYSTEM_.SYS_INDEX_PARTITIONS_ PI ON PI.INDEX_ID = I.INDEX_ID LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ PT ON PT.PARTITION_ID = PI.TABLE_PARTITION_ID LEFT OUTER JOIN SYSTEM_.SYS_TABLES_ T ON T.TABLE_ID = I.TABLE_ID ) I_LIST , X$SEGMENT SEG , V$INDEX I , V$TABLESPACES TBS , SYSTEM_.SYS_USERS_ U , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE 1=1 AND SEG.TABLE_OID = I.TABLE_OID AND SEG.SEGMENT_PID = I.INDEX_SEG_PID AND SEG.SPACE_ID = I_LIST.TBS_ID AND I_LIST.INDEX_ID = I.INDEX_ID AND I_LIST.TABLE_OID = I.TABLE_OID AND I_LIST.TBS_ID = TBS.ID AND D.SPACEID = I_LIST.TBS_ID AND U.USER_ID = I_LIST.USER_ID ORDER BY I_LIST.TABLE_NAME, I_LIST.INDEX_NAME, I_LIST.PARTITION_NAME, I_LIST.INDEX_PARTITION_NAME ; // 버전 5.1.5 SELECT U.USER_NAME USER_NAME , I_LIST.TABLE_NAME , DECODE(I_LIST.PARTITION_NAME, NULL, '-', I_LIST.PARTITION_NAME) PARTITIONED_NAME , I_LIST.INDEX_NAME INDEX_NAME , DECODE(I_LIST.INDEX_PARTITION_NAME, NULL, '-', I_LIST.INDEX_PARTITION_NAME) PARTITIONED_INDEX , TBS.NAME TBS_NAME , TO_CHAR((D.MAX * TBS.PAGE_SIZE)/1024/1024, '999,999,999') 'MAX(MB)' , TO_CHAR((TBS.EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/1024/1024, '999,999,999') 'ALLOC(MB)' FROM (SELECT T.TABLE_NAME , PT.PARTITION_NAME , I.INDEX_NAME , PI.INDEX_PARTITION_NAME , DECODE(T.IS_PARTITIONED, 'F', I.TABLE_ID, 'T', PT.TABLE_ID) TABLE_ID , DECODE(T.IS_PARTITIONED, 'F', T.TABLE_OID, 'T', PT.PARTITION_OID) TABLE_OID , DECODE(I.IS_PARTITIONED, 'F', I.TBS_ID, 'T', PI.TBS_ID) TBS_ID , I.INDEX_ID , T.USER_ID FROM SYSTEM_.SYS_INDICES_ I LEFT OUTER JOIN SYSTEM_.SYS_INDEX_PARTITIONS_ PI ON PI.INDEX_ID = I.INDEX_ID LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ PT ON PT.PARTITION_ID = PI.TABLE_PARTITION_ID LEFT OUTER JOIN SYSTEM_.SYS_TABLES_ T ON T.TABLE_ID = I.TABLE_ID ) I_LIST , V$SEGMENT SEG , V$INDEX I , V$TABLESPACES TBS , SYSTEM_.SYS_USERS_ U , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE 1=1 AND SEG.TABLE_OID = I.TABLE_OID AND SEG.SEGMENT_PID = I.INDEX_SEG_PID AND SEG.SPACE_ID = I_LIST.TBS_ID AND I_LIST.INDEX_ID = I.INDEX_ID AND I_LIST.TABLE_OID = I.TABLE_OID AND I_LIST.TBS_ID = TBS.ID AND D.SPACEID = I_LIST.TBS_ID AND U.USER_ID = I_LIST.USER_ID ORDER BY I_LIST.TABLE_NAME, I_LIST.INDEX_NAME, I_LIST.PARTITION_NAME, I_LIST.INDEX_PARTITION_NAME ; // 버전 4.3.9 SELECT U.USER_NAME AS 'USER_NAME' , TBL.TABLE_NAME AS 'TABLE_NAME' , IDX.INDEX_NAME AS 'INDEX_NAME' , TBS.NAME AS 'TBS_NAME' , TO_CHAR((TBS.TOTAL_PAGE_COUNT * TBS.PAGE_SIZE)/1024/1024 , '999,999,999') AS 'TBS_MAX(KB)' , TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/1024/1024, '999,999,999') AS 'ALLOC(MB)' , TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_FULL_COUNT )/1024/1024, '999,999,999') AS 'USED(MB)' FROM X$SEGMENT SEG , V$INDEX I , SYSTEM_.SYS_INDICES_ IDX , SYSTEM_.SYS_TABLES_ TBL , V$TABLESPACES TBS , SYSTEM_.SYS_USERS_ U WHERE SEG.TABLE_OID = I.TABLE_OID AND SEG.SEGMENT_DESC = I.INDEX_SEG_DESC AND I.INDEX_ID = IDX.INDEX_ID AND IDX.TABLE_ID = TBL.TABLE_ID AND SEG.SPACE_ID = IDX.TBS_ID AND SEG.SPACE_ID = TBS.ID AND IDX.USER_ID = U.USER_ID AND TBL.TABLE_TYPE = 'T' AND SEG.SEGMENT_TYPE = 5 ORDER BY U.USER_NAME, TBL.TABLE_NAME, IDX.INDEX_NAME ; |
+ 파티션 테이블 정보
// 파티션 테이블의 파티셔닝 방법, 파티셔닝 기준 등 파티션 테이블에 관한 정보를 보여주는 쿼리. // 버전 6.5.1 이상. SELECT U.USER_NAME , T.TABLE_NAME , P.PARTITION_NAME , DECODE(PM.PARTITION_METHOD, 0, RPAD('RANGE', 16), 1, RPAD('HASH', 16), 2, RPAD('LIST', 16)) PARTITION_METHOD , RPAD(P.PARTITION_ORDER, 15) PARTITION_ORDER , RPAD(PM.ROW_MOVEMENT, 12) ROW_MOVEMENT , P.PARTITION_MIN_VALUE , P.PARTITION_MAX_VALUE , RPAD(P.PARTITION_ACCESS, 6) 'ACCESS' -- 알티베이스 6.5.1 이전 버전은 삭제 후 사용 , TO_CHAR(P.CREATED, 'YYYY-MM-DD HH:MI:SS') CREATED -- 알티베이스 6.5.1 이전 버전은 삭제 후 사용 , TO_CHAR(P.LAST_DDL_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_DDL_TIME -- 알티베이스 6.5.1 이전 버전은 삭제 후 사용 FROM SYSTEM_.SYS_TABLES_ T , SYSTEM_.SYS_TABLE_PARTITIONS_ P , SYSTEM_.SYS_PART_TABLES_ PM , SYSTEM_.SYS_USERS_ U WHERE 1=1 AND U.USER_ID = T.USER_ID AND T.TABLE_ID = P.TABLE_ID AND PM.TABLE_ID = T.TABLE_ID ; |
+ 시퀀스
SELECT USER_NAME , TABLE_NAME SEQ_NAME , MIN_SEQ MIN , CURRENT_SEQ , MAX_SEQ MAX , INCREMENT_SEQ INCREMENT , IS_CYCLE , CACHE_SIZE CACHE FROM V$SEQ A , SYSTEM_.SYS_USERS_ B , SYSTEM_.SYS_TABLES_ C WHERE 1=1 AND A.SEQ_OID = C.TABLE_OID AND B.USER_ID = C.USER_ID AND B.USER_NAME <> 'SYSTEM_' ; |
+ 시노님
// 버전 5 이상. SELECT NVL(U.USER_NAME, 'PUBLIC') SYNONYM_OWNER , S.SYNONYM_NAME , S.OBJECT_OWNER_NAME OBJECT_OWNER , S.OBJECT_NAME , TO_CHAR(S.LAST_DDL_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_DDL_TIME FROM SYSTEM_.SYS_SYNONYMS_ S LEFT OUTER JOIN SYSTEM_.SYS_USERS_ U ON S.SYNONYM_OWNER_ID = U.USER_ID WHERE 1=1 --AND U.USER_ID <> 0 -- PUBLIC 시노님을 제외하고 싶은 경우 주석 제거하고 사용한다. ; // 버전 4.3.9 이상. SELECT NVL(U.USER_NAME, 'PUBLIC') SYNONYM_OWNER , S.SYNONYM_NAME , S.SCHEMA_NAME OBJECT_OWNER , S.OBJECT_NAME FROM SYSTEM_.SYS_SYNONYMS_ S LEFT OUTER JOIN SYSTEM_.SYS_USERS_ U ON S.USER_ID = U.USER_ID ; |
+ PSM
SELECT A.USER_NAME , PROC_NAME PSM_NAME , DECODE(OBJECT_TYPE, 0, 'PROCEDURE', 1, 'FUNCTION', 3, 'TYPESET') PSM_TYPE , DECODE(STATUS, 0, 'VALID', 'INVALID') STATUS , TO_CHAR(B.CREATED, 'YYYY-MM-DD HH:MI:SS') CREATED , TO_CHAR(B.LAST_DDL_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_DDL_TIME -- 알티베이스 4 에서는 삭제 후 사용 FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_PROCEDURES_ B WHERE 1=1 AND A.USER_ID = B.USER_ID AND A.USER_NAME <> 'SYSTEM_' ORDER BY 1, 2, 3; |
+ PSM 생성구문
// PROC_NAME 조건에 PSM 이름을 입력하면 해당 PSM 의 생성 구문을 보여줌. SELECT PARSE FROM SYSTEM_.SYS_PROC_PARSE_ WHERE PROC_OID = (SELECT PROC_OID FROM SYSTEM_.SYS_PROCEDURES_ WHERE PROC_NAME = 'psm_name') -- 조회하고자 하는 psm이름을 입력한다. ORDER BY SEQ_NO ; |
+ VIEW
SELECT A.USER_NAME , B.TABLE_NAME VIEW_NAME , DECODE(C.STATUS, 0, 'VALID', 'INVALID') STATUS , TO_CHAR(B.CREATED, 'YYYY-MM-DD HH:MI:SS') CREATED -- 알티베이스 4 에서는 삭제 후 사용 , TO_CHAR(B.LAST_DDL_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_DDL_TIME -- 알티베이스 4 에서는 삭제 후 사용 FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_TABLES_ B , SYSTEM_.SYS_VIEWS_ C WHERE 1=1 AND A.USER_ID = B.USER_ID AND B.TABLE_ID = C.VIEW_ID AND B.TABLE_TYPE = 'V' ; |
+ VIEW 생성 구문
SELECT PARSE FROM SYSTEM_.SYS_VIEW_PARSE_ WHERE VIEW_ID = (SELECT TABLE_ID FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_NAME = 'view_name') -- 조회하고자 하는 view이름을 입력한다. ORDER BY SEQ_NO ; |
+ PACKAGE
// 패키지에 대한 정보를 보여줌. // 버전 6.3.1 이상. SELECT A.USER_NAME , PACKAGE_NAME , DECODE(PACKAGE_TYPE, 6, 'PACKAGE_SPEC', 7, 'PACKAGE_BODY') PACKAGE_TYPE , DECODE(STATUS, 0, 'VALID', 'INVALID') STATUS , TO_CHAR(B.CREATED, 'YYYY-MM-DD HH:MI:SS') CREATED , TO_CHAR(B.LAST_DDL_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_DDL_TIME FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_PACKAGES_ B WHERE 1=1 AND A.USER_ID = B.USER_ID AND A.USER_NAME <> 'SYSTEM_' ; |
+ PACKAGE 서브프로그램
// 패키지에 포함된 서브프로그램(저장 프로시저와 저장 함수)에 대한 정보를 보여줌. // 버전 6.3.1 이상. SELECT USER_NAME , OBJECT_NAME , PACKAGE_NAME , DECODE(SUB_TYPE, 0, 'PROCEDURE', 1, 'FUNCTION') SUB_TYPE , PARA_NAME , PARA_ORDER , DECODE(INOUT_TYPE, 0, 'IN', 1, 'OUT', 2, 'IN OUT') INOUT_TYPE , DATA_TYPE , SIZE , DEFAULT_VAL FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_PACKAGE_PARAS_ B WHERE 1=1 AND A.USER_ID = B.USER_ID AND A.USER_NAME <> 'SYSTEM_' ; |
+ PACKAGE 생성구문
// PACKAGE_NAME 조건에 패키지 이름을 입력하면 해당 패키지의 생성 구문을 보여줌. // 버전 6.3.1 이상 SELECT PARSE , DECODE(PACKAGE_TYPE, 6, 'PACKAGE_SPEC', 7, 'PACKAGE_BODY') PACKAGE_TYPE FROM SYSTEM_.SYS_PACKAGE_PARSE_ WHERE PACKAGE_OID IN (SELECT PACKAGE_OID FROM SYSTEM_.SYS_PACKAGES_ WHERE PACKAGE_NAME = 'package_name') -- 조회하고자 하는 패키지 이름을 입력한다. ORDER BY SEQ_NO ; |
+ 트리거
SELECT TR.USER_NAME , T.TABLE_NAME , TR.TRIGGER_NAME , RPAD(DECODE(TR.IS_ENABLE, 0, 'NO', 1, 'YES'), 9) IS_ENABLE , RPAD(DECODE(TR.EVENT_TIME, 1, 'BEFORE', 2, 'AFTER', 3, 'INSTEAD OF'), 10) EVENT_TIME , RPAD(DECODE(TR.EVENT_TYPE, 1, 'INSERT', 2, 'DELETE', 4, 'UPDATE'), 10) EVENT_TYPE , DECODE(TR.GRANULARITY, 1, 'FOR EACH ROW', 2, 'FOR EACH STATEMENT') GRANULARITY FROM SYSTEM_.SYS_TABLES_ T , SYSTEM_.SYS_TRIGGERS_ TR WHERE 1=1 AND TR.TABLE_ID = T.TABLE_ID; |
+ 작업(Job)
// 버전 6.5.1 이상. SELECT JOB_NAME , EXEC_QUERY PROC_NAME , INTERVAL , LPAD(DECODE(INTERVAL_TYPE, 'YY', 'YEARLY', 'MM', 'MONTHLY', 'DD', 'DAILY', 'HH', 'HOURLY', 'MI', 'MINUTELY'), 13) INTERVAL_TYPE , LPAD(DECODE(STATE, 0, '-', 1, 'ING'), 5) STATE , LPAD(EXEC_COUNT, 10) EXEC_COUNT , LPAD(ERROR_CODE, 10) ERROR_CODE , TO_CHAR(START_TIME, 'YYYY-MM-DD HH:MI:SS') START_TIME , TO_CHAR(LAST_EXEC_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_EXEC_TIME , TO_CHAR(END_TIME, 'YYYY-MM-DD HH:MI:SS') END_TIME , DECODE(IS_ENABLE, 'T', 'YES', 'F', 'NO') IN_ENABLE -- 알티베이스 6.3.1 에서는 삭제 후 사용한다. FROM SYSTEM_.SYS_JOBS_; |
- Privileges
+ 시스템 권한 (System Privilege)
SELECT A.USER_NAME GRANTEE , C.USER_NAME GRANTOR , REPLACE(D.PRIV_NAME, '_', ' ') PRIV_NAME FROM SYSTEM_.SYS_USERS_ A, SYSTEM_.SYS_GRANT_SYSTEM_ B, SYSTEM_.SYS_USERS_ C, SYSTEM_.SYS_PRIVILEGES_ D WHERE C.USER_NAME <> 'SYSTEM_' AND A.USER_TYPE <> 'R' -- 이 조건은 알티베이스 6.5.1 이하 버전에서는 삭제 후 사용해야 한다. AND B.GRANTEE_ID = A.USER_ID AND B.GRANTOR_ID = C.USER_ID AND B.PRIV_ID = D.PRIV_ID --AND A.USER_NAME = 'user_name' ORDER BY GRANTEE, GRANTOR ; |
+ 객체 권한 (Object Privilege)
SELECT A.USER_NAME GRANTEE , C.USER_NAME GRANTOR , F.USER_NAME OBJECT_OWNER , OBJ.OBJ_NAME OBJECT_NAME , DECODE(OBJ.OBJ_TYPE, 'T', DECODE(OBJ.OBJ_TYPE1, 'T', 'TABLE', 'V', 'VIEW'), 'S', 'SEQUENCE', 'P', 'PROCEDURE', 'Y', 'External library', 'D', 'DIRECTORY') OBJECT_TYPE , REPLACE(D.PRIV_NAME, '_', ' ') PRIV_NAME , DECODE(B.WITH_GRANT_OPTION, 0, 'NO', 'YES') WITH_GRANT_OPTION FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_GRANT_OBJECT_ B , SYSTEM_.SYS_USERS_ C , SYSTEM_.SYS_PRIVILEGES_ D , (SELECT TABLE_NAME as OBJ_NAME, TABLE_TYPE as OBJ_TYPE1, 'T' as OBJ_TYPE, TABLE_ID as obj_id, USER_ID FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_TYPE IN ('V', 'T') UNION SELECT TABLE_NAME as OBJ_NAME, '' as OBJ_TYPE1, TABLE_TYPE as OBJ_TYPE, TABLE_ID as obj_id, USER_ID FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_TYPE = 'S' UNION SELECT PROC_NAME as OBJ_NAME, '' as OBJ_TYPE1, 'P' as OBJ_TYPE, PROC_OID as obj_id, user_id FROM system_.SYS_PROCEDURES_ UNION SELECT directory_NAME as OBJ_NAME, '' as OBJ_TYPE1, 'D' as OBJ_TYPE, DIRECTORY_ID as obj_id, user_id FROM SYSTEM_.SYS_DIRECTORIES_ UNION -- 6.3.1 이하에서는 삭제 후 사용 SELECT library_name as OBJ_NAME, '' as OBJ_TYPE1, 'Y' as OBJ_TYPE, library_ID as obj_id, user_id -- 6.3.1 이하에서는 삭제 후 사용 FROM SYSTEM_.SYS_LIBRARIES_ -- 6.3.1 이하에서는 삭제 후 사용 ) OBJ , SYSTEM_.SYS_USERS_ F WHERE 1=1 AND C.USER_NAME <> 'SYSTEM_' AND A.USER_TYPE <> 'R' -- 이 조건은 알티베이스 6.5.1 이하 버전에서는 삭제 후 사용해야 한다. AND B.GRANTEE_ID = A.USER_ID AND B.GRANTOR_ID = C.USER_ID AND B.PRIV_ID = D.PRIV_ID AND B.OBJ_ID = OBJ.OBJ_ID AND OBJ.OBJ_TYPE = B.OBJ_TYPE AND OBJ.USER_ID = F.USER_ID ORDER BY GRANTEE, GRANTOR, OBJECT_OWNER, OBJECT_NAME, PRIV_NAME ; |
+ 롤(Role) 생성 정보
// 생성된 롤(Role) 목록과 롤에 부여된 시스템 권한 및 객체 권한을 확인할 수 있음. // 버전 6.5.1 이상. SELECT A.USER_NAME 'ROLE_NAME' , RPAD('SYSTEM', 9) PRIV_TYPE , '' OBJECT_NAME, '' OBJECT_TYPE , REPLACE(D.PRIV_NAME, '_', ' ') PRIV_NAME , '' WITH_GRANT_OPTION FROM SYSTEM_.SYS_USERS_ A, SYSTEM_.SYS_GRANT_SYSTEM_ B, SYSTEM_.SYS_PRIVILEGES_ D WHERE 1=1 AND A.USER_ID <> 0 AND A.USER_TYPE = 'R' AND B.GRANTEE_ID = A.USER_ID AND B.PRIV_ID = D.PRIV_ID UNION SELECT A.USER_NAME 'ROLE_NAME' , RPAD('OBJECT', 9) PRIV_TYPE , F.USER_NAME||'.'||OBJ.OBJ_NAME OBJECT_NAME , DECODE(OBJ.OBJ_TYPE, 'T', DECODE(OBJ.OBJ_TYPE1, 'T', 'TABLE', 'V', 'VIEW'), 'S', 'SEQUENCE', 'P', 'PROCEDURE', 'Y', 'External library', 'D', 'DIRECTORY') OBJECT_TYPE , REPLACE(D.PRIV_NAME, '_', ' ') PRIV_NAME , DECODE(B.WITH_GRANT_OPTION, 0, 'NO', 'YES') WITH_GRANT_OPTION FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_GRANT_OBJECT_ B , SYSTEM_.SYS_PRIVILEGES_ D , (SELECT TABLE_NAME as OBJ_NAME, TABLE_TYPE as OBJ_TYPE1, 'T' as OBJ_TYPE, TABLE_ID as obj_id, USER_ID FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_TYPE IN ('V', 'T') UNION SELECT TABLE_NAME as OBJ_NAME, '' as OBJ_TYPE1, TABLE_TYPE as OBJ_TYPE, TABLE_ID as obj_id, USER_ID FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_TYPE = 'S' UNION SELECT PROC_NAME as OBJ_NAME, '' as OBJ_TYPE1, 'P' as OBJ_TYPE, PROC_OID as obj_id, user_id FROM system_.SYS_PROCEDURES_ UNION SELECT directory_NAME as OBJ_NAME, '' as OBJ_TYPE1, 'D' as OBJ_TYPE, DIRECTORY_ID as obj_id, user_id FROM SYSTEM_.SYS_DIRECTORIES_ UNION SELECT library_name as OBJ_NAME, '' as OBJ_TYPE1, 'Y' as OBJ_TYPE, library_ID as obj_id, user_id FROM SYSTEM_.SYS_LIBRARIES_ ) OBJ , SYSTEM_.SYS_USERS_ F WHERE 1=1 AND A.USER_ID <> 0 AND A.USER_TYPE = 'R' AND B.GRANTEE_ID = A.USER_ID AND B.PRIV_ID = D.PRIV_ID AND B.OBJ_ID = OBJ.OBJ_ID AND OBJ.OBJ_TYPE = B.OBJ_TYPE AND OBJ.USER_ID = F.USER_ID ; |
+ 롤(Role)을 부여받은 사용자 정보
// 버전 6.5.1 이상 SELECT U1.USER_NAME GRANTEE , U2.USER_NAME GRANTOR , RU.USER_NAME ROLE_NAME FROM SYSTEM_.SYS_USER_ROLES_ R , SYSTEM_.SYS_USERS_ RU , SYSTEM_.SYS_USERS_ U1 , SYSTEM_.SYS_USERS_ U2 WHERE 1=1 AND RU.USER_TYPE = 'R' AND R.ROLE_ID <> 0 AND RU.USER_ID = R.ROLE_ID AND R.GRANTEE_ID = U1.USER_ID AND R.GRANTOR_ID = U2.USER_ID ; |
+ 시스템 및 객체 권한 종류
SELECT DECODE(PRIV_TYPE, 1, 'OBJECT', 2, 'SYSTEM') PRIV_TYPE , PRIV_NAME FROM SYSTEM_.SYS_PRIVILEGES_ ORDER BY PRIV_TYPE, PRIV_NAME; |
- Constraints
+ 전체 제약 조건 목록
// 버전 6.3.1 이상. SELECT USER_NAME , TABLE_NAME OBJECT_NAME , DECODE(B.TABLE_TYPE, 'T', 'TABLE', 'Q', 'QUEUE', 'V', 'VIEW', 'SEQUENCE') OBJECT_TYPE , C.CONSTRAINT_NAME CONST_NAME , DECODE(C.CONSTRAINT_TYPE, 0, 'FOREIGN KEY', 1, 'NOT NULL', 2, 'UNIQUE', 3, 'PRIMARY KEY', 4, 'NULL', 5, 'TIMESTAMP', 6, 'LOCAL UNIQUE', 7, 'CHECK') CONST_TYPE , COLUMN_NAME , CHECK_CONDITION -- 알티베이스 6.3.1 이전 버전에서는 삭제 후 사용 FROM SYSTEM_.SYS_USERS_ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_CONSTRAINTS_ C, SYSTEM_.SYS_COLUMNS_ D, SYSTEM_.SYS_CONSTRAINT_COLUMNS_ E WHERE A.USER_ID=C.USER_ID AND B.TABLE_ID = C.TABLE_ID AND A.USER_ID = D.USER_ID AND A.USER_ID = E.USER_ID AND B.TABLE_ID = D.TABLE_ID AND B.TABLE_ID = E.TABLE_ID AND C.CONSTRAINT_ID = E.CONSTRAINT_ID AND D.COLUMN_ID = E.COLUMN_ID AND A.USER_NAME <> 'SYSTEM_' ORDER BY USER_NAME, OBJECT_NAME, CONST_TYPE; |
+ PK, FK, UNIQUE 관련 제약조건 및 테이블, 인덱스 목록
SELECT A.USER_NAME , B.TABLE_NAME , DECODE(C.CONSTRAINT_TYPE, 0, 'FK', 2, 'UNIQUE', 3, 'PK', 4, 'NULL') CONST_TYPE , C.CONSTRAINT_NAME CONST_NAME , DECODE(D.INDEX_NAME, C.CONSTRAINT_NAME, NULL, INDEX_NAME) INDEX_NAME , (SELECT TABLE_NAME FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_ID = C.REFERENCED_TABLE_ID) R_TABLE , (SELECT INDEX_NAME FROM SYSTEM_.SYS_INDICES_ WHERE INDEX_ID = C.REFERENCED_INDEX_ID) R_INDEX FROM SYSTEM_.SYS_USERS_ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_CONSTRAINTS_ C LEFT OUTER JOIN SYSTEM_.SYS_INDICES_ D ON C.INDEX_ID = D.INDEX_ID WHERE C.TABLE_ID = B.TABLE_ID AND A.USER_NAME <> 'SYSTEM_' AND C.USER_ID = A.USER_ID AND C.CONSTRAINT_TYPE IN (3, 0, 2, 6) --PK, FK, UNIQUE, LOCAL UNIQUE ORDER BY TABLE_NAME, CONST_TYPE ; |
+ 복합 인덱스 컬럼 구성 목록
SELECT D.USER_NAME , C.TABLE_NAME , B.INDEX_NAME , E.COLUMN_NAME , A.INDEX_COL_ORDER COL_ORDER , DECODE(A.SORT_ORDER, 'A', 'ASC', 'D', 'DESC') SORT FROM SYSTEM_.SYS_INDEX_COLUMNS_ A, SYSTEM_.SYS_INDICES_ B, SYSTEM_.SYS_TABLES_ C, SYSTEM_.SYS_USERS_ D, SYSTEM_.SYS_COLUMNS_ E WHERE D.USER_NAME <> 'SYSTEM_' AND C.TABLE_TYPE = 'T' AND A.INDEX_ID = B.INDEX_ID AND A.TABLE_ID = C.TABLE_ID AND A.USER_ID = D.USER_ID AND A.COLUMN_ID = E.COLUMN_ID ORDER BY USER_NAME, TABLE_NAME, INDEX_NAME, COL_ORDER ; |
+ 인덱스 정보 요약
SELECT A.USER_NAME , C.INDEX_NAME , C.INDEX_ID , B.TABLE_NAME , NVL(D.NAME, 'SYS_TBS_MEMORY') TBS_NAME , C.IS_UNIQUE , C.COLUMN_CNT FROM SYSTEM_.SYS_USERS_ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_INDICES_ C LEFT OUTER JOIN V$TABLESPACES D ON C.TBS_ID = D.ID WHERE A.USER_NAME <> 'SYSTEM_' AND B.TABLE_TYPE = 'T' AND C.TABLE_ID = B.TABLE_ID AND C.USER_ID = A.USER_ID ORDER BY B.TABLE_NAME, C.INDEX_NAME ; |
- Replication
+ 이중화 sender 정보
SELECT REP_NAME , PEER_IP REMOTE_IP , PEER_PORT REMOTE_REP_PORT , DECODE(STATUS, 0, 'STOP', 1, 'RUN', 2, 'RETRY') AS STAUS , REPL_MODE -- 알티베이스 4 버전에서는 이 컬럼을 삭제한다. , DECODE(NET_ERROR_FLAG, 0, 'OK', 'ERROR') AS NETWORK , XSN FROM V$REPSENDER ; |
+ 이중화 receiver 정보
SELECT REP_NAME , PEER_IP REMOTE_IP , PEER_PORT REMOTE_REP_PORT , APPLY_XSN FROM V$REPRECEIVER ; |
+ 이중화갭
SELECT REP_NAME , REP_SN , REP_LAST_SN , REP_GAP , READ_FILE_NO , START_FLAG -- 알티베이스 5.3.3 이전 버전에서는 이 컬럼을 삭제 후 사용한다. FROM V$REPGAP ; |
+ 이중화 전체 현황
SELECT A.REPLICATION_NAME REP_NAME , D.HOST_IP REMOTE_IP , NVL(TO_CHAR(E.REP_GAP), '-') AS REP_GAP , A.XSN RESTART_XSN , DECODE(B.PEER_PORT, NULL, 'OFF', 'ON') AS SENDER , DECODE(C.PEER_PORT, NULL, 'OFF', 'ON') AS RECEIVER FROM SYSTEM_.SYS_REPL_HOSTS_ D , SYSTEM_.SYS_REPLICATIONS_ A LEFT OUTER JOIN V$REPSENDER B ON A.REPLICATION_NAME = B.REP_NAME LEFT OUTER JOIN V$REPRECEIVER C ON A.REPLICATION_NAME = C.REP_NAME LEFT OUTER JOIN (SELECT REP_NAME, MAX(REP_GAP) REP_GAP FROM V$REPGAP GROUP BY REP_NAME) E ON A.REPLICATION_NAME = E.REP_NAME WHERE A.REPLICATION_NAME = D.REPLICATION_NAME ORDER BY REP_NAME ; |
+ 이중화를 수행하지 못해 누적된 리두로그 파일 측정
SELECT CASE2((BUFFER_MIN_SN < READ_SN), 'REP BUFFER '||ROUND((BUFFER_MAX_SN-READ_SN)/(BUFFER_MAX_SN-BUFFER_MIN_SN)*100, 2)||' % LEFT ', (SELECT TO_CHAR(CUR_WRITE_LF_NO - READ_FILE_NO) FROM V$LFG, V$REPGAP) ) LOGFILE_FOR_REP FROM V$REPLOGBUFFER ; |
+ 이중화 대상 테이블 목록
SELECT REPLICATION_NAME REP_NAME , LOCAL_USER_NAME||'.'||LOCAL_TABLE_NAME LOCAL_TBL , REMOTE_USER_NAME||'.'||REMOTE_TABLE_NAME REMOTE_TBL FROM SYSTEM_.SYS_REPL_ITEMS_ ORDER BY 1, 2 ; |
'Altibase' 카테고리의 다른 글
[Altibase] FailOver CTF & STF (0) | 2019.08.23 |
---|