2004/02/26

Exchange 2003을 설치후 DC 서버종료시간이 길어지는 현상

Exchange는 AD환경에 아주 밀접하게 관련되어 있으며, 여러가지 AD 커뮤니케이션을 위해 여러가지 서비스를 제공합니다.

이런 서비스중 DSAccess 서비스 같은것은 여러가지 Exchange 컴포넌트를 위해 AD로부터 관련 케시정보를 제공합니다.

Information Store,MTA,그리고 AD환경에 필요한 다른 컴포넌트들도 이에 포함됩니다. 케시된 AD정보를 복원하기 위해 Exchange는 DC로부터 몇몇 직접적인 쿼리를 요구하기도 합니다.

Windows Server 2003 DC를 종료할때, 여러가지 서비스가 Windows 2000보다 빨리 종료되며, 이것은 Windows 20003에서 새로운 문제를 유발합니다.

예로 LSASS(로컬보안하위시스템)같은 서비스에는 DSAccess 와 아주 밀접하게 연관되어 있습니다. DSAccess를 확실하게 종료하기전에 이와 같은 서비스는 먼저 종료됩니다.

그래서 DSAccess서비스는 몇분동안 시스템이 종료되기까지 기달립니다.(기본으로 10분). 또한 Exchange의 다른 서비스들은 이런 현상때문에 사소한 문제가 있을수 있습니다.

1. 이와 같은 문제를 해결하기 위해서는 시스템 종료시 종료 스크립트를 만들어 실행하면 됩니다. 시스템셧다운시 다음과 같은 순서대로 종료시 Exchange 관련 서비스는 깔끔하게 종료할수 있습니다.
순서는 Exchange관련 서비스를 먼저 종료후, 나머지 관련 서비스를 종료하는 것입니다.

net stop msexchangeis
net stop msexchangemta
net stop msexchangemgmt
net stop msexchangesa
net stop resvc
net stop smtpsvc
net stop w3svc
net stop httpfilter
net stop http
net stop iisadmin
net stop winhttpautoproxysvc

2. 이 문제 해결에 대한 다른 접근 방법은 레지스트리 값을 수정하는 것입니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control 의 서브키중 WaitToKillServiceTimeout 의 값을 default 10분에서 20초(20000) 로 변경을 하면 됩니다.

이 값은 해당 서비스나 프로세스 스스로 종료을 하지 못하거나 delay가 발생할때, OS에서 강제적으로 delay가 걸리는 서비스를 종료하는 것입니다.




26-TechNetB_masthead_ltr.gif

2004/02/19

Blocking 과 Dead-Lock에 대하여..

하나의 프로세스가 Table, Page 등에 대한 Lock을 붙들고 있어서 다른 프로세스가 오랜시간 계속하여 대기하고 있는 상태를 Blocking이라 하고, 두개의 프로세스가 서로 다른 프로세스가 잡고 있는 Table,Page Lock을 무한정 기다리고 있는 상태를 Dead Lock이라 한다. 이 Blocking과 Dead Lock은 DB Design 이나 응용프로그램을 잘못 작성한 경우에 발생할 수 있다.

Blocking이 발생하면 Application의 실행 속도가 현격히 저하되고, 심한 경우에는 클라이언트 입장에서 Hangup이 걸리는 경우가 있다. 즉, 한 사용자가 계속 자원을 사용하기 때문에 다른 사용자들이 무한정이 Waiting 상태가 되는 것이다. 이런 경우 다음과 같이 어떤 프로세스가 Blocking 을 하고 있는지 알아낼 수 있다.

SQL쿼리분석기에서 sp_who / sp_lock 프로시져를 통해서 어떤 프로세스에서 lock 상태인지 확인이 가능합니다. 물론 EM에서도 "잠금" 에서 확인이 가능하며 해당 프로세스를 종료시킬수도 있습니다.

[명령] Sp_who 
[결과] Spid  status  giname   hostname  blk   dbname 10  sleeping  sale1                                         
0       SALEDB 12    sleeping  sale1                                        
10      SALEDB 13    sleeping  sale1                                        
12      SALEDB 

[분석] 위의 경우는 spid 10번에 해당하는 유저가 12번,13번에 대해 Blocking을 걸고 있는 경우이다. 일시적으로 이러한 Blocking현상은 발생할 수 있지만 만약 한 유저가 수십명에 대해 Blocking을 잡고 있으면, 클라이언트는 Hangup이 된 것처럼 느끼게 될 것이다.

이런 경우 해당 유저가 사용하는 프로그램을 검토해 볼 필요가 있으며, Locking을 줄이며 트랜잭션의 길이가 짧도록 수정할 필요가 있다. 만약 위의 경우 10번 프로세스를 죽이기 위해서는 다음 명령을 사용할 수 있다 : KILL 10 또한 Sp_lock을 사용하면 어떤 Table, page에 대해 어떤 Locking이 걸려 있는지 찾아볼 수 있다.

Dead Lock의 경우는 SQL Server에서 자동으로 하나의 프로세스를 Kill함으로 인해 Dead lock을 풀어주게 된다. Kill되는 프로세스를 Victim이라고 하며 이것은 Log에 기록되게 된다. Dead Lock이 발견된 경우는 해당 프로그램을 즉시 수정할 필요가 있다.

모니터링은 Windows 퍼포먼스 모니터나, SNMP를 이용하는 툴에서 하는게 좋지 않을까..합니다. 퍼포먼스 모니터등은 순간적으로 lock을 걸린후 트랜잭션 종료후 lock이 풀리기 때문에 퍼포먼스 모니터에서는 계속해서 값이 체크되니 혼동하지 마세요..

lock이나, blocking 해결은 처음부터 lock이나 blocking이 발생하지 않도록 쿼리점검을 확실하게 하는거와 더불어 트랜잭션을 최대한 짧게 설정하는것이지만, 일단 발생한 것에 대해서는 해당 프로세스를 죽이거나, 다음번 lock 발생시 시간제한을 통해서 종료 하는 설정을 해주는 것도 좋다.

SELECT @@LOCK_TIMEOUT

결과값이 -1 은 default값이며 제한(무기한 대기)이 없다.

SET LOCK_TIMEOUT 1800
(밀리초 이므로 3분)

이 설정은 해당 트랜잭션을 종료시키지 않고, 오류메시지를 반환하므로 응용프로그램에서 이오류에 대한 예외처리를 꼭 해줘야 합니다.

출처 : 데브피아


2004/02/11

ADSI & WMI Scripts 생성툴

다음 2개의 툴은 MS에서 제공하는 툴로 ADSI 및 WMI관련 개체 클레스 및 Attributes 를 자동으로 스크립팅 코드를 생성해 주는 툴입니다.

해당 개체를 정확히 알지 못해도 쉽게 생성을 해주며, 해당 샘플코드를 이용하실수 있습니다.

참 좋은 툴인듯..... ADSI Scriptomatic : 다운로드


The Scriptomatic Tool
: 다운로드




10-ADSI_Scriptomatic.gif
10-Scriptomatic_Tool.gif

2004/02/05

Exchange Server 2000 일일점검 사항

Exchange Server 를 운영한다면 다음과 같은 사항은 매일 점검해야 한다.
점검 방법은 직접 로그온해 체크하는 방법과, 스트립크를 이용해서 점검하는등 재주것 하면된다..

1. 백업이벤트 검사
-> Exchage Information Sotre 백업은 Ntbackup툴을 이용해서 백업합니다. 백업이 정상적으로 잘되고 있는지 체크해야 합니다. 정기적으로 백업서버에 resotre를 해서 백업이 정상적으로 된건지와, 복원에 문제가 없는지 체크해야 합니다.

2. 이벤트로그 검사
-> 이벤트로그는 시스템 자체 이벤트로그를 점검하고, AD 및 Exchange관련 로그를 점검해야 합니다.

3. 파티션 검사
-> 해당 파티션별로 디스크 사용량을 체크합니다.

4. 바이러스 백신 업데이트 점검
-> 윈도우계열 메일서버에는 필히 안티 바이러스 서버를 설치해야 합니다. 그래야 웜바이러스 같은 바이러스가 창궐할때 시스템을 효과적으로 보호할수 있습니다.

5. 큐검사
-> 일반적으로 2~3만통 정도는 큐에 파일 생성에 약 1~2시간정도 걸리고, 보내는데는 Exchange 설정에 다르겠지만 약 30~1시간에는 모두 발송됩니다.. 그런데 지속적으로 큐메 많은 메일이 쌓여 있다면 Exchagne에 문제가 없는지와, relay를 당하고 있지는 않는지 꼭 점검해야 합니다.

6. NDR검사
->nondelivery report로 메일발송 실패 파일시 생성되는 report파일입니다. 대부분 이메일 주소가 틀리거나, 없거나 또는 받는쪽 서버문제나 네트웍문제가 대부분입니다.

7. 하드웨어 검사
-> 운영하지 오래된 하드워에 일경우는 매일매일 점검해야 합니다. 특히, 단일 하드로 운영하는 서버의 하드디스크가 날라갈경우 골치 아픕니다.. 딴건 바로 교체를 하면 되지만..

8. store.exe 체크
-> 특정 시스템의 경우 store.exe가 비정상적으로 커지는 경우가 있습니다.

이외에도 점검사항은 많습니다...


2004/02/04

2003 & XP에서 그룹정책을 바로 적용할려면.?

윈도우 2000 에서는 Group Policy 를 적용할려면 다음과 같이 했습니다.

secedit /refreshpolicy


그러나, Windows Server 2003 과 XP에서는 gpupdate 를 이용하면 됩니다.

C:\>gpupdate
정책을 새로 고치는 중...

사용자 정책 새로 고침이 완료되었습니다.
컴퓨터 정책 새로 고침이 완료되었습니다.

정책 처리에서 오류를 검사하려면 이벤트 로그를 확인하십시오.


만일 유저나, 컴퓨터에 등 한정된 특정 개체에만 적용할경우는 다음과 같습니다.

gpupdate /target:user
gpupdate /target:computer

옵션값으로는 다음과 같은게 있네요...
/force : 강제 바로 적용....
/wait:시간 :적용하기전 delay시간
/logoff :로그오프시 적용
/boot :부트시 적용
/sync :이건, 다음 리붓이나 로그온시 동기화 하는거..

2004/02/03

2003에서 계정추가 Command Line 툴 - dsadd.exe

Windows Server 2003에서는 ds 관리툴을 새롭게 제공합니다.
ds 명령어는 디렉토리에 특정 개체 유형을 추가할수 있습니다.

추가 가능한 개체:
dsadd computer - 디렉터리에 컴퓨터를 추가합니다.
dsadd contact - 디렉터리에 연락처를 추가합니다.
dsadd group - 디렉터리에 그룹을 추가합니다.
dsadd ou - 디렉터리에 조직 구성 단위를 추가합니다.
dsadd user - 디렉터리에 사용자를 추가합니다.
dsadd quota - 디렉터리 파티션에 할당량 지정을 추가합니다.


다음은 계정을 추가하는 example입니다.
C:\>dsadd user CN=wjkim,OU=Clients,DC=serverinfo,DC=pe,DC=kr -samid wjkim -pwd 1234@dd$rfg


다음과 같은 메시지가 출력됩니다.
dsadd 성공:CN=wjkim,OU=Clients,DC=howtowindows,DC=com



피라미터에는
-email samle@serverinfo.pe.kr
-webpg http://www.serverinfo.pe.kr
-pwdneverexpires yes (-패스워드 이용기간 제한없음)
-memberof "CN=Users,DC=serverinfo,DC=pe,DC=kr"


ds명령어는 이외에도 다음과 같은 기능이 있습니다:
dsadd - 개체 추가
dsget - 개체 표시
dsmod - 개체 수정
dsmove - 개체 이동
dsquery - 검색 조건에 해당되는 개체 찾기
dsrm - 개체 삭제

*만약 개체가 여러개일경우 list파일 목록을 만들어서 loop를 돌면서 추가가 가능한 배치파일이나 vbscript를 만들어서 일괄작업이 가능하겠죠...


02-dsadd.gif

가장 많이 본 글