Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 연습용계정
- clusterware
- oracle10g asm
- 10.2.0.5
- #Oracle #Script #운영스크립트 #테이블스페이스 #Tablespace
- sql scott
- RHEL4_oracle10g_silent
- #Oracle #case문 #decode문 #Oracle함수
- scott unlock
- Linux
- #Oracle #optimizer #CBO #RBO #rule #all_rows #first_rows
- 리스너구성
- ORA-01034: ORACLE not available
- 굳ㅋ
- 패치후 DB복구
- Silent Mode
- node1
- raw device
- Top #SQL
- #linux #리눅스 #파일권한
- mariadb #마리아디비 #MariaDB설치 #mysql #yum저장소
- OEL5 설치
- rac
- oui
- RHEL4_Oracle10g
- #mariadb #mariadb삭제 #yum #mysql
- #Mariadb #계정관리 #권한관리 #계정생성 #계정삭제 #권한부여 #권한삭제 #Maria #마리아디비
- rac1
- RHEL3
- Silent Install
Archives
- Today
- Total
As it was in the beginning, is now, and ever shall be, world without end.
Oracle 운영 스크립트 모음 본문
======================================================================================
-- 01 테이블스페이스별 파일 목록을 보기
======================================================================================
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
======================================================================================
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
======================================================================================
-- 02 테이블스페이스별 정보 보기
======================================================================================
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;
======================================================================================
-- 03 테이블스페이스별 사용하는 파일의 크기 합 보기
======================================================================================
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;
======================================================================================
-- 04 테이블스페이스별 디스크 사용량 보기
======================================================================================
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;
======================================================================================
-- 05 테이블스페이스의 테이블 명 보기
======================================================================================
SELECT TABLESPACE_NAME,
TABLE_NAME
FROM USER_TABLES
WHERE TABLESPACE_NAME = UPPER(':테이블스페이스명')
ORDER BY TABLESPACE_NAME,
TABLE_NAME;
======================================================================================
-- 06 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;
======================================================================================
-- 07 CONSTRAINT 보기
======================================================================================
SELECT DECODE(A.CONSTRAINT_TYPE, 'P', 'Primary Key', 'R', 'Foreign Key', 'C', 'Table Check', 'V', 'View Check', 'U', 'Unique', '?') AS "유형" ,
SUBSTRB(A.CONSTRAINT_NAME, 1, 25) AS CONSTRAINT_NAME ,
B.POSITION ,
SUBSTRB(B.COLUMN_NAME, 1, 25) AS COLUMN_NAME
FROM DBA_CONSTRAINTS A ,
DBA_CONS_COLUMNS B
WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND A.OWNER = 'E_LUCIS'
AND A.TABLE_NAME = UPPER(':테이블명')
ORDER BY 1,2,3;
======================================================================================
-- 08 INDEX 보기
======================================================================================
SELECT A.INDEX_NAME ,
A.UNIQUENESS ,
TO_CHAR(COLUMN_POSITION, '999') AS POS ,
SUBSTRB(COLUMN_NAME, 1, 33) AS COLUMN_NAME
FROM USER_INDEXES A ,
USER_IND_COLUMNS B
WHERE A.INDEX_NAME = B.INDEX_NAME
AND A.TABLE_OWNER = UPPER('E_LUCIS')
AND A.TABLE_NAME = UPPER(':테이블명')
ORDER BY 1, 3;
======================================================================================
-- 09 전체 INDEX 보기
======================================================================================
SELECT SUBSTRB(A.TABLE_NAME, 1, 22) AS TABLE_NAME ,
SUBSTRB(A.INDEX_NAME, 1, 23) AS INDEX_NAME ,
SUBSTRB(A.UNIQUENESS, 1, 7) AS UNIQUE ,
TO_CHAR(COLUMN_POSITION, '999') AS POS ,
SUBSTRB(COLUMN_NAME, 1, 20) AS COLUMN_NAME
FROM DBA_INDEXES A ,
DBA_IND_COLUMNS B
WHERE A.INDEX_NAME = B.INDEX_NAME
AND A.TABLE_OWNER = B.TABLE_OWNER
AND A.TABLE_OWNER = 'E_LUCIS'
ORDER BY 1, 2, 3;
======================================================================================
-- 10 인덱스에 대한 컬럼 조회
======================================================================================
SELECT TABLE_NAME ,
INDEX_NAME ,
COLUMN_POSITION ,
COLUMN_NAME
FROM USER_IND_COLUMNS
ORDER BY TABLE_NAME,
INDEX_NAME,
COLUMN_POSITION;
-- 02 테이블스페이스별 정보 보기
======================================================================================
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;
======================================================================================
-- 03 테이블스페이스별 사용하는 파일의 크기 합 보기
======================================================================================
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;
======================================================================================
-- 04 테이블스페이스별 디스크 사용량 보기
======================================================================================
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;
======================================================================================
-- 05 테이블스페이스의 테이블 명 보기
======================================================================================
SELECT TABLESPACE_NAME,
TABLE_NAME
FROM USER_TABLES
WHERE TABLESPACE_NAME = UPPER(':테이블스페이스명')
ORDER BY TABLESPACE_NAME,
TABLE_NAME;
======================================================================================
-- 06 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;
======================================================================================
-- 07 CONSTRAINT 보기
======================================================================================
SELECT DECODE(A.CONSTRAINT_TYPE, 'P', 'Primary Key', 'R', 'Foreign Key', 'C', 'Table Check', 'V', 'View Check', 'U', 'Unique', '?') AS "유형" ,
SUBSTRB(A.CONSTRAINT_NAME, 1, 25) AS CONSTRAINT_NAME ,
B.POSITION ,
SUBSTRB(B.COLUMN_NAME, 1, 25) AS COLUMN_NAME
FROM DBA_CONSTRAINTS A ,
DBA_CONS_COLUMNS B
WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND A.OWNER = 'E_LUCIS'
AND A.TABLE_NAME = UPPER(':테이블명')
ORDER BY 1,2,3;
======================================================================================
-- 08 INDEX 보기
======================================================================================
SELECT A.INDEX_NAME ,
A.UNIQUENESS ,
TO_CHAR(COLUMN_POSITION, '999') AS POS ,
SUBSTRB(COLUMN_NAME, 1, 33) AS COLUMN_NAME
FROM USER_INDEXES A ,
USER_IND_COLUMNS B
WHERE A.INDEX_NAME = B.INDEX_NAME
AND A.TABLE_OWNER = UPPER('E_LUCIS')
AND A.TABLE_NAME = UPPER(':테이블명')
ORDER BY 1, 3;
======================================================================================
-- 09 전체 INDEX 보기
======================================================================================
SELECT SUBSTRB(A.TABLE_NAME, 1, 22) AS TABLE_NAME ,
SUBSTRB(A.INDEX_NAME, 1, 23) AS INDEX_NAME ,
SUBSTRB(A.UNIQUENESS, 1, 7) AS UNIQUE ,
TO_CHAR(COLUMN_POSITION, '999') AS POS ,
SUBSTRB(COLUMN_NAME, 1, 20) AS COLUMN_NAME
FROM DBA_INDEXES A ,
DBA_IND_COLUMNS B
WHERE A.INDEX_NAME = B.INDEX_NAME
AND A.TABLE_OWNER = B.TABLE_OWNER
AND A.TABLE_OWNER = 'E_LUCIS'
ORDER BY 1, 2, 3;
======================================================================================
-- 10 인덱스에 대한 컬럼 조회
======================================================================================
SELECT TABLE_NAME ,
INDEX_NAME ,
COLUMN_POSITION ,
COLUMN_NAME
FROM USER_IND_COLUMNS
ORDER BY TABLE_NAME,
INDEX_NAME,
COLUMN_POSITION;
======================================================================================
-- 11 테이블에 LOCK이 걸렸는지를 보기
======================================================================================
SELECT A.SID ,
A.SERIAL# ,
SUBSTRB(A.USERNAME, 1, 16) AS USERNAME ,
SUBSTRB(A.MACHINE, 1, 30) AS MACHINE ,
A.TERMINAL ,
A.OSUSER ,
A.PROGRAM ,
SUBSTRB(TO_CHAR(A.LOGON_TIME, 'MM/DD HH24:MI:SS'), 1, 14) AS LOGON_TIME ,
SUBSTRB(C.OBJECT_NAME, 1, 58) AS OBJECT_NAME
FROM V$SESSION A ,
V$LOCK B ,
DBA_OBJECTS C
WHERE A.SID = B.SID
AND B.ID1 = C.OBJECT_ID
AND B.TYPE = 'TM'
AND C.OBJECT_NAME LIKE UPPER(':테이블명');
-- 11 테이블에 LOCK이 걸렸는지를 보기
======================================================================================
SELECT A.SID ,
A.SERIAL# ,
SUBSTRB(A.USERNAME, 1, 16) AS USERNAME ,
SUBSTRB(A.MACHINE, 1, 30) AS MACHINE ,
A.TERMINAL ,
A.OSUSER ,
A.PROGRAM ,
SUBSTRB(TO_CHAR(A.LOGON_TIME, 'MM/DD HH24:MI:SS'), 1, 14) AS LOGON_TIME ,
SUBSTRB(C.OBJECT_NAME, 1, 58) AS OBJECT_NAME
FROM V$SESSION A ,
V$LOCK B ,
DBA_OBJECTS C
WHERE A.SID = B.SID
AND B.ID1 = C.OBJECT_ID
AND B.TYPE = 'TM'
AND C.OBJECT_NAME LIKE UPPER(':테이블명');
======================================================================================
-- 12 Lock을 잡고있는 세션과 기다리는 세션 조회
======================================================================================
SELECT DECODE(B.LOCKWAIT, NULL, ' ', 'w') AS WW ,
B.SID ,
B.SERIAL# AS SER# ,
SUBSTR(B.MACHINE, 1, 10) AS MACHINE ,
SUBSTR(B.PROGRAM, 1, 15) AS PROGRAM ,
SUBSTR(A.OBJECT_NAME, 1, 17) AS OBJ_NAME ,
SUBSTR(B.STATUS, 1, 1) AS S ,
DECODE(B.COMMAND, 0, NULL, 2, 'INSERT', 6, 'UPDATE', 7, 'DELETE', B.COMMAND) AS SQLCMD ,
B.PROCESS AS PGM_PSS
FROM V$SESSION B ,
(SELECT A.SID,
DECODE(B.OWNER, NULL, A.TYPE || '..ing', B.OWNER || '.' || B.OBJECT_NAME) AS OBJECT_NAME
FROM V$LOCK A ,
DBA_OBJECTS B
WHERE A.ID1 = B.OBJECT_ID(+)
GROUP BY A.SID,
DECODE(B.OWNER, NULL, A.TYPE || '..ing', B.OWNER || '.' || B.OBJECT_NAME)) A
WHERE B.SID = A.SID
AND B.TADDR IS NOT NULL;
-- 12 Lock을 잡고있는 세션과 기다리는 세션 조회
======================================================================================
SELECT DECODE(B.LOCKWAIT, NULL, ' ', 'w') AS WW ,
B.SID ,
B.SERIAL# AS SER# ,
SUBSTR(B.MACHINE, 1, 10) AS MACHINE ,
SUBSTR(B.PROGRAM, 1, 15) AS PROGRAM ,
SUBSTR(A.OBJECT_NAME, 1, 17) AS OBJ_NAME ,
SUBSTR(B.STATUS, 1, 1) AS S ,
DECODE(B.COMMAND, 0, NULL, 2, 'INSERT', 6, 'UPDATE', 7, 'DELETE', B.COMMAND) AS SQLCMD ,
B.PROCESS AS PGM_PSS
FROM V$SESSION B ,
(SELECT A.SID,
DECODE(B.OWNER, NULL, A.TYPE || '..ing', B.OWNER || '.' || B.OBJECT_NAME) AS OBJECT_NAME
FROM V$LOCK A ,
DBA_OBJECTS B
WHERE A.ID1 = B.OBJECT_ID(+)
GROUP BY A.SID,
DECODE(B.OWNER, NULL, A.TYPE || '..ing', B.OWNER || '.' || B.OBJECT_NAME)) A
WHERE B.SID = A.SID
AND B.TADDR IS NOT NULL;
======================================================================================
-- 13 테이블에 걸린 비정상적 LOCK 풀기
======================================================================================
ALTER SYSTEM KILL SESSION ':SID,:SERIAL';
======================================================================================
-- 14 연결되어 있는 OS 사용자 및 프로그램 조회
======================================================================================
SELECT SID ,
SERIAL# ,
OSUSER ,
SUBSTRB(USERNAME, 1, 10) AS USER_NAME ,
SUBSTRB(PROGRAM, 1, 30) AS PROGRAM_NAME ,
STATUS ,
TO_CHAR(LOGON_TIME, 'YYYY/MM/DD HH:MI') AS LOGON_TIME
FROM V$SESSION
WHERE TYPE != 'BACKGROUND'
AND STATUS = 'ACTIVE';
-- 13 테이블에 걸린 비정상적 LOCK 풀기
======================================================================================
ALTER SYSTEM KILL SESSION ':SID,:SERIAL';
======================================================================================
-- 14 연결되어 있는 OS 사용자 및 프로그램 조회
======================================================================================
SELECT SID ,
SERIAL# ,
OSUSER ,
SUBSTRB(USERNAME, 1, 10) AS USER_NAME ,
SUBSTRB(PROGRAM, 1, 30) AS PROGRAM_NAME ,
STATUS ,
TO_CHAR(LOGON_TIME, 'YYYY/MM/DD HH:MI') AS LOGON_TIME
FROM V$SESSION
WHERE TYPE != 'BACKGROUND'
AND STATUS = 'ACTIVE';
======================================================================================
-- 15 위치별 space를 아는 방법
======================================================================================
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;
-- 15 위치별 space를 아는 방법
======================================================================================
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;
======================================================================================
-- 16 DB Link 보기
======================================================================================
SELECT SUBSTRB(U.NAME, 1, 10) AS OWNER ,
SUBSTRB(L.NAME, 1, 20) AS DB_LINK ,
SUBSTRB(L.HOST, 1, 10) AS HOST ,
SUBSTRB(L.USERID || '/' || L.PASSWORD, 1, 15) AS USERPASS
FROM SYS.LINK$ L ,
SYS.USER$ U
WHERE L.OWNER# = U.USER#;
-- 16 DB Link 보기
======================================================================================
SELECT SUBSTRB(U.NAME, 1, 10) AS OWNER ,
SUBSTRB(L.NAME, 1, 20) AS DB_LINK ,
SUBSTRB(L.HOST, 1, 10) AS HOST ,
SUBSTRB(L.USERID || '/' || L.PASSWORD, 1, 15) AS USERPASS
FROM SYS.LINK$ L ,
SYS.USER$ U
WHERE L.OWNER# = U.USER#;
======================================================================================
-- 17 테이블 생성일자 보기
======================================================================================
SELECT SUBSTRB(OBJECT_NAME, 1, 15) AS OBJECT_NAME ,
CREATED ,
LAST_DDL_TIME ,
TIMESTAMP ,
STATUS
FROM USER_OBJECTS
WHERE OBJECT_NAME = UPPER(':테이블명')
AND OBJECT_TYPE = 'TABLE';
-- 17 테이블 생성일자 보기
======================================================================================
SELECT SUBSTRB(OBJECT_NAME, 1, 15) AS OBJECT_NAME ,
CREATED ,
LAST_DDL_TIME ,
TIMESTAMP ,
STATUS
FROM USER_OBJECTS
WHERE OBJECT_NAME = UPPER(':테이블명')
AND OBJECT_TYPE = 'TABLE';
======================================================================================
-- 18 테이블의 크기 및 블록 보기
======================================================================================
SELECT SUBSTR(SEGMENT_NAME, 1, 20),
BYTES,
BLOCKS
FROM USER_SEGMENTS
WHERE SEGMENT_NAME = UPPER(':테이블명');
-- 18 테이블의 크기 및 블록 보기
======================================================================================
SELECT SUBSTR(SEGMENT_NAME, 1, 20),
BYTES,
BLOCKS
FROM USER_SEGMENTS
WHERE SEGMENT_NAME = UPPER(':테이블명');
======================================================================================
-- 19 View의 정의 내역 보기
======================================================================================
SELECT TEXT
FROM USER_VIEWS
WHERE VIEW_NAME LIKE UPPER(':뷰_이름');
-- 19 View의 정의 내역 보기
======================================================================================
SELECT TEXT
FROM USER_VIEWS
WHERE VIEW_NAME LIKE UPPER(':뷰_이름');
======================================================================================
-- 20 파티션 테이블의 파티션 범위 보기
======================================================================================
SELECT SUBSTRB(PARTITION_NAME, 1, 30) AS PARTITION_NAME,
SUBSTRB(TABLESPACE_NAME, 1, 30) AS TABLESPACE_NAME,
HIGH_VALUE
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = UPPER(':테이블명');
-- 20 파티션 테이블의 파티션 범위 보기
======================================================================================
SELECT SUBSTRB(PARTITION_NAME, 1, 30) AS PARTITION_NAME,
SUBSTRB(TABLESPACE_NAME, 1, 30) AS TABLESPACE_NAME,
HIGH_VALUE
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = UPPER(':테이블명');
======================================================================================
-- 21 PRIMARY KEY 재생성 방법
======================================================================================
PRIMARY KEY 삭제
PRIMARY KEY DROP ALTER TABLE EMP DROP PRIMARY KEY;
PRIMARY KEY 생성
ALTER TABLE EMP ADD CONSTRAINT EMP_PK PRIMARY KEY(EMPNO) USING INDEX STORAGE(INITIAL 1M NEXT 1M PCTINCREASE 0) TABLESPACE USERS;
-- 21 PRIMARY KEY 재생성 방법
======================================================================================
PRIMARY KEY 삭제
PRIMARY KEY DROP ALTER TABLE EMP DROP PRIMARY KEY;
PRIMARY KEY 생성
ALTER TABLE EMP ADD CONSTRAINT EMP_PK PRIMARY KEY(EMPNO) USING INDEX STORAGE(INITIAL 1M NEXT 1M PCTINCREASE 0) TABLESPACE USERS;
======================================================================================
-- 22 PRIMARY KEY를 REFERENCE 하는 FOREIGN KEY 찾기
======================================================================================
SELECT C.NAME CONSTRAINT_NAME
FROM DBA_OBJECTS A ,
CDEF$ B ,
CON$ C
WHERE A.OBJECT_NAME = UPPER(':테이블명')
AND A.OBJECT_ID = B.ROBJ#
AND B.CON# = C.CON#;
-- 22 PRIMARY KEY를 REFERENCE 하는 FOREIGN KEY 찾기
======================================================================================
SELECT C.NAME CONSTRAINT_NAME
FROM DBA_OBJECTS A ,
CDEF$ B ,
CON$ C
WHERE A.OBJECT_NAME = UPPER(':테이블명')
AND A.OBJECT_ID = B.ROBJ#
AND B.CON# = C.CON#;
======================================================================================
-- 23 동일한 자료 삭제 방법
======================================================================================
DELETE
FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM EMP X
WHERE X.EMPNO = E.EMPNO );
-- 23 동일한 자료 삭제 방법
======================================================================================
DELETE
FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
FROM EMP X
WHERE X.EMPNO = E.EMPNO );
======================================================================================
-- 24 1시간 이상 유휴 상태인 세션
======================================================================================
SELECT SID ,
SERIAL# ,
USERNAME ,
TRUNC(LAST_CALL_ET / 3600, 2) || ' HR' LAST_CALL_ET
FROM V$SESSION
WHERE LAST_CALL_ET > 3600
AND USERNAME IS NOT NULL;
-- 24 1시간 이상 유휴 상태인 세션
======================================================================================
SELECT SID ,
SERIAL# ,
USERNAME ,
TRUNC(LAST_CALL_ET / 3600, 2) || ' HR' LAST_CALL_ET
FROM V$SESSION
WHERE LAST_CALL_ET > 3600
AND USERNAME IS NOT NULL;
======================================================================================
-- 25 Oracle Process의 정보
======================================================================================
SELECT S.STATUS "STATUS" ,
S.SERIAL# "SERIAL#" ,
S.TYPE "TYPE" ,
S.USERNAME "DB USER" ,
S.OSUSER "CLIENT USER" ,
S.SERVER "SERVER" ,
S.MACHINE "MACHINE" ,
S.MODULE "MODULE" ,
S.TERMINAL "TERMINAL" ,
S.PROGRAM "PROGRAM" ,
P.PROGRAM "O.S. PROGRAM" ,
S.LOGON_TIME "CONNECT TIME" ,
LOCKWAIT "LOCK WAIT" ,
SI.PHYSICAL_READS "PHYSICAL READS" ,
SI.BLOCK_GETS "BLOCK GETS" ,
SI.CONSISTENT_GETS "CONSISTENT GETS" ,
SI.BLOCK_CHANGES "BLOCK CHANGES" ,
SI.CONSISTENT_CHANGES "CONSISTENT CHANGES" ,
S.PROCESS "PROCESS" ,
P.SPID ,
P.PID ,
S.SERIAL# ,
SI.SID ,
S.SQL_ADDRESS "ADDRESS" ,
S.SQL_HASH_VALUE "SQL HASH" ,
S.ACTION
FROM V$SESSION S ,
V$PROCESS P ,
SYS.V_$SESS_IO SI
WHERE S.PADDR = P.ADDR(+)
AND SI.SID(+) = S.SID
AND S.USERNAME IS NOT NULL
AND NVL(S.OSUSER, 'X') <> 'SYSTEM'
AND S.TYPE <> 'BACKGROUND'
ORDER BY 3;
-- 25 Oracle Process의 정보
======================================================================================
SELECT S.STATUS "STATUS" ,
S.SERIAL# "SERIAL#" ,
S.TYPE "TYPE" ,
S.USERNAME "DB USER" ,
S.OSUSER "CLIENT USER" ,
S.SERVER "SERVER" ,
S.MACHINE "MACHINE" ,
S.MODULE "MODULE" ,
S.TERMINAL "TERMINAL" ,
S.PROGRAM "PROGRAM" ,
P.PROGRAM "O.S. PROGRAM" ,
S.LOGON_TIME "CONNECT TIME" ,
LOCKWAIT "LOCK WAIT" ,
SI.PHYSICAL_READS "PHYSICAL READS" ,
SI.BLOCK_GETS "BLOCK GETS" ,
SI.CONSISTENT_GETS "CONSISTENT GETS" ,
SI.BLOCK_CHANGES "BLOCK CHANGES" ,
SI.CONSISTENT_CHANGES "CONSISTENT CHANGES" ,
S.PROCESS "PROCESS" ,
P.SPID ,
P.PID ,
S.SERIAL# ,
SI.SID ,
S.SQL_ADDRESS "ADDRESS" ,
S.SQL_HASH_VALUE "SQL HASH" ,
S.ACTION
FROM V$SESSION S ,
V$PROCESS P ,
SYS.V_$SESS_IO SI
WHERE S.PADDR = P.ADDR(+)
AND SI.SID(+) = S.SID
AND S.USERNAME IS NOT NULL
AND NVL(S.OSUSER, 'X') <> 'SYSTEM'
AND S.TYPE <> 'BACKGROUND'
ORDER BY 3;
======================================================================================
-- 26 중복인덱스 체크
======================================================================================
SELECT O1.NAME || '.' || N1.NAME REDUNDANT_INDEX,
O2.NAME || '.' || N2.NAME SUFFICIENT_INDEX
FROM SYS.ICOL$ IC1 ,
SYS.ICOL$ IC2 ,
SYS.IND$ I1 ,
SYS.OBJ$ N1 ,
SYS.OBJ$ N2 ,
SYS.USER$ O1 ,
SYS.USER$ O2
WHERE IC1.POS# = 1
AND IC2.BO# = IC1.BO#
AND IC2.OBJ# != IC1.OBJ#
AND IC2.POS# = 1
AND IC2.INTCOL# = IC1.INTCOL#
AND I1.OBJ# = IC1.OBJ#
AND BITAND(I1.PROPERTY, 1) = 0
AND (SELECT MAX(POS#) * (MAX(POS#) + 1) / 2
FROM SYS.ICOL$
WHERE OBJ# = IC1.OBJ#) = (SELECT SUM(XC1.POS#)
FROM SYS.ICOL$ XC1 ,
SYS.ICOL$ XC2
WHERE XC1.OBJ# = IC1.OBJ#
AND XC2.OBJ# = IC2.OBJ#
AND XC1.POS# = XC2.POS#
AND XC1.INTCOL# = XC2.INTCOL#)
AND N1.OBJ# = IC1.OBJ#
AND N2.OBJ# = IC2.OBJ#
AND O1.USER# = N1.OWNER#
AND O2.USER# = N2.OWNER#;
-- 26 중복인덱스 체크
======================================================================================
SELECT O1.NAME || '.' || N1.NAME REDUNDANT_INDEX,
O2.NAME || '.' || N2.NAME SUFFICIENT_INDEX
FROM SYS.ICOL$ IC1 ,
SYS.ICOL$ IC2 ,
SYS.IND$ I1 ,
SYS.OBJ$ N1 ,
SYS.OBJ$ N2 ,
SYS.USER$ O1 ,
SYS.USER$ O2
WHERE IC1.POS# = 1
AND IC2.BO# = IC1.BO#
AND IC2.OBJ# != IC1.OBJ#
AND IC2.POS# = 1
AND IC2.INTCOL# = IC1.INTCOL#
AND I1.OBJ# = IC1.OBJ#
AND BITAND(I1.PROPERTY, 1) = 0
AND (SELECT MAX(POS#) * (MAX(POS#) + 1) / 2
FROM SYS.ICOL$
WHERE OBJ# = IC1.OBJ#) = (SELECT SUM(XC1.POS#)
FROM SYS.ICOL$ XC1 ,
SYS.ICOL$ XC2
WHERE XC1.OBJ# = IC1.OBJ#
AND XC2.OBJ# = IC2.OBJ#
AND XC1.POS# = XC2.POS#
AND XC1.INTCOL# = XC2.INTCOL#)
AND N1.OBJ# = IC1.OBJ#
AND N2.OBJ# = IC2.OBJ#
AND O1.USER# = N1.OWNER#
AND O2.USER# = N2.OWNER#;
======================================================================================
-- 27 공간의 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;
-- 27 공간의 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;
======================================================================================
-- 28 현재 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;
-- 28 현재 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;
======================================================================================
-- 29 Active Session 중 Idle Time이 긴 작업
======================================================================================
SELECT VS.SID || ',' || VS.SERIAL# " SID" ,
VP.SPID ,
VS.MACHINE ,
VS.PROGRAM ,
VS.MODULE ,
VS.STATUS ,
TO_CHAR(VS.LOGON_TIME, 'MM/DD HH24:MI') LOGIN_TIME ,
ROUND(VS.LAST_CALL_ET / 60) "IDLE"
FROM V$SESSION VS ,
V$PROCESS VP
WHERE VS.STATUS = 'ACTIVE'
AND VS.SID NOT IN (1, 2, 3, 4, 5, 6, 7)
AND VS.PADDR = VP.ADDR
ORDER BY 8;
-- 29 Active Session 중 Idle Time이 긴 작업
======================================================================================
SELECT VS.SID || ',' || VS.SERIAL# " SID" ,
VP.SPID ,
VS.MACHINE ,
VS.PROGRAM ,
VS.MODULE ,
VS.STATUS ,
TO_CHAR(VS.LOGON_TIME, 'MM/DD HH24:MI') LOGIN_TIME ,
ROUND(VS.LAST_CALL_ET / 60) "IDLE"
FROM V$SESSION VS ,
V$PROCESS VP
WHERE VS.STATUS = 'ACTIVE'
AND VS.SID NOT IN (1, 2, 3, 4, 5, 6, 7)
AND VS.PADDR = VP.ADDR
ORDER BY 8;
======================================================================================
-- 30 DBUser 별로 Session 정보를 조회
======================================================================================
SELECT S.USERNAME ,
S.SID ,
S.SERIAL# ,
P.SPID ,
S.OSUSER ,
S.MACHINE ,
S.PROGRAM ,
TO_CHAR(S.LOGON_TIME, 'MM/DD HH24:MI') "LOGON_TIME" ,
ROUND(S.LAST_CALL_ET / 60) "IDLE"
FROM V$SESSION S ,
V$PROCESS P
WHERE S.PADDR = P.ADDR
AND S.USERNAME LIKE UPPER(':DBUSER%')
ORDER BY 9;
-- 30 DBUser 별로 Session 정보를 조회
======================================================================================
SELECT S.USERNAME ,
S.SID ,
S.SERIAL# ,
P.SPID ,
S.OSUSER ,
S.MACHINE ,
S.PROGRAM ,
TO_CHAR(S.LOGON_TIME, 'MM/DD HH24:MI') "LOGON_TIME" ,
ROUND(S.LAST_CALL_ET / 60) "IDLE"
FROM V$SESSION S ,
V$PROCESS P
WHERE S.PADDR = P.ADDR
AND S.USERNAME LIKE UPPER(':DBUSER%')
ORDER BY 9;
======================================================================================
-- 31 사용자 session 중에서 2시간 이상 idle 상태가 지속되는 session을 kill
======================================================================================
SELECT DISTINCT '!KILL -9 ' || B.SPID,
'ALTER SYSTEM KILL SESSION ''' || A.SID || ',' || A.SERIAL# || ''' ;
'
FROM V$SESSION A ,
V$PROCESS B
WHERE A.PADDR IN (SELECT S.PADDR
FROM V$SESSION S
WHERE STATUS = 'INACTIVE'
GROUP BY S.PADDR
HAVING MIN(ROUND(LAST_CALL_ET / 60)) > 120)
AND A.PADDR = B.ADDR
AND A.STATUS = 'INACTIVE';
-- 31 사용자 session 중에서 2시간 이상 idle 상태가 지속되는 session을 kill
======================================================================================
SELECT DISTINCT '!KILL -9 ' || B.SPID,
'ALTER SYSTEM KILL SESSION ''' || A.SID || ',' || A.SERIAL# || ''' ;
'
FROM V$SESSION A ,
V$PROCESS B
WHERE A.PADDR IN (SELECT S.PADDR
FROM V$SESSION S
WHERE STATUS = 'INACTIVE'
GROUP BY S.PADDR
HAVING MIN(ROUND(LAST_CALL_ET / 60)) > 120)
AND A.PADDR = B.ADDR
AND A.STATUS = 'INACTIVE';
======================================================================================
-- 32 사용자별 오브젝트 수
======================================================================================
SELECT OWNER AS "OWNER" ,
SUM(DECODE(OBJECT_TYPE, 'TABLE', 1, 0)) AS "TABLE" ,
SUM(DECODE(OBJECT_TYPE, 'INDEX', 1, 0)) AS "INDEX" ,
SUM(DECODE(OBJECT_TYPE, 'SYNONYM', 1, 0)) AS "SYNONYMS" ,
SUM(DECODE(OBJECT_TYPE, 'SEQUENCE', 1, 0)) AS "SEQUENCES" ,
SUM(DECODE(OBJECT_TYPE, 'VIEW', 1, 0)) AS "VIEWS" ,
SUM(DECODE(OBJECT_TYPE, 'CLUSTER', 1, 0)) AS "CLUSTERS" ,
SUM(DECODE(OBJECT_TYPE, 'DATABASE LINK', 1, 0)) AS "DBLINKS" ,
SUM(DECODE(OBJECT_TYPE, 'PACKAGE', 1, 0)) AS "PACKAGES" ,
SUM(DECODE(OBJECT_TYPE, 'PACKAGE BODY', 1, 0)) AS "PACKAGE_BODY" ,
SUM(DECODE(OBJECT_TYPE, 'PROCEDURE', 1, 0)) AS "PROCEDURES" ,
SUM(DECODE(OBJECT_TYPE, 'FUNCTION', 1, 0)) AS "FUNCTION"
FROM DBA_OBJECTS
GROUP BY OWNER;
-- 32 사용자별 오브젝트 수
======================================================================================
SELECT OWNER AS "OWNER" ,
SUM(DECODE(OBJECT_TYPE, 'TABLE', 1, 0)) AS "TABLE" ,
SUM(DECODE(OBJECT_TYPE, 'INDEX', 1, 0)) AS "INDEX" ,
SUM(DECODE(OBJECT_TYPE, 'SYNONYM', 1, 0)) AS "SYNONYMS" ,
SUM(DECODE(OBJECT_TYPE, 'SEQUENCE', 1, 0)) AS "SEQUENCES" ,
SUM(DECODE(OBJECT_TYPE, 'VIEW', 1, 0)) AS "VIEWS" ,
SUM(DECODE(OBJECT_TYPE, 'CLUSTER', 1, 0)) AS "CLUSTERS" ,
SUM(DECODE(OBJECT_TYPE, 'DATABASE LINK', 1, 0)) AS "DBLINKS" ,
SUM(DECODE(OBJECT_TYPE, 'PACKAGE', 1, 0)) AS "PACKAGES" ,
SUM(DECODE(OBJECT_TYPE, 'PACKAGE BODY', 1, 0)) AS "PACKAGE_BODY" ,
SUM(DECODE(OBJECT_TYPE, 'PROCEDURE', 1, 0)) AS "PROCEDURES" ,
SUM(DECODE(OBJECT_TYPE, 'FUNCTION', 1, 0)) AS "FUNCTION"
FROM DBA_OBJECTS
GROUP BY OWNER;
======================================================================================
-- 33 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');
-- 33 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');
======================================================================================
-- 34 작업 중인 데이터베이스 트랜잭션 조회
======================================================================================
SELECT S.SID ,
S.SERIAL# ,
S.STATUS ,
S.OSUSER ,
S.USERNAME ,
T.STATUS ,
T.START_TIME
FROM V$SESSION S ,
V$TRANSACTION T ,
DBA_ROLLBACK_SEGS R
WHERE S.TADDR = T.ADDR
AND T.XIDUSN = R.SEGMENT_ID;
-- 34 작업 중인 데이터베이스 트랜잭션 조회
======================================================================================
SELECT S.SID ,
S.SERIAL# ,
S.STATUS ,
S.OSUSER ,
S.USERNAME ,
T.STATUS ,
T.START_TIME
FROM V$SESSION S ,
V$TRANSACTION T ,
DBA_ROLLBACK_SEGS R
WHERE S.TADDR = T.ADDR
AND T.XIDUSN = R.SEGMENT_ID;
======================================================================================
-- 35 열려 있는 커서 조회
======================================================================================
SELECT A.SID ,
A.OSUSER ,
COUNT(B.SID) AS "CURSOR" ,
A.PROGRAM ,
A.STATUS
FROM V$SESSION A ,
V$OPEN_CURSOR B
WHERE A.SID = B.SID(+)
GROUP BY A.SID,
A.OSUSER,
A.PROGRAM,
A.STATUS;
-- 35 열려 있는 커서 조회
======================================================================================
SELECT A.SID ,
A.OSUSER ,
COUNT(B.SID) AS "CURSOR" ,
A.PROGRAM ,
A.STATUS
FROM V$SESSION A ,
V$OPEN_CURSOR B
WHERE A.SID = B.SID(+)
GROUP BY A.SID,
A.OSUSER,
A.PROGRAM,
A.STATUS;
======================================================================================
-- 36 잠금 발생 유형 조회
======================================================================================
SELECT A.SID ,
DECODE(A.TYPE , 'MR', 'MEDIA RECOVERY' , 'RT', 'REDO THREAD' , 'UN', 'USER_NAME' , 'TX', 'TRANSACTION' , 'TM', 'DML' , 'UL', 'PL/SQL USER LOCK' , 'DX', 'DISTRIBUTED XACTION' , 'CF', 'CONTROL FILE' , 'IS', 'INSTANCE STATE' , 'FS', 'FILE SET' , 'IR', 'INSTANCE RECOVERY' , 'FS', 'FILE SET' , 'ST', 'DISK SPACE TRANSACTION' , 'TS', 'TEMP SEGMENT' , 'IV', 'LIBRARY CACHE INVAILDATION' , 'LS', 'LOG START OR SWITCH' , 'RW', 'ROW WAIT' , 'SQ', 'SEQUENCE NUMBER' , 'TE', 'EXTEND TABLE' , 'TT', 'TEMP TABLE' , A.TYPE ) AS "LOCK_TYPE" ,
DECODE(A.LMODE , 0, 'NONE' , 1, 'NULL' , 2, 'ROW-S(SS)' , 3, 'ROW-X(SX)' , 4, 'SHARE' , 5, 'S/ROW-X(SSX)' , 6, 'EXCLUSIVE' , TO_CHAR(A.LMODE) ) AS "MODE_HELD" ,
DECODE(A.REQUEST , 0, 'NONE' , 1, 'NULL' , 2, 'ROW-S(SS)' , 3, 'ROW-X(SX)' , 4, 'SHARE' , 5, 'S/ROW-X(SSX)' , 6, 'EXCLUSIVE' , TO_CHAR(A.REQUEST) ) AS "MODE_REQUESTED" ,
TO_CHAR(A.ID1) AS "LOCK_ID1" ,
TO_CHAR(A.ID2) AS "LOCK_ID2" ,
DECODE(BLOCK, 0, 'NOT BLOCKING', 1, 'BLOCKING', 2, 'GLOBAL', TO_CHAR(BLOCK)) AS "BLOCKING_OTHERS"
FROM V$LOCK A
WHERE (ID1,
ID2) IN (SELECT B.ID1,
ID2
FROM V$LOCK B
WHERE B.ID1 = A.ID1);
-- 36 잠금 발생 유형 조회
======================================================================================
SELECT A.SID ,
DECODE(A.TYPE , 'MR', 'MEDIA RECOVERY' , 'RT', 'REDO THREAD' , 'UN', 'USER_NAME' , 'TX', 'TRANSACTION' , 'TM', 'DML' , 'UL', 'PL/SQL USER LOCK' , 'DX', 'DISTRIBUTED XACTION' , 'CF', 'CONTROL FILE' , 'IS', 'INSTANCE STATE' , 'FS', 'FILE SET' , 'IR', 'INSTANCE RECOVERY' , 'FS', 'FILE SET' , 'ST', 'DISK SPACE TRANSACTION' , 'TS', 'TEMP SEGMENT' , 'IV', 'LIBRARY CACHE INVAILDATION' , 'LS', 'LOG START OR SWITCH' , 'RW', 'ROW WAIT' , 'SQ', 'SEQUENCE NUMBER' , 'TE', 'EXTEND TABLE' , 'TT', 'TEMP TABLE' , A.TYPE ) AS "LOCK_TYPE" ,
DECODE(A.LMODE , 0, 'NONE' , 1, 'NULL' , 2, 'ROW-S(SS)' , 3, 'ROW-X(SX)' , 4, 'SHARE' , 5, 'S/ROW-X(SSX)' , 6, 'EXCLUSIVE' , TO_CHAR(A.LMODE) ) AS "MODE_HELD" ,
DECODE(A.REQUEST , 0, 'NONE' , 1, 'NULL' , 2, 'ROW-S(SS)' , 3, 'ROW-X(SX)' , 4, 'SHARE' , 5, 'S/ROW-X(SSX)' , 6, 'EXCLUSIVE' , TO_CHAR(A.REQUEST) ) AS "MODE_REQUESTED" ,
TO_CHAR(A.ID1) AS "LOCK_ID1" ,
TO_CHAR(A.ID2) AS "LOCK_ID2" ,
DECODE(BLOCK, 0, 'NOT BLOCKING', 1, 'BLOCKING', 2, 'GLOBAL', TO_CHAR(BLOCK)) AS "BLOCKING_OTHERS"
FROM V$LOCK A
WHERE (ID1,
ID2) IN (SELECT B.ID1,
ID2
FROM V$LOCK B
WHERE B.ID1 = A.ID1);
======================================================================================
-- 37 테이블의 PK를 구성하는 컬럼 조회
======================================================================================
SELECT A.TABLE_NAME,
B.CONSTRAINT_NAME,
C.COLUMN_NAME
FROM USER_TABLES A ,
USER_CONSTRAINTS B ,
USER_CONS_COLUMNS C
WHERE A.TABLE_NAME = B.TABLE_NAME
AND B.CONSTRAINT_NAME = C.CONSTRAINT_NAME
AND B.CONSTRAINT_TYPE = 'P';
-- 37 테이블의 PK를 구성하는 컬럼 조회
======================================================================================
SELECT A.TABLE_NAME,
B.CONSTRAINT_NAME,
C.COLUMN_NAME
FROM USER_TABLES A ,
USER_CONSTRAINTS B ,
USER_CONS_COLUMNS C
WHERE A.TABLE_NAME = B.TABLE_NAME
AND B.CONSTRAINT_NAME = C.CONSTRAINT_NAME
AND B.CONSTRAINT_TYPE = 'P';
======================================================================================
-- 38 오브젝트에 접속되어 있는 프로그램 조회
======================================================================================
SELECT SUBSTR(B.OBJECT, 1, 15) AS OBJECT,
SUBSTR(A.PROGRAM, 1, 15) AS PROGRAM,
COUNT(*) AS CNT
FROM V$SESSION A ,
V$ACCESS B
WHERE A.SID = B.SID
AND B.OWNER NOT IN ('SYS')
AND A.TYPE != 'BACKGROUND'
AND B.OBJECT LIKE UPPER(':OBJECT_NAME') || '%'
GROUP BY B.OBJECT,
SUBSTR(A.PROGRAM, 1, 15);
-- 38 오브젝트에 접속되어 있는 프로그램 조회
======================================================================================
SELECT SUBSTR(B.OBJECT, 1, 15) AS OBJECT,
SUBSTR(A.PROGRAM, 1, 15) AS PROGRAM,
COUNT(*) AS CNT
FROM V$SESSION A ,
V$ACCESS B
WHERE A.SID = B.SID
AND B.OWNER NOT IN ('SYS')
AND A.TYPE != 'BACKGROUND'
AND B.OBJECT LIKE UPPER(':OBJECT_NAME') || '%'
GROUP BY B.OBJECT,
SUBSTR(A.PROGRAM, 1, 15);
======================================================================================
-- 39 잠금 상태 오브젝트 조회
======================================================================================
SELECT A.SESSION_ID ,
B.SERIAL# ,
A.OS_USER_NAME ,
A.ORACLE_USERNAME ,
C.OBJECT_NAME ,
A.LOCKED_MODE ,
A.XIDUSN
FROM V$LOCKED_OBJECT A ,
V$SESSION B ,
DBA_OBJECTS C
WHERE A.OBJECT_ID = C.OBJECT_ID
AND A.SESSION_ID = B.SID;
-- 39 잠금 상태 오브젝트 조회
======================================================================================
SELECT A.SESSION_ID ,
B.SERIAL# ,
A.OS_USER_NAME ,
A.ORACLE_USERNAME ,
C.OBJECT_NAME ,
A.LOCKED_MODE ,
A.XIDUSN
FROM V$LOCKED_OBJECT A ,
V$SESSION B ,
DBA_OBJECTS C
WHERE A.OBJECT_ID = C.OBJECT_ID
AND A.SESSION_ID = B.SID;
======================================================================================
-- 40 잠금 SQL 구문 조회
======================================================================================
SELECT B.USERNAME AS USERNAME ,
C.SID AS SID ,
C.OWNER AS OBJECT_OWNER ,
C.OBJECT AS OBJECT ,
B.LOCKWAIT ,
A.PIECE ,
A.SQL_TEXT AS SQL
FROM V$SQLTEXT A ,
V$SESSION B ,
V$ACCESS C
WHERE A.ADDRESS = B.SQL_ADDRESS
AND A.HASH_VALUE = B.SQL_HASH_VALUE
AND B.SID = C.SID
AND C.OWNER != 'SYS';
-- 40 잠금 SQL 구문 조회
======================================================================================
SELECT B.USERNAME AS USERNAME ,
C.SID AS SID ,
C.OWNER AS OBJECT_OWNER ,
C.OBJECT AS OBJECT ,
B.LOCKWAIT ,
A.PIECE ,
A.SQL_TEXT AS SQL
FROM V$SQLTEXT A ,
V$SESSION B ,
V$ACCESS C
WHERE A.ADDRESS = B.SQL_ADDRESS
AND A.HASH_VALUE = B.SQL_HASH_VALUE
AND B.SID = C.SID
AND C.OWNER != 'SYS';
======================================================================================
-- 41 롤백 세그먼트 경합 조회
======================================================================================
SELECT NAME T0 ,
GETS T1 ,
WAITS T2 ,
TO_CHAR(TRUNC(WAITS / GETS * 100, 2), 099.99) || ' %' T3 ,
TO_CHAR(ROUND(RSSIZE / 1024)) T4 ,
SHRINKS T5 ,
EXTENDS T6
FROM V$ROLLSTAT ,
V$ROLLNAME
WHERE V$ROLLSTAT.USN = V$ROLLNAME.USN;
-- 41 롤백 세그먼트 경합 조회
======================================================================================
SELECT NAME T0 ,
GETS T1 ,
WAITS T2 ,
TO_CHAR(TRUNC(WAITS / GETS * 100, 2), 099.99) || ' %' T3 ,
TO_CHAR(ROUND(RSSIZE / 1024)) T4 ,
SHRINKS T5 ,
EXTENDS T6
FROM V$ROLLSTAT ,
V$ROLLNAME
WHERE V$ROLLSTAT.USN = V$ROLLNAME.USN;
======================================================================================
-- 42 CPU를 많이 사용하는 세션의 식별
======================================================================================
SELECT A.SID ,
C.SERIAL# ,
A.VALUE ,
C.USERNAME ,
C.STATUS ,
C.PROGRAM
FROM V$SESSTAT A ,
V$STATNAME B ,
V$SESSION C
WHERE A.STATISTIC# = B.STATISTIC#
AND A.SID = C.SID
AND B.NAME = 'CPU used by this session'
AND A.VALUE > 0
ORDER BY A.VALUE DESC;
-- 42 CPU를 많이 사용하는 세션의 식별
======================================================================================
SELECT A.SID ,
C.SERIAL# ,
A.VALUE ,
C.USERNAME ,
C.STATUS ,
C.PROGRAM
FROM V$SESSTAT A ,
V$STATNAME B ,
V$SESSION C
WHERE A.STATISTIC# = B.STATISTIC#
AND A.SID = C.SID
AND B.NAME = 'CPU used by this session'
AND A.VALUE > 0
ORDER BY A.VALUE DESC;
======================================================================================
-- 43 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;
-- 43 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;
======================================================================================
-- 44 Disk Read 가 많은 SQL문 찾기
======================================================================================
SELECT DISK_READS,
SQL_TEXT
FROM V$SQLAREA
WHERE DISK_READS > 100
ORDER BY DISK_READS DESC;
-- 44 Disk Read 가 많은 SQL문 찾기
======================================================================================
SELECT DISK_READS,
SQL_TEXT
FROM V$SQLAREA
WHERE DISK_READS > 100
ORDER BY DISK_READS DESC;
======================================================================================
-- 45 Rollback Segment를 사용하고 있는 SQL문 조회
======================================================================================
SELECT A.NAME ,
B.XACTS ,
C.SID ,
C.SERIAL# ,
C.USERNAME ,
D.SQL_TEXT
FROM V$ROLLNAME A ,
V$ROLLSTAT B ,
V$SESSION C ,
V$SQLTEXT D ,
V$TRANSACTION E
WHERE A.USN = B.USN
AND B.USN = E.XIDUSN
AND C.TADDR = E.ADDR
AND C.SQL_ADDRESS = D.ADDRESS
AND C.SQL_HASH_VALUE = D.HASH_VALUE
ORDER BY A.NAME, C.SID, D.PIECE;
-- 45 Rollback Segment를 사용하고 있는 SQL문 조회
======================================================================================
SELECT A.NAME ,
B.XACTS ,
C.SID ,
C.SERIAL# ,
C.USERNAME ,
D.SQL_TEXT
FROM V$ROLLNAME A ,
V$ROLLSTAT B ,
V$SESSION C ,
V$SQLTEXT D ,
V$TRANSACTION E
WHERE A.USN = B.USN
AND B.USN = E.XIDUSN
AND C.TADDR = E.ADDR
AND C.SQL_ADDRESS = D.ADDRESS
AND C.SQL_HASH_VALUE = D.HASH_VALUE
ORDER BY A.NAME, C.SID, D.PIECE;
======================================================================================
-- 46 Index가 없는 Table 조회
======================================================================================
SELECT OWNER, TABLE_NAME
FROM (SELECT OWNER, TABLE_NAME
FROM DBA_TABLES
MINUS
SELECT TABLE_OWNER, TABLE_NAME
FROM DBA_INDEXES)
WHERE OWNER NOT IN ('SYS', 'SYSTEM')
ORDER BY OWNER, TABLE_NAME;
-- 46 Index가 없는 Table 조회
======================================================================================
SELECT OWNER, TABLE_NAME
FROM (SELECT OWNER, TABLE_NAME
FROM DBA_TABLES
MINUS
SELECT TABLE_OWNER, TABLE_NAME
FROM DBA_INDEXES)
WHERE OWNER NOT IN ('SYS', 'SYSTEM')
ORDER BY OWNER, TABLE_NAME;
======================================================================================
-- 47 오래도록 수행되는 Full Table Scan를 모니터링
======================================================================================
SELECT SID ,
SERIAL# ,
OPNAME ,
TO_CHAR(START_TIME, 'HH24:MI:SS') AS "START" ,
(SOFAR / TOTALWORK) * 100 AS "PERCENT_COMPLETE"
FROM V$SESSION_LONGOPS;
-- 47 오래도록 수행되는 Full Table Scan를 모니터링
======================================================================================
SELECT SID ,
SERIAL# ,
OPNAME ,
TO_CHAR(START_TIME, 'HH24:MI:SS') AS "START" ,
(SOFAR / TOTALWORK) * 100 AS "PERCENT_COMPLETE"
FROM V$SESSION_LONGOPS;
======================================================================================
-- 48 System 테이블스페이스에 비시스템 세그먼트 조회
======================================================================================
SELECT OWNER ,
SEGMENT_NAME ,
SEGMENT_TYPE ,
TABLESPACE_NAME
FROM DBA_SEGMENTS
WHERE OWNER NOT IN ('SYS', 'SYSTEM')
AND TABLESPACE_NAME = 'SYSTEM';
-- 48 System 테이블스페이스에 비시스템 세그먼트 조회
======================================================================================
SELECT OWNER ,
SEGMENT_NAME ,
SEGMENT_TYPE ,
TABLESPACE_NAME
FROM DBA_SEGMENTS
WHERE OWNER NOT IN ('SYS', 'SYSTEM')
AND TABLESPACE_NAME = 'SYSTEM';
======================================================================================
-- 49 인덱스의 Delete Space 조회
======================================================================================
SELECT NAME ,
LF_ROWS ,
DEL_LF_ROWS ,
(DEL_LF_ROWS / LF_ROWS) * 100 AS "DELETE SPACE %"
FROM INDEX_STATS
WHERE NAME = UPPER(':INDEX_NAME');
Delete Space % 값이 20 % 가 넘으면, 그 인덱스는 다시 작성하는 것이 좋다.
-- 49 인덱스의 Delete Space 조회
======================================================================================
SELECT NAME ,
LF_ROWS ,
DEL_LF_ROWS ,
(DEL_LF_ROWS / LF_ROWS) * 100 AS "DELETE SPACE %"
FROM INDEX_STATS
WHERE NAME = UPPER(':INDEX_NAME');
Delete Space % 값이 20 % 가 넘으면, 그 인덱스는 다시 작성하는 것이 좋다.
'SQL' 카테고리의 다른 글
to_char, to_date 날짜변환 (0) | 2020.01.08 |
---|---|
Oracle_특정 기간에 수행된 Top SQL 추출 (0) | 2019.12.23 |
sql case (1) | 2013.04.20 |
Comments