[Oracle] SID, SPID 를 통해 수행하고 있는 쿼리 찾기
가끔 모니터링을 하다보면 OS의 cpu 혹은 memory를 많이 잡아먹는 Oracle session들이 발견된다.
그 넘들이 어떤 쿼리를 날리고 있는지 확인할 수 있다.
## oracle sid를 이용한 sql문 찾기
select a.username,a.program,a.machine,a.module,b.spid,a.sid,a.serial#,a.status,
c.sql_text
from v$session a,
v$process b,
v$sql c
where a.sid = '&sid'
and b.addr = a.paddr
and a.sql_hash_value = c.hash_value(+)
and a.sql_address = c.address(+);
## os pid를 이용한 sql문 찾기
select /*+ use_hash(a,b,c) */
a.username,a.program,a.machine,a.module,b.spid,a.sid,a.serial#,a.sql_hash_value,
d.PHYSICAL_READS, d.BLOCK_GETS,
c.sql_text
from v$session a,
v$process b,
v$sql c,
v$sess_io d
where b.spid = '&pid'
and b.addr = a.paddr
and a.sid = d.sid
and a.sql_hash_value = c.hash_value(+)
and a.sql_address = c.address(+);
'Database / Sql' 카테고리의 다른 글
[Oracle] 각 테이블/인덱스 사이즈 조회 쿼리 (0) | 2014.03.06 |
---|---|
[Oracle] 테이블 스페이스 용량/사용량 산출 (0) | 2014.03.04 |
[Oracle] SYS_CONNECT_BY_PATH 문자열 합치기?? (0) | 2013.10.18 |
[Oracle] 대소문자 처리 (0) | 2013.09.26 |
[Oracle] TOAD 스크립트 조회 및 백업 (0) | 2013.09.26 |
[Oracle] SYS_CONNECT_BY_PATH 문자열 합치기??
## SAMPLE 1
SELECT SUBSTRB(MAX(SYS_CONNECT_BY_PATH(CARTONID,', ')),2) CARTONID
FROM (
SELECT ROWNUM RW, NVL(B.CARTONID,C.CARTONID) CARTONID
FROM TTASKINHI A, TCONTENT B, TCONTENTHI C
WHERE A.OWNERID = '1474'
AND A.ORDERID = '131001-901642'
AND A.ITEMID = '1118825'
AND A.CONTENTID = B.CONTENTID(+)
AND A.CONTENTID = C.CONTENTID(+)
)
START WITH RW=1
CONNECT BY PRIOR RW=RW-1;
1. 내부 쿼리 실행시
RW CARTONID
1 32021092K
2 32021092K
3 32021092K
4 32021092K
2. 전체 쿼리 실행시
CARTONID
32021092K, 32021092K, 32021092K, 32021092K
## SAMPLE 2
SELECT A, MAX(SYS_CONNECT_BY_PATH(B,'/')) B
FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY A ORDER BY A) AS RNUM
, A, B
FROM (
SELECT 1 A, '엄마' B FROM DUAL
UNION
SELECT 1 A, '아빠' B FROM DUAL
UNION
SELECT 1 A, '이모' B FROM DUAL
UNION
SELECT 2 A, '삼촌' B FROM DUAL
UNION
SELECT 2 A, '오빠' B FROM DUAL
)
)
START WITH RNUM = 1
CONNECT BY PRIOR RNUM = RNUM - 1 AND PRIOR A=A
GROUP BY A
1. 내부 쿼리 실행시
A B
1 아빠
1 엄마
1 이모
2 삼촌
2 오빠
2. 전체 쿼리 실행시
A B
1 /아빠/엄마/이모
2 /삼촌/오빠
3. RNUM = 1 -> RNUM = 2 변경시
A B
1 /엄마/이모
2 /오빠
---------------------------------------------------------------------------------------------
### 타블로그 참조 ###
'Database / Sql' 카테고리의 다른 글
[Oracle] 테이블 스페이스 용량/사용량 산출 (0) | 2014.03.04 |
---|---|
[Oracle] SID, SPID 를 통해 수행하고 있는 쿼리 찾기 (0) | 2013.11.27 |
[Oracle] 대소문자 처리 (0) | 2013.09.26 |
[Oracle] TOAD 스크립트 조회 및 백업 (0) | 2013.09.26 |
[Oracle] session 수 체크 및 session 죽이기 (0) | 2013.07.31 |
[Oracle] 대소문자 처리
1. 컬럼명과 데이블명은 원도우,리눅스,유닉스에서 대소문자를 가리지 않습니다.
2. SQL문은 대소문자를 구분하지 않습니다.
SELECT NAME FROM LEE;
select NAME from LEE;
-- 2개다 같은 출력을 합니다.
※ SQL 쿼리는 대문자로 써주는것이 좋습니다.
3.문자열 데이타형은 기본으로 대소문자를 구분합니다.
SELECT * FROM TAB WHERE NAME = 'lee';
SELECT * FROM TAB WHERE NAME = 'LEE';
-- lee컬럼의 값이 lee라면 첫번째것은 되지만 두번째것은 되지 않는다.
4.대소문자 구분없이 검색하는법
WHERE UPPER("+search+") LIKE UPPER('%"+keyword+"%')
WHERE LOWER("+search+") LIKE LOWER('%"+keyword+"%')
※검색할 단어와 비교할 컬럼을 모두 대문자나 소문자로 만든후 비교합니다.
'Database / Sql' 카테고리의 다른 글
[Oracle] SID, SPID 를 통해 수행하고 있는 쿼리 찾기 (0) | 2013.11.27 |
---|---|
[Oracle] SYS_CONNECT_BY_PATH 문자열 합치기?? (0) | 2013.10.18 |
[Oracle] TOAD 스크립트 조회 및 백업 (0) | 2013.09.26 |
[Oracle] session 수 체크 및 session 죽이기 (0) | 2013.07.31 |
[Oracle] 11g 삭제 방법 (0) | 2013.07.15 |