이건 비디오로 봤던거 같은데... 이런 스타일의 영화를 내가 좋아하게 될거라고는 생각지도 못했는데... 비디오로 봤음에도 불구하고, 꽤 재미있게 본 영화다.

뮤지컬 스타일의 영화로... 이건 내가 젤 첨으로 산 SE버젼의 DVD이다. 아직 시간이 없어 다시 보진 못했다.

언제 다시 보게될지는 몰라도... DVD.. 이거 모으는 재미도 쏠쏠하다.

'소장 DVD' 카테고리의 다른 글

GOSFORD PARK  (0) 2003.11.30
스피드 1  (0) 2003.11.29
매트릭스 1  (0) 2003.11.29


 

워낙 유명하고 거의 대다수의 사람들이 봤을테니 설명히 필요 없는 영화.

매트릭스 2가 개봉할때가지 제대로 본적이 없어서... 매트릭스 2를 보기전에 부랴부랴 구입해서 봤던 DVD 내가 내 돈을 주고 처음 구입한 DVD

'소장 DVD' 카테고리의 다른 글

GOSFORD PARK  (0) 2003.11.30
스피드 1  (0) 2003.11.29
물랑루즈  (2) 2003.11.29

UNION, UNION ALL

 

UNION ALL은 결과를 리턴하기 전에 중복되는 값을 제거하는 과정을 거치지 않아서, UNION보다 빠르다고 합니다.

즉 UNION 연산자는 중복된 값을 제거하고 데이터를 정렬 시킨다는 얘기가 되겠죠.

 

그러므로, 중복되는 값이 있어도 상관이 없는 경우라면 UNOIN보다는 UNOIN ALL을 사용해야 합니다.

'programming > MSSQL' 카테고리의 다른 글

Calling COM Objects From T-SQL  (0) 2003.12.09
TSQL 이야기...  (0) 2003.11.28
[컬럼]SQL Server에 별칭(Alias)을 달아보자  (2) 2003.11.13

SQL Server를 만진지 이제 언 3년 8개월...

 

아는게 별로 없는 상태로 회사에 입사해서, 정말 많은걸 배운거 같다.

SQL Server를 6.5부터 2000까지 써 오면서 책도 많이 보고, 경험도 많이 쌓았다.

 

나온지는 꽤 된 책이지만, 지금까지 보아온 책 중 정말 알차다는 느낌을 받은 책...

 

책 선전을 하는건 아니지만,

 

강력한 SQL 프로그래밍을 위한 Transact SQL

켄 핸더슨 지음

 

틈날때마나 조금씩 조금씩 읽으면서, 좋은 내용에는 줄도 그어가면서 봤는데...

좋은 내용들을 보다 많은 사람들과 공유하고 싶어서 내 블로에 조금씩 올리려고 한다.

 

제목은 'TSQL 이야기'...

 

주로 SQL에 관련된 이야기이기는 하지만 아무래도 SQL Server를 기반으로 하고 있어, 타 DBMS를 사용하는 분들께는 적용되지 않는 이야기들도 있겠지만... 봐두면 좋을만한 내용들을 뽑아 조금씩 소개하고 싶다.

 

'programming > MSSQL' 카테고리의 다른 글

TSQL 이야기 - UNION  (0) 2003.11.28
[컬럼]SQL Server에 별칭(Alias)을 달아보자  (2) 2003.11.13
복제 설정 시 자주 발생하는 에러  (4) 2003.11.13
[방문히트이벤트]700히트를 잡아라!
손님이당첨되었습니다.

'etc' 카테고리의 다른 글

콘서트 예매하다...  (3) 2003.12.03
컴 사다...  (4) 2003.11.18
다시 일상으로...  (3) 2003.11.10

'Scrapbook' 카테고리의 다른 글

한정식집  (0) 2003.11.12

올만에 올리는 글이당...

매일 들어오긴 하는데, 오늘 문뜩 마지막 글 남긴 날짜를 보니... 벌써 4일이나 지났군..

 

컴을 한대 장만했다.

이제 서른이 가까운 나이라 다나와 최저가 상점들을 돌아다니며, 싼 가격에 컴을 조립하겠다는 생각은 이미 사라진지 오래...

돈 몇만원 더 주고 편하게 받아보겠다는 생각에 동생 아는 사람을 통해 다나와 최저가에 몇만원 더 주고 컴을 샀다.

 

내 컴을 조립할 때마다 느끼는거지만... 욕심은 끝이 없다.

그래도 가격대 성능비를 생각한다고 해서 적당히 좋은 사양으로 조립을 했다.

 

CPU : P4 2.6C

RAM : 512M (256M X 2) PC3200

Board : ASUS P4P800 (sound, lan card 내장)

VGA : SUMA Radeon 9000 PRO

HDD : Samsung 80G 7200 RPM

Monitor : NewQ 18.1 TV

Speaker : Creative INSPiRE 5.1 5100

Case : Y90

무소음 쿨링팬 120mm 2개

파워

 

이렇게 해서 150이 좀 안들었다.

 

지금와서 생각해보면 케이스는 왜 그리 비싼걸 샀는지...--;;

하지만... 정말 괜찮은 케이스라는 생각이 든다.

특히 HDD, ODD 장착 방식 정말 특이하다. 나사를 돌릴 필요가 없어 넣고 빼기 쉽다.

자세한 메뉴얼이 없는게 흠이지만, 메뉴얼 없이도 쉽게 잘 조립했다.

조립 분해 너무 편하고 쉽다.

 

CPU는 C가 붙은게 하이퍼쓰레딩을 지원한다나 뭐라나...

실제 시스템에서 CPU가 두개로 인식이 되던데...

어짜피 물리적으로 하난데... 과연 얼마나 성능이 좋아지려나 모르겠지만..

 

간만에 조립을 해보니, 새로운 기술들도 많이 나오고, 케이스 역시도 많이 변해서,

약간 고생하긴 했지만...

조립 끝난후 S/W를 설치할 땐 정말 기분이 좋았다.

 

 

ㅋㅋ 드뎌 간만에 3D 겜도 즐기고... 잼있다.

'etc' 카테고리의 다른 글

700 히트 이벤트!!!  (0) 2003.11.26
다시 일상으로...  (3) 2003.11.10
500 히트 이벤트!!!  (0) 2003.11.03

마이크로소프트 TechNet 사이트에서 펀 글입니다.

 

---------------------------------------------------------------------------

 

김기홍 대리 / MCSE, MCDBA, 한국마이크로소프트 고객기술지원부

어느 날인가 고객으로부터 다급한 목소리로 전화가 걸려왔다.
"SQL Server에서 DTS (Data Transformation Service)를 수행하였을 때 원본 테이블 데이터가 사라졌어요"
아니 이럴 수가!! 이것이 사실이라면 정말 큰일인 것이다. RDMS 시스템에서 어떤 버그로 인해 데이터가 손실된다는 것은 상상조차 하기 힘든 일인데, 테이블내용이 통째로 사라지다니.. 일단 고객에게 100리나 되는 거리를 단숨에 달려갔다. 고객은 내 눈앞에서 실제로 원본 테이블내용이 사라지는 것을 시연해 주었다.
"A"라는 원본 SQL Server에서 "B"라는 대상 SQL Server로 테이블을 DTS하니 원본 테이블의 내용이 사라지는 것이다. (이때 DTS의 기본 설정은 대상 테이블이 존재 할 때, 대상 테이블을 제거 후 재생성 하는 옵션을 가지고 있었다.) 필자는 습관적으로 DTS를 수행한 클라이언트 장비에서 SQL Server 네트워크 유틸리티의 별칭을 조사해 보았다. 아니나 다를까 사건의 비밀은 거기에 존재하고 있었다.

고객은 자신의 장비에 "B"라는 이름을 가지고 "A"라는 서버를 연결하도록 설정한 "별칭"이 설정되어 있었다는 사실을 모르고 있었던 것이었다. 이런 황당한 사태를 유발한 "별칭"은 무엇일까? 이 별칭을 설명하기 위해서 MDAC과 SQL Server 클라이언트 네트워크 유틸리티에 대해 먼저 설명하고자 한다.

MDAC (Microsoft Data Access Component)이란?

Microsoft 관련 제품을 사용하다 보면, 간혹 MDAC이란 이름을 접하게 된다.
MDAC은 Windows NT4 Service Pack 4 또는 Internet Explorer 4.0 이후 출시된 대부분의 Microsoft 제품 (Windows, Office, Visual Studio, Internet Explorer 및 모든 서버 제품군)에 포함되어있으며, 사용자도 인지하지 못하는 사이에 (아니 자세히 관찰하면 제품설치 시 MDAC 설치 화면을 볼 수 있다.) 항상 상위 버전으로 자동 설치 될 뿐, 제거되거나 하위 버전으로 변경되는 경우는 거의 없다. 그럼 이 MDAC이란 무엇일까?
Web 또는 LAN 이용하여 데이터를 주고받는 클라이언트/서버 형태의 응용프로그램에서 관계형(SQL) 또는 비관계형에 상관없이 다양한 데이터 소스로부터 쉽게 정보(Information)을 통합-공유할 수 있는 ADO, OLE DB, ODBC 등의 컴포넌트들을 제공하여 준다.

MDAC의 버전

그 동안 배포된 MDAC의 버전을 살펴보면, MDAC 1.5, 2.0, 2.1, 2.5, 2.6, 2.7, 2.8등 다양한 버전이 존재하며, 또한 각 버전별 Service Pack도 존재한다. 이 많은 버전들의 MDAC을 설치하는 원칙은 매우 단순하다. 데이터를 공급 받는 클라이언트(데이터 소비자)의 MDAC 버전은 데이터를 제공하는 서버(데이터 소스)의 MDAC 버전보다 높거나 최소한 같아야 한다. 이렇게 하여야지만 데이터 소스에서 제공하는 모든 기능 및 기존 문제점들을 수용할 수 있게 된다. 일례로 자신의 장비에 MDAC 버전을 최소 어느 버전 이상으로 설치하여야 하는가는 자신의 장비에서 연결하는 최신 SQL Server 버전 및 서버에 설치된 최신 SQL Server Service Pack 버전이 포함한 MDAC 보다 같거나 높으면 된다. 추가로 요즈음 제공되는 MDAC관련 Tool의 경우 설치된 MDAC 버전을 제거하거나, 하위 버전으로 회귀하는 기능들을 제공하기도하지만 절대적인 원칙은 항상 MDAC은 상위 버전으로 변경될 뿐 하위버전으로 변경하는 것을 권장하지 않는다. (일부 클러스터 환경에서는 서버 환경에 특정 버전 이상의 MDAC 설치를 권장하지 않는 경우도 있지만..)

SQL Server의 제품 CD 및 SQL Server Service Pack CD를 살펴 보면 "x86\other\sqlredis.exe"라는 파일을 공통적으로 발견할 수 있다. 이 sqlredis.exe의 경우 최신 MDAC과 완전하게 동일하지는 않지만, 현재 설치된 SQL Server 버전에 문제없이 연결이 가능하도록 구성되었으며, 재배포 가능한 형태의 MDAC 대부분 컴포넌트를 포함하고, Remote에서 설치가 가능한 무인실행 설치 파일이다. 따라서 방화벽 클라이언트 응용프로그램들이 방화벽 또는 프락시 서버에서 공유되도록 하듯이, SQL Server 관리자들은 sqlredis.exe를 SQL Server 상에서 파일 공유하여 해당 SQL Server를 연결하고자 하는 모든 클라이언트는 이 파일(sqlredis.exe) 설치에 의해 SQL Server연결에 관련된 기본 요건을 쉽게 구성할 수 있도록 하는 것도 하나의 유용한 팁이 될 수 있다.

SQL Server를 사용하는 웹서버 및 기타 응용프로그램 서버 관리자의 경우, 잊지 말고 SQL Server Service Pack 적용 시 항상 각각의 웹서버에 이 sqlredis.exe를 수행하여 클라이언트의 MDAC 버전을 서버와 일치 시켜준다면, 향후 겪게 될 많은 문제점들을 피해 갈 수 있을 것이다.

SQL Server 클라이언트 네트워크 유틸리티

위에서 설명된 MDAC이 설치된 경우 여러분은 다음과 같은 방법에 의해 SQL Server 클라이언트 네트워크 유틸리티라는 것이 포함되어 있음을 확인할 수 있다.
    ->[시작] - [실행] 에서 "Cliconfg.exe" 을 입력 후 "확인"을 클릭
    ->이후 화면에 SQL Server 클라이언트 네트워크 유틸리티라는 창이 나타난다.
SQL Server 클라이언트 네트워크 유틸리티의 창 형태는 설치된 MDAC 버전에 따라 화면이 조금씩 틀린 점을 유의하여야 한다.

SQL Server 클라이언트 네트워크 유틸리티는 다음과 같은 용도에 사용하는 그래픽 기반 도구이며, 기본적으로 다음 네 가지의 탭을 가지고 있다.

  • 일반 탭: 지정된 서버에 대한 네트워크 프로토콜 연결을 만들고, 기본 네트워크 프로토콜을 변경가능.
  • 별칭 탭: 클라이언트가 연결하는 컴퓨터의 서버 별칭에 대한 정보를 나열.
  • DB 라이브러리 옵션 탭: 시스템에 현재 설치되어 있는 네트워크 라이브러리에 대한 정보를 표시.
  • 네트워크 라이브러리 옵션 탭: 시스템에 현재 설치되어 있는 DB 라이브러리 버전을 표시하고 DB 라이브러리 옵션의 기본값을 설정.
일반 탭의 경우 SQL Server 2000 출시 이전 MDAC에서는 Named Pipe가 SQL Server 연결 시 사용되는 기본 프로토콜 이었으나, SQL Server 2000 출시 이후 MDAC에서는 TCP/IP 가 기본 프로토콜임을 확인할 수 있다.


별칭(Alias)이란?

SQL Server 클라이언트 네트워크 유틸리티에서 재미있고, 독특한 동작방식을 가지는 것이 별칭 탭에서 설정 가능한 SQL Server 별칭이다.
SQL Server 별칭의 경우 각 SQL Server 별로 사용하는 네트워크 라이브러리 (Named Pipe, TCP/IP, Multiprotocol등)를 지정할 수 있고, 또한 사용하고자 하는 매개변수 (Named Pipe의 파이프 이름, TCP/IP의 Port 번호 등)를 지정이 가능하다. 일반적으로 별칭사용을 많이 접하는 사례는 보안 이슈에 의해 SQL Server를 1433이 아닌 다른 고정 포트로 서비스하는 경우 SQL Server의 클라이언트 (웹서버 및 데스크탑 PC등)들에게 특정 SQL Server의 TCP/IP Port를 지정하는 것은 종종 볼 수 있다. 그러나 이 별칭의 기능이 단순히 이것만 있는 것일까? 활용하기에 따라 처음에 DTS 사례에서 언급했던 것 같은 흥미로운 결과를 초래하는 경우가 많다.

별칭의 동작 방식

별칭은 각 클라이언트 별로 자신에게 설정된 사항만 적용된다.
만약 "Server1"와 "Server2"라는 SQL Server가 존재하고 "Client1"와 "Client2"라는 클라이언트 장비가 존재 할 때 "Client1"에만 서버 별칭이름을 "Server2" 그리고 서버 이름을 "Server1"로 지정 추가한 경우에, 각각의 "Client1"과 "Client2"에서 "Server1"과 "Server2"를 연결하면 어떤 서버가 연결될까? 당연히 "Client2"에서는 "Server1"과 "Server2"가 정상적으로 연결 가능. 하지만 "Client1"에서 "Server1"을 연결하는 경우에는 "Server1"이 연결되고, 별칭 사용에 의해 "Server2"를 연결한 경우 "Server1"로 연결된다. 이 때 "Client1"에서 SQL Server 명을 별도로 확인하지 않으면 자신은 "Server1"에 연결된 상태로 착각할 수 있다.

만약 세 사람이 구름 한 점 없는 푸른 하늘을 쳐다 보고 있다. 이 때 한 사람은 짙은 빨간색 색안경을, 또 한 사람은 짙은 노란색 색안경을, 그리고 나머지 한 사람은 전혀 색안경을 끼지 않은 경우 이 세 사람이 보고 있는 하늘의 색채는 푸른 빛, 붉은 빛, 노란 빛으로 보일 수 있다. 별칭 또한 마찬 가지로 푸른색(Server1)붉은색(Server2)으로 보이게 할 수 있는 색안경과 같은 역할을 한다. 하지만 각기 자기가 착용한 색안경에만 영향을 받을 뿐 다른 사람이 착용한 색안경에는 전혀 영향을 받지 않는다. 그러나 상당히 위험할 수 있는 경우는 처음에 언급된 DTS 사례처럼 자신이 색안경을 착용한지를 모르는 경우 뜻하지 않은 사태가 발생할 수 있음도 유의 하여야 한다.

별칭의 적용 사례

  1. 4대의 웹서버가 SQL Server를 사용하고 있는데 운영중인 SQL Server ("ServerA")의 장애 발생시 Standby SQL Server("ServerB")로 1~2분 내로 연결을 변경하고 싶은데 어떻게 해야 하나요? (이 때 Standby Server는 Log Shipping에 의해 운영 데이터와 15분의 차이는 있지만 ReadOnly 상태로 임시적 운영예정이어서 데이터 동기화는 큰 문제가 없습니다만 IP와 서버명을 변경하여 System을 Restart하기에는 시간이 너무 촉박합니다.)
    : 답은 간단하다. 각 웹서버에 서버 별칭은 "ServerA"로 서버 이름은 "ServerB"로 설정된 별칭을 추가하면, 별칭이 추가된 순간부터 연결되는 SQL Server Connection은 ServerB로 연결된다.
  2. 하나의 Domain을 사용하는 3000대 PC에서 SQL Server를 직접 연결하는데, SQL Server명과 IP, Port 가 모두 바뀌어야 하는 불가피한 상황이 발생 했습니다. 그런데 응용프로그램의 SQL Server 정보를 변경하여 새로 배포하지 않고, 모든 PC에서 기존의 SQL Server가 아닌 새로 변경된 SQL Server명과 IP, Port를 연결할 수 있는 방법이 없을까요?
    : 마찬가지로 방법이 그리 어려운 것은 아니다. Domain LogOn시 다음 registry를 항목을 추가하는 Domain LogOn Script를 설정 하거나, .reg 파일을 배포 및 실행하면 된다. Ex) TCP/IP Connection 사용
    -> Old SQL Server 서버명 : OLDSERVER ; IP : 10.10.10.1 ; Port : 1433
    -> New SQL Server 서버명 : NEWSERVER ; IP : 10.10.10.2 ; Port : 1064

    ----------------------------------
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo]
    "OLDSERVER"="DBMSSOCN,NEWSERVER,1064"
    "10.10.10.1 "="DBMSSOCN, 10.10.10.2,1064"

    추가 사항:
    - MDAC 2.6 이상에서 Dynamic Port를 사용하고 싶은 경우 예제
    "OLDSERVER "="DBMSSOCN, NEWSERVER"

    - Named Pipe를 사용하는 경우 예제
    "OLDSERVER"="DBNMPNTW,\\\\NEWSERVER\\pipe\\sql\\query"

    - Multiprotocol을 사용하는 경우 예제
    "OLDSERVER "="DBMSRPCN,NEWSERVER"

참고로 SQL Server의 대다수 사용자들이 가장 많이 겪는 문제점들이 SQL Server의 연결과 관련된 문제이므로 아래 첨부된 웹캐스트를 활용하면 많은 도움이 될 것이다.
Support WebCast: Microsoft SQL Server 2000: Troubleshooting Connectivity  

SQL Server 2000이 출시된 이후 SQL Server 연결 시 SQL Server Name에 대한 Name Resolution이 필수적인 경우가 많아 연결 문제가 더 잦아지는 경향도 없지 않다. 이때 네트워크 구성에 따라 Hosts 또는 lmhosts 파일에 SQL Server Name을 수동 추가하는 작업으로 인해 상당수의 SQL Server 연결 문제를 해결하는 경우가 상당수 있다.

이상으로 MDAC, SQL Server 클라이언트 네트워크 유틸리티, 별칭 등에 대해 간략하게 살펴 보았다. 만약 지금까지의 내용을 개개인의 PC상에서 점검해 보면 이미 상당수의 사용자들이 SQL Server 연결과 관계된 많은 설정 및 콤포넌트들을 본인들도 인지하지 못하는 사이에 사용하고 있었음을 발견할 수 있을 것이다.

 

출처 : http://www.microsoft.com/korea/technet/resources/Technetcolumn/column_12.asp

 

'programming > MSSQL' 카테고리의 다른 글

TSQL 이야기...  (0) 2003.11.28
복제 설정 시 자주 발생하는 에러  (4) 2003.11.13
[Tip]mdf파일 만으로 DB 복구하는 방법  (0) 2003.11.12

에러 메세지

'SQL Server 엔터프라이즈 관리자이(가) XXX을(를) XXX의 배포자로 구성할 수 없습니다.

 

오류 18483: 'distributor_admin'이(가) 서버에서 원격 로그인으로 정의되어 있지 않기 때문에 XXX서버에 연결할 수 없습니다.'

라는 에러 발생시 점검해야 할 것.

- SELECT @@servername 을 통해 실제 서버이름과 일치하는지를 확인. 일치하지 않는 경우 'sp_dropserver'를 통해 서버를 drop하고 'sp_addserver 서버이름, 'local''을 이용해 서버 이름을 새로 등록한 후 서비스를 재 시작하고 다시 SELECT @@servername을 해 보면 바뀐 이름을 확인해 볼 수 있다.

- 엔터프라이즈 메니저에 서버를 등록할 때, 꼭 서버 이름으로 등록할 것 ('local'이나 ip혹은 .으로 등록하지 말것)

 

 

'Scrapbook' 카테고리의 다른 글

MCDBA 관련 사이트  (0) 2003.11.18
EXEC sp_attach_single_file_db 'pubs' , 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf' 

'programming > MSSQL' 카테고리의 다른 글

복제 설정 시 자주 발생하는 에러  (4) 2003.11.13
인덱스 고르는 방법  (0) 2003.10.16
[튜닝] index...  (0) 2003.10.14

드뎌 신행(신혼여행)을 마치고 돌아왔다. 지난주 금요일에 돌아와서, 처가랑 본가 인사드리고, 집정리하고 필요한거 사고... 무지 바쁜 주말을 보냈다.

 

정말이지.. 평소에 신경쓰지 않고 아무렇지 않았던 일들.. 직접하다보니 어머니가 정말 대단하게 느껴졌다.

 

그냥 버리던 쓰레기... 청소 안하던 방안, 화장실... 밀려있는 빨래...

 

둘이 같이 돈을 벌다보니, 집안일 역시 많은 부분 같이 처리하게 되서, 더 더욱 많이 느껴지게 된거 같다.

아직 초기라 재미있는면도 있긴 하지만..

 

하여간 매일매일 하루하루가 바쁘게 지나갈 것 같다.

'etc' 카테고리의 다른 글

컴 사다...  (4) 2003.11.18
500 히트 이벤트!!!  (0) 2003.11.03
으앙...집중 안된다..  (0) 2003.10.29
[방문히트이벤트]500히트를 잡아라!
미니님이당첨되었습니다.

'etc' 카테고리의 다른 글

다시 일상으로...  (3) 2003.11.10
으앙...집중 안된다..  (0) 2003.10.29
[펌] 서울, 지하철 빨리 갈아타기  (0) 2003.10.22

대부분 다 아시는 내용이겠지만, 이제막 c#을 공부하는 나로써 필요한 것들 ^^;;

 

다차원 배열 생성 시 각 차원의 길이를 알아내는 방법

int [,]a = {.............};

a.getLength(0);  -> 1차원의 길이

a.getLength(1);  -> 2차원의 길이

 

 

'programming > c#' 카테고리의 다른 글

정규식 ( regular expression)  (3) 2004.01.26
엑셀 파일에서 데이터를 load할 때...  (0) 2003.10.30
엑셀 파일 생성 코드  (0) 2003.10.30

데브피아 게시물에서 본건데...

oRange.Cells.Value2().toString();

을 이용할 경우 엑셀의 date형식은 TimeSpan의 숫자 값으로만 가져 오도록 되기 때문에,

엑셀에 보이는 형태로 값을 가져오려면, 아래와 같이 하면 된다.

oRange.Cells.get_Value(Missing.Value).toString();


 

'programming > c#' 카테고리의 다른 글

배열관련 사항  (2) 2003.10.30
엑셀 파일 생성 코드  (0) 2003.10.30
프로젝트 배포  (0) 2003.10.20
마이크로소프트 기술자료 - Q302084

HOWTO: Automate Microsoft Excel from Microsoft Visual C# .NET

The information in this article applies to:
Microsoft Visual C# .NET (2002)
Microsoft Excel 2000
Microsoft Excel 2002

SUMMARY
This article demonstrates how to create an Automation client for Excel by using Visual C# .NET. 
MORE INFORMATION
Automation is a process that permits applications that are written in languages such as Visual C# .NET to programmatically control other applications. Automation to Excel permits you to perform actions such as creating a new workbook, adding data to the workbook, or creating charts. With Excel and other Microsoft Office applications, virtually all of the actions that you can perform manually through the user interface can also be performed programmatically by using Automation.

Excel exposes this programmatic functionality through an object model. The object model is a collection of classes and methods that serve as counterparts to the logical components of Excel. For example, there is an Application object, a Workbook object, and a Worksheet object, each of which contain the functionality of those pieces of Excel. To access the object model from Visual C# .NET, you can set a project reference to the type library.

This article demonstrates how to set the proper project reference to the Excel type library for Visual C# .NET and provides sample code to automate Excel. 
Create an Automation Client for Microsoft Excel
Start Microsoft Visual Studio .NET. On the File menu, click New and then click Project. Select Windows Application from the Visual C# Projects types. Form1 is created by default.
Add a reference to the Microsoft Excel Object Library. To do this, follow these steps:
On the Project menu, click Add Reference.
On the COM tab, locate Microsoft Excel Object Library and click Select. 

NOTE: The Excel Object Library contains a version number; the version for Microsoft Excel 2000 is 9.0 and the version for Microsoft Excel 2002 is 10.0.
Click OK in the Add References dialog box to accept your selections. If you receive a prompt to generate wrappers for the libraries you selected, click Yes.
On the View menu, select Toolbox to display the Toolbox and add a button to Form1.
Double-click Button1. The code window for the form appears.
In the code window, replace the following code
private void button1_Click(object sender, System.EventArgs e)
{
}
with: 
private void button1_Click(object sender, System.EventArgs e)
{
    Excel.Application oXL;
    Excel._Workbook oWB;
    Excel._Worksheet oSheet;
    Excel.Range oRng;

    try
    {
        //Start Excel and get Application object.
        oXL = new Excel.Application();
        oXL.Visible = true;

        //Get a new workbook.
        oWB = (Excel._Workbook)(oXL.Workbooks.Add( Missing.Value ));
        oSheet = (Excel._Worksheet)oWB.ActiveSheet;

        //Add table headers going cell by cell.
        oSheet.Cells[1, 1] = "First Name";
        oSheet.Cells[1, 2] = "Last Name";
        oSheet.Cells[1, 3] = "Full Name";
        oSheet.Cells[1, 4] = "Salary";

        //Format A1:D1 as bold, vertical alignment = center.
        oSheet.get_Range("A1", "D1").Font.Bold = true;
        oSheet.get_Range("A1", "D1").VerticalAlignment = 
            Excel.XlVAlign.xlVAlignCenter;
        
        // Create an array to multiple values at once.
        string[,] saNames = new string[5,2];
        
        saNames[ 0, 0] = "John";
        saNames[ 0, 1] = "Smith";
        saNames[ 1, 0] = "Tom";
        saNames[ 1, 1] = "Brown";
        saNames[ 2, 0] = "Sue";
        saNames[ 2, 1] = "Thomas";
        saNames[ 3, 0] = "Jane";
        saNames[ 3, 1] = "Jones";
        saNames[ 4, 0] = "Adam";
        saNames[ 4, 1] = "Johnson";

        //Fill A2:B6 with an array of values (First and Last Names).
        //EXCEL9 use:
        oSheet.get_Range("A2", "B6").Value2 = saNames;
        //EXCEL10 use:
        //oSheet.get_Range("A2", "B6").set_Value( Missing.Value, saNames );

        //Fill C2:C6 with a relative formula (=A2 & " " & B2).
        oRng = oSheet.get_Range("C2", "C6");
        oRng.Formula = "=A2 & \" \" & B2";

        //Fill D2:D6 with a formula(=RAND()*100000) and apply format.
        oRng = oSheet.get_Range("D2", "D6");
        oRng.Formula = "=RAND()*100000";
        oRng.NumberFormat = "$0.00";

        //AutoFit columns A:D.
        oRng = oSheet.get_Range("A1", "D1");
        oRng.EntireColumn.AutoFit();

        //Manipulate a variable number of columns for Quarterly Sales Data.
        DisplayQuarterlySales(oSheet);

        //Make sure Excel is visible and give the user control
        //of Microsoft Excel's lifetime.
        oXL.Visible = true;
        oXL.UserControl = true;
    }
    catch( Exception theException ) 
    {
        String errorMessage;
        errorMessage = "Error: ";
        errorMessage = String.Concat( errorMessage, theException.Message );
        errorMessage = String.Concat( errorMessage, " Line: " );
        errorMessage = String.Concat( errorMessage, theException.Source );

        MessageBox.Show( errorMessage, "Error" );
    }
}

private void DisplayQuarterlySales(Excel._Worksheet oWS)
{
    Excel._Workbook oWB;
    Excel.Series oSeries;
    Excel.Range oResizeRange;
    Excel._Chart oChart;
    String sMsg;
    int iNumQtrs;

    //Determine how many quarters to display data for.
    for( iNumQtrs = 4; iNumQtrs >= 2; iNumQtrs--)
    {
        sMsg = "Enter sales data for ";
        sMsg = String.Concat( sMsg, iNumQtrs );
        sMsg = String.Concat( sMsg, " quarter(s)?");

        DialogResult iRet = MessageBox.Show( sMsg, "Quarterly Sales?", 
            MessageBoxButtons.YesNo );
        if (iRet == DialogResult.Yes)
            break;
    }

    sMsg = "Displaying data for ";
    sMsg = String.Concat( sMsg, iNumQtrs );
    sMsg = String.Concat( sMsg, " quarter(s)." );
    MessageBox.Show( sMsg, "Quarterly Sales" );

    //Starting at E1, fill headers for the number of columns selected.
    oResizeRange = oWS.get_Range("E1", "E1").get_Resize( Missing.Value, iNumQtrs);
    oResizeRange.Formula = "=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\"";

    //Change the Orientation and WrapText properties for the headers.
    oResizeRange.Orientation = 38;
    oResizeRange.WrapText = true;

    //Fill the interior color of the headers.
    oResizeRange.Interior.ColorIndex = 36;

    //Fill the columns with a formula and apply a number format.
    oResizeRange = oWS.get_Range("E2", "E6").get_Resize( Missing.Value, iNumQtrs);
    oResizeRange.Formula = "=RAND()*100";
    oResizeRange.NumberFormat = "$0.00";

    //Apply borders to the Sales data and headers.
    oResizeRange = oWS.get_Range("E1", "E6").get_Resize( Missing.Value, iNumQtrs);
    oResizeRange.Borders.Weight = Excel.XlBorderWeight.xlThin;

    //Add a Totals formula for the sales data and apply a border.
    oResizeRange = oWS.get_Range("E8", "E8").get_Resize( Missing.Value, iNumQtrs);
    oResizeRange.Formula = "=SUM(E2:E6)";
    oResizeRange.Borders.get_Item( Excel.XlBordersIndex.xlEdgeBottom ).LineStyle 
        = Excel.XlLineStyle.xlDouble;
    oResizeRange.Borders.get_Item( Excel.XlBordersIndex.xlEdgeBottom ).Weight 
        = Excel.XlBorderWeight.xlThick;

    //Add a Chart for the selected data.
    oWB = (Excel._Workbook)oWS.Parent;
    oChart = (Excel._Chart)oWB.Charts.Add( Missing.Value, Missing.Value, 
        Missing.Value, Missing.Value );

    //Use the ChartWizard to create a new chart from the selected data.
    oResizeRange = oWS.get_Range("E2:E6", Missing.Value ).get_Resize( 
        Missing.Value, iNumQtrs);
    oChart.ChartWizard( oResizeRange, Excel.XlChartType.xl3DColumn, Missing.Value,
        Excel.XlRowCol.xlColumns, Missing.Value, Missing.Value, Missing.Value, 
        Missing.Value, Missing.Value, Missing.Value, Missing.Value );
    oSeries = (Excel.Series)oChart.SeriesCollection(1);
    oSeries.XValues = oWS.get_Range("A2", "A6");
    for( int iRet = 1; iRet <= iNumQtrs; iRet++)
    {
        oSeries = (Excel.Series)oChart.SeriesCollection(iRet);
        String seriesName;
        seriesName = "=\"Q";
        seriesName = String.Concat( seriesName, iRet );
        seriesName = String.Concat( seriesName, "\"" );
        oSeries.Name = seriesName;
    }                                                          
    
    oChart.Location( Excel.XlChartLocation.xlLocationAsObject, oWS.Name );

    //Move the chart so as not to cover your data.
    oResizeRange = (Excel.Range)oWS.Rows.get_Item(10, Missing.Value );
    oWS.Shapes.Item("Chart 1").Top = (float)(double)oResizeRange.Top;
    oResizeRange = (Excel.Range)oWS.Columns.get_Item(2, Missing.Value );
    oWS.Shapes.Item("Chart 1").Left = (float)(double)oResizeRange.Left;
}
NOTE: As written, this code uses the Excel 9.0 object library. When you added references to your project, if you selected the Excel 10.0 object library instead of the Excel 9.0 object library, search the code for comments that contain "//EXCEL10" and uncomment the line(s) of code to which the comment refers. Likewise, search the code for comments that contain "//EXCEL9" and comment the line(s) of code to which the comment refers.


Scroll to the top of the code window. Add the following line to the end of the list of using directives:
using System.Reflection;
Test the Automation Client
Press F5 to build and run the program.
Click Button1 on the form. The program starts Excel and populates data on a new worksheet.
When you are prompted to enter quarterly sales data, click Yes. A chart that is linked to quarterly data is added to the worksheet.

(c) Microsoft Corporation 2001, All Rights Reserved. Contributions by Joel Alley, Microsoft Corporation.

'programming > c#' 카테고리의 다른 글

엑셀 파일에서 데이터를 load할 때...  (0) 2003.10.30
프로젝트 배포  (0) 2003.10.20
Excel 파일 읽어오는 방법  (0) 2003.10.20

결혼하기 전에 끝내야 하는 일이 있는데...

 

도저히 안될거 같아서... 오늘은 야근하기로 했다.

야근해도 힘들거 같은데 쩝...

 

내가 깔끔하게 끝냈음 좋겠는데...

일은 잼있었다가 잼없었다 하고, 맘은 싱숭생숭하고..

 

괴롭다 ^^;;

 

'etc' 카테고리의 다른 글

500 히트 이벤트!!!  (0) 2003.11.03
[펌] 서울, 지하철 빨리 갈아타기  (0) 2003.10.22
[유머]경상도 사투리의 압축률!!  (0) 2003.10.17

예전에 인터넷에서 떠돌때부터 정말 유용한 정보라고 생각했던 것^^

 

----------------------------------------------------------------------------

충정로역
2호선에서 5호선 타려면 : 뒤에서 2번째 칸 2번째 문
5호선에서 2호선 타려면 : 뒤에서 3번째 칸 2번째 문

신도림역
2호선에서 국철 타려면 :(잠실행) 뒤에서 4번째 칸 두 번째 문
2호선에서 국철 타려면 :(신촌행) 앞에서 4번째 칸 두 번째 문
의정부행 국철 에서 2호선 타려면 : 뒤에서 4번째 칸 제일 앞 문
수원.인천행 국철에서 2호선 타려면 : 앞에서 5번째 칸 2번째 문
용산행 국철에서 2호선 타려면 : 앞에서 4번째 칸 3번째 문
부평행 국철에서 2호선 타려면 : 뒤에서 5번째 칸 4번째 문
2호선(잠실행)에서 2호선 가지선(까치산역행) 타려면 : 앞에서 5번째 칸 3번째 문
2호선(신촌행)에서 2호선 가지선 타려면 : 뒤에서 5번째 칸 2번째 문
2호선 가지선에서 2호선 타려면 : 맨 뒤에서 3번째 문

교대역
3호선(수서행)에서 2호선(잠실행) 타려면 : 앞에서 4번째 칸 첫번째 문
3호선(구파발행)에서 2호선(잠실행) 타려면 : 뒤에서 4번째 칸 첫번째
2호선(잠실행)에서 3호선 타려면 : 맨뒷문
2호선(신도림행)에서 3호선 타려면 : 맨앞문

을지로3가역
2호선(신촌행)에서 3호선 타려면 : 맨뒷문
2호선(잠실행)에서 3호선 타려면 : 맨앞문
3호선(구파발행)에서 2호선(신촌행) 타려면 : 앞에서 3번째 칸 맨앞문

수서역
3호선에서 분당행 타려면 : 뒤에서 3번째 칸 2번째 문
분당행에서 3호선 타려면 : 맨뒷문

복정역
8호선(모란행)에서 분당선으로:네번째칸 첫번째 문
8호선(암사행)에서 분당선으로:2번째칸 마지막 문
분당선(수서행)에서 8호선으로 2번째칸 4번째 문
분당선(오리행)에서 8호선으로 4번째칸 1번째 문

군자역
7호선에서 5호선으로 4번째칸 마지막문 또는 5번째칸 1번째 문
5호선(방화행)에서 7호선 온수행으로 맨 앞문
5호선(상일동,마천행)에서 7호선 온수행으로 맨 끝문
5호선(방화행)에서 7호선 수락산,등 행으로 맨 끝문
5호선(상일동,마천행)에서 7호선 수락산,등 행으로 맨 앞문

잠실역
2호선(신도림행)에서 8호선 타려면 : 맨뒷문
2호선(신촌행)에서 8호선 타려면 : 맨앞문
8호선(암사행)에서 2호선 타려면 : 맨뒷문
8호선(모란행)에서 2호선 타려면 : 맨앞문

합정역
6호선(응암순환)에서 2호선으로: 5-2 또는 3-2
6호선(봉화산)에서 2호선으로: 6-2 또는 4-2
2호선(당산, 신도림)에서 6호선: 2-2
2호선(홍대, 시청)에서 6호선: 9-3
6호선(응암순환) 3-2 의 통로와 6호선(봉화산) 6-2 의 통로에는
에스컬레이터가 설치 되어있고, 나머지 통로는 그냥 계단임

 

----------------------------------------------------------------------------

'etc' 카테고리의 다른 글

으앙...집중 안된다..  (0) 2003.10.29
[유머]경상도 사투리의 압축률!!  (0) 2003.10.17
짜증나는 정치인들...  (0) 2003.10.15

Deploying Applications

The .NET Framework provides a number of basic features that make it easier to deploy a variety of applications. This section briefly describes those features and provides information about packaging and distributing applications with the .NET Framework.

In This Section

.NET Framework Deployment Features
Provides a brief overview of the deployment features in the .NET Framework
.NET Framework Deployment Basics
Provides an overview of packaging and distributing .NET Framework applications.
Deployment Scenarios
Describes several possible deployment scenarios for .NET Framework applications.
How the Runtime Locates Assemblies
Describes how the common language runtime determines which assembly to use to fulfill a binding request.
Redistributing the .NET Framework
Describes where to obtain the .NET Framework redistributable package, Dotnetfx.exe, and how to use it to deploy the .NET Framework on user and server computers.

Related Sections

Deploying XML Web Services
Describes how to deploy an XML Web service.
Packaging and Deploying Resources
Describes how to package and deploy resources.
Deploying an Interop Application
Describes how to deploy an interop application.
Developing a Simple Windows Forms Control
Describes key steps for authoring a custom Windows Forms control.
Developing a Simple ASP.NET Server Control
Describes key steps for authoring a custom server control.
Deploying an Application for COM Access
Describes how to deploy applications for use by COM clients.

'programming > c#' 카테고리의 다른 글

엑셀 파일에서 데이터를 load할 때...  (0) 2003.10.30
엑셀 파일 생성 코드  (0) 2003.10.30
Excel 파일 읽어오는 방법  (0) 2003.10.20

참조 : http://www.c-sharpcorner.com

 

How to Open and Read an Excel Spreadsheet into a ListView in .NET

Submitted ByUser LevelDate of Submission
Michael GoldIntermediate11/26/2001


Figure 1 - Excel Spreadsheet read into a ListView

    Source Code:  ExcelReadMG.zip

The Interoperability services make it very easy to work with COM Capable Applications such as Word and Excel.  You can also refer to my previous article on the topic: Real-time Stock Quotes in Excel using .NET for more information on accessing Excel via .NET.  This article was written in response to a question asking How do I open and excel file and read it using .NET? 

The first step is to create a reference in your project to Excel 9.0 Objects Library.  This is done by right mouse clicking on the References folder in the Solution Explorer and choosing Add Reference. This brings up the Tab Dialog below.  Choose the COM Tab and pick Microsoft Excel 9.0 Objects Library.

Figure 2 - Adding an Excel Reference

This action puts an Interop.Excel.dll and Interop.Office.dll into your bin directory so you can manipulate excel.  

Now we can declare our Excel Application Object and the compiler will recognize it:

private Excel.Application ExcelObj = null;

Excel is launched and an Application reference is obtained in the constructor of our form.  First an Excel Application object is constructed.  Then we check to make sure Excel was actually started. If it was, we have a valid application object and we can now use it to open a file:

public Form1()
{

// Initialize the Windows Components

InitializeComponent();

ExcelObj = new Excel.Application();

//  See if the Excel Application Object was successfully constructed
if (ExcelObj == null)
 {
  MessageBox.Show("ERROR: EXCEL couldn't be started!");
  System.Windows.Forms.Application.Exit();
 }

//  Make the Application Visible

  ExcelObj.Visible = true;

}

The code for opening the Excel file is shown below.  The code uses the OpenFileDialog component to get the path name for the Excel file.  The Excel file is opened using the WorkBooks collections' Open method.  This method takes 15 parameters with the following definition.  

Function Open(Filename As String, [UpdateLinks], [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreReadOnlyRecommended], [Origin], [Delimiter], [Editable], [Notify], [Converter], [AddToMenuRecentlyUsed]) As Workbook

We really are only interested in the FileName, but have added the other default parameters for your reference.  There is also an OpenText method in Workbooks for opening tab or comma delimited text files.

private void menuItem2_Click(object sender, System.EventArgs e)
{

 // prepare open file dialog to only search for excel files (had trouble setting this in design view)
  this.openFileDialog1.FileName = "*.xls";
  if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
   {

  // ***********  Here is the call to Open a Workbook in Excel ****************
  // It uses most of the default values (except for the read-only which we set to true)
    Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(
          openFileDialog1.FileName, 0, true, 5,
          "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false,
          0, true);

    // get the collection of sheets in the workbook
    Excel.Sheets sheets = theWorkbook.Worksheets;

   // get the first and only worksheet from the collection
   // of worksheets

    Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);

   // loop through 10 rows of the spreadsheet and place each row in the list view
   for
(int i = 1; i <= 10; i++)
    {
     Excel.Range range = worksheet.get_Range("A"+i.ToString(), "J" + i.ToString());
     System.Array myvalues = (System.Array)range.Cells.Value;
     string[] strArray = ConvertToStringArray(myvalues);
     listView1.Items.Add(new ListViewItem(strArray));
   }

  }

}

You also may want to note the ConvertToStringArray method which is used to convert a System.Array into a string array.  If someone knows an easier way to do this, please let me know and I'll alter the article.  The problem is that an Excel Array comes back as two dimensional even if you are selecting a range of a single row, so you need to change the 2-d array into something the listview can accept. Also the listview array is 0 based and the Excel range array is 1 based.

string[] ConvertToStringArray(System.Array values)
{

// create a new string array
string
[] theArray = new string[values.Length];

// loop through the 2-D System.Array and populate the 1-D String Array
 for (int i = 1; i <= values.Length; i++)
  {
   if (values.GetValue(1, i) == null)
    theArray[i-1] = "";
  else
   theArray[i-1] = (string)values.GetValue(1, i).ToString();
  }

  return theArray;
}

That's all there is to it!  Now you can read in all your old Excel Databases.  Perhaps you can even use ADO.NET to place them into a database! (Could be the topic for the next article.  ;-)

'programming > c#' 카테고리의 다른 글

엑셀 파일에서 데이터를 load할 때...  (0) 2003.10.30
엑셀 파일 생성 코드  (0) 2003.10.30
프로젝트 배포  (0) 2003.10.20

Port Number

포트 넘버는 0~65536 내에서 사용 가능 합니다..

HTTP:80포트

FTP:21포트

TELNET:23포트

GOPHER:70포트

NEWS:119포트

------------------------여기 부터 자료 발취-------------
참고 윈도우에서 사용하는 포트들

7 echo Echo

9 discard Discard; alias = sink null

13 daytime Daytime

17 qotd Quote of the day; alias = quote

19 chargen Character Generator; alias = ttyst source

20 ftp-data File Transfer (Default Data)

21 ftp File Transfer (Control)

23 telnet Telnet

25 smtp Simple Mail Transfer; alias = mail

42 nameserver Host Name Server; alias = nameserver

43 nicname Who Is; alias = nicname

53 domain Domain Name Server; alias = nameserver, dns

66 sql*net Oracle SQL*NET

67 bootpc DHCP/BOOTP Protocol Server

68 bootpc DHCP/BOOTP Protocol Server

69 tftp Trivial File Transfer

70 gopher Gopher

79 finger Finger

80 www WWW HTTP

90 Default WINS name server destination port

107 rtelnet Remote Telnet Service

108 snagas SNA Gateway Access Server

109 pop2 Post Office Protocol Version 2

110 pop3 Post Office Protocol Version 3

118 sqlserv SQL Service

119 nntp Network News Transfer Protocol; alias=usenet

123 ntp Network Time Protocol; alias=ntpd ntp

137 netbios-ns NetBIOS Name Service

138 netbios-dgm NetBIOS Datagram Service

139 netbios-ssn NetBIOS Session Service
143 IMAP

161 snmp SNMP; alias=snmp

162 snmptrap SNMPTRAP

177 xdmcp X Display Manager Control Protocol

178 nextstep Nextstep Window Server

194 irc Internet Relay Chat Server

443 SSL
445 SMB
1433 SQL
1761 SMS 2.0
3389 터미널클라이언트

4661~4662 : Edonkey

5631 (TCP) pcanywhere
5632 (UDP) pcanywhere

6660~6669 : mIRC

9292~9293 : 구루구루

'os > windows' 카테고리의 다른 글

[TIP] 윈도우 2003 팁.. 총정리  (3) 2004.04.01
XP 최적화 팁!!  (2) 2003.10.09
윈도우 단축키 모음  (0) 2003.10.08
경상도사투리의 놀라운 압축 능력은 알집(Alzip)의 압축률도 따라올 수 없다. ( )는 압축비를 나타낸다

▶ 고등학교 수학 선생님 → 고다~~꾜쏵쌤(9:5)
▶ 저것은 무엇입니까? → 저기 뭐꼬?(2:1)
▶ 할아버지 오셨습니까? → 할뱅교?(3:1)
▶ 저기있는 저 아이는 누구입니까? → 자~~는 누꼬?(13:4)
▶ 그 아인 벌써 멀리 도망갔는걸! → 글마 토끼따(12:5)
▶ 니가 그렇게 말을 하니까 내가 그러는 거지, 니가 안 그러는데 내가 왜 그러겠니? → 니 글카이 내 글카지, 니 안 글카믄 내 글카겠나?(31:18)
▶ 나 배고파!/밥 차려놨어! 밥 먹어! → 밥도!(2:1)/자! 무라!(8:3)
▶ 야! 저 녀석 구석에 처박어 → 점마, 공가라!(2:1)
▶ 어, 이일을 어떻게 하면 좋아? → 우야노!(11:3)
▶ 어쭈, 이것 봐라! → 이기~~요!(2:1)
▶ 왜 그러시는가요? → 멍교?(7:2)
▶ 이 물건 당신 건가요? → 니끼가?(8:3)
▶ 네~~!그건 제 물건입니다 → 언도~!(9:2)

'etc' 카테고리의 다른 글

[펌] 서울, 지하철 빨리 갈아타기  (0) 2003.10.22
짜증나는 정치인들...  (0) 2003.10.15
정기검진  (0) 2003.10.08

이번에는 인덱스를 고르는 방법에 대한 글 입니다.

저도 아직 다 안 읽어봤는데... 역시 시간과 능력 되는 만큼만 번역해 놓겠습니다.

 

 

How to Select Indexes for
Your SQL Server Tables


by Manish Rawat

 

Indexing is one of the most crucial elements in increasing the performance of SQL Server. A well-written query will not show its effectiveness unless powered by an appropriate index or indexes on the table(s) used in a query, especially if the tables are large.

 

Indexes exist to make data selection faster, so the focus of this article is on ways you can select the best indexes for faster data retrieval. This is done in a two-step process.

(인덱스는 데이터의 검색을 빠르게 한다. 그래서, 이 글에선 빠른 데이터 검색을 위한 가장 좋은 인덱스를 선택하는 방법에 촛점을 맞춘다. 이것은 두 단계로 이루어진다.)

  • Step One: Gathering Information
    (첫번째 단계 : 정보 수집)
  • Step Two: Taking Actions on the Information Gathered 
  • (두번째 단계 : 수집된 정보를 바탕으로 작업 수행)

 

Indexing can be quite a challenging task if you are not familiar with your databases, the relationships between tables, and how queries are written in stored procedures and embedded SQL. How many companies you have worked for have a proper ERD diagram of their databases and have followed the textbook method style of programming? In the real world, time is often limited, resulting in poor SQL Server database performance.

If you have been tasked with optimizing a database's performance (at least to a respectable level), or you want to be proactive with your databases to prevent potential future performance issues, following these steps should help you in tuning tables, just as they have helped me. These steps are applicable at any stage of project, even if a deadline is just around the corner.

 

Step One (Gathering Information)

Interact with the people who know about the database and its table structures.

(데이터베이스와 그 데이터베이스의 테이블 구조에 대해 아는 사람들과 대화를 나눈다.)

If you know it already, that’s great. This is very important and makes your life easier.

(만약 이미 알고 있다면 좋은 일이다. 이것은 매우 중요하며, 작업을 쉽게 만들어 준다.)

 

1) Identify key tables, based on: (아래의 내용을 기반으로 KEY 테이블을 찾는다.)

  • Static tables (often called master tables).
    (정적 테이블 - 마스터 테이블이라 불린다.)
  • Highly transactional tables.
    (많은 트랜잭션이 발생하는 테이블)
  • Tables used within a lot of stored procedures or embedded SQL.
    (임베디드 SQL이나 저장프로시저에서 많이 사용된 테이블)
  • Tables with an index size greater then its data's size. You can use sp_spaceused with the table name to find table space usage.
    (데이터 크기보다 큰 사이트의 인덱스를 갖는 테이블. 'sp_spaceused'를 이용해서 찾을 수 있다.)
  • Top 10 or 15 big size tables. See a prior year database if available or applicable. The idea is to identify the largest tables in the database after it is in production. There is a script available at http://www.sqlteam.com/item.asp?ItemID=282 that you may find useful.
  • (전체 테이블 중 10~15위권 안의 사이즈가 큰 테이블.)

2) Identify the most frequently called stored procedures/queries and list all of the tables used by them.

(가장 자주 사용되는 저장 프로시저나 쿼리들을 찾아내고, 이 저장 프로시저나 쿼리에서 사용되는 테이블을 목록화한다.)

 

3) Get the SQL Profiler trace of :

  • Production site (if available/applicable). Running a trace on the production box during typical activity is worth the effort and will be fruitful in later analysis.

  • Testing site (if one is available/applicable).

  • Otherwise, get if from your development server.

It is advisable to write down information you collect in a document for later retrieval.

 

4) Before we dive into analyzing the information gathered, here are few things to keep in mind while tuning your tables:

  • To see the Query/Execution plans of queries, highlight them in SQL Query Analyzer (isqlw.exe) and select Display Estimated Query Plan (Cntl+L) from the Query menu. If you want to see the query plan of a stored procedure, select Show Execution Plan (Cntl+k) and execute the stored procedure. Also, turn on the “Set Statistics IO on “ command. Examining Query/Execution plans can be a bit time consuming. But you will find it easier if you really understand the database and its tables before you begin.

  • You need to have a good foundation on how clustered and non-clustered indexes work. See this URL for a good foundation on this topic: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/architec/8_ar_da2_8sit.asp

 

Preferred SQL Server Index Types

When you use Query Analyzer to produce a graphical execution plan, you will notice that there are several different ways SQL Server uses indexes.

1) Clustered Index Seek: A Clustered Index Seek uses the seeking ability of indexes to retrieve rows directly from a clustered index. In most cases, they provide the best performance on SELECT statements.

In Query Analyzer, go to pubs database. Type following query:

SELECT * FROM authors WHERE au_id LIKE'2%'

Highlight the query and press. (Cntl + L) or highlight the query and press F5. You will see the following in the “Estimated Execution Plan” tab.

Take a close look at the Argument section of the above illustration. Notice that the “UPKCL_auidind” clustered index is used to retrieve the data.

2) Index Seek: An Index Seek uses a non-clustered index to retrieve data, and in some ways, acts like a clustered index. This is because all of the data retrieved is fetched from the leaf layer of the non-clustered index, not from any of the data pages. You often see this behavior in a covering index.

In Query Analyzer, go to pubs database and type following query:

SELECT title_id, title FROM titles WHERE title LIKE 't%'

Highlight the query and press. (Cntl + L) or highlight the query and press F5. You will see the following in the “Estimated Execution Plan” tab:

In the Argument section in the above illustration, note that the “titleind” non-clustered index is used to retrieve the data.

3) Bookmark Lookup: A Bookmark Lookup uses a non-clustered index to select the data. It starts with an index seek in the leaf nodes of the non-clustered index to identify the location of the data from the data pages, then it retrieves the necessary data directly from the data pages. Leaf nodes of non-clustered indexes contain row locator that point to the actual data on data pages.

In Query Analyzer, go to the pubs database. Type following query:

SELECT * FROM titles WHERE title LIKE 't%'

Highlight the query and press. (Cntl + L) or highlight the query and press F5. You will see the following in the “Estimated Execution Plan” tab.

In the Argument section of the Index Seek, notice that the "titlecind" non-clustered index is used, but once the data pages are identified from looking them up in the leaf pages of the non-clustered index, then a Bookmark Lookup must be performed. Again, a Bookmark Lookup is when the Query Optimizer has to lookup the data from the data pages in order to retrieve it. In the Argument section of the Bookmark Lookup, note that a Bookmark Lookup called "Bmk1000" is used. This name is assigned automatically by the Query Optimizer.

4) Scans: Scans (Table scans, Index scan, and Clustered Index scans) are usually bad unless the table has very few rows and the Query Optimizer determines that a table scan will outperform the use of an available index. Watch out for scans in your execution plans.

In Query Analyzer, go to pubs database and type the following query:

SELECT * FROM employee WHERE hire_date > '1992-08-01'

Highlight the query and press. (Cntl + L) or highlight the query and press F5. You will see the following in the “Estimated Execution Plan” tab:

Notice that in this case, a Clustered Index Scan was performed, which means that every row in the clustered index had to be examined to fulfill the requirements of the query.

Now that we understand some of the basics of how to read Query Execution Plans, lets take a look at some additional information that you will find useful when analyzing queries for proper index use:

  • If you create multiple query or a stored procedure execution plans at the same time in Query Analyzer, you can compare the cost of each query or stored procedure to see which is more efficient. This is useful for comparing different versions of the same query or stored procedure.
    (쿼리분석기에서 다수의 쿼리나 저장프로시저에 대한 실행계획을 동시에 보면, 각각의 쿼리나 저장 프로시저의 비용을 보다 효과적으로 비교해 불 수 있다. 이런 방법은 같은 쿼리나 저장 프로시저의 다른 버젼들 간의 비교에 보다 유용하게 활용할 수 있다.)

 

  • Primary Key constraints create clustered indexes automatically if no clustered index already exists on the table and a non-clustered index is not specified when you create the PRIMARY KEY constraint.
    (기본키 제약조건은 테이블에 클러스터드 인덱스가 존재하지 않는 경우 클러스터드 인덱스를 자동적으로 생성한다.(역자주-7.0의 경우 넌클러스터드 인덱스였다. 2000이 되면서 바뀐 부분) 그리고 기본키 제약조건을 만들 때 넌클러스터드인덱스는 만들어지지 않는다.)
  • Non-clustered indexes store clustered index keys as their row locators. This overhead can be used as a benefit by creating a covering index (explained later). Using covering indexes requires caution.

  • A table's size comprises both the table’s data and the size of any indexes on that table.

  • Adding too many indexes on a table increases the total index size of atable and can often degrade performance.

  • Always add a clustered index to every table, unless there is a valid reason not to, like the table has few rows.

  • Seeks shown in Query/Execution plans for SELECT statements are good for performance, while scans should be avoided.

  • A table's size (number of rows) is also a major factor used up by Query Optimizer when determining best query plan.

  • Index order plays an important role in many query plans. For example, in the authors table of the pubs database, a non-clustered index is defined in the order of au_lname, then au_fname.


    Fine Query A

    SELECT * FROM authors WHERE au_lname like 'r%'

    This uses a Bookmark Lookup and an Index seek.

     

    Fine Query B

    select * FROM authors WHERE au_lname LIKE 'r%' AND au_fname like ‘a’

    This uses a Bookmark Lookup and an Index Seek.

     

    Not so Fine Query C

    SELECT * FROM authors WHERE au_fname LIKE ‘a’

    This uses a Clustered Index Scan.

  • SQL Server 2000 (not earlier versions) offers both ascending and descending sort orders to be specified in an index. This can be useful for queries, which uses the ORDER BY DESC clause.

  • To find a particular word (for e.g. a table name) used in all stored procedure code, you can use the following code to identify it. For example, you can use this to find out a list of SP’s using a table.

    SELECT DISTINCT a.name AS SPName FROM syscomments b, sysobjects a

    WHERE b.text LIKE '%authors%' AND a.id=b.id AND a.type='P'

This query brings all SP’s having text “authors” in their code. Note that this query might bring extra SP’s, for example, if a stored procedure uses text in a comment.

 

Step Two: What to Do Once You Have Gathered the Necessary Information

Actions for Key Tables

For static tables (tables that rarely, if ever change), you can be liberal on the number of indexes that can be added. As mentioned earlier, too many indexes can degrade the performance of highly transactional tables, but this does not apply to tables whose data will not change. The only consideration possible could be disk space. Set all index fill factors on static tables to 100 in order to minimize disk I/O for even better performance.

For highly transactional tables, try to limit the number of indexes. Always keep in mind that a non-clustered index contains the clustered index key. Because of this, limit the number of columns on your clustered index in order to keep their size small. Any index for busy transactional tables has to be highly justifiable. Choose the fill factor with caution (usually 80 to 90%) for these indexes in order to avoid potential page splitting.

For tables used lot in stored procedures/embedded SQL, these tables play an important role in the total application lifetime as they are called most often. So they require special attention. What is important is look at how tables are being accessed in queries in order to eliminate scans and convert them into seeks. Watch the logical I/O used by "Set Statistics IO on" to help you determine which queries are accessing the most data. Less logical I/O is better than more. Choose clustered index with caution. Depending on how transactional the table is, choose a higher fill factor.

For tables with index size greater then data size implies a lot of indexes, so review indexes and make sure their existence is useful and justified.

For the Top 10 or 15 largest tables, keep this fact in mind when creating indexes for these types of tables, as their indexes will also be large. Also check to see if the tables are static or non-static, which is helpful information when deciding what columns need to be indexed.

For the most frequently called Stored procedures/Embedded SQL, See the Query plans and Logical I/O page use.

SQL Profiler Trace is a very good tool. It tracks calls getting executed in SQL Server at any given point of time, their execution time, I/O reads, user logins, executing SQL statement, etc. It can also be used as debugging tool. An analysis of a Profiler trace is important to identify slow running queries. You can set the duration to > 100ms to see queries which take more then 100 milliseconds to execute.

 

Using a Covering Index + Non-clustered Index Uses Clustered Index as a Row Locator

One can leverage the fact that non-clustered indexes store clustered index keys as their row locators. Meaning that a non-clustered index can behave as a clustered index if the index has all of the columns referenced in SELECT list, WHERE clause, and JOIN conditions of a query.

Example 1

In the Orders table the NorthWind database, there currently is a non-clustered index on the ShippedDate column.

Try running the following:

SELECT ShippedDate, shipcity FROM orders WHERE ShippedDate > '8/6/1996'

The query plan of statement produces a Clustered Index Scan.

Now add the column shipcity to the non-clustered index on ShippedDate.

CREATE INDEX [ShippedDate] ON [dbo].[Orders] ([ShippedDate], [ShipCity]) WITH DROP_EXISTING

Now run the query again. This time, the query plan of statement produces an Index Seek.

This magic happened because all fields (ShippedDate and ShipCity) in the SELECT and the WHERE clauses are part of an index.

Example 2

In the Titles table of the Pubs database, check out the following execution plan for this query:

SELECT title_id, title FROM titles WHERE title LIKE 't%'

Notice that the execution plan shows an Index Seek, not a Bookmark Lookup (which is what you usually find with a non-clustered index). This is because the non-clustered index on the Title column contains a clustered index key Title_Id, and this SELECT has only Title_Id, Title in the SELECT and in the WHERE clause.

 

Now the Hard Part Starts

By following the simple steps outlined here, you get useful pieces of information in no time that can help you improve the performance of your database. After you have data in front of you put it to work. These minor inputs will bring a majority of your results.

 

Published with express written permission of the author. Copyright 2002.

'programming > MSSQL' 카테고리의 다른 글

[Tip]mdf파일 만으로 DB 복구하는 방법  (0) 2003.11.12
[튜닝] index...  (0) 2003.10.14
SQL Server에서 Blocking을 줄이기 위한 전략!!  (4) 2003.10.06



< 출처 : YTN >

정말 어의 없는 정치인들이군요.

 

정확한 출처는 http://www.ytn.co.kr/news/news_mov_play.php?m_cd=0302&idx=1150&h_cd=&mode=view#

입니다.


 

'etc' 카테고리의 다른 글

[유머]경상도 사투리의 압축률!!  (0) 2003.10.17
정기검진  (0) 2003.10.08
귀국...  (0) 2003.10.04

태국쪽 DB서버의 CPU사용량이 갑자기 증가되어 그 원인을 찾던 중...

그 문제가 index에 있는것을 알았다.

헐... 데이터라고는 고작 12000row 정도 밖에 없는 테이블인데...

 

그 테이블에 인덱스가 없다고.. cpu사용량이 70%까지 올라갔다가..

index하나 만들어주니 20%이하로 줄다니...

 

하여간 항상 index를 제일 먼저봐야겠다는 생각을 다시 한번 했다.

 

[XP팁1] DOS모드에서 XP설치하는 방법

XP cd의 i386아래에 있는 winnt.exe가 dos모드에서 XP를 설치하는 프로그램이다.
도스모드 부팅시 smartdrv.exe 프로그램을 실행후 XP를 설치하면 더 빠른 속도로 진행된다.

도스모드 XP인스톨방법에 질문이 많아서 쉽게 정리해본다.
1.도스부팅티스켓(Win98/me부팅디스켓,XP에서 포맷시 만들수있는MS-Dos부팅디스켓)으로 부팅한다.
2.smartdrv.exe를 실행한다.
3.윈도우XP CD의 winnt.exe가 있는 위치를 지정한다.
4.실행한다.



[XP팁2] 메뉴팝업속도를 빠르게 하기

메뉴창이 열리는 속도가 느린것을 감지할수 있는데 빠르게 하는 방법이다.

HKEY_CURRENT_USERControlPaneldesktop

에서 MenuShowDelay 항목의 값이 기본 400으로 셋팅되어 있는데 이 값을 0 에서 400 사이에서 바꾼다. (0의 값이 최고 빠르다)



[XP팁3] 무응답 응용프로그램 타임아웃 시간줄이기

윈도우 XP는 해당 응용프로그램이 정지하면 해당 프로그램이 응답이 기다리는 시간이 설정되어 응답이 없으면 해당프로그램을 정지시킨다.

이 타임아웃시간을 조절해서 윈도우 XP 의 무응답 시간을 줄일 수 있다.

HKEY_CURRENT_USERControl PanelDesktop

에서 HungAppTimeout 값이 기본적으로 5000(5초)으로 설정되어있을 것이다.

이 값을 더블 클릭해서 1000 (1000 = 1초)로 설정해준다.



[XP팁4] 윈도우 창이 뜨는 속도 높이기

윈도우즈의 속도를 조금이라도 높이고 싶은 사람들에게는 창의 최대화 , 최소화에 따른 애니메이션 효과도 속도를 저하 시키는 원인이 될 것이다.

여기서는 그 속도를 높여주는 방법을 소개한다.

HKEY_CURRENT_USERControl Paneldesktopwindowmetrics

로이동 우측 화면에서 마우스 오른쪽 버튼을 누른후 ``문자열 값``을 선택하고 MinAnimate라고 입력.

그다음 이 값을 더블클릭하여 값을 ``0``으로 설정.

이것으로 창이 열리거나 닫힐때 최대화 , 최소화 애니메이션 표시가 되지 않아 창의 표시속도가 눈에 띄게 빨라진다.



[XP팁5] 부팅시 NumberLock 설정방법

HKEY_CURRENT_USERControlPanelKeyboard

에서 InitialKeyboardIndicators 항목의 키값을 2로 고침



[XP팁6] <시작>에서 문서메뉴 삭제하기

HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer

오른쪽에 등록→DWORD값 에서 NoRecentDocsMenu 입력하고 값을 1로 입력.



[XP팁7] 다운로드 갯수 변경하는 방법

HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionInternet Settings

이 키 또는 오른쪽 창의 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 [등록]→[DWORD 값] 을 선택.

새 DWORD 값의 이름에 MaxConnectionsPerServer 라고 입력.

이 값을 더블클릭하고 값의 데이터 란에 원하는 다운로드 갯수를 입력.



[XP팁8] <시작> 에서 도움말메뉴 삭제하기

HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionPoliciesExplorer

이 경로에서 [새로만들기] 에서 [DWORD값]을 하나 만들고 이름을 [NoSMHelp]으로 한다.

더블 클릭해서 데이터 값을 1로 지정.

재부팅하거나 로그오프하면 설정이 적용.

복원은 값을 0으로 하면 된다.



[XP팁9] 인터넷 익스플로러 로고 바꾸기

먼저 로고로 쓸 이미지를 준비한다(이때 그림 파일은 22×22픽셀의 bmp 형식이어야 한다).

HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerToolbar로 이동.

오른쪽 창에서 마우스 오른쪽 버튼을 눌러 [새로 만들기] 에서 [문자열 값] 메뉴를 고른다.

새로운 문자열의 이름을 SmBrandBitmap 로 바꾸고 값 데이터 란에 앞에서 준비한 그림 파일의 경로와 이름을 적어준다(여기서는 c:main.bmp).

F5 키를 누르고 인터넷 익스플로러를 수행하면 화면 오른쪽 위의 로고가 바뀐 것을 확인할 수 있다.


※ 익스플로러 툴바에 배경그림 삽입하기 ※

HKEY_CURRENT_USERSOFTWAREMicrosoftInternet ExplorerToolbar

위의 위치에 문자열을 삽입한 후 "BackBitmap"="c:windowsbg-rain.bmp" 를 작성하면 된다.

c:windowsbg-rain.bmp 대신 자신이 원하는 그림의 경로를 적어준다.

참고 : bmp 파일만 가능.



[XP팁10] 익스플로러 시작시 풀스크린으로 항상 시작

HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMain

Main 항목 오른쪽 창에서 FullScreen 항목을 찾은후 더블클릭해서 no를 yes 바꾼다.

레지스트리 프로그램을 종료 후 재부팅 하면 끝.

익스플로어 공급자 이름 바꾸기

gpedit.msc 를 실행.

사용자 구성 - Internet Explorer 유지/보수 - 브라우저 사용자 인터페이스 - 브라우저 제목 에서 임의의 이름을 넣음.

HKCUSoftwareMicrosoftInternet ExplorerMain

에서 Window Tile 을 바꿈.

윈도우 미디어 플레이어 목록 지우는 경로

HKEY_CURRENT_USERSoftwareMicrosoftMediaPlayerPlayer __...



[XP팁11] CD-ROM 자동인식 비활성화

윈도우에서 새로운 CD를 삽입하였을때 autorun.inf 를 인식하여 자동으로 실행하는 기능을 Off 하려면 regedit를 실행하여 다음 값을 변경한다.

HKEY_LOCAL_MACHINESYSTEMCurrentControlSet001ServicesCdrom

에서 Autorun값을 '0'으로 한다.



[XP팁12] 인터넷익스플로러 로딩속도 향샹법

1) DNS캐쉬수정으로 브라우저속도 높이기

HKEY_LOCAL_MACHINESystemCurrentControlsetServicesDnscacheParameters

에서 다음항목의 값을 입력(없으면 새로 오른쪽 마우스 클릭하여 새로만들기->DWORD값-10진수로 만든다)

CachehHashTableBucketSize---->1
CachehHashTableSize---------->384
MaxCacheEntryTtlLimit-------->64000
MaxSOACacheEntryTtlLimit----->301

2)HKEY_USER.DefaultSoftwareMicrosoftWindowsCurrentVersionInterSettings

에서 [새로만들기] [DWORD] 값을 다음과 같이 만든다(값은 16진수로 선택)

MaxConnectionsPerSever------>20
MaxConnectionsPer1_0Sever--->20

HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInterSettings

에서도 위와 같이 값을 만든다

MaxConnectionsPerSever------>20
MaxConnectionsPer1_0Sever--->20

3) HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerRemoteComputerNameSpace

에서 {D6277990-4C6A-11CF-8D87-00AA0060F5BF} 폴더 자체를 삭제



[XP팁13] L2캐쉬 지정으로 속도향상 시키기

Secondlevel Datacache(L2Cache) 는 CPU의 작업속도에 매우 중요한 기능을 담당한다.

펜3코퍼마인에 내장된 CPU와 같은 속도로 동작하는 이 빠른 L2캐쉬에 데이타를 일정량 올려놓을 수 있기때문에,

상대적으로 엄청 느린 메모리로만 데이터를 처리할때보다 작업효율이 더욱 뛰어날수밖에 없다.

일반적으로 xp가 cpu와 L2Cache의 값을 자동으로 인지하게 된다.

그러나, 종종 xp가 이것을 할 수 없을 경우가 발생한다.

그래서 cpu의 작업속도를 향샹시키기 위해서는 레지스트리 값을 조작해줘야 한다.

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management

에서 오른쪽에 SecondLevelDataCache항목을 고른다.

자신의 cpu에 맞는 10진수 값을 다음과 같이 수정한다.

AMD Duron → 64입력
CeleronA/celeron2 → 128입력
PII mobile/PIII E(EB)(칩형태 256K L2캐쉬내장 펜3 코퍼마인)/P4/AMD K6-3/AMD THUNDERBird/Cyrix III → 256입력
AMD K6-2/PII/PIII katmai(초기 카트리지형식 펜3 카트마이)/AMD Athlon → 512입력
PII Xeon/PIII Xeon → 1024입력

재시작한다.



[XP팁14] 캐쉬메모리 체적화로 속도 높이기

디스크캐시는 윈xp에서 매우 중요한 역할을 담당한다. 그렇지만, xp의 기본 입출력 페이지
파일 셋팅은 매우 민감해서 xp의 작업속도를 제한하게 된다. 다음은 램의 크기에 따른 몇
가지 값들이다. 램의 크기에 맞게 다음을 수정하시면, xp의 작업속도를 가속시킬 수 있다.

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management

에서 마우스 오른쪽 버튼 클릭하여 [새로만들기] [DWORD]값을 선택.

새값에 IoPageLockLimit 라고 입력(대소문자 주의).

IoPageLockLimit를 더블클릭하여 아래 보기에서 자신의 램 사이즈에 맞는 16진수(hex)값을 다음과 같이 수정한다.

64M: 1000;
128M: 4000;
256M: 10000;
384M: 22000;
512M or more: 40000.

재시작한다.



[XP팁15] 폴더를 열었을때 화일아이콘의 화면출력(Refrash rate) 속도 향상

HKEY_LOCAL_MACHINESystemCurrentControlSetControlUpdate

로 이동.

오른쪽 창의 UpdateMode 에서 오른쪽 마우스 버튼을 클릭하고 [수정] 을 선택, value를 1에서 0으로 바꾼다.



[XP팁16] 내컴퓨터의 [공유문서] 제거방법

컴퓨터에 보면 여러사용자가 공유할 수 있는 공유문서가 있다.

공유문서에는 공유그림 공유음악등이 있는데 필요하지 않는 경우 삭제할 수 있다.

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerMyComputerNameSpaceDelegateFolders

에서 59031a47-3f72-44a7-89c5-5595fe6b30ee 를 찾아서 삭제(완전히 없어진건 아니고 보이지만 않을뿐이다).



[XP팁17] 지워도 보이는 프로그램목록지우기

프로그램 추가 에서 지우지 않고 그냥 프로그램의 언인스톨러를 제거했을때 프로그램추가 에서 목록이 그대로 남아있을 때가 있다.

그럴때는 지우지도 못하고 어쩔때는 설치가 잘 안될수도 있다.

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall

에서 프로그램 추가에 있는 목록이 보일것이다.

그중에서 제거할 목록을 선택하고 삭제 하면 된다.



[XP팁18] 로그온 때 메시지 띄우기

HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionWinlogon

으로 이동한다.

오른쪽 창에서 마우스 오른쪽 버튼을 누르면 나타나는 [새로 만들기] [문자열 값]을 선택.

문자열의 이름을 `LegalNoticeText`라고 써 넣고 [Enter] 키를 누른다.

앞에서 만들어 놓은 문자열을 마우스로 두 번 누르면 [문자열 편집] 대화 상자가 나타난다.

[값 데이터] 입력상자에 화면에 표시할 내용을 써 넣고 [확인] 버튼을 누른다.

같은 방법으로 `LegalNoticeCaption`이라는 문자열 값을 만들고 [값 데이터]에 메시지 상자의 제목을 적는다.

[확인] 버튼을 누른다.

재부팅한다.



[XP팁19] 필요없는 서비스항목 해지하여 부팅속도 올리기

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun 삭제

시작->실행->services.msr 입력한후 나타나는 서비스 항목중에서 필요없는 기능을 중지시킨다

(시작-실행-msconfig-시작프로그램 편집 으로 해도 된다).

Automatic Updates
자동업데이트 기능. 해제하시면 수동으로만 업데이트 됩니다.

Help and Support
도움말 및 지원센터... 윈도우 도움말이 불필요하다고 여겨지면 해제.

NetMeeting Remote Desktop Sharing
인터넷외의 인트라넷, 원격제어등을 사용하지 않는다면 해제

Performance Logs and Alerts
원격제어시 원격 컴퓨터의 정보등을 수집하는 서비스... 원격제어 사용하지 않는다면 해제

Portable Media Serial Number
컴퓨터에 연결된 휴대용 음악장치의 시리얼넘버검색(-_-무슨말인지 필자도 이해 안되지만...
아무짝에 쓸모없어 보임...

Secondary Logon
다른 계정을 사용하지 않는다면(단독으로 사용하는 컴퓨터라면) 해제.

Smart Card Helper
플러그 앤 플레이를 지원하지 않는 레거시 스마트 카드를 지원하도록 설정.
레거시 스마트 카드를 사용하지 않는다면 당근 해제.

System Restore Service
시스템 복원 서비스... 시스템 복원 사용하지 않는다면 해제.

Telnet
원격 사용자가 이 컴퓨터에 로그온하여 프로그램을 실행하고 UNIX 및 Windows 기반
컴퓨터를 포함한 다양한 TCP/IP 텔넷 클라이언트를 지원. 말그대로... 이런 기능을 사용하지
않으려면 해제.



[XP팁20] 윈도우 시작시 자동로그온방법

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon

항목에서 오른쪽마우스 클릭하여 [새문자열값] 으로 다음값을 등록.

이름 값
AutoAdminLogon ---> 1
DefaultUserName ---> 유저명(사용하시는 유저명) : 이 항목은 보통 만들어져 있다
DefaultPassword ---> 패스워드(유저의 패스워드) : 지정없이 사용할때는 값을 공란으로 둔다

[XP팁21] 회사이름과 사용자 이름 바꾸기

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion

에서 RegisteredOrganization과 RegisteredOwner 라는 값을 찾는다.

이 값의 RegisteredOrganization은 회사 이름이고 RegisteredOwner는 사용자 이름이다.

이 두 값의 데이터를 수정해 준 후, 로그오프나 시스템 다시 시작을 하면 변경 사항이 적용.



[XP팁22] 휴지통이름 변경방법

HKEY_CLASSES_ROOTCLSID{645FF040-5081-101B-9F08-00AA002F954E}ShellFolder

의 오른쪽 창에 있는 attributes 키를 마우스 오른쪽 버튼으로 누른 뒤 [수정] 클릭.

[바이너리 값 편집] 창이 열리면 [값의 데이터] 칸에서 40 01 00 20 대신 70 01 00 20을 집어넣는다.



XP는 추가적으로 "CallForAttributes"=dword:00000040 값을 삭제해주어야 한다.

위 작업을 하고 로그오프나 재부팅하고 휴지통위에서 마우스 오른쪽 버튼을 클릭하면 [삭제] [이름바꾸기] 명령이 추가된 것을 볼수있다.

여기서 이름을 마음대로 바꾸면 된다.




[XP팁23]폴더옵션 에서 하드 드라이브 아이콘 수정후 폴더 창이 아닌 ACD 등이 뜨는 현상 해결 법


HKEY_CLASSES_ROOTDIRECTORYShell

밑에있는 각 폴더 항목들을 삭제.

폴더 삭제후 다시 돌아와 다음 폴더

HKEY_LOCAL_MACHINESOFTWAREClassesDriveshell

여기 밑에 항목도 지워주면 깨끗하게 해결.



[XP팁24] 바탕화면 단축아이콘에서 화살표 없애기

HKEY_CLASSES_ROOTlnkfile

선택.

오른쪽 창의 isshortcut 선택.

마우스 오른쪽 버튼클릭 isshortcut 항목 삭제.



[XP팁25] 오류 보고(MS전송)창 나타나지 않게 하기

1) 시작->제어판->성능 및 유지 관리->시스템
2) 시스템 등록정보창이 나타나면 [고급]탭에서 가장 아래에 있는 오류보고 버튼을 클릭한다.
3) 오류보고 대화상자에서 `오류 보고 사용 안 함`을 선택하고 확인버튼을 누른다.



[XP팁26] 입력도구모음 없애기

[제어판-국가및언어옵션-언어-자세히...-설치된서비스]에서 [한글입력기(IME2002)]만 있으면 [추가]를
눌러서 [영어]를 추가해준다.
[한글입력기(IME2002)]를 선택하고 [기본설정-입력도구모음]에서 모든 체크를 없애면 입력도구모음이
없어진다.(추가한 영어는 제거한다)
한자를 쓸때 입력도구모음이 필요하면 [작업표시줄-오른클릭-도구모음-입력도구모음]에 체크하면 다시
나타난다.



[XP팁27] 폴더창 속도향상하기

제어판에서 ``폴더옵션``을 실행한 다음, ``보기`` 메뉴탭을 선택하고 ``고급설정`` 부분에서
``폴더 및 바탕화면 항목에 팝업 설명 표시``와 ``압축된 파일과 폴더를 다른 색으로 표시`` 그리고
``독립된 프로세스로 폴더창 실행``의 체크를 해제하여 속도 향상



[XP팁28] 빠른 웹서핑을 위한 인터넷 익스플로러 최적셋팅법

도구 - 인터넷 옵션 - 고급에서 다음과 같이 해 보세요.
탐색에서 "예약시 동기화할 오프라인 항목 표시" 해제 (선택하지않음)
특정파일이(이름이 한글로 된 파일) 안열린경우 " URL을 항상 UTF-8로 보냄" 해제 (선택하지않음)
탐색에서 "프록시 연결을 통해 HTTP 1.1 사용" 해제 (선택하지않음)
연결항목 랜설정항목에서... 자동구성과 프록시 서버를 모두 해제 (선택하지않음)



[XP팁29] 임시인터넷 파일크기 최대한 줄이기

임시인터넷파일 보관폴더의 적정크기는 100MB~200MB정도가 가장 이상적이라고 한다.



[XP팁30] 내컴퓨터등 기본아이콘 보이게하기

XP를 설치하고나면 바탕화면에 휴지통만 보인다. XP의 시작그룹속에 모투 내장되었기 때문인데 이전처럼
바탕화면에 기본아이콘이 보이게 할려면 바탕화면에서 오른쪽마우스클릭-->속성-->바탕화면-->바탕화면사용삐리리정
-->내바탕화면아이콘에서 필요 항목 체크인하면 된다.



[XP팁31]비디오카드 지원 모든 해상도 보는방법과 사용법

제어판-디스플레이등록정보-설정-고급-어댑터를 선택하고[ 모든 모드 표시를 클릭]하며 해당
비디오카드 어댑터가 지원하는 해상도가 색상을 보실 수 있습니다



[XP팁32] 실시간 동영상을 끊김없이 감상하기

미디어 플레이어를 수행하고 [도구]→[옵션] 메뉴를 누른다. `옵션` 대화 상자가 나타나면
[성능] 탭을 고른다. `내 연결 속도` 옵션을 고르고 목록 버튼을 눌러 `T1(1.5Mbps)`를 선택한다.
`네트워크 버퍼링` 항목에서는 버퍼를 10초로 지정한다. 다시 [네트워크] 탭을 누르고 `UDP` 항목의
체크 표시를 없앤다. `프록시 설정` 항목에서 HTTP를 마우스로 두 번 누른다. `프로토콜 구성` 대화
상자가 나타나면 `프록시 서버 이용 안함` 옵션을 선택한다.



[XP팁33] 아이콘에 오른쪽 클릭해서 [보내기 메뉴]에 메모장등을 추가하는 방법

`C:Documents and Settings****SendTo`라는 폴더가 있는데, 이곳에 메모장 아이콘을 복사해
넣기만 하면 된다. `SendTo` 폴더는 숨겨져 있으므로 보이지 않는다면 탐색기의 [도구]→[폴더옵션]
메뉴를 고르고 창이 뜨면 [보기] 탭으로 이동한 뒤 `숨김 파일 및 폴더 표시` 항목에 체크 표시하면
된다. 이미지 프로그램이나 동영상, 사운드 재생 프로그램 등도 등록해두면 요긴하게 쓸 수 있다.



[XP팁34] Windows Messenger 삭제하는 방법

Windows Messenger 이외의 다른 메신저 프로그램을 사용하는 사람에게는 불필요한 프로그램이다.

이 프로그램을 삭제하는 옵션을 윈도우에서는 기본적으로 제공하지 않는다. 하지만 약간의 inf 파일 수정을 통해서 삭제할 수 있다.

1.windows/inf/sysoc.inf 폴더를 메모장으로 연다.

2.msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,hide,7-->이 라인을 찾아서 아래와 같이 변경하고

msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,7-->hide,만 제거한후 저장한다.

3.위와 같이 변경하고 시작->제어판->프로그램 추가/제거->windows 구성요소 추가/제거에 Windows

Messenger체크 옵션이 나타난다. 여기에 체크를 아웃하면 삭제된다.

추가적으로 msn익스플러도 삭제할 수 있다.



[XP팁35]시스템종료 로그오프창 고전적인 형태로 변경하기

시작->제어판->사용자 계정->사용자 로그온 또는 로그오프 방법변경을 클릭한다

여기서 시작 화면 사용을 체크아웃하고 옵션적용을 크릭하면 고전적인 시스템종료창이 나타난다



[XP팁36] 바탕화면 아이콘 폰트 투명하게 하기

바탕화면의 아이콘 글씨 박스가 배경화면을 가리게 될때 투명하게 하는 방법

내컴퓨터 -> 속성 -> 고급 -> (시각효과,프로세서일정,메모리사용및가상메모리)설정 -> 시각효과

에서 "바탕화면의 아아콘 레이블에 그림자사용"항목을 체크 표시함



[XP팁37] 저사양 컴터에서 XP 잘 돌아가게 하는방법

XP를 저사양 컴터에서 벅벅대지 않고 잘돌아가게 하려면 다음을 설정한다

1.제목표시줄 오른쪽마우스 클릭 -> 속성 -> 시작메뉴 -> 이전시작메뉴 : 윈도우 예전 메뉴로 설정됨

2.내컴퓨터 -> 속성 -> 고급 -> (시각효과,프로세서일정,메모리사용및가상메모리)설정 -> 시각효과에서

사용삐리리정으로 한후 모든 콤보박스 체크해제

단,"바탕화면의 아아콘 레이블에 그림자사용"항목만 설정 하여 바탕화면 아이콘을 투명화 조치한다.

(참고) 일반 컴에서도 화려한 XP창이 필요치 않을시 이 방식 적용하면 속도 향상효과를 보게 됨



[XP팁38] 프로그램오류시 시스템재부팅 방지

간단한 오류에도 XP가 저절로 부팅되어 버리는 난감함을 볼수 있는데 방지하는 방법이다.

내컴퓨터 -> 속성 -> 고급 -> 시작및복구 -> 설정 에서 "시스템오류"항목의 "자동으로 다시시작"을

체크해제하면 됨



[XP팁39] MSN Explorer제거방법

1. [시작]-[모든 프로그램]를 선택하고 MSN Explorer 아이콘 위에 커서를 갖다 댄다.

2. 오른쪽 마우스 버튼을 클릭한 후 [속성(R)]을 선택

3. "MSN Explorer 등록정보" 창이 뜨면 아랫부분에 있는 [대상 찾기]를 선택

4. 지금까지의 과정을 밟아 왔다면 MSN Explorer의 폴더로 이동을 해 있다. 거기에 폴더가 두 개가 있는데,

Setup이란 폴더를 열어 보면 msnunin이란 프로그램이 있는데, 이게 MSN Explorer의 "제거 프로그램" 이다.

클릭하면 시작 메뉴에 있는 "바로 가기"를 비롯해서 모든 게 제거.



[XP팁40] 시작메뉴의 로그오프 없애기

시작->실행->gpedit.msc->관리 템플릿->작업표시줄 및 시작메뉴->우측창에서 "시작메뉴에

있는 로그오프 사용안함"에서 우측클릭->속성->"사용"에 첵크->리부팅


[XP팁41] 시스템 등록 정보에 로고 추가하기

(XP의 경우 관련파일이 없을시 메모장으로 만들어서 입력해주면 됨)

제어판의 [시스템] 애플릿을 실행하여 "일반"탭을 보면 시스템 사용자 정보가 나오고 아래쪽은

빈 공간으로 남아있다. 그런데, 특정 회사에서 생산한 PC의 경우 제조 및 기술 지원 업체라는

항목이 있으며 이곳에 제작사 로고와 각종 정보가 들어 있는 것을 본 적이 있을 것이다. 각자

자신의 로고와 등록정보를 입력해 보자.


1. 우선 로고 이미지를 만들어야 한다. 그래픽 편집 도구를 사용하여 200x120픽셀의 BMP파일을 하나 만들어야 한다.

파일의 색상은 아무래도 상관없다.

이 파일을 C:WINNTsystem32 폴더에 oemlogo.bmp라는 이름으로 저장.

2. C:WINNTsystem32폴더에서 oeminfo.ini 파일을 찾아서(또는 생성) 텍스트 편집기로 부른 후 다음과 같이 정보를 입력한뒤 저장.

[general]
Manufacturer=예)JAVA World
Model=예)MS Windows 2000
[Support Information]
Line1= .... 내용들 ...
Line2= .........
Line3= .
Line4=
Line5=
Line6=
Line7=
Line8=
Line9=
Line10=


[XP팁42] DirectX 버전 확인방법

시작 - 실행에서 dxdiag 라고 쓴 후 엔터.

(dxdiag : DirectX 진단도구 실행 명령어)



[XP팁43] 자신의 윈도 엑피가 정품 인증 확인방법

시작 -> 실행->oobe/msoobe /a (슬래시 a 앞에 한칸을 띄우는것을 주의..)



[XP팁44] 그룹정책(GPEdit)실행으로 시스템 설정하기

시작 -> 실행 -> gpedit.msc

윈도우의 여러 세세한 부분을 직접 수정해줄수 있다.

추가하고 제거하는 식의 불안한 regedit와는 달리 gpedit.msc는 기능을 켜고 끄는 식이라 안전하기도 하고 정말 많은 부분에 손을 댈수 있다.

단적인 예로, 프로그램 추가/제거에서 프로그램변경/제거 항목을 숨길수도 있다.

각 항목 클릭시마다 설명도 자세히 나와있으니 참고.



[XP팁45] DMA 설정을 반드시 해야 하는 이유/조건

하드디스크와 시디드라이브를 DMA 모드로 설정하는건 기본이다.

E-IDE 드라이브의 인터페이스 컨트롤러에는 PIO 모드와 멀티워드 DMA(Direct Memory Access)라는 두가지 전송방식이 있다.
기존의 PIO모드에서는 데이터가 메모리에서 CPU를 거쳐 드라이브로 전송되지만,

DMA모드에서는 데이터가 DMA 채널을 통해 CPU를 거치지 않고 곧바로 드라이브로 전송되기 때문에 전송속도가 높아지며,

CPU 점유율 또한 현저히 낮아진다.

입출력을 위한 인터럽트의 횟수가 줄어 들어 멀티태스킹과 고속작업이 유리하다.

DMA 모드를 이용하기 위해선 다음과 같은 조건이 필요하다. (Ultra DMA 포함)

1.메인보드 지원여부 (칩셋과 바이오스에 따라 최대 지원여부가 달라짐)

2.운영체제 지원여부 (드라이버를 통해 업데이트 가능)

3.드라이브(저장매체) 지원여부 (하드웨어 자체 최대지원여부는 제품에 따라 다름)


메인보드 바이오스 상에서 DMA 설정을 확인한후 사용하는 메인보드 칩셋에 따라 운영체제용 드라이버를 설치한다.

예를 들어 인텔사의 칩셋을 사용하는 메인보드는 Intel Application Accelerator 프로그램을,

VIA 칩셋을 사용하는 메인보드는 VIA 4-in-1을 사용해야 한다.



[XP팁46] 방화벽설정/제거방법

윈도우 XP는 인터넷 연결방화벽 설정 부분이 있어서 다른 컴퓨터가 내 컴퓨터를 엑세스하는 것을 막을 수 있다.

하지만 나누미나 P2P프로그램을 사용하는 경우 사용자가 컴퓨터에 접근할 수 없게 된다.

이럴경우 방화벽을 제거해주어야 한다.


바탕화면의 네트워크환경의 등록정보를 연다-자신의 네트워크 연결항목 을 선택하고

마우스우측버튼을 클릭해서 등록정보를 열면 창이 나오는데,

고급-인터넷 연결방화벽을 체크하던지 체크아웃한다.



[XP팁47] 종료로고만 나오고 전원안꺼질때

(조치1) 제어판(control panel)-전원 옵션(power options)-APM탭-하단의 [Enable Power Management support](최대 절전모드사용) 를 체크.

APM지원을 체크한다.


(조치2) CMOS에서 전원관리 부분에 가서 "PM Control by AP" 를 YES라고 변경한다.


(조치3) 제어판-새 하드웨어 추가 를 클릭한다.

하드웨어 추가 마법사 - 다음 을 눌러 윈도우 XP가 새로 설치된 장치를 찾으면 하드웨어가 연결되어 있습니까? 하고 물어 보는데,

예, 하드웨어를 연결했습니다 선택하고 다음 을 누른다.

설치된 하드웨어 - 새 하드웨어 장치 추가 를 선택하고 다음 을 누른다.

원하는 작업을 선택하십시오 라고 나오면 목록에서 직접 선택한 하드웨어 설치(고급) 을 선택하고,

다음 을 클릭.

일반 하드웨어 종류 에서 NT APM/레거시 지원 을 선택하고 다음 을 누르고,

하드웨어 추가 마법사를 계속 따라 하면 무사히 설치.



[XP팁48] 파일시스템 FAT32/NTFS의 장단점

WindowsXP에서는 NT커널과 기존Windows시리즈(95,98,me)에서 사용하던 FAT32방식을 모두 지원
하기 때문에 어떤 방식으로 사용하는것이 나을까 궁금할것이다.이 2가지 방식을 간단히 설명해
보기로 한다.
NTFS(New Technology, NT File System)
이것은 윈도우 NT3.1/3.5/3.51/4.0/2000/XP에서 지원하는것으로 한결같이 똑같은 것은 아니고
조금씩 수정되어왔다. NTFS의 클러스터 크기는 512바이트, 1킬로,2킬로, 4킬로바이트까지
사용자 지정이 가능하다. 파일크기및 볼륨은 이론상으로 최대 16EB(ExaByte=10의 18승바이트)
이나 실질적으로는 2테라바이트가 한계입니다.
이 파일시스템은 안정성, 자세한 사용자 제한, 보안성등이 FAT32보다는 나은것이다.

NTFS와 FAT16/32 파일시스템의 속도는 불륨이 상당히 크지 않으면 일반적으로
FAT가 빠르다. 그 이유는 먼저 FAT구조가 단순하고 같은 파일이 들어있는경우 폴더크기
자체도 NTFS보다 작다. 그리고 FAT는 사용자의 액세스 권한등을 살필 필요도 없고
NTFS는 이 불륨이 FAT인지 아닌지도 살펴보아야 하기 때문이다.
NTFS가 게임이나 일부 프로그램에서 호환성 문제를 일으킬수 있다고 하니 꼭 호환성을
중시하는 프로그램이 있다면 FAT32로 그 파티션은 유지하는것이 좋다.

(결론)NTFS방식은 FAT32방식에 비해 안정성,보안성,디스크단편화등이 우수하게 나타나지만
프로그램 액세스 속도면에선 FAT32방식보다 느리다.
데스크탑등 서버용이 아닌 일반사용면에선 FAT32방식이 유리함을 알수있다.

FAT32에서 NTFS로의 변환은 데이터를 그대로 유지한채 변환가능하지만 NTFS에서 FAT32로의
변환은 반드시 포맷하여야 함으로 변환을 결정할시 주의를 요한다.

일부 질문난에 보니 NTFS에서 FAT32로 포맷이 잘안된다고 하는데 FDISK실행후 비도스영역 파티션을
삭제한후 파티션 설정을 하면 가능하다.



[XP팁49]실행에서 바로 실행할 수 있는 명령어

장치관리자등이나 서비스를 통제하는데 특히 편리하다.
compmgmt.msc : 컴퓨터 관리 devmgmt.msc : 장치관리자
diskmgmt.msc : 디스크 관리 dfrg.msc : 디스크 조각모음
eventvwr.msc : 이벤트 뷰어 fsmgmt.msc : 공유폴더
gpedit.msc : 로컬 컴퓨터 정책 lusrmgr.msc : 로컬 사용자 및 그룹
perfmon.msc : 성능모니터뷰 rsop.msc : 정책의 결과와 집합
secpol.msc : 로컬 보안설정 services.msc : 서비스



[XP팁50]Shift키의 10가지 기능

1.윈도우즈 시작을 빠르게
윈도우즈가 시작될 때 키를 계속 누르고 있으면 시작 메뉴에 등록했던 여러 가지 응용
프로그램들은 전혀 실행되지 않고 윈도우즈만 바로 시작합니다. 시작 메뉴에 프로그램
을 많이 등록해서 사용하는 사람들은 급할 때 이 방법을 사용하면 편리합니다.

2. 휴지통 거치지 않고 곧바로 파일 삭제하기
키를 누른 채로 <삭제> 키를 눌러 파일을 지우면 파일은 온데간데 없이 사라져 버립니다.

3. 창 한꺼번에 닫기
여러 폴더를 열어 놓았다면 키를 누른 상태로 현재 폴더를 닫으면 지금까지 열어 놓은
상위 폴더까지 한꺼번에 닫힙니다.

4. 파일을 이동시키자
키를 누른 채로 파일을 잡아 끌면 해당 파일을 이동할 수 있습니다.

5. 연속된 파일 선택을 쉽고 빠르게

6. 탐색기를 어디서든 불러낸다
키를 누른 채로 '내 컴퓨터'를 선택하면 탐색기가 곧바로 실행됩니다. 뿐만 아니라 폴더
에서도 키를 누른 채로 마우스로 클릭하면 해당 폴더를 기준으로 하는 탐색기가 실행됩니다.

7. 연결 프로그램 변경하기
키를 누른 상태에서 파일을 마우스 오른쪽 버튼으로 누르면 단축 메뉴에 '연결 프로그램'
이라는 항목이 나타납니다. 여기서 다시 원하는 응용 프로그램을 선택하고 '이런 현식의
파일을 열 때 항상 이 프로그램을 사용' 을 선택해 주면 연결 프로그램이 바뀝니다.

8. 음악 CD 자동 실행 중지
음악 CD 를 넣으면서 키를 누르고 있으면 자동 실행되지 않습니다. 이 기능은 데이커 CD
에도 사용할 수 있습니다.

9. 시스템 재시작을 빠르게
키를 누른채 재시작 메뉴의 '예'를 선택하면 윈도우즈가 빠르게 재시작됩니다.

10. 단축 메뉴 불러내기
바탕화면의 단축 아이콘 또는 폴더를 선택한뒤 키를 누른 채로 을 누르면
각 프로그램에 해당하는 바로가기 메뉴가 뜹니다. 마우스 오른쪽 버튼을 이용하면 바로가기
메뉴를 쉽게 불러낼 수 있지만 키보드를 이용하여 작업하는 도중이거나 마우스에 이상이
생긴 경우 유용합니다



[XP팁51] 베드섹터 검사및 베드섹터 복구하는 방법

내 컴퓨터-검사 를 원하는 하드디스크를 선택하고 마우스 오른쪽 버튼을 클릭해서 속성-도구 로이동

-디스크검사 옵션 항목 에서 불량섹터 검사 및 복구 시도 를 체크하고 시작을 클릭하면 된다.




[XP팁52] 부팅후 및 탐색기실행시 A드라이브 안 읽게 하기

부팅직후나 탐색기를 실행할때 이상하게 A드라이브를 이유없이 읽는 경우가 있을수 있다.

갑자기 이런증상이 나타날때는 이렇게 해보면 된다.

제어판-관리도구-서비스-shell hardware detection 항목을 찿아 자동으로 설정 - 재부팅




[XP팁53] 하드가 이유없이 계속 읽기를 반복할때

아무 작업도 하지 않는데 하드디스크드라이브 표시등이 계속 켜지면서 하드가 작동을 한다면 다음 설정을 해제한다.

제어판-관리도구-서비스-Indexing Service-속성-사용안함



[XP팁54] BootVis 를 이용한 부팅 최적화

BootVis는 MS에서 제공하는 부팅최적화프로그램이다. 자료실에서 다운로드하여 BootVis.exe를 실행한다.

1. Trace - Next Boot + Driver Delays를 선택.

2. OK 버튼을 누르면 자동으로 재부팅(재부팅후 기다리면 BootVis 가 자동으로 실행됨).

그래프를 통해 부팅소요시간에 대한 자세한 설명이 나온다.

그냥 참고 기다린다.

3. 이번엔 최적화를 위해서 Optimize System을 선택.

지시에 따라 하고 재부팅후 BootVis 최적화를 마칠 때 까지 기다려야 한다.

시스템에 따라서 반응 및 작업시간이 길어 질 수 있다.



[XP팁55] Fdisk 올가이드

Fdisk를 이용한 하드디스크 파티션 나누기
하드 디스크를 이용하게 되는 과정은 대개 다음과 같다.
공장 출하(Low Lebel Format) → 시스템화(FDISK) → 활성화(Format) → 운영체제 설치..
하드 디스크 초기 출하시에는 Low lebel Format 을 한 상태와 마찬가지의 상태로 있게되고, 이걸 사용하기
위해서는 다시 시스템 설계를 해줘야 하는데 이 때 이용하는 방법이 바로 Dos 의 FDISK 명령이다.
요즘은 대개 소매상에서 미리 셋팅과 포맷을 해서 소비자에게 주는데.. 소비자 입장에서는 대용량의 하드
디스크라면 이걸 다시 두세개 정도의 파티션으로 나눠서 사용하면 유용한 점이 많다. 파티션을 나눌 경우
하드의 공간 낭비가 생기기는 하지만, 낭비되는것 보다도 더 큰 효용이 있기 때문에 파티션을 나누게 된다.
그 방법으로 가장 보편적이고 표준적인 방법이 바로 Dos 의 FDISK를 이용하는 방법입니다.
여기서 간단히 FDISK 사용법에 대해 설명합니다..

(주의: FDISK를 할때에는 미리 하드디스크에 있는 모든 자료를 반드시 백업해 두어야 한다)
Ⅰ. FDISK 실행
- 먼저 부팅 디스켓을 (A드라이브에 넣고 컴퓨터를 켭니다.
- A:> 가 나오면 fdisk를 입력하고 엔터를 칩니다. 그러면 영어로 고용량 하드 디스크를 쓰고 있다면 당신의
하드를 FAT32구조로 만들 겠습니까< Y/N>?를 물어보는데 여기서 무조건 "Y"를 누릅니다.
- Yes 를 누르면 Choose one of the following: 이라는 말 다음에 fdisk 기본 메뉴가 나옵니다.

[기본 메뉴]
1. Create DOS Partition or Logical DOS Drive
2. Set Active Partition
3. Delete partition or logical dos dirve
4. Display partition information
5. Change current fixed disk drive

[한글화 메뉴]
1. 분할 영역 또는 논리dos 드라이브 지정
2. 실행 영역 지정
3. 분할 영역 또는 논리 DOS 드라이브 삭제
4. 분할 영역 정보 표시
5. 현재 하드 디스크 바꾸기 (- 하드가 2개 이상일때 표시됨)

Ⅱ. 파티션 지우기

- 하드를 새로 구입하신 분은 아래의 "파티션 만들기"를 보시고...
이미 하드를 쓰시고 계셨던 분은 3번 메뉴를 선택해서 기존에 있던 파티션을 지우셔야 합니다.
3번 메뉴를 선택하게 되면 다음과 같은 4 개의 하위 메뉴가 나옵니다.

[③ - 하위 메뉴]
1) Delete Primary DOS Partition
2) Delete Extended DOS Partition
3) Delete Logical Drive(s) in the Extended DOS Partition
4) Delete Non-Dos Partition

(한글화 메뉴)
1) 기본 도스 분할 영역삭제
2) 확장 도스 분할 영역삭제
3) 확장 도스 분할 영역에서 논리 도스 드라이브 삭제
4) 비 도스 분할 영역 삭제

(설명)
1)은 기본 영역을 지우는 메뉴로, 기존의 하드를 분할했을 경우 확장 영역을 지우기 전까지는 지워지지
않습니다. 만약 그 전에 분할 하지 않고 하드를 하나로 썼다면 여기서 기본 영역을 지우세요.
2)은 처음에 하드를 2부분으로 분할 해서 사용 했을 경우 확장 영역을 지우는 곳입니다. 여기서 확장
역영을 지우고 나머지 기본 영역은 1)에서 지우시기 바랍니다.
3)은 하드를 2부분 이상으로 분할 해서 사용 했을 경우 논리드라이브를 지우는 메뉴입니다.
만약 하드를 3부분으로 나누어서 썼다면 논리드라이브를 여기서 지우시고 다음 확장드라이브는 2)
에서 다음 기본 영역은 1) 순으로 지우시기 바랍니다.
4)은 도스외에 다른 운영체제를 지우는 메뉴입니다. (예: NTFS..)

Ⅲ. 파티션 만들기

기존의 하드 영역을 모두 지웠으니까 새로 다시 영역을 정해줘야합니다. 다시 처음 fdisk 기본메뉴로
돌아가서("ESC" 키를 누르면 돌아간다.) 1번 메뉴를 선택합니다. 그러면 다음과 같은 3개의 하위 메뉴가
나오게 됩니다.

[① - 하위 메뉴]
1) Create Primary DOS Partition
2) Create Extended DOS Partition
3) Create Logical Drive(s) in the Extended DOS Partition

(한글화 메뉴)
1) 기본 도스 분할 영역 지정
2) 확장 도스 분할 영역 지정
3) 확장 도스 분할 영역에 논리 도스드라이브 지정

(설명)
1)은 기본영역을 지정해주는 곳으로 나중에 C 드라이브가 됩니다.
2)은 확장 영역을 설정하는 곳입니다.
3)은 하드를 3이상으로 분할할 때 사용하는 메뉴입니다.


A. 하드디스크가 하나 일때

a. 파티션을 하나로 만들기
하드디스크를 하나의 드라이브로 하고 싶으시면 다음과 같이 하시면 됩니다. fdisk기본 메뉴에서 파티션을
만들기 위해 1번을 선택하고 , 그러면 위와 같이 세 개의 하위 메뉴가 나타난다. 여기서, 다시 1번을 선택을
하면 파티션을 하나로 쓸것이냐 아니냐 하는 [Y/N]의 선택 항목이 나오게 되는데 이때에 "Y"를 선택을 하시면
됩니다.이렇게 "Y"를 선택을 하게 되면 다시 부팅을 한다는 메시지가 나오게 되는데 부팅 후 Format을 하면
모든 작업이 끝나게 됩니다.

b. 파티션을 두개나 세개 이상으로 만들기
30GB의 하드디스크를 우리는 5GB, 5GB,20GB이렇게 3 개로 분할할 경우..
먼저 파티션을 하나로 나눌 때처럼 일단은 [Y/N]가 나오는 항목까지 가서
이번에는 "Y"가 아니라 "N"를 치면
커서가 밑으로 가면서 30000 라는 숫자와 함께 깜박거리게 됩니다.
이때에 5000 이라고 치고 엔터를 치면 기본 메뉴화면으로 돌아 가게 되는데 다시 1번을 누른 다음에 이번에는
2 번을 누르고 들어가면 남아 있는 용량인25000 이라는 숫자와 함께 커서가 깜박 거리게 됩니다. 이 숫자가
나오면 그냥 엔터를 치게 되면 어떤 메시지와 함께 다시 25000 이라는 숫자가 나오게 되는데 이때에 주의를
하셔야 합니다. 만일 하드디스크를 두개로 나누어서 사용을 하고 싶다면 이곳에서 그냥 엔터를 치면 되고
그렇지 않고 3개로 나누어서 사용을 하고 싶다면 이곳에서 다시 5000 이라는 숫자를 입력하게 되면 다시
20000 (30000 - 5000+5000 ) 이라는 숫자가 나오게 됩니다.
하드디스크를 더 분할을 하고 싶다면 다시 20000 보다 적은 숫자를 넣어 주면 되고 끝내고 싶다면 그냥
엔터를 치면 됩니다.

B. 하드디스크가 두 개(여러 개)일 때

하드디스크가 2개나 여러 개일 때도 파티션을 나누는 방법은 같습니다. 다만 주의할 것은 자신이 파티션을
나누고자 하는 하드디스크를 정확하게 선택을 해주어야 합니다. (기본 메뉴의 5번 메뉴 이용) 그리고, 덧붙
여서 설치하는 하드 디스크를 파티션 나눌때 용도를 생각해서 기본 도스영역을 만들것인지 아니면 모두 확장
도스영역으로 만들것인지 선택을 하셔야 합니다. 자료 백업용으로만 쓸거라면 모두 확장 도스 영역으로 만들
어도 되지만.. 나중 운영체제도 설치할 계획인 경우에는 기본 도스 영역을 지정한 후 확장 도스 영역을 만드
셔야 다시 파티션 나누는 번거로움을 피할 수 잇습니다.
그 후에는 하드디스크 하나일 때와 방법은 동일합니다.

Ⅳ. 드라이브 활성화 (Format)

* 파티션 나누는 작업이 다 끝났으면..나눈 파티션을 활성화시켜 줘야 합니다.
- fdisk 기본메뉴로 돌아 오셔서 2) - Set Active Patition 메뉴를 선택합니다.
이 메뉴는 부팅 영역을 활성화 해주는 곳으로 항상 C 드라이브만을 선택해야 합니다.
(다른 곳을 선택하면 부팅이 안됩니다. 이런걸 흔히 "텃세 부린다"고 하죠)
- "dos 실행 영역으로 지정하려는 분할 영역의 번호를 입력하시오 ---[ ]" 에 "1" 을 입력하고 엔터..

- 이제 모든 작업이 끝났습니다.
만약 하드가 분할된 정보를 보고 싶으시면 fdisk 기본 메뉴에서 4) 를 선택합니다. 다 보셨으면 Esc 키를 눌러
fdisk를 빠져 나갑니다.

- 그런 다음 컴퓨터를 재부팅합니다.
(A드라이브에 부팅디스켓이 삽입된 상태에서..)

- A:> 화면이 나오면 가장 끝 부분 드라이브부터 Format을 합니다.
예를 들어 하드를 C, D, E로 나누었다면 다음과 같은 순서로 하세요.
A:>format e:
A:>format d:
A:>format c:
라고 치고 Enter를 치세요.



[XP팁56]메신저에서 상대방 아이피 알아내기

일단 파일을 보낸다.

그리고 시작 - 실행 - cmd

netstat -na 라고 쳐준다.

그럼 젤 왼편에 아이피한줄, 글구 중간에 한줄.

젤 오른편에 LISTENING 또는 ESTABLISHED 등 써잇는 한줄 쫘악 내렌蔘??다.

중간 젤 밑에 써잇는 IP 를 본다.

아직 파일이 상대방에게 전송중이라면 젤 밑에 써있는 IP 가 (단, 0.0.0.0 이런건 제외)상대방의 아이피.

전송이 끝나더라도 잠시동안 남아있다.

쪽지나 채팅으론 안 나타난다.



[XP팁57]렌카드 속도업


윈도우에서 네트워크카드의 IRQ(아이알큐)에 일정한 메모리를 강제 할당함으로써 전체적인 전송속도의 향상을 가져오는 방법.

기대효과:10-20% / 부작용전혀없음


<<핵심 포인트>>

System.ini 파일의 [386Enh] 아래에 Irqn=4096 이라고 입력, 저장후에 재부팅하면 끝!!
☞n은 네트웍 카드의 인터럽트요청(IRQ)번호입니다.

자세한 안내.해설네트웍 카드 IRQ(아이알큐)번호 알아내기

① 제어판 - 시스템

② 시스템-장치관리자탭

③ 그 다음 창에서 네트워크 어댑터를 찾는다.

④ 네트워크 어댑터이름을 더블클릭.

⑤ 그 다음, 자원탭(리소스)을 클릭.

⑥ 이제 자원설정이란 창안에 인터럽트 요청 이란 항목이 보이며 옆에 숫자도 보일 것이다.

⑦ 그 숫자가 바로 위에 설명한 n .

<>

① 시작 - 실행.

② sysedit 라고 써 넣고 엔터.

③ 여러개의 창이 뜨는데 그중에 system.ini 창을 선택.

④ 스크롤바를 이용해서 [386Enh] 란 항목을 찾는다.

⑤ 그 아래에 위에서 찾은 값을 이용하여 Irqn=4096 이라고 적어 넣고 저장한후에 리부팅.


<<예(IRQ가 09인 경우>>

[386Enh]

Irq09=4096
ebios=*ebios
device=*mshbios
device=*vhbiosd
device=*vshare



[XP팁58]DMA 와 Vcache 등을 잡아주어서 메모리 최적화 하기

system.ini에 본 글을 복사해서 붙여 넣는다

DMABufferSize=64
LocalLoadHigh=1
PageBuffers=128


[Vcache]
MinFileCache=49152
MaxFileCache=49152
Minimum=49152
Maximum=49152
chunksize=4096

위는 192램의 경우.

캐쉬값의 정확한 계산은 "실제 램의 용량" × 256" .

처크 싸이즈는 64램부터 320램까지 4096 .

32램은 3072 , 384램 이상부터는 5120 .

[386enh] 에 "LocalLoadHigh=1" 라고 문구를 하나 넣어주면 약간의 메모리를 할당받을 수 있다.


ps: 위의 문구를 system.ini 를 실행으로 연뒤 넣어주면 된다.

v캐쉬가 없으면 집접 잡아골라서 넣어주면 된다.

이 v 캐쉬 설정은 시스템에 무리를 주지 않는다.



[XP팁59]작업표시줄 딜레이 없애기


제어판 - 국가 및 언어 옵션 을 클릭.

언어 탭을 클릭.

텍스트 서비스 및 입력 언어의 자세히 버튼을 클릭.

한글 입력기(IME 2002)를 클릭하고 기본 설정의 입력 도구 모음 버튼을 클릭.

입력 도구 모음 설정 창에서 고급 텍스트 서비스 사용 안함을 체크.

[다음 그림과 같은] 텍스트 서비스 변경 창에서 예 를 클릭.

확인 버튼을 클릭.



[XP팁60]필수 서비스 항목

윈도우XP는 시작하면서 함께 실행되는 몇 가지 항목이 있다.

그 중에는 반드시 작동해야만 하는 것이 있는 반면에 불필요한 것도 적잖다.

불필요한 서비스를 중지시키면 그만큼 시스템이 빨라진다.

반드시 실행해야 하는 것은

COM+ Event System

DHCP Client

Event Log

Plug and Play

Print Spooler

Remote Procedure Call

Removable Storage

Windows Management Instrumentation

Windows Management Instrumentation Driver Extensions

Workstation

이다.

이외의 서비스를 멈췄을 때는 시스템에 문제가 생길 확률이 다소 있지만, 설령 그렇더라도 다시 띄우면 된다.

'os > windows' 카테고리의 다른 글

Port Number (알려진 Port 정보)  (0) 2003.10.20
윈도우 단축키 모음  (0) 2003.10.08
Windows의 서비스들  (2) 2003.09.19
윈도우 단축키 모음

윈도우 계열 컴퓨터를 사용할 때 유용한 단축키 (Short Cut) 모음입니다.

1. 윈도우 + ...

윈도우키 : 시작메뉴 부르기 ( = Ctrl + Esc )
윈도우키 + D (토글) : 바탕화면보기 ( = 화면에 나타난 창을 모두 작업표시줄로..)
윈도우키 + M : 바탕화면보기 2 ( cf; 윈도우키 + Shift + M : 창 원래대로..)
윈도우키 + E : 윈도우탐색기열기
윈도우키 + F : 검색창 ( = 찾기에서 "파일또는 폴더")
윈도우키 + Ctrl + F : 검색창 ( = 찾기에서 "컴퓨터")
윈도우키 + R : 실행창 ( = 시작 -> 실행)
윈도우키 + Tab (+ Enter) : 프로그램 이동
윈도우키 + F1 : 윈도우 도움말
윈도우키 + Pause/Break : 시스템 등록정보


2. Alt + ...

Alt + 방향키 : 뒤로 (<-) , 앞으로 (->) (인터넷 익스플로러 또는 탐색기에서)
Alt + Space Bar : 시스템 메뉴 호출
Alt + Enter : 등록정보 보기
Alt + F4 : 프로그램 종료 (현재 프로그램을 바로 종료시킴)
Alt + Tab : 프로그램 이동 ( Enter 누를 필요없이 바로 이동)
Alt + F : 응용프로그램의 "File" 메뉴 호출


3. Ctrl + ...

Ctrl + Esc : 시작메뉴 부르기 ( = 윈도우 키)
Ctrl + F4 : MDI 프로그램 문서닫기 (mIRC 같은 프로그램)
Ctrl + Alt + Delete : 프로그램 강제 종료 (작업관리자로 이동하여 선택적 종료)
Ctrl + W : 현재창 닫기 (한 프로그램에서 여러창 띄운 경우 - 프로그램 종료와는 다름.)
Ctrl + A : 모두선택
Ctrl + C : 복사하기
Ctrl + X : 잘라내기
Ctrl + V : 붙여넣기


4. Shift + ...

Shift + Delete : 휴지통을 거치지 않고 바로 삭제
Shift + CD 넣기 : CD 자동 실행 않기
Shift + 방향키 : 블록 지정하기
Shift + 폴더 (더블) 클릭 : 폴더를 윈도우 탐색기처럼 열기
Shift + F10 : 바로가기 메뉴


5. 마우스와 단축키

Ctrl + 클릭 : 떨어져있는 복수 개체 선택
Shift + 두군데 파일을 지정 : 연결된 복수개체 선택
Ctrl + 드래그 : 복사하기
Shift + 드래그 : 이동하기
Ctrl + Shift + 드래그 : 바로가기 아이콘 만들기
Shift + X 표시 클릭 : 현재 폴더와 상위 폴더 닫기


6. Space Bar '단축키 기능'

인터넷 익스플로러에서 마우스나 화살표키를 쓸 필요없이 스페이스바를 치면 현재 화면에서 아래 화면으로 내려갑니다.
이메일을 읽다가 현재 창에서 읽기가 끝났을 때는 스페이스바를 치면 아래로 내려갑니다.
메일 읽기가 끝났을 때 스페이스바를 치면 다음 메일로 넘어갑니다.
엑셀에서는 지울 내용이 있는 칸에 커서를 대고 `Delete' 키나 `Back Space' 키를 누르지 않아도, 스페이스바 한번만 누르면 내용이 전부 지워집니다.
파워포인트에서는 슬라이드 기능을 쓸 때 스페이스바를 치면 다음 화면으로 넘어갑니다.


7. Alt + Tab

윈도우의 멀티태스킹 기능으로 여러 프로그램 띄워 놓고 있을 때, 작업전환은 보통 마우스의 포인터로 하는데 단축키 `Alt + Tab' 으로도 할 수 있습니다.
작업창을 여러개 띄운 상태에서.. Alt 키와 Tab 키를 동시에 누른 후 Alt 키는 그대로 누른채 두고 Tab 키만 떼면 화면중간에 현재 활성화된 프로그램 전부를 보여주는 창이 뜨고 이 상태에서 Tab키를 툭툭 눌러보면 블록이 움직이는 것을 볼 수 있습니다.
바꿀 작업창으로 블록을 움직이면 됩니다. 손에 익으면 마우스를 쓰는 것보다 더 편합니다.

또한 이 단축키를 이용하면 마우스 작동이 멈췄을 때도 안전하게 재부팅할 수 있습니다. 먼저 Alt + Tab을 눌러 작업창을 띄운 뒤, Alt + F4 를 눌러 프로그램을 종료시키고, 프로그램 종료가 끝나면 자판에 있는 윈도우키를 누른 후, `시작' 창이 뜨면 화살표 키로 시스템 종료를 택한 뒤 엔터.


8. Ctrl + Enter

익스플로러에서 가장 대표적인 주소인 http://www.**.co.kr 을 곧바로 띄워줍니다. 주소창에 kbs 라고만 치고, 콘트롤키와 엔터키를 함께 누르면 http://www.kbs.co.kr 이 뜨는 것을 볼 수 있습니다. 이 기능은 인터넷 익스플로러 5.5 버전 이상을 사용하는 경우에 해당합니다. 5.5 보다 낮은 버전 사용자는 .co.kr 대신에 .com 으로 연결됩니다.


9. Esc (시작화면 없이 바로 윈도우 띄우기)

컴퓨터를 부팅할 때 윈도우 로고, 즉 시작화면을 띄우는 시간이 지겨운 분들은 윈도우 부팅할 때 `Esc' 를 누르세요.
시작화면을 아예 없애려면 윈도우 98 사용자의 경우 루터폴더에 있는 `msdos.sys' 라는 파일을 메모장에서 열고 `Options' 항목을 찾아 logo 값을 0 으로 바꿔주면 됩니다. 이 파일은 읽기전용이므로 편집을 하려면 속성을 바꿔줘야 합니다. 하지만 시스템 운영에 필요한 파일인 만큼 초보자들은 가급적 건드리지 않는 것이 좋습니다.

시스템을 다시 켜야 하는 경우 컴퓨터 전체를 재부팅하기보다는 윈도우만 다시 시작하게 하는 것이 기다리는 시간을 많이 줄일 수 있습니다. 윈도우 재시작을 시키려면 윈도우 시작 메뉴에서 종료 버튼을 누를 때 `시스템 다시 시작' 메뉴를 선택하면서 시프트 (Shift) 키를 누르고 있으면 됩니다. 그러면 컴퓨터는 윈도우 재시작만 하기 때문에, 시스템 재시작을 할 때 컴퓨터가 자기진단을 하면서 걸리는 시간을 단축시킬 수 있습니다.


10. 한자키 + 한글자음 (윈도우나 익스플로러 등에서 특수문자 사용)

윈도우나 익스플로러 등에서 글쓰기를 할 때 가끔 ▲ 나 ☎, ♨ 등과 같은 특수문자를 써야 할 때가 있는데 아래아한글이나 워드를 실행시켜 원하는 특수문자를 찾아 복사해서 옮겨쓰는 방법이 아니라 윈도우키 (한글자음 + 한자키) 를 이용하는 방법이 있습니다. (한자가 나오는 조그만 창으로 여러 특수기호들이 나타남.)

- 한자키 + ㅂ : ─ │ ┌ ┐ ┘ └ ├ ┬
- 한자키 + ㄴ : '나' 등의 기호를,
- 한자키 + ㅈ : 로마자 숫자 ( ⅰ ⅱ ⅲ ⅳ나 Ⅰ Ⅱ Ⅲ Ⅳ...)
- 한자키 + ㅅ : 기수형 한글자음 ( ㉠ ㉡ ㉢ ...)

* 심심한 분들은 실험삼아 ㄱ부터 ㅎ까지 한자키를 누른채 각각 눌러보세요. 다양한 특수문자의 세계를 찾아낼 수 있습니다.


원본 : http://www.ewha.net/study_room/shortcut.html

'os > windows' 카테고리의 다른 글

Port Number (알려진 Port 정보)  (0) 2003.10.20
XP 최적화 팁!!  (2) 2003.10.09
Windows의 서비스들  (2) 2003.09.19
오늘 정기검진 받고 왔다.
아마 의료보험공단에서 해 주는걸로 알고 있는데...

소변검사, X-Ray, 피검사, 키, 몸무게, 시력 측정, 혈압...

30분밖에 안걸렸다.

나에겐 건강검진보다는 체력검사가 더 절실히 필요할거 같다...

'etc' 카테고리의 다른 글

짜증나는 정치인들...  (0) 2003.10.15
귀국...  (0) 2003.10.04
태국 출장  (2) 2003.09.26

출처 : http://www.sql-server-performance.com

읽어보시면 알겠지만, 많은 도움이 됩니다.
영어를 잘 못하는 관계로 해석 되는거 같은 부분만 번역 달아 놓겠습니다. 혹시 틀린 부분이 있으면 답글 부탁드립니다. 바로 정정하겠습니다.
번역 안되어 있는 부분 번역해 주시면 바로 원문에 반영하겠습니다.

Strategies to Reduce SQL Server Blocking
(SQL Server Blocking을 줄이기 위한 전략)

by Sancho Fock

No reasonable strategy for the resolution of SQL Server blocking problems can be found until one has determined the precise nature of the block. The most obvious criterion for distinguishing between different blocking issues is their average duration.
The following categories emerge as a result of this division:

Short-time Blocking: Average duration less than three seconds.
(짧은 시간 블러킹 : 평균 3초 이하의 수행 시간을 갖는 트랜잭션)

Mid-time Blocking: Average duration ranges from 3 seconds to a maximum of 10 minutes.
(중간 시간 블러킹 : 평균 3초 ~ 10분 이하의 수행 시간을 갖는 트랜잭션)

Long-time Blocking: Average duration more than 10 minutes.
(긴 시간 블러킹 : 10분 이상의 수행 시간을 갖는 트랜잭션)

Deadlocks: In theory, there is no limit to the duration, and because of this, SQL Server automatically terminates one of the blocked processes.
These four different types of blocks are discussed below in terms of their possible causes and in reference to the appropriate strategies for resolving them.


Short-Time Blocking
(짧은 시간 블러킹)

Short-term blocking is inevitable in multi-user databases.
(짧은 시간의 블러킹은 다중 사용자 데이터베이스에서는 피할 수 없다.)
Normally, they represent no problem for the operation of an application.
Nevertheless, these types of blocks should be investigated in cases where they have begun to occur to only a few users or where they occur very frequently.
(그렇지만, 사용자가 적을때 발생하거나, 매우 자주 발생한다면 원인을 찾아야한다.)
If these blocks appear frequently, it can lead to a snowball effect and eventually paralyze the entire system.
(만약 블러킹이 매우 자주 발생된다면, snowball 효과로 인하여 (이게 뭔지 아시는 분 ^^;;) 전체 시스템의 마비를 가져오게 된다.)

Even in cases where it is likely that the problem cannot be completely solved, one should nevertheless at least attempt to defuse it.


Causes of Short-Term Blocking
(짧은 시간의 블럭킹이 발생하는 원인)

Short-time blocking, which occur very frequently, can be traced back to the following basic problem: the total performance capacity of the system is not enough for the current user load.
(짧은 시간의 블러킹은 다음과 같은 일반적인 문제로 인해 매우 빈번히 발생된다. : 시스템이 현재 전체 사용자의 부하를 견디지 못하는 경우.)

Resolution Strategies for Short-Term Blocking
(짧은 시간의 블러킹 해결 방안)

Such problems can best be met by carrying out an extensive performance tuning of the server and of the application. If this situation does not occur until there is a very high user load, then one should begin the investigation by examining the server and the network.

However, if this situation begins to occur with low user load levels, then one should investigate whether certain use cases of the client application are able to block one another or even themselves in conceptual terms. If this should be found to be the case, then an investigation needs to be carried out to determine whether the probability of the occurrence of this unwanted situation can be reduced through atomic transactions or the use of "row-level locking" or similar strategies.



Mid-Time Blocking
(중간 시간 블러킹)

This type of scale block is the most difficult to find.
(이 정도 크기의 블럭은 가장 찾기 힘든 경우이다.)

It lasts long enough to bring the operation of an application to a stop, but at the same time is still generally too short for manual analysis.
Support for this ability is available with THS Software's SQL Guard 2000. A demo version of SQL Guard 2000 can be downloaded free-of-charge from www.thsfock.de.


Causes of Mid-Time Blocking
(중간 시간 블러킹의 원인)

The possible causes for this type of block are the following:

(이런 종류의 블러킹의 원인이 될만한 것들은 아래와 같다.)

- Transactions which are (too) complex.
(트랜잭션이 매우 복잡한 경우)

- Extremely important interrogations in a transaction.

- Non-error-free interrogations in transactions (e.g. unintended cross-joins).

- User interaction within transactions (e.g. message box "Should data really be deleted?").
(트랜잭션 내의 사용자 interaction(예를들면 '이 데이터를 지우겠습니까?'라는 메세지 박스)

- Unnecessarily time-consuming processing within transactions.

- Unnecessarily distributed processing with high data transport volumes.
(불필요한 많은 양의 데이터를 분산 처리하는 일)

- Snowball effect of short-time scale blocks.

Resolution Strategies for Mid-Time Blocking

(중간 시간 블럭킹의 해결 방안)

Once one has established which transactions are blocking other processes ? e.g. with the help of SQL Guard ? a determination must be made as to which type of error is present.

The following questions emerge in cases of complex transactions:

- Can the transaction be simplified?
(트랜잭션을 보다 간단하게 만들 수 있는가?)

- Can the transaction be divided up into smaller parts?
(트랜잭션을 작은 부분들로 나눌 수 있는가?)

- Can the transaction be greatly accelerated through performance optimization?
- Can the transaction be carried out at a later time (e.g. a nighttime job)?
- Could the transaction also use separate resources (e.g. temporary tables) in order to carry out the actual modifications in concentrated fashion if successful?
- Can the data transport within the transaction be reduced (e.g. swapping processing out into SP's)?
- Does the transaction block resources unnecessarily (e.g. a SELECT which locks lookup tables)?

These questions offer approaches for solving the problem. Should it happen that all of the questions are to be answered in the negative, then one is faced with the choice of either accepting the situation as it is, or of thinking through the business processes to find a way to replace the problematic transactions with others as necessary.



Additional Mid-Time Resolution Strategies
(추가적인 중간 시간 트랜잭션의 블러킹 해결 전략)

If the transaction involves extremely important interrogations, replace them with faster ones.


If user interactions ? such as message boxes ? take place during database transactions, then these must be eliminated! User interactions have lost absolutely nothing within database transactions. Make sure without fail that your client programmers are also aware of this. Programmers with a background in desktop database development are particularly susceptible to having frequent problems distinguishing between business transactions and database transactions.


The same holds true for unnecessarily time-consuming processing within the transaction as much it does for more complex transactions. You could however also ask yourself the question, "Does this processing really have to take place within the transaction?"


In cases where a large amount of data is transported from the server to the client within a transaction, this should be minimized where possible. The processing of x-amount of data is fundamentally just as fast at the client end as it as on the server. The bottleneck is as a rule the transport through the network. Therefore, always carry out the processing at the place where most of the necessary information is to be found. For example: if one needs only to know the total number of certain types of data sets (and not to have the data sets themselves), then using a "select count(*)" will always be faster than even the most wonderful algorithm at the client end (because the client first needs to obtain all the data via the network). If, on the other hand, an SP requires kilobytes of parameters, then the client may be considerably faster.


If a snowball effect is present, then follow the strategies used against short-time scale blocks.


Long-time Blocking
(장시간의 블러킹)


These blocks are very similar to mid-time scale blocks. As a general principle, they can also have the same causes as the mid-time scale blocks.
이런 블러킹은 중간 시간 정도의 블러킹과 매우 유사하다. 일반적인 이론에 의하면, 이런 장시간 블러킹의 원인은  중간 시간 정도의 블러킹 원인과 같다.)

 

In addition, they can have the following causes:
(추가적으로 아래와 같은 것들이 원인일 수도 있다.)


Unintentionally non-closed transactions, and Endless loops within transactions

(실수로 transaction을 종료하지 않는 경우나 트랜잭션 안의 무한루프)


The following applies to both causes: their durations could fall within the mid-time scale block range if, for example, transaction timeouts have been defined or if the end user shuts down his client.


Resolution strategy for Log-Time Blocking

(장시간 블러킹 해결 방안)

The resolution strategy for both of the additional causes is clear: eliminate the error(s).
(추가적인 두가지 원인의 해결 방안은 확실하다 : 에러를 없애라)


The Special Case of Deadlocks
(데드락의 특별한 경우)


In view of the fact that a great deal of information concerning deadlocks is readily available in the relevant literature, they will be treated only briefly here: deadlocks are a special case in terms of scale blocks, because there is no unambiguously "guilty party" in such situations.

SQL Server is also very adept at recognizing and treating deadlocks, as you will find when you read the SQL Server documentation. Essentially, SQL Server does the same thing against deadlocks that the SQL Guard 2000 does against blocks: it terminates a process. The only difference is that the SQL Server recognizes no guilty party when faced with a deadlock, and therefore selects a "victim".

One can never completely exclude deadlocks from larger systems. The strategies used to reduce their quantity are the same as those that can be used to avoid blocks in general. In addition, one can take care to ensure that there are no transactions present which require the same resources in the reverse order.



A Summary of the General Strategies
and Guidelines for Reducing SQL Server Blocking
(SQL 서버의 블러킹을 줄이기 위한 일반적인 전략과 가이드 라인)

* Forbid user interactions in transactions.
(트랜잭션 안에 사용자와의 interaction(입력을 기다린다던가 하는 작업)을 금한다.)

* Always keep transactions as limited in size and as brief as possible.
(트랜잭션은 항상 가능한 한 짧은 시간동안 최소한의 범위를 유지해야 한다.)

* Use no unnecessary resources in transactions.
(트랜잭션 안에서는 불필요한 리소스는 사용하지 않는다.)

* Carry out as little external processing as possible during a transaction.

* Always select with the option "with no locks" except in cases where you have an important reason for doing otherwise.

(다른 중요한 이유로 뭔가를 수행하는 경우가 아니라면, 항상 SELECT 구문에 'with no locks' 옵션을 사용하라.)


* Use row level locking.
(row단위 락킹을 사용한다. 예를 들면 from tableName WITH (NOLOCK)과 같이)

* Use "dirty reads" wherever possible (never make this option global, because it is not possible except with only a very few interrogations).

(가능하면 'dirty reads'를 이용하라


* Performance tune your systems as much as possible.
(가능한 한 많은 시스템 성능 튜닝을 한다.- 당연한 얘기 --;;)

* Carry out necessary complex transactions such as invoicing at times when the user load is as low as possible.

* Schedule maintenance tasks which put extra loads on the server (e.g. Full Backup, defragmentation of indexes) at times when the user load is minimal (nights, weekends)
(서버에 추가적인 부하를 주는 maintenance task(예를 들면, DB Full Backup, index 조각모음)의 스케쥴은 서버의 부하가 최소인 시간으로 잡는다.

* Always select as little as possible and only as much as is necessary.
(가능한한 적은 row만을 Select하고, 꼭 필요한 만큼만 Select한다.)

Sancho Fock has been a freelance software developer since 1995. His professional area of concentration is the object-oriented software development of applications using two or more layers. In his numerous projects he has accumulated experience with various RDBM's such as MS-SQL Server, Sybase Adaptive Server and Informix. He has had intensive experience with MS-SQL Server in Versions 6.5, 7.x and 8.x (2000). He has become familiar with MS-SQL Server in his various roles as a T-SQL developer, an applications developer and as a database administrator. Contact him at: sancho@thsfock.de Visit his website at: www.thsfock.de.

Published with the express written permission of the author. Copyright 2003.

'programming > MSSQL' 카테고리의 다른 글

[튜닝] index...  (0) 2003.10.14
VB프로그래밍 시 DB서버에 접속이 안되는 경우  (0) 2003.07.28
SQL 서버 이름을 바꾸고 시플땐~  (0) 2003.07.28


마지막날 밤 태국 직원 둘 식사를 사준다고 같이 가서 먹은 저녁 성찬이다...
사진에 나오지 않은 것도 있는데, 음료수 4잔 포함...

한사람앞에 500바트(약 15000원) 정도하는 좋은 식당으로 가자고 했더니 합쳐서 500바트 정도 나오는 식당으로 가는 바람에--;;

식사비 꼴랑 15000원정도밖에 안나왔다.
이 사진이 바로 문제의 그 식사

'travel > thai' 카테고리의 다른 글

태국 입국 신고서 작성 방법  (0) 2004.01.02
마지막 출근날~~  (2) 2003.10.02
AsiaSoft Party  (0) 2003.10.01

+ Recent posts