2013. 7. 31. 10:23

[Oracle] session 수 체크 및 session 죽이기

-- oracle session 수 체크

 

select count(*)
from  v$session a,
      v$process b
where a.paddr=b.addr;

 

select count(*)
from  v$session a,
      v$process b
where a.paddr=b.addr
  and a.schemaname = 'SEC';
  
 

 

-- USER ACCOUNT LOCK 해제

 

alter user nosun account unlock;

 

 

 

-- 락 죽이기

 

select a.sid, a.serial#
  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 = 'INVLOG';

  
alter system kill session '1050, 4549';

 

 

 

-- LOAD 걸린 SQL 보기

1. oracle/chun1001 접속
2. sqlplus "/as sysdba"
3. @?/rdbms/admin/awrrpt
3. 옵션 일수 선택 - > 스냅샷 시작 id 입력 -> 스냅샷 종료 id 입력
4. html ftp 로 다운로드

 

 

'Database / Sql' 카테고리의 다른 글

[Oracle] 대소문자 처리  (0) 2013.09.26
[Oracle] TOAD 스크립트 조회 및 백업  (0) 2013.09.26
[Oracle] 11g 삭제 방법  (0) 2013.07.15
[Oracle] Nested Loops, Sort Merge, Hash  (0) 2013.03.25
[Oracle] PK 수정  (0) 2013.03.25
2013. 7. 15. 13:25

[Oracle] 11g 삭제 방법

http://ihayatesw.tistory.com/245

 

 

2013. 3. 25. 18:13

[Oracle] Nested Loops, Sort Merge, Hash

1. Nested Loops Join

 

각 단계를 완료하고 나서 다음단계로 넘어가는게 아니라 한 레코드씩 순차적으로 진행한다.


단, order by는 전체집합을 대상으로 정렬해야 하므로 작업을 모두 완료한 후 다음 오퍼레이션을 진행한다.


다른 조인방식보다 인덱스 구성 전략이 특히 중요하며, 소량의 데이터를 처리하거나 부분범위 처리가 가능한 OLTP성 환경에 적합한 조인방식이다.

 

 

2. Sort Merge Join


두 테이블을 각각 정렬한 다음에 두 집합을 머지(Merge)하면서 조인을 수행한다
  - 소트단계:양쪽 집합을 조인 컬럼 기준으로 정렬
  - 머지단계:정렬된 양쪽 집합을 서로 Merge

 

소트머지 조인은 Outer루프와 Inner루프가 Sort Area에 미리 정렬해둔 자료구조를 이용할분 실제 조인오퍼레이션은 NL조인과 동일 하지만 Sort Area가 PGA영역에 할당되므로 래치획득과정이 없으므로 SGA를 경유하는 것보다 훨씬 빠름

 

PGA영역에 저당된 데이터를 이용하여 빠름으로 소트부하만 감수하면 NL조인보다 유리

 

인덱스유무에 영향을 받지 않음.

 

스캔위주의 액세스방식을 이용 (단, 양쪽 소스 집합에서 정렬 대상 레코드를 찾는 작업은 인덱스를 이용해 Random엑세스 방식으로 처리, 이때 액세스량이 많다면, 소트머지 이점이 사라질수 있음)

 

대부분 해시조인인 보다 느린 성능을 보이나, 아래와 같은 상황에서는 소트머지 조인이 유용.
  - First테이블에 소트연산을 대체할 인덱스가 있을때
  - 조인할 First 집합이 이미 정렬되어 있을때
  - 조인 조건식이 등치(=)조건이 아닐때

 


3. Hash Join


해시조인은 소트머지조인과 NL조인의 효과적이지 못한 상황에 대한 대안으로서 개발됨

 

둘 중 작은 집합을 읽어 Hash Area에 해시 테이블을 생성하고, 반대쪽 큰 집합을 읽어 해시 테이블을 탐색하면서 조인하는 방식

 

성능을 좌우하는 요소
  - 한쪽테이블이 Hash Area에 담길 정도로 충분히 작아야 함
  - Build Input 해시키 컬럼에 중복값이 거의 없어야 함

 

언제 사용하면 효과적인가?
  - 조인 컬럼에 적당한 인덱스가 없어 NL조인이 비효율적일때
  - 조인 컬럼에 인덱스가 있더라도 NL조인 드라이빙에서 Inner로 조인액세스량이 많아 Random 액세스 부하가 심할때
  - 소트머지조인하기에는 두테이블의 소트부하가 심할때
  - 수행빈도가 낮고 쿼리수행이 오래걸리는 대용량 테이블을 조인할때

 

해시테이블은 단 하나의 쿼리를 위해 생성하고 조인이 끝나면 바로 소멸하는 자료구조이므로, 수행빈도가 높은 쿼리애서 사용하면 CPU와 메모리 사욜률을 크게 증가시키고, 래치 경합이 발생하여 시스템 동시성을 떨어뜨림

그러므로 수행빈도가 낮고, 쿼리수행시간이 오래걸리는, 대용량 테이블을 조인할때 주로 사용해야한다.

 

 

 

타 사이트 Join 정리 내용

 

>> http://blog.naver.com/toyoui46?Redirect=Log&logNo=120144288851

 

>> http://blog.naver.com/taiha/10076692782

 

 

2013. 3. 25. 13:09

[Oracle] PK 수정

1.해당하는 PK를 삭제한다.
    ALTER TABLE TABLE명 DROP CONSTRAINT PK명;

 

2.변경하고자 하는 COLUMN으로 Unique Index를 생성한다.
    CREATE UNIQUE INDEX PK명 ON TABLE명(COLUMN명) TABLESPACE TABLESPACE명;

 

3.PK에 속성을 추가한다.
    ALTER TABLE TABLE명 ADD CONSTRAINT PK명 PRIMARY KEY(COLUMN명);

 

 

>>
ALTER TABLE TEMP_TAB DROP CONSTRAINT TEMP_TAB_PK;

 

CREATE UNIQUE INDEX TEMP_TAB_PK ON TEMP_TAB(COLUMN1, COLUMN2, COLUMN3);

 

ALTER TABLE TEMP_TAB ADD CONSTRAINT TEMP_TAB_PK PRIMARY KEY(COLUMN1, COLUMN2, COLUMN3);

 

 

2013. 3. 19. 11:45

[MSSQL] 개발자를 위한 MS SQL Server 성능 조정 및 최적화

개발자를 위한 MS SQL Server 성능 조정 및 최적화, 제 1부: 성능 문제 개요


http://www.microsoft.com/korea/TechNet/sql/Technote/dat410ef.mspx

 

 

개발자를 위한 MS SQL Server 성능 조정 및 최적화, 제 2부: 쿼리 최적화 프로그램


http://www.microsoft.com/korea/TechNet/sql/Technote/dat411.mspx


 

'Database / Sql' 카테고리의 다른 글

[Oracle] Nested Loops, Sort Merge, Hash  (0) 2013.03.25
[Oracle] PK 수정  (0) 2013.03.25
[MSSQL] 전체 백업 유지관리 계획 만들기  (4) 2013.03.19
[MSSQL] LOCK 확인 및 처리 방법  (0) 2013.03.05
[Oracle] ROLLUP, GROUPING SETS  (0) 2013.02.13
2013. 3. 19. 11:33

[MSSQL] 전체 백업 유지관리 계획 만들기

MSSQL 2008 자동백업

 

http://blog.naver.com/nzeluki?Redirect=Log&logNo=10144576240

 

 

[출처] mssql 2008 전체 백업 유지관리 계획 만들기|작성자 nzeluki

 

 

2013. 3. 5. 14:48

[MSSQL] LOCK 확인 및 처리 방법

SP_LOCK 이라는 저장프로시저를 통해 MSSQL Server Management Studio 에서 EXEC SP_LOCK 을 실행한다.

 

필요한건 Mode 와 spid 인데, Mode가 X로 표시된게 Lock이 걸린 세션이며, spid 값을 통해 처리가 가능하다.

 

세션을 강제 종료시키는 방법은 KILL spid 이지만,

 

또 발생시킬수 있을수 있으니 누가 소유자 인지 확인을 하고 종료를 시켜야 한다.

 

EXEC SP_WHO2 spid 로 누가 소유자 인지 확인하고,

 

DBCC INPUTBUFFER(spid) <-- 어떤 쿼리가 LOCK 걸리게 하였는지 확인할수 있다.

 

이와 같이 입력하여 EVENTINFO 를 확인해 본다.

 

SP_LOCK  을 통해 LOCK 된 세션이 있는지도 확인해본다.

 

 

2013. 2. 13. 09:20

[Oracle] ROLLUP, GROUPING SETS

** ROLLUP

 

- 그룹조건에 따라 전체 행을 그룹화하고, 각 그룹에 대한 부분합을 구하는 연산자

 

- ROLLUP절에는 255개의 컬럼까지 가능

 

- ROLLUP절에 컬럼의 개수가 n개이면 그룹핑 조합은 n + 1개

 

 

** GROUPING SETS

 

- 동일한 퀴리에 대해서 다양한 그룹핑을 정의 가능

 

- 개별로 그룹핑하여 UNION ALL한 경우와 동일하나, 성능적인 면에서 뛰어남

 

 

SQL >

 SELECT JBDATE, BAYONG, SUM(CHARGE) CHARGE
   FROM INVCON
  WHERE JBDATE BETWEEN '2013-02-04' AND '2013-02-06'
    AND BAYONG IN ('BS01','BS03')
GROUP BY ROLLUP (JBDATE, BAYONG);

 

 

SQL >

 SELECT JBDATE, BAYONG, SUM(CHARGE) CHARGE
   FROM INVCON
  WHERE JBDATE BETWEEN '2013-02-04' AND '2013-02-06'
    AND BAYONG IN ('BS01','BS03')
  GROUP BY GROUPING SETS ((JBDATE, BAYONG), (JBDATE), ());

 

 

>> 동일한 결과 나옴

JBDATE     BAYO     CHARGE
---------- ---- ----------
2013-02-04 BS01      90508
2013-02-04 BS03     559711
2013-02-04            650219
2013-02-05 BS01     176733
2013-02-05 BS03     533863
2013-02-05            710596
2013-02-06 BS01      93938
2013-02-06 BS03     371616
2013-02-06            465554
                          1826369

 

 

SQL >

 SELECT JBDATE, BAYONG, SUM(CHARGE) CHARGE
   FROM INVCON
  WHERE JBDATE BETWEEN '2013-02-04' AND '2013-02-06'
    AND BAYONG IN ('BS01','BS03')
  GROUP BY GROUPING SETS ((JBDATE, BAYONG),());

 

 

>> JBDATE의 그룹핑은 제외

JBDATE     BAYO     CHARGE
---------- ---- ----------
2013-02-04 BS01      90508
2013-02-04 BS03     559711
2013-02-05 BS01     176733
2013-02-05 BS03     533863
2013-02-06 BS01      93938
2013-02-06 BS03     371616
                          1826369

 

 

2013. 2. 8. 10:47

[Oracle] Session Timeout

SQL> SELECT PROFILE, LIMIT FROM DBA_PROFILES WHERE RESOURCE_NAME = 'IDLE_TIME';

PROFILE                        LIMIT
------------------------------ ----------------------------------------
DEFAULT                        UNLIMITED

 

 

SQL> SELECT PROFILE FROM DBA_USERS WHERE USERNAME = USER;

PROFILE
------------------------------
DEFAULT

 

 

sqlnet.ora에도 timeout 설정하는 부분 있습니다. 그건 network단으로 idle time 조정하는 것입니다.


sqlnet.expire_time = 3   (단위 : 분)

 

 

'Database / Sql' 카테고리의 다른 글

[MSSQL] LOCK 확인 및 처리 방법  (0) 2013.03.05
[Oracle] ROLLUP, GROUPING SETS  (0) 2013.02.13
[Oracle] 테이블 하나만 복원하기  (0) 2013.02.07
[Oracle] SID와 Service Name의 차이  (0) 2013.01.25
[Oracle] ROWID 구성  (0) 2013.01.03
2013. 2. 7. 11:35

[Oracle] 테이블 하나만 복원하기

imp userid/userpass file = data_bak.dmp fromuser = kice tables = (PRGVER)

=> imp 유저아이디/패스워드 file = 덤프파일이름 fromuser = 덤프테이블유저이름 tables = ( 필요한테이블 여러개일때에는 , 로 )

 

복원할 테이블은 삭제해두어야 한다. 그렇지 않으면 이미 있는 객체라고 해서 오류 발생.

 

임시테이블 하나 만들어 놓고 복원할 테이블 DROP.

 

CREATE TABLE PRGVER_T AS ( SELECT * FROM PRGVER );

 

DROP TABLE PRGVER;

 

 

'Database / Sql' 카테고리의 다른 글

[Oracle] ROLLUP, GROUPING SETS  (0) 2013.02.13
[Oracle] Session Timeout  (0) 2013.02.08
[Oracle] SID와 Service Name의 차이  (0) 2013.01.25
[Oracle] ROWID 구성  (0) 2013.01.03
클러스터인덱스와 비클러스터인덱스 차이  (0) 2013.01.03