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 된 세션이 있는지도 확인해본다.

 

 

2012. 11. 23. 13:44

[MS-SQL] JOIN UPDATE / DELETE

[예제] JOIN UPDATE

 

UPDATE TABLE_MAIN
      SET TABLE_MAIN.REGUSR = '쫑'
   FROM TABLE_JOIN
 WHERE TABLE_JOIN.SEQNUM = TABLE_MAIN.SEQNUM
     AND TABLE_JOIN.PROGBN = 'Y'

 

 

[예제] JOIN DELETE

 

DELETE TABLE_MAIN
   FROM TABLE_JOIN
 WHERE TABLE_JOIN.SEQNUM = TABLE_MAIN.SEQNUM
     AND TABLE_JOIN.PROGBN = 'Y'

 


조인을 이용한 UPDATE/DELETE 구문의 FROM 절 이후는 똑같다.

2012. 11. 8. 14:39

[MS-SQL] 날짜 차이 계산

DATEDIFF 함수

 

입력받은 두 날짜 또는 시간이 얼마나 차이가 나는지 계산

 

OPTION : DD(일), HH(시), MI(분), SS(초), MS(밀리초)

 

 

[예제]

 

SELECT DATEDIFF( DD, '2012-11-06 11:34', GETDATE())
→ 2

 

SELECT DATEDIFF( HH , '2012-11-07 11:30', '2012-11-08 14:44')
→ 27

 

SELECT DATEDIFF( MI , '2012-11-07 11:30', '2012-11-08 14:44')
→ 1634

 

SELECT DATEDIFF( HH, '11:30', '14:44')
→ 3

 

 

2012. 6. 12. 18:15

[MS-SQL] AUTO COMMIT 해제 방법

MS-SQL SERVER 2005

 

도구 > 옵션 > 쿼리 실행 > SQL SERVER > ANSISET IMPLICIT_TRANSACTIONS

 

체크 후 COMMIT / ROLLBACK 가능하다.

 

단, COMMIT / ROLLBACK 실행 이전까지 테이블 락이 잡혀서 외부에서 사용이 불가능하다.

 


TIP >>

 

오라클의 경우 UPDATE, DELETE, INSERT 문을 실행하고 COMMIT, ROLLBACK를 지정할수가 있다.

 

오라클 초기 설치시 자동으로 COMMIT 을 하지 않기 때문이다.
 

이에 비해 MS-SQL은 자동 COMMIT 을 한다.
 
COMMIT 실행하지 않아도 자동으로 시스템에서 COMMIT 을 하기 때문이다.

(물론 설정을 바꿀수는 있지만 그렇게 사용하는 사람은 많지 않을 것이다. )


ROLLBACK 을 할수 있는 경우는


BEGIN TRAN

  UPDATE ....


위에 예처럼 BEGIN TRAN를 사용하여 UPDATE, DELETE, INSERT 한 후,

 

데이터가 이상이 없으면 COMMIT, 이상이 있는 경우 ROLLBACK을 하면 된다.

 

항상 DELETE, UPDATE 시 BEGIN TRAN을 사용하는 것을 권장한다.

 

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

[Oracle] Windows 64bit 오라클 Client 설치  (0) 2012.07.11
[Oracle] Toad vs Oracle Product Release History  (0) 2012.06.19
[Oracle] User 권한 보기  (0) 2012.03.27
[Oracle] DATA DICTIONARY VIEW  (0) 2012.02.29
[Oracle] DBA_USER 확인  (0) 2012.02.23
2011. 12. 14. 11:16

[MS-SQL] CONVERT를 이용한 날짜 형식 변경

기준시간 : 2011-12-14 13:07:49


SELECT CONVERT(VARCHAR, GETDATE(),   1) '  1'  ->  12/14/11
SELECT CONVERT(VARCHAR, GETDATE(),   2) '  2'  ->  11.12.14
SELECT CONVERT(VARCHAR, GETDATE(),   3) '  3'  ->  14/12/11
SELECT CONVERT(VARCHAR, GETDATE(),   4) '  4'  ->  14.12.11
SELECT CONVERT(VARCHAR, GETDATE(),   5) '  5'  ->  14-12-11
SELECT CONVERT(VARCHAR, GETDATE(),   8) '  8'  ->  13:07:49
SELECT CONVERT(VARCHAR, GETDATE(),   9) '  9'  ->  12 14 2011  1:07:49:520PM
SELECT CONVERT(VARCHAR, GETDATE(),  13) ' 13'  ->  14 12 2011 13:07:49:520
SELECT CONVERT(VARCHAR, GETDATE(),  14) ' 14'  ->  13:07:49:520
SELECT CONVERT(VARCHAR, GETDATE(),  20) ' 20'  ->  2011-12-14 13:07:49
SELECT CONVERT(VARCHAR, GETDATE(),  21) ' 21'  ->  2011-12-14 13:07:49.520
SELECT CONVERT(VARCHAR, GETDATE(),  22) ' 22'  ->  12/14/11  1:07:49 PM
SELECT CONVERT(VARCHAR, GETDATE(),  23) ' 23'  ->  2011-12-14
SELECT CONVERT(VARCHAR, GETDATE(),  25) ' 25'  ->  2011-12-14 13:07:49.520
SELECT CONVERT(VARCHAR, GETDATE(), 101) '101'  ->  12/14/2011
SELECT CONVERT(VARCHAR, GETDATE(), 102) '102'  ->  2011.12.14
SELECT CONVERT(VARCHAR, GETDATE(), 103) '103'  ->  14/12/2011
SELECT CONVERT(VARCHAR, GETDATE(), 104) '104'  ->  14.12.2011
SELECT CONVERT(VARCHAR, GETDATE(), 105) '105'  ->  14-12-2011
SELECT CONVERT(VARCHAR, GETDATE(), 111) '111'  ->  2011/12/14
SELECT CONVERT(VARCHAR, GETDATE(), 112) '112'  ->  20111214
SELECT CONVERT(VARCHAR, GETDATE(), 120) '120'  ->  2011-12-14 13:07:49
SELECT CONVERT(VARCHAR, GETDATE(), 121) '121'  ->  2011-12-14 13:07:49.520

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

[Oracle] 쿼리문 처리 과정  (0) 2012.02.16
[Oracle] USER_SOURCE  (0) 2011.12.27
[Oracle] 오라클 버전 확인  (0) 2011.11.16
[Oracle] ORA-01476 : 제수가 0  (0) 2011.11.16
[Oracle] RANK() 함수 Sample  (0) 2011.11.15
2010. 11. 30. 20:38

[MSSQL] 날짜 함수

SELECT DATEADD(MM, +1, '2010-08-08')

           , CONVERT(CHAR, DATEADD(MM, +1, '2010-08-08'), 23)

           , SUBSTRING(CONVERT(CHAR, DATEADD(MM, +1, '2010-08-08'), 23), 1, 7)+'-01'

           , GETDATE()

           , CONVERT(CHAR(10), GETDATE(), 121)

           , DATEDIFF(DD, SUBSTRING(CONVERT(CHAR, DATEADD(MM, +1, '2010-08-08'), 23), 1, 7)
              +'-01', CONVERT(CHAR(10), GETDATE(), 121))

           , DATEDIFF(DD, CONVERT(CHAR(10), GETDATE(), 121), SUBSTRING
           
(CONVERT(CHAR, DATEADD(MM, +1, '2010-08-08'), 23), 1, 7)+'-01')


결과  >>>

2010-09-08 00:00:00.000
2010-09-08                   
2010-09-01
2010-11-30 20:19:45.530
2010-11-30
90
-90

2010. 10. 20. 18:31

[MSSQL] 테이블 복사

select * into [생성될 테이블명] from [원본테이블명]


select * into [생성될 테이블명] from [원본테이블명] where'1'='2' ;
(데이터 없이 테이블 구조만 복사)

select * into [생성될 테이블명] from [원본테이블명] where'1'='1 ;
(데이터까지 복사)

단, 제약조건이나 Identity 정보는 복사되지 않는다.

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

[MSSQL] 날짜 함수  (0) 2010.11.30
[Oracle] 9i 이상에서 컬럼명 변경  (0) 2010.11.11
[Oracle] 다른 테이블 조인해서 UPDATE 하기  (0) 2010.09.05
[Oracle] TOAD 기본 단축키  (0) 2010.08.05
[Oracle] PL/SQL  (0) 2010.06.29