Search Results for '프로그래밍/윈도우 & MS-SQL'


128 posts related to '프로그래밍/윈도우 & MS-SQL'

  1. 2009/09/02 윈도우 호스팅 서버 셋팅 주요 사항 1
  2. 2009/08/28 Microsoft Office Outlook 2003 첨부파일 제한기능 제거하기
  3. 2009/08/27 Server 2008 인증 없애기
  4. 2009/08/27 원격서버 테미널 끊기및 로그 오프
  5. 2009/08/27 윈도우 원격접속 자동 접속끊김 현상.
  6. 2009/08/27 웹 서버별 웹로그 양식(기본)
  7. 2009/08/27 FINDSTR 사용법
  8. 2009/08/26 XP 터미널 서비스 여러명 사용
  9. 2009/08/26 다중 원격 접속 도구 mRemote - RDP, VNC, SSH, Telnet 등
  10. 2009/08/26 RD Tabs - 다중 탭 지원 터미널 서비스 클라이언트
  11. 2009/08/26 MSSQL 조작 도구 - Microsoft SQL Server Management Studio Express
  12. 2009/08/26 저장프로시져(Stored Procedures) 및 함수(Functions)의 파라미터 조회
  13. 2009/08/25 WMI를 이용한 MRTG
  14. 2009/08/25 FastCgi 에서 PHP 폴더의 실행 권한
  15. 2009/08/25 IIS 7.5 (Windows Server 2008 R2) 에서 FastCgi 성능 향상
  16. 2009/08/25 IIS 7, 모듈(Module) 관련 문서 모음
  17. 2009/08/25 SQL Server 2000 - 나만의 노하우 & Tip
  18. 2009/08/25 비정상적으로 분리된 .mdf 파일만 있는 데이터 베이스 복구
  19. 2009/08/25 Windows Web Server 2008 에서 SQL Server 2005 설치 제한 해제 패치(Hotfix)
  20. 2009/08/25 SQL Server Database File I/O Report
  21. 2009/08/25 저장프로시져(Stored Procedures) 및 함수(Functions)의 파라미터 조회
  22. 2009/08/25 Windows Server 2003에서 DNS 서버에 새 영역 만들기
  23. 2009/08/25 IIS 6 에서 ASP 에서 대용량 파일을 업로드시 403 오류 - KB327659
  24. 2009/08/25 https://<sitename> 사이트를 열 수 없습니다. SSL 인증서 오류 - KB239449
  25. 2009/08/25 IIS에서 CGI 응용 프로그램을 실행시 "액세스가 거부되었습니다." 메시지 - KB160422
  26. 2009/08/25 IIS FTP(파일 전송 프로토콜) 서비스에 대한 정보
  27. 2009/08/25 adsutil.vbs 를 이용한, IIS SMTP 서비스 메일 디렉토리 변경
  28. 2009/08/25 IIS 7, URL Rewrite Module (URL 재작성 모듈)
  29. 2009/08/17 전화번호(국선/핸드폰) 붙여 있는거 중간에
  30. 2009/08/17 쿼리를 병렬로 수행하기위한 JOB
-서버 설정:
Windows 서버 세팅

[1] 파티션

시스템파티션(NTFS, 4~5G정도 하드크기에 따라 책정) + DATA파티션(NTFS) + 페이징파일파티션(FAT32, ram파일크기의 2~3배정도) 페이징 파일을 옮겨 줘야 한다구 하네요…



라이센스 서버단위, 동시연결개수 <- 기본값

사용자단위



네트워크 환경 등록정보, 네트워크용 파일 및 프린터 공유 등록정보에서 네트워크 응용 프로그램을 위해 데이트 처리량 최대화 체크(웹서버+db서버사용시…)



페이징 파일 수정/삭제/추가 방법

내컴퓨터 등록정보 – 고급 – 성능옵션 – 가상메모리 – 변경 버튼 클릭후 설정



*참고

내컴퓨터 등록정보 – 고급 – 시작및복구에서,

디버깅 정보 쓰기를 없음으로 해주면,

보안과 성능에 향상을 줄수 있음.

**참고

초기 설치후 WORKGROUP으로 되어 있는 작업그룹을 독립적인 그룹으로 만들어준다.

- 도메인을 이용해서 설정해주면 편리할 듯.



[2] 서비스팩 & 핫픽스

SP2, SRP1, Q314147(snmp), Q313829(windows shell), Q319733(IIS누적형패치),

Sql SP2, Sql sp2이후 보안 release패치(버전 800_608)

Internet Explorer의 windows update를 이용해서 패치적용



[3] .Net사용시(한글버전)

닷넷 설치, SP1, Q322301(asp.net 버퍼오버플로우)



[4] 필요한 서비스만 구동(일반적으로 서버 세팅후 적용된 서비스에서)

다음의 서비스 필요없을경우 사용안함으로 설정(SP2설치후 적용할 것)

Alerter, Computer Browser, DHCP Client & Server, Distributed File System, Distributesd Link Tracking Client & Server, DNS Client & Server, Intersite Messaging, Print Spooler, Remote Registry Service, RunAs Service, TCP/IP NetBIOS Helper Service, Telnet, Windows Media Service 4가지 등~



[5] 다음의 서비스를 특정계정으로(시스템계정이 아닌) 시작하도록 할 것.

MSSQLSERVER, SQLSERVERAGENT : 예를들어 sql_starter와 같이 계정(admin그룹에 포함시킴)을 하나 만들어서 이 계정으로 시작하도록 설정을 한다.

- 차후 패스워드나 계정 변경이 있을시 반드시 서비스에서 재설정 해줄 것



[6] 보안관련 몇가지 처리

* NetBIOS 서비스 제거 : Network등록정보중 Wins에서 설정

* 서버 목적에 따른 서버 최적화 : 일반적인 웹서버의 경우 Network 등록정보에서 à Microsoft 네트워크용 파일 및 프린터 à 네트워크 응용프로그램을 위해 데이터 처리량 최대화로 설정

* 성능옵션 및 가상메모리 설정 – 다른 물리적인 디스크나 시스템 파티션에서 분리시킨다. à  시스템 파티션에서 페이지파일 제거시 차후 메모리덤프 파일 생성이 안됨. 따라서, 시스템 등록정보의 고급텝에서 디버깅 정보 쓰기를 없음으로 할 것.

* $공유 즉, hidden 공유 제거

à 레지스트리 수정하면 됨

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters
Find the value named AutoShareServer and change the DWORD value to 0 (zero)



[7] Component관련

à       업로드 컴포넌트로 Sitegalexy upload component(1.2버전-win2k에서 잘 호환)사용.

Pds폴더를 www안에 초기세팅시 생성 : 이폴더에만 IUSR_Computename 계정에 쓰기권한을 적용해서 보안고려.



[8] MS-SQL 사용시 Server와 Client간의 버전은 같아야 하는가?

sql7.0 클라이언트 프로그램 사용 고객은 sql2000을 사용하는 서버에 접속시 정상접속이 안될수 있슴. (참고로 반대는 가능)





[9]자동로그온

regedit를 실행,

HK_L_M – Software – Microsoft – Windows NT – Current Version – Winlogon에서,

편집-문자열값을 클릭,

DefaultPassword             REG_SZ                        패스워드입력

AutoAdminLogon             REG_SZ                        1





Windows 2000 Server 웹 호스팅 서비스





< INSTALL >

1]windows 2000 server INSTALL

2]service pack  4 INSTALL

3]MS-SQL 2000 Standard INSTALL

4]sql service pack 3 INSTALL

5]security 관련 HotFix INSTALL

6]mail 관련 – freeware 또는 linux로 mail server만 따로 구축 고려







< 기타설정 >

1]quota 설정 체크 – check à home dir + sql data dir(사용시 추가) 로 설정…

à 가설 : 파티션이 홈페이지와 DB가 분리되어 있어서 따로 파티션당 설정해야할것같음.

à 가설적용 그러나, 아직 미흡한점이 많음.

à DB는 따로 용량이 설정되므로 홈페이지가 있는 파티션에만 quota적용.

2]mount 기능 가능 – directory만든후 mount

3]ftp사이트의 계정으로의 접속 – 포트를 다르게 설정(50000번대 이상으로)

4]IIS Unicode Bug점검 – UBAT 1.7이용 à 이상무

5]전자결재시스템 – 초기 한번만 설치후(Dacom의 경우) 차후 등록만 해주면 됨.

6]NetBIOS 서비스 제거 à Network등록정보중 Wins에서 설정

7]Network등록정보에서 à Microsoft네트워크용파일및프린터 에서 à 적절한 서버최적화 선택 à 네트워크 응용프로그램을 위해 데이터처리량 최대화로 설정

8]성능옵션 및 가상메모리 설정 – 다른 물리적인 디스크로 할당.

   à 시스템 파티션에서 페이지파일 제거시 차후 메모리덤프 파일 생성이 안됨.

9]Media Service설정 à Unicast

  RealServer Service ? à realserver8.0 설치가능(sp1에서 test-install만) à linux(bbs)서버에 세팅되어 있음.

10]사용자 인증 페이지 설정 à Windows 디렉토리 권한과 사용자계정의 권한을 적절히 매치시킨다.

11]db에대한 고객의 권한 – 모든권한 그러나, 백업권한은 없슴…고객이 백업시 DTS이용.

12]ODBC – SQL 서버인증선택 및 MDB파일을 MS-SQL데이터로 변환시

http://tt.co.kr/help/faq/ttboard.cgi?act=view&code=20&bname=NTHOSTFAQ&page=1&search_method=by_content&search_word=MDB

   à OLEDB로 유도

13]스토어드프로시저 및 JSP 지원여부

   à 스토어드 프로시저는 현재 지원

14]모든 백업은 1일 Full백업 – 로그파일 백업은 지원 안함.

à 보관 기간 3일

15]Component관련

à       업로드 컴포넌트로 Sitegalexy upload component(1.2버전-win2k에서 잘 호환)사용.

à       Pds폴더를 www안에 초기세팅시 생성 : 쓰기권한을 이폴더에만 적용해서 보안고려.

16]IIS에서 기본문서 사용순서 : index.asp – index.html – index.htm – default.asp – default.html – default.htm – main.asp – main.html – main.htm

17]mdb파일 사용 금지 à 호스팅 서버에서 동작 시 치명적인 에러를 내는 경우가 많이 있습니다. 따라서 일부 호스팅 업체에서는 MDB 파일의 사용을 금하고 있습니다. 즉 MDB 파일을 사용하신다면 자주 다운되기도 하고 속도도 느리며, 보안상 좋지 않으므로, 보다 안정적이고 속도도 빠른 MS SQL 서버를 사용하기를 권장

à mdb파일의 sql변환

http://tt.co.kr/help/faq/ttboard.cgi?act=view&code=21&bname=NTHOSTFAQ&page=1&search_method=by_content&search_word=MDB

18]server와 client간의 sql버전은 같아야 하는가?

  à 클라이언트 프로그램으로 서버에 접속시 서버가 sql2000이므로 sql2000클라이언트 프로그램을 설치해서 사용. Sql70클라이언트 프로그램으로 정상적으로 접속이 이루어지는지는 테스트해보아야 함.--- check

19]사용자계정의 디렉토리에 홈페이지, 로그등을 따로 설정 고려…

   à logs라는 디렉토리를 만들어 현재 따로 저장(웹, FTP, ODBC로그).

20]성능 로그 및 경고에서 새로운 로그및경고 생성 고려(서버부하고려)…check

21]web및 ftp로그 설정시 최소로 필요한 것만 선택 à 로그경로는 각자 계정으로 설정…

22]$공유 즉, hidden 공유 제거 à 제거시 질문 : 서버리부팅후나 서버서비스 재시작하면 다시 공유활성화됨.

à Server 서비스를 정지하면 그런 문제는 없어짐. 그러나, 다른 문제가 있는지 테스트중

--- 레지스트리 수정으로 이문제 해결했음.

23]ftp, web의 등록정보에서 디렉토리보안을 적절히 이용…

24]요금연체시 퍼미션은 어떻게 막을 것이가?

à 사용자 계정을 사용안함 체크를 하면 ftp등의 접속거부.

à 웹서비스는 중단으로 설정.

25]사용자계정 과 패스워드 백업은?

--- check





< 웹상에서 계정으로 홈페이지 확인 – IP로만 확인가능시 >

1]웹사이트를 만든다.

2]가상디렉토리를 만든다.

à 여기서 기본 웹사이트(wns.kobis.net)에서 가상디렉토리를 모두 생성한다.

3]그 가상디렉토리에 홈페이지의 경로를 준다.

4]웹상에서 확인.

à http://IPAddress/계정







< 보안관련 >

1]초기 administrator의 이름을 바꾼다.

2]HotFix설치 (이부분은 sp4 설치후 window update사용하면 해결될듯 합니다.)

Win2k

285156 : 윈도즈 2000 이벤트뷰어에서 체크안된 버퍼

291845 : IIS 서버에서 서비스를 거부 - 버그는 WebDAV의 결함을 이용한 것

293826 : IIS 4.0/5.0 버그 패치  

295534 :

296576 : msw3prt.dll 파일에서 버퍼 오버플로우가 발견 à IIS에서 msw3prt.dll 부분을 삭제300972(2001/06/12) : IIS 웹 서버의 인덱싱 서비스(Indexing Service) 기능과 연결되는 코드에서 발견  à IIS에서 .idq와 .ida 확장자의 스크립트 매핑 제거



SQL : 80233i_kor 80296i à 2001-05-22



3]IIS에서 보안설정 : .printer삭제 – msw3prt.dll부분





< MS-SQL 2000 서비스 관련 >

1]admin계정인지 sql의 sa계정인지 확인

--> 패스워드 변경시 서비스에서 sql에대한 계정의 패스워드도 함께 바꾸어 주어야 함.

è         아니면 서비스가 제대로 시작되지 않는다.

     à 해결법 : 계정을 추가(sql_starter) – adminstrators그룹에 추가 – 그외그룹은 삭제

                          서비스에서 sql로그온에서 계정지정부분에 새계정(sql_starter)을 추가

                          서비스 재시작…

* 기타 서비스(Media service, …)등도 위와같이 바꿀수 있다… - 이로인한 문제점은 아직 검토중

2]사용자 계정 및 DB 추가 관련


-계정 기본설정:
[1] 계정추가 – 그룹설정(nthosting1:100M, nthosting2:300M, nthosting3:1G)

[2] 디렉토리 생성 (계정명과 동일하게 설정) - kobis계정 참고

à logs, www 생성(이때, kobis폴더안의 세팅완료내역에 관련된 파일 복사)

à pds(fileUpload폴더)생성- 등록정보의 보안탭에서 적절한 계정부여 및 권한설정

IUSR_machinename(읽기,쓰기 권한만), 신청한 계정(읽기, 쓰기 권한까지)@백업삭제?

-          고급 사용권한 메뉴에서 삭제권한도 부여

administrators추가(모든권한)

[3] 생성한 디렉토리의 등록정보의 보안탭에서 적절한 계정부여 및 권한설정

à everyone계정삭제 : ‘부모로부터 상속 가능한 사용권한을 이 개체로 전파할 수 있음’ 체크를 없앤다.

à IUSR_machinename(읽기권한만) , 계정(읽기, 쓰기권한-고급 사용권한 메뉴에서 삭제권한 부여) , administrators추가(모든권한)

[4] ftp 사이트, web 사이트 설정

à ftp : 로그경로설정(각계정의 logs폴더) , 운영자에 각계정 추가(55xxx~5xxxx번대로 끝자리 1 또는 6 – http://kobis.net참고해서 순서대로 부여)@웹데몬이 실행않됨 “네트워크에 중복된 이름이 있습니다.”

à web : 로그경로설정(각계정의 logs폴더) , 등록정보 – 웹사이트 – 고급에서 도메인 추가, wns.kobis.net 사이트의 가상디렉토리 설정(설정시 계정명과 동일하게 설정하되 설정값은 디폴트 값으로 부여) @log파일이 인터넷 등록정보에 있는곳이 아닌 다른곳에….

[5] DNS설정(정방향 조회영역만 설정, 메일 레코드 MX값은 mail 레코드값을 211.47.67.70 부여해서 mail.도메인명. 으로 설정)

[6] 백업설정

à 최종 : 3일간 자동으로 /home 디렉토리 풀백업이 이루어짐.

à db는 데이터베이스 유지관리 설정(제목의 숫자를 참고로 설정하면됨.)

à 일일 확인(F:\Bk_part\bk_home , F:\Bk_part\bk_db_user\각해당폴더)

l       백업을 복원에 사용할 일이 생기면…

à 먼저 백업받은 파일을 더블클릭하면 창이 뜨고 여기서 복원마법사를 이용한다.

à 원하는 디렉토리만 선택후 복원을 하는데, 이때 원한다면 경로를 임의의 경로에다 복원할수 있다. 그리고, 복원시 권한등의 설정을 그대로 가져올수 있도록…

à 참고로 F:\Bk_part\bk_home\Extract를 만들어 두었음.



=================

data\안에 *.mdf와 *.ldf파일 즉, 데이터와 로그파일만이 남아 있을경우 다음과 같이 복원하면 된다.
QA에서,
sp_attach_db '복원할데이터베이스명', 'c:\data\데이터.mdf', 'c:\data\로그.ldf'
하시면 됩니다.
(EX) sql2000에서,
복원할데이터베이스명 : macs
경로 : c:\program files\microsoft sql server\mssql\data\macs_data.mdf
c:\program files\microsoft sql server\mssql\data\macs_log.ldf
sp_attach_db 'macs', 'c:\program files\microsoft sql server\mssql\data\macs_data.mdf ', 'c:\program files\microsoft sql server\mssql\data\macs_log.ldf'

==================

[데이콤전자결재]@

1.       먼저 적당한 위치에 설치를 한다.

2.       TSETUP.zip만 세팅하면 된다.(Dpsvcdll.zip은 컴파일과정 필요)

3.       세팅은 한번만 하면 된다.

4.       서비스를 자동시작 시켜준다.

5.       이제 SetupShop을 실행시켜 서비스 받으려는 고객마다 각각의 상점ID와 상점이름을 등록해주면 된다. (정상적인 메시지인지 확인)

6.       프로그램 삭제시 registry 등록된 것도 지워준다.

- (설치경로의 \bin\DpSvr –remove)

7.       재설치시엔 데이콤에 연락을 취해 초기화를 받는다.



[기타…]

1.       디스크쿼타 확인법

-          D:\드라이브의 등록정보에서 할당량을 선택 – 할당량항목 – Refresh해주면 된다. 기본은 100M기준이니 그 이상 서비스는 수작업으로 ‘할당량 항목’에서 해당 계정을 더블클릭해서 설정하면 됨.

2.       이벤트 뷰어를 통해서 모니터링

-          응용 프로그램, 보안, 시스템 로그를 한번씩 살펴본다.

-          로그가 꽉 찼다고 나오면 해당 로그에서 오른쪽 버튼을 클릭해서 모든 이벤트를 지우기를 한다. 이때, 필요시엔 저장(F:\EtcBackup\EventLog)하고 지운다.

3.       작업관리자도 한번씩 보며 모니터링한다.

-          지속적으로 CPU나 RAM을 소비하는 프로세스는 없는지…

-          보통 sqlservr.exe 와 dllhost.exe 프로세스 하나가 CPU 와 RAM사용하는 것이 대부분…(이와 관련한 서비스를 재시작함으로서 램사용율을 다시 초기화할 수 있다.)

4.       DB가 원격에서 잘 연결되지 않을 때(EM:엔터프라이즈관리자 또는 QA:쿼리에널라이져로 연결시도시) ,

-          클라이언트측에서 프로토콜은 TCP/IP로 되어있는지? (클라이언트 네트워크 유틸리티에서 확인 및 변경 가능)

-          서버는 IP 또는 지정한 도메인(sql.kobis.net)으로 되어있는지? (연결시)

-          엔터프라이즈 매니져(EM)에서 도구-옵션-고급의 로그인제한시간을 20초 정도로 늘여보라고한다.(일반적으로 연결제한 시간초과와 같은 에러메세지가 나왔을경우)

2009/09/02 19:11 2009/09/02 19:11

M$의 Outlook 2003 은 기본적으로 exe,mdb 등의 첨부파일을 사용자가 다운 받을 수 없도록

하고 있습니다. 이전 버전 처럼 UI 에서 해제시키는 것도 없지요.


다음과 같이 레지스트리를 수정하면 다운받을 수 있습니다.


시작- > 실행 -> regedit


[HKEY_CURRENT_USER]->[Software]->[Microsoft]->[Office]->[11.0]->[OutlookSecurity] 로 이동합니다.


마우스 오른쪽 버튼 -> 새로 만들기 -> 문자열


값이름은 Level1Remove 로 합니다. 값데이터는 .exe;.reg;.chm;.bat;.hta;.inf;.js;.hlp;.mdb

를 입력해주신 후 Outlook 2003 을 닫았다 다시 실행하면 끝~ 입니다^^


M$가 사용자 수준을 무시한 행위로 부터 해방되는 거죠^^

2009/08/28 16:14 2009/08/28 16:14
[제품 키 입력 시]

Serial Number을 입력하지 않고 진행

"온라인일 때 자동으로 정품인증" 체크 해제

[Windows Server 2008 설치 완료 후]

SL UI Notification Service를 중지하고, 사용 안 함 상태로 변경

[파일 삭제 가능하도록 변경]

C:WindowsSystem32의

SLLUA.exe
SLUI.exe
SLLUI.ddl

각 파일의 등록정보 > 보안탭 > 고급 > 소유자탭

소유자를 Administrator로 변경

각 파일의 등록정보 > 보안탭 > Administrator 유저 선택

모든 권한 부여

[파일 삭제]

파일을 삭제하거나 이름을 바꾸어 백업


[끝입니다.]

아쉽게도 우측하단에 얼마 지나면 정품이 아닙니다. 메시지가 뜹니다만....

업데이트도 잘 되고 사용에는 아.무.런 지장이 없습니다.

이 방법을 알고 난 후 OEM인증 등의 다른 방법이 한참후에 나왔는데

저는 이 방법으로 잘 사용중입니다.

출처를 밝히고 싶으나 블로그에서 해당 글이 삭제되었네요.


하반기 출시된다는 2008 R2는 7 기반으로 된다던데 그 땐 안통하겠죠.

2009/08/27 12:53 2009/08/27 12:53
reset session
 터미널 서버에서 세션을 다시 설정(삭제)할 수 있도록 합니다.
 reset session {세션이름 | 세션id} [/server:서버이름] [/v]

logoff
 세션에서 사용자를 로그오프시키고 서버에서 세션을 삭제합니다.
 logoff [세션이름 | 세션id] [/server:서버이름] [/v]
 /v : 수행할 동작에 대한 정보를 표시합니다.

tsdiscon
 터미널 서버에서 세션의 연결을 끊습니다.
 tsdiscon [세션id | 세션이름] [/server:서버이름] [/v]


query session (이명령어는 xp는 되지 않더군요 2003에서는 해보질않아서
제가 사용했었던 명령어는 위 3개의 명령어 입니다. 그나마 서버가 2003일경우
에 유용한 명령어입니다.)



일단 net use로 RPC세션 연결이 되어 있어야 합니다.
2009/08/27 11:24 2009/08/27 11:24
윈도우에서 원격접속시도시 연결버튼 누름과 동시에 접속이 끊겨다시 접속버튼을누르게끔되는
현상이 발생하여 원격접속 관련 설정, 포트 확인 권한 모든 부분을 확인하였으나 설정상의 문제가
없음.
이런 현상이 발생하여 한참을 애먹었습니다. 보안정책또한 특이 사항이 없고 참 난감하더군요..
다행히 서버에서 발생한 부분이 아니어서 시간적여유가 좀 있었습니다.
딱히 검색해도 별 문제가 없었구요. 그러다 찾아낸것이 그래픽 카드 드라이버의 문제더군요..
정말이지 생각지도 못한 문제였습니다. 드라이버 업데이트를 진행했더니 바로 되더군요..
기존 드라이버는 장비업체의 기본드라이버였는데...
저같은 문제가 발생하신분들은 한번 그래픽 드라이버 업데이트를 해보시기 바랍니다. 아니면
드라이버 업데이트 후 이런 문제 발생시는 다운그레이드를 해보시는것도 좋겠군요.
2009/08/27 11:24 2009/08/27 11:24
WebToB의 설정파일은 C:\TmaxSoft\JEUS5.0\webserver\config 경로에 있으며 그중 *LOGGING필드는 웹로그기록에 대한 설정이다.


옵션
FileName         - 로그파일의 이름
Format           - 로그기록형식
Option = "sync"  - 로그기록시 메모리 버퍼를 사용하는지, 바로 디스크에 기록하는지 결정
ValiDays = "1"   - 하루단위로 로그를 저장 (Default)
           "0"   - 하나의 파일에 로그를 저장


포멧

Apache와 마찬가지로 WebToB가 지원하는 웹로그포멧은 다음과 같다.

  -NCSA Common Log File Format(CLF)
  -Custom Log File Format

WebtoB웹로그에서는 디폴트로 CLF Format포멧을 준수한다.

설정파일========================================================
*LOGGING
log1
FileName = "C:/TmaxSoft/JEUS5.0/webserver/log/access.log",
Format = "DEFAULT",
Option = "sync"
===============================================================
웹로그 예)
10.10.149.41 - - [08/Apr/2009:10:59:47 +0900] "GET /examples/images/bgColor.gif HTTP/1.1" 304 -



CLF 포멧을 사용하지 않고 임의의 포멧을 만들기 위해서는 Custom Log File Format을 사용해야 한다.


설정파일 예=====================================================
*LOGGING
log1
FileName = "C:/TmaxSoft/JEUS5.0/webserver/log/access.log",  
Format = "%h %l %u %t \"%r\" %>s %b \"{Referrer}\" \"{User-Agent}\",
Option = "sync"
==============================================================




일반적으로 많이 사용되는 Custome Log File Format로그 형식은 다음과 같다.

Common Log Format (CLF)
"%h %l %u %t \"%r\" %>s %b"
가상호스트 정보를 포함한 Common Log Format
"%v %h %l %u %t \"%r\" %>s %b"
NCSA extended/combined 로그 형식
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
Referer 로그 형식
"%{Referer}i -> %U"
Agent (브라우저) 로그 형식
"%{User-agent}i"

포멧 지시어에 대한 자료는 아래 링크를 참고한다.
http://httpd.apache.org/docs/2.0/ko/mod/mod_log_config.html
2009/08/27 11:22 2009/08/27 11:22

findstr은 grep의 윈도우용이라고 할 수 있다.
웹 로그 분석시 로그파서를 쓰지 않고 간단한 검색에 유용하게 사용할 수 있을듯 하다.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
         [/F:파일][/C:문자열] [/G:파일] [/D:디렉터리 목록] [/A:색 속성] [/OFF[LINE]]
         문자열 [[드라이브:][경로]파일이름[ ...]]

  /B         패턴이 행의 첫부분에 있는지를 비교합니다.
  /E         패턴이 행의 끝부분에 있는지를 비교합니다.
  /L         찾는 문자열을 글자 그대로 사용합니다.
  /R         찾는 문자열을 정규식으로 사용합니다.
  /S         현재 디렉터리와 모든 하위 디렉터리에서 일치하는 파일을 찾습니다.
  /I         찾을 때 대/소문자를 구별하지 않습니다.
  /X         정확히 일치하는 줄만 보여줍니다.
  /V         일치하는 텍스트가 없는 줄만 보여줍니다.
  /N         일치하는 각 줄 앞에 줄 번호를 보여줍니다.
  /M         파일에 일치하는 텍스트가 있으면 파일 이름만 보여줍니다.
  /O         일치하는 각 줄 앞에 문자 오프셋을 보여줍니다.
  /P         인쇄할 수 없는 텍스트가 포함된 파일은 건너 뜁니다.
  /OFF[LINE] 오프라인 속성 세트 파일을 건너뛰지 않습니다.
  /A:속성    색 속성을 두자리 16진수로 지정합니다. "color /?"를 참조하십시오.
  /F:파일    지정된 파일에서 파일 목록을 읽습니다('/'는 콘솔에 해당됩니다).
  /C:문자열  지정된 텍스트를 글자 그대로 찾는 문자열로 사용합니다.
  /G:파일    지정된 파일로부터 찾는 텍스트를 받습니다('/'는 콘솔에 해당됩니다).
  /D:디렉터리    디렉터리 목록을 구분하는 세미콜론(;)를 찾습니다.
  문자열     찾을 텍스트.
  [드라이브:][경로]파일이름
             찾을 파일을 지정합니다.

/C 옵션을 사용한 경우가 아니면, 찾는 문자열을 여러 개 지정할 때
공백으로 분리하십시오. 예를 들면, 'FINDSTR "hello there" x.y' 명령을
입력하면 파일 x.y에서 "hello"나 "there"을 찾습니다.
반면에 'FINDSTR /C:"hello there" x.y' 명령을 입력하면 파일 x.y에서
"hello there"을 찾습니다.

정규식에 대한 참고 사항:
  .         와일드카드: 모든 문자
  *         반복: 문자나 클래스에 대하여 0번 이상 반복
  ^         행 위치: 행의 앞부분
  $         행 위치: 행의 끝부분
  [클래스]  문자 클래스: 세트에 있는 문자
  [^클래스] 역 클래스: 세트에 없는 문자
  [x-y]     범위: 특정 범위에 있는 문자
  \x        익스케이프: 메타 문자 x를 문자 그대로 사용
  \<xyz     단어 위치: 단어의 앞부분
  xyz\>     단어 위치: 단어의 끝부분

Findstr에서 사용 가능한 정규식은 온라인 명령을 참조하십시오.

2009/08/27 11:17 2009/08/27 11:17
윈도XP 원격데스크탑(터미날 서비스) 2인 이상 동시 사용하기

2명 이상이 한 컴퓨터를 동시에 사용할 수 있도록 윈도 설정등을 바꾸어 주는 패치이며
윈도XP 프로페셔날에서만 가능한 얘기입니다.
즉, 로컬에서 컴퓨터 사용중에도 원격으로 컴퓨터 접속 및 사용이 가능함.

1. 아래 링크된 파일을 다운 받아 압축을 푼다.
   (압축을 풀면 termserv.dll, 레지스트리 변경 파일, readme.txt, 설치용 배치파일등이 있음)

2. 제어판 -> 사용자 계정 -> 사용자 로그온 또는 로그오프 방법 변경 -> '새로운 시작 화면 사용'과
   '빠른 사용자 전환 사용'을 모두 체크

3. 시작 -> 실행 -> 'gpedit.msc' 입력하고 엔터 -> 그룹컴퓨터정책 -> 컴퓨터 구성 ->  
    관리 템플릿 -> Windows 구성요소 -> 터미날 서비스 -> 연결 개수 제한 -> '사용'에 체크 ->
    'TS 최대 연결 허용'을 '3'이상으로 변경

4. 설정 변경이 완료되면 윈도를 재시작하여 안전모드로 부팅
    -> 시작 -> 실행 -> 'cmd' 입력후 엔터 -> 도스창 -> 압축 푼 디렉토리로 이동
    -> 'mulTerm.bat' 파일을 실행

* 기존 termserv.dll(버전 2188)은 백업 보관되고 구버전 termserv.dll(버전 2055)으로 대체
* 싱글유저에서 멀티유저 사용 설정을 위해 레지스트리파일이 변경됨

5. 배치파일 실행이 완료되면 윈도 탐색기를 실행 -> c:\windows\system32\dllcache로 이동
   -> 'termserv.dll' 파일을 찾아 삭제하거나 임의의 이름으로 바꾼다.
* 폴더 속성에서 시스템 파일과 숨겨진 파일을 볼 수 있게 속성을 변경해야 dllcache 폴더와
  내용을 볼 수 있음

6. 윈도를 재시작한 다음 멀티 유저 환경으로 사용....

* 만약 문제가 발생하거나 이전 상태로 돌아 가고 싶으면 안전모드로 부팅 후
  mulTermUninst.bat을 실행한다
2009/08/26 15:45 2009/08/26 15:45
http://www.mremote.org/wiki/

오픈소스 프로젝트인 소스포지에 공개된 프로젝트중에,. 다중 원격 접속 클라이언트 프로젝트중에 하나 입니다.  최근에 유행??.. 멀티탭 및 여러가지 프로토콜을 지원하네요..

- 코멘트 달린 내용중에 추천 하였기에,. 찾아보니 소스포지 프로젝트 이기도 하고..^^ -
사용자 삽입 이미지
위키에 정리된 내용이 그닥 많치 않아서 정확치는 않지만,. RDP 터미널 서비스는 Windows 자체의 터미널 서비스 클라이언트의 COM 개체를 이용하는 것 같습니다.

VB.NET 으로 대부분 작성이 되어 있어서, 닷넷 프레임워크 2.0 이 설치되어 있어야 합니다.


사용자 삽입 이미지
현재 프로토콜 설정 목록에는 위와 같은 프로토콜을 지원합니다.

그외,. 외부 도구 연결들 여러가지 기능을 지원하는 것 같습니다. 다만 여러가지 프로토콜에 대한 동일한 설정창으로 인해서 각 프로토콜만의 특징적인 설정이 없는것 같습니다. (못찾았을수도...)

이를테면,. Windows Vista 및 Windows Server 2008 RDP 6.1 에서는 서버 인증이라던가 터미널 서비스 게이트 웨이 설정등...

2009/08/26 15:40 2009/08/26 15:40
사용자 삽입 이미지
사용자 삽입 이미지
다운로드: http://www.avianwaves.com/Tech/Tools/RDTabs/

무료 공개 프로그램으로,. Windows Visata 및 Windows Server 2008 의 RDP 6.x 버젼도 지원 합니다. 또한 매우 다양하고 상세한 옵션 설정이 가능하고 편리한 기능이 지원 되네요..^^;;
2009/08/26 15:36 2009/08/26 15:36
MSSQL 2000 등에 포함된 쿼리분석기와 같은 프로그램 입니다.  호스팅 관련 서비스 에 있는 MSSQL 관리툴을 사

용해도 되겠지만  세세한 사항을 컨트롤 하기에는 이쪽이 좋을 겁니다.


개요

SSMSE(Microsoft SQL Server Management Studio Express)는 SQL Server 2005 Express Edition 및 SQL Server 2005 Express Edition with Advanced Services를 관리할 수 있는 사용이 용이한 무료 그래픽 관리 도구입니다. SSMSE는 SQL Server 2005의 모든 버전에서 만든 SQL Server 데이터베이스 엔진의 인스턴스도 관리할 수 있습니다.

참고: SSMSE는 SQL Server Analysis Services, Integration Services, Notification Services, Reporting Services, SQL Server 에이전트 또는 SQL Server 2005 Mobile Edition을 관리할 수 없습니다.

현재 사용할 수 있는 다른 버전 및 다운로드 가능한 구성 요소를 포함한 SQL Server Express에 대한 자세한 내용은 MSDN의 SQL Server Express 페이지를 참조하십시오.


다운로드 : http://www.microsoft.com/downloads/details.aspx?FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796&DisplayLang=ko#filelist
2009/08/26 15:27 2009/08/26 15:27
www.wssplex.net
http://www.mssqltips.com/tip.asp?tip=1669 는 해당 데이터베이스에 있는 저장프로시져 및 함수에서 사용되는 파라미터의 각 목록을 확인할수 있는 쿼리 스크립트 입니다.

SELECT SCHEMA_NAME(SCHEMA_ID) AS [Schema],
SO.name AS [ObjectName],
SO.Type_Desc AS [ObjectType (UDF/SP)],
P.parameter_id AS [ParameterID],
P.name AS [ParameterName],
TYPE_NAME(P.user_type_id) AS [ParameterDataType],
P.max_length AS [ParameterMaxBytes],
P.is_output AS [IsOutPutParameter]
FROM sys.objects AS SO
INNER JOIN sys.parameters AS P
ON SO.OBJECT_ID = P.OBJECT_ID
WHERE SO.OBJECT_ID IN ( SELECT OBJECT_ID
FROM sys.objects
WHERE TYPE IN ('P','FN'))
ORDER BY [Schema], SO.name, P.parameter_id

이를테면,. 특정 파라미터에 정의된 값을 찾아서 수정이 필요한 경우에 이용해 볼수 있을것 같고 그외 목적에 따라서 위 쿼리 스크립트를 약간만 수정해도 다양하게 이용할수 있을것 같습니다.

위 쿼리스크립트에 대한 자세한 내용은 해당 원문 페이지를 확인해 보시기 바라며, SQL Server 2005 이상에서만 지원 가능한 시스템뷰를 이용하므로 SQL Server 2000 에서는 작동하지 않습니다.
2009/08/26 15:13 2009/08/26 15:13

다음은, Win32_PerfRawData_Tcpip_NetworkInterface 클래스를 이용해서 BytesReceivedPersec,BytesSentPersec  값을 WMI를 통해 가져오는 예제 코드 입니다.

set oSvc = GetObject("winmgmts:root\cimv2")

wqlQuery = "select BytesReceivedPersec,BytesSentPersec from Win32_PerfRawData_Tcpip_NetworkInterface where Name = 'Realtek RTL8139 Family PCI Fast Ethernet NIC'"

for each oData in oSvc.ExecQuery(wqlQuery)
 for each oProperty in oData.Properties_
  if oProperty.Name = "BytesReceivedPersec" then
   bytesReceived = oProperty.Value
  elseif oProperty.Name = "BytesSentPersec" then
   bytesSent = oProperty.Value
  end if
 next
next

wscript.echo bytesReceived
wscript.echo bytesSent

BytesReceivedPersec,BytesSentPersec 는 각 원시 Raw 값을 가져옵니다.

이 값은 uint 타입인데 vbscript 특성상 형선언에 의미가 없으므로  맨 마지막에서 순서대로 echo 를 통해서 출력만 해주면 됩니다.  중요한것은 무조건 맨처음과 그 다음 출력되는 글자만 값으로 되며, 필히 숫자이어야 하며, 2개를 반환해야 합니다.



출력된값은 MRTG에서 LIne 별로 값을 읽어 들입니다. 다음 부분은 MRTG의 cfg 일부입니다.

Target[serverinfo_wmi]: `cscript //nologo D:\wwwroot\mrtg-2.14.3\bin\traffic.vbs`
Options[serverinfo_wmi]: growright,bits

SNMP에서는 다음과 같은 형식입니다.

Target[serverinfo_snmp]: 65539:public@211.234.xxx.xxx:
Options[serverinfo_snmp]: growright,bits

2개의 차이점은, 거의 없어 보이죠?.
(Options에서 bits 를 넣어주면, 계산된 값에 * 8 을 해줘서 bit/sec 로 계산을 해준다. Byte 단위로 챠트를 출력할려면 bit를 넣어주지 않으면 된다.)


지금까지 예제를 보면, 아주 쉽습니다. 그냥 vbscript를 통해서 2개의 값만 리턴을 해주는 명령어를 넣어주기만 하면 되니깐.. 관리도구에 있는 성능카운터에 있는 모든 클래스를 소스로 이용할수 있습니다. 그외 별도의 응용프로그램에서 리턴해주는 모든값도 가능합니다.

다만, MRTG가 perl 기반이라는 단점외에는...
2009/08/25 14:26 2009/08/25 14:26
FastCgi 에서, PHP 는 매우 가볍고 빠르게 동작 합니다.
물론 세팅 방법도 기존과 다르게 보다 쉽습니다.

FastCgi 에서 PHP 는,. IIS 6에서는 작업자 프로세스에 의해서 실행이 됩니다. 그래서 PHP 가 설치되어 있는 폴더(php-cgi.exe 가 위치하는 폴더) 에는 Network Service 계정 접근이 가능 해야 합니다.

보통 읽기(Read) 권한만 설정되어 있어도 PHP 스크립트는 매우 잘 작동 합니다. 그러나, PHP 코딩 방식중에 Include 등의 함수 호출에서 코드 방식에 따라서 오류(FastCgi 에서 Http 500)가 발생 합니다.

include 또는 require_once 에서 상대 경로를 호출할 경우인데요. 요즘 대부분의 include 에서 페이지 호출 방식은 상대경로(relative path)를 이용하고 있습니다.

물론,. $_SERVER["DOCUMENT_ROOT"] 처럼 절대 경로를 반환해 주는 환경 변수를 이용해서 include 하는 경우에는 문제가 없으나, "../" 와 같은 상대 경로를 이용할때에는 오류가 발생 합니다.

[error] PHP Warning:
failed to open stream:
No such file or directory in
/main.php on line 15

이러한 오류는, PHP Cgi 에서 실행(Read & Execute) 권한(permission)이 없기 때문 입니다.

개체 이름: D:\php5\php-cgi.exe
이미지 파일 이름: C:\WINDOWS\system32\inetsrv\w3wp.exe
기본 사용자 이름: NETWORK SERVICE
액세스: SYNCHRONIZE
  ReadData (또는 ListDirectory)
  실행/트래버스
  ReadAttributes



위와 같이 작업자 프로세스 실행 계정에, 실행권한을 설정을 해줄 경우 기존 Linux 에서 작동하는 PHP 스크립트 대부분은 문제 없이 잘 작동 합니다.

물론, 세션 저장 폴더나 로깅 폴더등에는 추가적으로 쓰기/삭제 권한까지 필요 합니다.

출처 : http://www.wssplex.net/TipnTech.aspx?Seq=508
2009/08/25 14:24 2009/08/25 14:24
현재의 Windows Server 2008 다음으로 출시될 예정인 Windows Server 2008 R2 (Windows 7) 의 IIS 7.5 에서는 FastCgi 의 성능이 향상된다고 합니다.

http://blogs.iis.net/ksingla/archive/2009/01/22/improvements-to-fastcgi-in-iis-7-5.aspx

1. FastCgi 가 작동하는 응용프로그램 풀(프로세스) 에서 지정된 특정 파일 모니터링
   --> 기존 web.config 수정 모니터링 처럼 FastCgi 에서도 가능하게 한것 같은데요. 그것 보다는 단순한 듯.

2. 실시간 튜닝 자동화
  --> Windows 7 (Windows Server 2008 R2) 에서 maxInstances 등의 값을 0 으로 하는 경우에는 FastCgi 모듈이 요청 상태에 알맞게 FastCgi 인스턴스를 자동으로 조정

3. 추적
 --> 대부분의 Cgi 는 자체 메시지 출력(Stdout)을 하는데, 에러시 기존에는 각자의 로깅방법등을 이용했는데 IIS 7.5 에서는 그것을 IIS Trace 에서 받을수 있음.

4. STDERR stream 핸들링
 --> Stdout(StdErr) 의 값에 따라서 특정한 값에 해당하는 경우 지정된 서버 상태코드로 설정이 가능

2009/08/25 14:24 2009/08/25 14:24
본 웹사이트에 소개된 IIS 7 모듈에 관련된 포스트 모음 입니다.

Web Analytics Tracking Module
http://www.wssplex.net/Tools/UsefulTools.aspx?Seq=92

Image Gallery Directory Listing Module
http://www.wssplex.net/Tools/UsefulTools.aspx?Seq=91

URL Rewrite Module
http://www.wssplex.net/Tools/UsefulTools.aspx?Seq=87

Application Request Routing Modulehttp://www.wssplex.net/Tools/UsefulTools.aspx?Seq=79

Backup & Restore Module
http://www.wssplex.net/Tools/UsefulTools.aspx?Seq=74

미디어 팩(Media Pack) Bit Rate Throttling Module
http://www.wssplex.net/Tools/UsefulTools.aspx?Seq=69

Request Filtering Module
http://www.wssplex.net/TipnTech.aspx?Seq=396

이외에도, 수많은 모듈이 있으며 프로그래밍이 가능하다면 모듈 작성 및 추가는 그리 어렵지 않게 추가가 가능한 IIS 7 입니다.
2009/08/25 14:23 2009/08/25 14:23
다음 문서는, SQL Server 2000 관련해서 공개 팁중 각 분류별 유용한 팁을 정리해 놓은 PDF 파입니다.

배포는 Microsoft 에서 하고 있으며, 2005년 한국데이터베이스진흥센터 주최 SQL Server 나만의 노하우 공개 페티스벌 이벤트를 통해서 수집되어진 자료를 기반으로 한국데이터베이스 진흥센터 승인하에 제작된 문서라고 합니다.

문서발행이 2006년 11월인데요,. 현재 SQL Server 2005 버젼이므로 이미 관련 팁은 수 많은 웹사이트에 공개가 많이 되어 있을것입니다.


다운로드:

http://download.microsoft.com/download/6/8/f/68f15f44-e957-4a1a-
97b8-b7444e4d0379/MyKnowhow,Tips_SQL_Server_2000.pdf



세미나 같은게 참석하시면 가끔식 MS에서 나눠주기도 합니다.^^
2009/08/25 14:23 2009/08/25 14:23
대부분의 경우,. 자체의 기존 경로의 DB 이었거나 detach 등의 데이터 베이스중 로그파일이 손상되어 mdf 파일만 있는 경우에는 거의 대부분 sp_attach_single_file_db 프로시져나 EM 의 데이터베이스 연결을 통해서 복구가 가능합니다.

- SQL Server 2005 이후에는 데이터베이스 연결 프로시져인 sp_attach_single_file_db 대신에 CREATE DATABASE database_name FOR ATTACH 를 사용하는 것이 좋습니다 -




그러나,. 단일 mdf 파일만 가지고선 복구가 안되는 경우가 다른 서버나 경로에서 정상적인 분리없이 가져와진 단일 mdf 파일만 있는 경우 입니다. 정상적인 분리이었거나 원래 서버 및 경로인 경우에는 위와 같은 ldf 가 없더라도 정상적으로 로그파일이 생성이 됩니다.



그러나 비정상적인 경우에는 다음과 같은 메시지가 나오면서 작업진행이 더 이상안 되지요.. 물론 쿼리문으로 실행하는 것도 같습니다. 어차피 EM 으로 작동되는게 모두 쿼리문의 SQL Server 엔진에 전달이 되니깐요..


이런 경우 해당 데이터베이스 명의 로그파일을 바꿔치기 하는 방법으로 복구 가능합니다. 이러한 복구 방법은 이미 주의대상(Suspect) 모드에서의 복구 절차와 거의 같습니다.


1. 먼저 wssplex 와 동일한 이름의 데이터베이스를 만듭니다.
2. 그다음에,. SQL Server 를 종료한 다음에 원본wssplex 와 바꿔치기를 합니다.
3. SQL Server 서비스를 재시작 하면, 새로 생성된 ldf는 원본wssplex 의 원래 로그과 다르므로 아래와 같은 주의 대상 상태로 변경 됩니다.





4. 이때, 다음과 같은 쿼리문을 실행하여 wssplex 상태를 변경 시킵니다.

sp_configure 'allow updates',1
go
reconfigure with override
go
update sysdatabases set
status=-32768 where dbid=DB_ID('wssplex')
go
sp_configure 'allow updates',0
go
reconfigure with override
go

32768 은 데이터베이스 응급 모드로 상태를 변경하겠다는 것입니다.


5. 그다음으로, SQL Server 서비스를 종료 합니다. 그리고 현재 상태에서의 문제가 되는 로그파일을 삭제후 SQL Server 서비스를 재시작 하면 다음과 같이 응급 모드로 변경이 됩니다.




6. 이제 wssplex 데이터 베이스는 ldf 가 없는 읽기 가능한 상태로, 레코드 조회나 DTS 를 통해서 데이터 끌어갈수도 있게 되었으나 역시 읽기전용 모드 입니다.


7
. 현재 상태는 로그파일이 정상적이지 않은 상태이므로, 로그파일을 재생성을 해주면 되며, 다음과 같은 쿼리를 실행하고 완료후 wsspelx 는 이제 정상적인 데이터베이스가 되었습니다.

dbcc rebuild_log('wssplex','d:\wssplex_log.ldf')


경고: 'wssplex' 데이터베이스에 대한 로그가 다시 작성되었습니다.
트랜잭션에 일관성이 없습니다. 물리적 일관성을 검사하려면 DBCC CHECKDB를 실행해야 합니다.
데이터베이스 옵션을 원래대로 설정하고 다른 로그 파일을 삭제해야 합니다.
DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오.





물론 현재 다음과 같이 엑세스 제한 상태입니다.



이제 위 제한값만 체크 해제를 해주면 곧바로 사용할수 있겠네요..^^




최초 시도했던 attach 경로 및 데이터베이스 DB 및 로그파일이 생성이 완료 되었고 정상적으로 데이터베이스 이용이 가능해 졌습니다.!!

출처 : http://www.wssplex.net/TipnTech.aspx?Seq=470
2009/08/25 14:21 2009/08/25 14:21
www.wssplex.net


Windows Web Server 2003 에서는,. 소프트웨어 설치에 제한 사항이 많았으나?? Windows Web Server 2008 에서는 하드웨어 스펙 제한과,. OS 자체의 구성요소 제한 외에는 거의 없습니다.

DB서버를 운영하기 위해서,. 저사양? 스펙에서는 Standard 버젼을 굳이 쓸 이유가 없겠지요. 이럴때 Windows Web Server 2008 이 좋은 대안인데,.. SMB 시장에서는 웹서버와 DB 서버를 같이 운영할수 있기에 좋을것 같습니다.

그런데,. Windows Web Server 2008 에, SQL Server 2005 를 설치하는 경우 다음과 같은 설치 제한이 있습니다. 기본 인스톨 본으로는 아래와 같이 워크스테이션 구성요소, 온라인 설명서 및 개발 도구 밖엔 설치를 할수 없습니다.



이러한 설치 제한에 대한,. 패치(Hotfix)가 배포되고 있습니다.

x32, x64 각각 배포가 되고 있는데요.... 패치를 설치하고 나면,. 아래와 같이 설치 제한이 없어져 정상적인 설치 진행이 가능해 집니다.

http://support.microsoft.com/kb/950636

SQL Server 2005 Installer Hotfix for Windows Web Server 2008 (x86)
SQL Server 2005 Installer Hotfix for Windows Web Server 2008 (x64)



많은 고객들이 Web Server 버젼에 SQL Server 설치를 원했기 때문에 이와 같은 패치를 내놓았다고 합니다....

그리고,. 애초에 SQL Server 설치를 Web Server 버젼에 설치하는 것을 계획하지 않았기 때문에 SQL Server 2005 installer 가 Windows Web Server 2008 라이선싱 정보를 예상하지 못했다고 합니다.
출처 : http://www.wssplex.net/TipnTech.aspx?Seq=477
2009/08/25 14:21 2009/08/25 14:21
www.wssplex.net
http://www.databasejournal.com/features/mssql/article.php/3796551/article.htm 를 보면,. 각 DB 별 I/O 사용량 통계 쿼리 예제 입니다. 물론,. 제공되는 시스템뷰나 함수를 좀더 보기쉽고 직관적으로 알수 있도록 만들어 놓은 쿼리 입니다.

SQL Server 2005 및 SQL Server 2008
select db_name(mf.database_id) as database_name, mf.physical_name,
left(mf.physical_name, 1) as drive_letter,
vfs.num_of_writes, vfs.num_of_bytes_written, vfs.io_stall_write_ms,
mf.type_desc, vfs.num_of_reads, vfs.num_of_bytes_read, vfs.io_stall_read_ms,
vfs.io_stall, vfs.size_on_disk_bytes
from sys.master_files mf
join sys.dm_io_virtual_file_stats(NULL, NULL) vfs
on mf.database_id=vfs.database_id and mf.file_id=vfs.file_id
order by vfs.num_of_bytes_written desc

SQL Server 2000 에서는 2005 나 2008 처럼 다양한 시스템뷰 나 함수를 지원하지 않기 때문에 다음처럼 커서를 이용해서 임시테이블에 넣는 방법을 이용합니다.

SQL Server 2000
DECLARE @DBID smallint
DECLARE @FILEID smallint
DECLARE @DBNAME sysname
DECLARE @FILENAME nvarchar(260)
 
CREATE TABLE #FileIOStats
(name sysname,
filename nvarchar(260),
drive_letter char(1),
NumberReads bigint,
NumberWrites bigint,
BytesRead bigint,
BytesWritten bigint,
IoStallMS bigint)
 
DECLARE ALLFILES CURSOR FOR
SELECT dbid, fileid, [name], [filename] FROM [master].[dbo].[sysaltfiles]
 
OPEN ALLFILES
FETCH NEXT FROM ALLFILES INTO @DBID, @FILEID, @DBNAME, @FILENAME
 
WHILE (@@FETCH_STATUS = 0)
BEGIN
 
                INSERT INTO #FileIOStats
                SELECT @DBNAME, @FILENAME, left(@FILENAME, 1), NumberReads, NumberWrites, BytesRead, BytesWritten, IoStallMS
                FROM ::fn_virtualfilestats(@DBID, @FILEID)
 
                FETCH NEXT FROM ALLFILES INTO @DBID, @FILEID, @DBNAME, @FILENAME
END
 
CLOSE ALLFILES
DEALLOCATE ALLFILES
 
SELECT * FROM #FileIOStats
DROP TABLE #FileIOStats

좀더 자세한 사항은 위 포스트를 참고해 보시기 바랍니다.
2009/08/25 14:20 2009/08/25 14:20
www.wssplex.net
http://www.mssqltips.com/tip.asp?tip=1669 는 해당 데이터베이스에 있는 저장프로시져 및 함수에서 사용되는 파라미터의 각 목록을 확인할수 있는 쿼리 스크립트 입니다.

SELECT SCHEMA_NAME(SCHEMA_ID) AS [Schema],
SO.name AS [ObjectName],
SO.Type_Desc AS [ObjectType (UDF/SP)],
P.parameter_id AS [ParameterID],
P.name AS [ParameterName],
TYPE_NAME(P.user_type_id) AS [ParameterDataType],
P.max_length AS [ParameterMaxBytes],
P.is_output AS [IsOutPutParameter]
FROM sys.objects AS SO
INNER JOIN sys.parameters AS P
ON SO.OBJECT_ID = P.OBJECT_ID
WHERE SO.OBJECT_ID IN ( SELECT OBJECT_ID
FROM sys.objects
WHERE TYPE IN ('P','FN'))
ORDER BY [Schema], SO.name, P.parameter_id

이를테면,. 특정 파라미터에 정의된 값을 찾아서 수정이 필요한 경우에 이용해 볼수 있을것 같고 그외 목적에 따라서 위 쿼리 스크립트를 약간만 수정해도 다양하게 이용할수 있을것 같습니다.

위 쿼리스크립트에 대한 자세한 내용은 해당 원문 페이지를 확인해 보시기 바라며, SQL Server 2005 이상에서만 지원 가능한 시스템뷰를 이용하므로 SQL Server 2000 에서는 작동하지 않습니다.
2009/08/25 14:20 2009/08/25 14:20
다음 문서는 kb 중 DNS 에 새 도메인 추가방법 및 순서에 대해서 설명해 놓은 것입니다.

물론 이런 내용은 이미 온라인 도움말에 있는 내용 그대로 입니다만,. 설정 작업에 앞서 DNS 에 대한 기본 개념을 사전에 이해하는 것이 훨씬더 쉬운 작업이 될수 있습니다.^^

http://support.microsoft.com/kb/323445/ko


정방향 조회 영역을 만드는 방법

정방향 조회 영역 속성을 수정하는 방법

역방향 조회 영역을 만드는 방법

역방향 조회 영역 속성을 수정하는 방법

호스트 레코드를 만드는 방법

CNAME을 추가하는 방법

MX 레코드를 추가하는 방법

이름 서버를 추가하는 방법


2009/08/25 14:19 2009/08/25 14:19

ASP(Active Server Pages) 요청을 사용하여 Microsoft 인터넷 정보 서비스(IIS) 5.0, Microsoft 인터넷 정보 서비스(IIS) 5.1 또는 Microsoft 인터넷 정보 서비스(IIS) 6.0이 설치된 컴퓨터에 큰 파일을 업로드하면 업로드가 실패할 수 있습니다. 또한 403 오류 응답이나 다음 중 하나와 유사한 오류 메시지가 나타날 수 있습니다.


오류 메시지 1
Request object error 'ASP 0104 : 80004005' 허용되지 않는 작업 :

오류 메시지 2

007~ASP 0104~허용되지 않는 작업

많은 폼 데이터를 ASP 페이지에 게시할 때 다음과 유사한 오류 메시지가 나타날 수 있습니다.

오류 ’80020009’ 예외가 발생했습니다.

또한 Response.binaryWrite 메서드를 사용할 때 파일 업로드가 실패할 수 있습니다.


이 문제는 Content-Length 헤더가 있고 Content-Length 헤더에서 IIS 메타베이스의 AspMaxRequestEntityAllowed 속성 값보다 큰 데이터 양을 지정하는 경우 발생합니다. AspMaxRequestEntityAllowed 속성의 기본값은 204,800바이트입니다.


해결 방법

cscript adsutil.vbs set w3svc/ASPMaxRequestEntityAllowed size

(*이 명령에서 size는 허용할 최대 파일 크기 업로드의 자리 표시자입니다. 최대값은 1,073,741,824바이트입니다. 이 값을 원하는 기능에 허용되는 최소값으로 설정하십시오.)

--> 업로드 컴포넌트의 성능에 따라서, 대용량 파일을 업로드 하면 웹서버측 메모리 과다 점유로 인해서 성능저하가 발생할 수 있으니 조심 스럽게 설정하는게 좋습니다.^^

이와 관련된 메타베이스 값으로 AspBufferingLimit 있습니다. 이 부분은 다운로드 버퍼링에 관련된 것으로 파일 링크를 막기 위해서 Asp 코드에 파일 쓰기후 다운로드 처리를 하는 경우가 많은데요,. 이때 대용량 파일 다운로드시에 지정된 크기 이상일 경우 오류가 발생하게 됩니다.

AspBufferingLimit : http://msdn.microsoft.com/library/default.asp?url=/library/
en-us/iissdk/html/ecfc3d4a-0178-45e8-89f8-304429b7fda5.asp



AspMaxRequestEntityAllowed 속성은 ASP 요청의 엔터티 본문에서 허용되는 최대 바이트 수를 지정합니다. Content-Length 헤더가 있고 Content-Length 헤더에서 AspMaxRequestEntityAllowed 속성 값보다 큰 데이터 양을 지정하는 경우 IIS에서 403 오류 응답을 반환합니다. AspMaxRequestEntityAllowed 속성은 PUT 요청과 POST 요청에만 적용되고, GET 요청에는 적용되지 않습니다. 이 메타베이스 속성이 ASP에만 적용되기 때문에 다른 ISAPI(인터넷 서버 API) 확장은 영향을 받지 않습니다.

AspMaxRequestEntityAllowed 속성은 MaxRequestEntityAllowed 속성의 기능과 관련되어 있습니다. 그러나 AspMaxRequestEntityAllowed 속성은 ASP 요청에만 적용됩니다. MaxRequestEntityAllowed 속성을 WWW 서비스(World Wide Web 게시 서비스) 수준에서 1MB로 설정할 수 있습니다. 그런 다음 특정 ASP 응용 프로그램에서 더 작은 양의 데이터를 처리하는 것을 알고 있는 경우 AspMaxRequestEntityAllowed 속성을 더 작은 값으로 설정할 수 있습니다.

--> ASP.NET 에서는 machine.config  또는 전역 web.config 및 각 웹사이트의 web.config 에서 지정할 수 있습니다.^^
2009/08/25 14:19 2009/08/25 14:19

현상

SGC(Server Gated Cryptography) 인증서를 사용하면 HTTPS 프로토콜을 사용하여 사이트에 액세스하려는 클라이언트에 다음과 같은 오류 메시지가 나타날 수 있습니다.

IIS 4.0:

https://<sitename> 사이트를 열 수 없습니다.
제공된 인증서가 잘못되었습니다.

IIS 5.0:

페이지를 표시할 수 없습니다.
서버를 찾을 수 없거나 DNS 오류입니다.


--> SGC 인증서 때문인데요. SGC 인증서는 현재는 발급되는 경우가 거의 없습니다. 물론 대부분의 웹서버 SSL 인증서 판매 업체에서는 판매를 하고 있습니다.

SGC(Server Gated Cryptography) 는 클라이언트 브라우져가 40비트/50비트만 지원하고, 128 비트를 지원하지 못하는 경우에도 인증서 자체가 강제적으로 128 비트/ 256 비트 암호화가 가능하도록 지원하는 인증서 규격 입니다. ^^

최근 거의 대부분의 웹서버 및 웹브라우져가 128비트 / 256비트 인증서를 지원하며, IE 7 에서는 SSL 3.0 만 지원하도록 변경되었습니다. 암호화 강도는 점차 높아질 것입니다. ^^

웹서버 인증서 :  http://www.comodossl.co.kr/

2009/08/25 14:18 2009/08/25 14:18

다음 문서는 IIS 6 에 해당되는 내용으로, CGI/ISAPI 실행시 나타날 수 있는 사항입니다.


현상

IIS에서 CGI 응용 프로그램을 실행하려고 하면 다음과 같은 메시지가 나타납니다.

      액세스가 거부되었습니다.


원인

이 문제는 익명 계정에 CGI에 대한 권한이 없는 경우 발생합니다. CGI 응용 프로그램을 시작하려고 하면 IIS에서는 익명 사용자를 사용합니다. 익명 계정에 해당 파일에 대한 권한이 없기 때문에 프로세스 실행이 실패하고 STDOUT을 통해 오류 메시지가 반환됩니다.

그러나 IIS에서는 프로세스가 정상적으로 실행되고 종료된 것으로 인식합니다. 액세스 거부 오류 메시지가 STDOUT에 있기 때문에 IIS에서는 프로세스 실패를 인식할 방법이 없습니다.

익명 계정이 프로세스를 시작할 수 있었기 때문에 다른 인증 방법을 시도하지 않습니다. IIS에서는 CreateProcessAsUser API 호출을 사용하여 CGI 응용 프로그램을 시작합니다. 사용자에게 CGI/ISAPI 응용 프로그램에 대한 NTFS 권한이 없는 경우 CreateProcessAsUser는 정상적으로 종료됩니다.


해결

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ W3SVC\Parameters

W3SVC/Parameters 아래에 CreateProcessAsUser 값을 REG_DWORD로 추가하고 값을 0으로 지정합니다. 이렇게 하면 CGI가 CreateProcess API를 통해 시스템 컨텍스트에서 실행됩니다.

이 경우 CGI 스크립트의 시스템 액세스 권한이 보통 때보다 훨씬 커지기 때문에 심각한 보안 문제를 일으킬 수 있습니다.


--> 위 적용에 대해서, 절대 추천하지 않습니다. 왜나면, 일반적으로 웹사이트 실행은 최소 권한인 IUSER 계정으로 접근을 하는데 위와 같이 값을 변경하게 되면 SYSTEM 권한으로 실행이 되므로 익명의 사용자가 서버 전체에 접근할수 있는 권한을 가지게 되는 것이죠..

이와 비슷한 예로, Windows 2000 서버에서 ASP.NET 실행시 잘 안되는 경우가 있다는 질문이 여러 게시판에 올라오는데요. 그 답변이 대부분 machine.config 에서 실행계정은 "system" 으로 변경하라고 제시를 해줍니다. 이 또한 위와 같이 system 권한으로 ASP.NET 웹사이트를 실행하므로 매우 위험한 답변을 제시해 주고 있는 것입니다.

웹개발자는, 서버보안에 상관없이 당장 제작된 웹프로그램 실행이 중요하기 때문에 이런 사항에 대해서는 서버운영자가 필히 적절한 조치 및 방향을 제시해 주어야 하는게 좋겠죠.^^
2009/08/25 14:18 2009/08/25 14:18
IIS FTP(파일 전송 프로토콜) 서비스에 대한 Knowledge Base 문서로, Active 모드 FTP 와 Passive 모드 FTP 에 대한 설명 및 각 모드에서의 FTP 명령 전송 과정을 설명해 놓았습니다.

IIS FTP(파일 전송 프로토콜) 서비스에 대한 정보:
http://support.microsoft.com/default.aspx/kb/283679/ko


참고문서

http://pintday.org/whitepapers/ftp-review.shtml 를 보면, Active 모드, Passive 모드의 차이점을 서버와 클라이언트간 연결 그림을 통해서 쉽게 이해할수 있을것 같습니다.

IIS FTP에 패시브모드 포트 범위 설정:
http://www.serverinfo.pe.kr/TipnTech.aspx?Seq=212

2009/08/25 14:17 2009/08/25 14:17
XIMS: Relocating the Directories Used by SMTP Service
http://support.microsoft.com/kb/240917

adsutil.vbs set smtpsvc/1/dropdirectory  dir
adsutil.vbs set smtpsvc/1badmaildirectory  dir
adsutil.vbs set pickupdirectory dir
adsutil.vbs set queuedirectory dir

위에것 그대로 가져다가 안된다고 하는 사람들 많았을듯;;;
2006년에 검토를 했다는데 아직도 수정이 안됨. 검토를 한거는 한건지.... -_-;;;

위 내용중에,. 예제 명령행에 오타가 있음;;;;
다음 처럼....

adsutil.vbs set smtpsvc/1/dropdirectory "d:\mailroot\drop"
adsutil.vbs set smtpsvc/1/badmaildirectory "d:\mailroot\badmail"
adsutil.vbs set smtpsvc/1/pickupdirectory "d:\mailroot\pickup"
adsutil.vbs set smtpsvc/1/queuedirectory "d:\mailroot\queue"

2009/08/25 14:16 2009/08/25 14:16
URL Rewrite 모듈은,. 이미 인터넷 상에 매우 많은 종류가 배포되어 사용되고 있습니다. IIS 7 에서는 모듈형태로 URL Rewrite Module 이 제공이 되고 있는데요,. 별도로 다운로드 해서 설치를 해줘야 합니다.



Request Filtering 과 URL Rewrite Module 는, Http 요청이 오면 BeginRequest 이벤트에 의해서 작동이 됩니다.


다운로드:
x86: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1691
x64: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1692



IIS7 의 URL Rewrite Module 은 쉽게 URL Rewrite Rule 설정이 가능하도록 UI 를 제공하고 있습니다.

Blank rule 은 직접 모든 항목을 설정하는 것이며,

User friendly URL 은 웹브라우져의 주소창의 URL 을 토대로 몇개의 재작성된 URL 주소 형식 기준의 패턴을 보여 줍니다.

Rule with rewrite map 은 일종의 고정된 템플릿 패턴을 저장후 룰 설정이 호출해서 이용할수 있으며,

Request blocking 은 특정 패턴의 요청을 401, 403, 404, Abort Request 으로 응답을 해줍니다. 일종의 방화벽 역할과 비슷하죠..^^

물론, 기능중에는 Apache 의 mod_rewrite 룰도 가져와서 적용할수 있습니다.




설정된 정보중 전역설정값은 applicationhost.config 에 저장되며, 사이트 단위 설정은 web.config 에 저장됩니다.

<rewrite>
    <globalRules>
 <rule name="Rewrite rule1 for StaticTest">
     <match url=".*" />
     <conditions>
  <add input="{StaticTest:{REQUEST_URI}}" pattern="(.+)" />
     </conditions>
     <action type="Rewrite" url="{C:1}" appendQueryString="false" />
 </rule>
    </globalRules>
    <rewriteMaps>
 <rewriteMap name="StaticTest">
     <add key="/article1" value="/article.aspx?id=1&amp;title=some-tile" />
 </rewriteMap>
    </rewriteMaps>
</rewrite>


위처럼 직접 config 을 수정해서 적용이 가능하지만,. UI 에서의 설정이 훨씬더 편할것 같습니다. URL Rewrite Module 에 대한 상세한 설명은 다음 페이지를 참고해 보시기 바랍니다.

http://learn.iis.net/page.aspx/460/using-url-rewrite-module/

스샷등 매우 상세하게 설명되어 있습니다.^^

출처 : http://www.wssplex.net/Tools/UsefulTools.aspx?Seq=87
2009/08/25 14:07 2009/08/25 14:07
CID를 구축하는데 CID장비에서는 전화번호를 "-" 없이 번호를 붙여서 전송

고객 DB에는 고객 연락처에 "-"붙여서 사용.....

WHERE 절에 Replace(tel_no, '-', '') = @연락처....이렇게 하려니 조건절에 함수를 사용해서

꺼림직하여 프로시저로 작성



/* TITLE : CID에서 오는 전화번호 중간에 "-" 정확하게 삽입 작성자 : 지현명 작성일자 : 2009년 7월 20일 내용 : - 고객 DB에 전화번호와 핸드폰번호가 중간에 "-"가 삽입되어 저장 - 기존 다른 App와 연동되어 있기 때문에 DB에 저장된 데이터를 "-"없이 변경 못함. - 컬럼 두개 추가하는것도 생각해 봤는데 용량만 차지.... - CDI에서 "-"없이 들어오는 번호를 핸드폰/국선 구분하여 "-" 삽입후 고객연락처와 비교 - WHERE절에서 Replace(TEL_NO_COM, '-', '') = @TEL_NO ..이렇게 하면 인덱스를 이용 못하고 - 검색시 상당히 오래 걸림 <- 정원혁 선생님 교제에 있음... -- 국내 지역번호 --서울 02 경기 031 인천 032 강원 033 충남 041 대전 042 충북 043 부산 051 울산 052 대구 053 경북 054 경남 055 전남 061 광주 062 전북 063 제주 064 --서울 말고는 전부 3자리... */ -- EXEC CID_CUST_INFO_SEARCH '01190773532' ALTER PROC CID_CUST_INFO_SEARCH @TEL_NO VARCHAR(20) AS DECLARE @TEL_NO_1 VARCHAR(3) --통신사/지역번호 DECLARE @TEL_NO_2 VARCHAR(4) --중간번호 DECLARE @TEL_NO_3 VARCHAR(4) -- 최종번호 DECLARE @TEL_NO_SEARCH VARCHAR(20) -- '-' 붙여진 최종번호 DECLARE @TEL_NO_TMP VARCHAR(20) --오리지널번호 임시 저장 SET @TEL_NO = LTRIM(RTRIM(@TEL_NO)) SET @TEL_NO_TMP = @TEL_NO IF CHARINDEX('01', LEFT(RTRIM(LTRIM(@TEL_NO)), 2)) = 1 BEGIN -- 핸드폰 일 경우 SET @TEL_NO_1 = LEFT(@TEL_NO, 3) -- 01190771234->011 -- SET @TEL_NO = REPLACE(@TEL_NO, @TEL_NO_1, '') -- 01190771234->90771234 SET @TEL_NO = SUBSTRING(@TEL_NO, 4, LEN(@TEL_NO)) -- 통신사 뒷자리부터 잘라내기 SET @TEL_NO_3 = RIGHT(@TEL_NO, 4) -- 90771234->1234 SET @TEL_NO_2 = REVERSE(SUBSTRING(REVERSE (@TEL_NO), 5, LEN(@TEL_NO)-4 )) -- 90771234->리버스->43217709->7709만 잘라냄..'-4'는 최종번호 잘라낸 자리수->리버스->9077 SET @TEL_NO_SEARCH = @TEL_NO_1 + '-' + @TEL_NO_2 + '-' + @TEL_NO_3 END ELSE BEGIN --일반전화 IF LEFT(@TEL_NO, 2) = '02' BEGIN SET @TEL_NO_1 = LEFT(@TEL_NO, 2) -- 0221041234 -> 02 -- SET @TEL_NO = REPLACE(@TEL_NO, @TEL_NO_1, '') -- 0221041234->21041234 SET @TEL_NO = SUBSTRING(@TEL_NO, 3, LEN(@TEL_NO)) SET @TEL_NO_3 = RIGHT(@TEL_NO, 4) -- 21041234->1234 SET @TEL_NO_2 = REVERSE(SUBSTRING(REVERSE (@TEL_NO), 5, LEN(@TEL_NO)-4 )) -- 21041234->리버스->43214012->4012만 잘라냄..'-4'는 최종번호 잘라낸 자리수->리버스->2104 SET @TEL_NO_SEARCH = @TEL_NO_1 + '-' + @TEL_NO_2 + '-' + @TEL_NO_3 END ELSE BEGIN SET @TEL_NO_1 = LEFT(@TEL_NO, 3) -- 0332542011 -> 031 -- SET @TEL_NO = REPLACE(@TEL_NO, @TEL_NO_1, '') -- 0332542011->2542011 SET @TEL_NO = SUBSTRING(@TEL_NO, 4, LEN(@TEL_NO)) SET @TEL_NO_3 = RIGHT(@TEL_NO, 4) -- 21040152->0152 SET @TEL_NO_2 = REVERSE(SUBSTRING(REVERSE (@TEL_NO), 5, LEN(@TEL_NO)-4 )) -- 2542011->리버스->1102452->452만 잘라냄..'-4'는 최종번호 잘라낸 자리수->리버스->254 SET @TEL_NO_SEARCH = @TEL_NO_1 + '-' + @TEL_NO_2 + '-' + @TEL_NO_3 END END SELECT A.CUST_CD, A.CUST_NM, A.TEL_NO_COM, A.TEL_NO_MOB, A.STR_CD, (SELECT STR_CD_NM FROM RMSMST1 WITH(NOLOCK) WHERE STR_CD = A.STR_CD) STR_NM, A.CUST_RANK_DIV, (SELECT DESCRP FROM RMBMCM1 WITH(NOLOCK) WHERE GRP_CD = '58' AND DETAIL_CD = A.CUST_RANK_DIV) CUST_RANK, -- 등급명 A.ZIPCODE, A.ADDR1 + ' ' + A.ADDR2 + ' '+ A.ADDR3 + ' ' + A.ADDR4 + ' ' + A.ADDR5 AS ADDR FROM RCCMCS1 A WITH(NOLOCK) WHERE CASE WHEN CHARINDEX('01', LEFT(RTRIM(LTRIM(@TEL_NO_TMP)), 2)) = 1 THEN A.TEL_NO_MOB --핸드폰일경우 ELSE A.TEL_NO_COM --국선일경우 END = @TEL_NO_SEARCH
2009/08/17 10:28 2009/08/17 10:28
-- 혹시 DB가 없는 경우 생성
--CREATE DATABASE DBA
--ALTER DATABASE DBA SET RECOVERY SIMPLE


-- 로깅용 테이블 없으면 생성
IF object_id('NHN_runParalellSQL') is null BEGIN
CREATE TABLE NHN_runParalellSQL (jobName nvarchar(2000), regDate datetime, status varchar
(50))
END

DECLARE @jobNames table (jobNo int identity(1,1), jobName nvarchar(4000))
DECLARE @jobNames2 table (jobNo int, jobName nvarchar(4000))
DECLARE @v_jobName nvarchar(4000)
, @v_cmd nvarchar(4000)
, @v_DBName nvarchar(4000)
, @initTime datetime

SET @initTime = getdate()

--=======================================
-- 병렬처리용 JOB을 통해 수행 시작
-- 이 부분만 채워 넣어서 사용하면 된다.
--=======================================
SELECT @v_jobName = 'WORKING_SUBJOB1', @v_cmd = 'exec BBS1.DB1.dbo.AP_STAT_MONTHLY_feisia',
@v_DBName = 'DBA'
exec runParallelSQL @jobName = @v_jobName, @cmd = @v_cmd, @DBName = @v_DBName
insert into @jobNames (jobName) select @v_jobName

SELECT @v_jobName = 'WORKING_SUBJOB2', @v_cmd = 'exec BBS2.DB2.dbo.AP_STAT_MONTHLY_feisia',
@v_DBName = 'DBA'
exec runParallelSQL @jobName = @v_jobName, @cmd = @v_cmd, @DBName = @v_DBName
insert into @jobNames (jobName) select @v_jobName

SELECT @v_jobName = 'WORKING_SUBJOB3', @v_cmd = 'exec BBS3.DB3.dbo.AP_STAT_MONTHLY_feisia',
@v_DBName = 'DBA'
exec runParallelSQL @jobName = @v_jobName, @cmd = @v_cmd, @DBName = @v_DBName
insert into @jobNames (jobName) select @v_jobName

SELECT @v_jobName = 'WORKING_SUBJOB4', @v_cmd = 'exec BBS4.DB4.dbo.AP_STAT_MONTHLY_feisia',
@v_DBName = 'DBA'
exec runParallelSQL @jobName = @v_jobName, @cmd = @v_cmd, @DBName = @v_DBName
insert into @jobNames (jobName) select @v_jobName
--=======================================
-- 병렬처리용 JOB을 통해 수행 끝
--=======================================




-- 등록한 작업의 후속처리 부분
-- 각 서브작업들이 잘 수행되는지 체크하고, 실패하는 서브작업이 있을경우 오류를 발생시키며 종료한다.
DECLARE @cnt int
, @totalCnt int
SELECT @cnt = 1
, @totalCnt = (SELECT COUNT(*) FROM @jobNames)

delete @jobNames2
insert into @jobNames2 select * from @jobNames

while 1=1 BEGIN
SELECT @v_jobName = jobName FROM @jobNames2 WHERE jobNo = @cnt

-- JOB 생성에 실패한 경우 체크
IF EXISTS (SELECT * FROM NHN_runParalellSQL with(nolock) where jobName = @v_jobName and
regDate > @initTime and status = 'FAILED') BEGIN
RAISERROR ('자동 병렬처리 배치작업 실패', 19, 1) with log
BREAK
END

-- JOB 실행에 실패한 경우 체크
IF EXISTS (
select * from msdb..sysjobhistory
where run_status <> 1 -- 작업 실패
and job_id = (select top 1 job_id from msdb..sysjobs with(nolock) where
name = @v_jobName)
and convert(varchar(50), run_date)+right('0'+convert(varchar(50), run_time),
6) >= convert(char(8), @initTime, 112)+replace(convert(char(8), @initTime, 108), ':', '')
) BEGIN
RAISERROR ('자동 병렬처리 배치작업 실패', 19, 1) with log
BREAK
END

-- JOB 실행에 성공한 경우 체크
IF EXISTS (
select * from msdb..sysjobhistory
where run_status = 1 -- 작업 성공
and job_id = (select top 1 job_id from msdb..sysjobs with(nolock) where
name = @v_jobName)
and convert(varchar(50), run_date)+right('0'+convert(varchar(50), run_time),
6) >= convert(char(8), @initTime, 112)+replace(convert(char(8), @initTime, 108), ':', '')
) BEGIN
insert into NHN_runParalellSQL select @v_jobName, getdate(), 'END'
EXECUTE msdb.dbo.sp_delete_job @job_name = @v_jobName

DELETE @jobNames2 WHERE jobNo = @cnt
UPDATE @jobNames2 SET jobNo = jobNo-1 WHERE jobNo > @cnt
SET @totalCnt = @totalCnt - 1

-- 모든 JOB이 실행에 성공한 경우 중단
IF @totalCnt = 0 BREAK
END

SET @cnt = (@cnt % @totalCnt) + 1
END














--=================================
---- 작업을 위한 SP 생성
--=================================

CREATE PROC runParallelSQL
@jobName nvarchar(4000)
, @cmd nvarchar(4000)
, @DBName nvarchar(4000)
AS

declare @jobStepName nvarchar(4000)
select @jobStepName = @jobName+'_단계'

-- JOB 생성
BEGIN TRANSACTION           
  DECLARE @JobID BINARY(16) 
  DECLARE @ReturnCode INT   
  SELECT @ReturnCode = 0    
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]')
< 1
  EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'

-- 동일한 이름을 가진 작업이 있으면 삭제
  SELECT @JobID = job_id    
  FROM   msdb.dbo.sysjobs   
  WHERE (name = @jobName)      
  IF (@JobID IS NOT NULL)   
  BEGIN 
  -- 작업이 다중 서버 작업인지 점검 
  IF (EXISTS (SELECT  *
             FROM    msdb.dbo.sysjobservers
             WHERE   (job_id = @JobID) AND (server_id <> 0)))
  BEGIN
   -- 스크립트를 중단하십시오.
   RAISERROR (N'이 이름으로 된 다중 서버 작업이 이미 존재하기 때문에 특정작업_하위작업 작업을 가
져올 수 없습니다.', 16, 1)
   GOTO QuitWithRollback 
  END
  ELSE
   -- [로컬] 작업 삭제
   EXECUTE msdb.dbo.sp_delete_job @job_name = @jobName
   SELECT @JobID = NULL
  END

BEGIN

-- 작업 추가
  EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name =
@jobName, @owner_login_name = N'agent', @description = N'설명이 없습니다.', @category_name =
N'[Uncategorized (Local)]', @enabled = 0, @notify_level_email = 0, @notify_level_page = 0,
@notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

-- 작업 단계 추가
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1,
@step_name = @jobStepName, @command = @cmd, @database_name = @DBName, @server = N'',
@database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0,
@retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0,
@on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
  EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1

  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

-- 대상 서버 추가
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name =
N'(local)'
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END
COMMIT TRANSACTION         

insert into NHN_runParalellSQL select @jobName, getdate(), 'START'
-- JOB 수행
EXECUTE msdb..sp_start_job @job_name = @jobName

GOTO   EndSave             
QuitWithRollback:
  IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
insert into NHN_runParalellSQL select @jobName, getdate(), 'FAILED'
RAISERROR ('자동 병렬처리 배치작업 실패', 19, 1) with log
EndSave:


GO



하만철 / Ha Man-cheol
EMail : feisia@hanmail.net
2009/08/17 10:27 2009/08/17 10:27