http://ko.sunningview.com/article/5325  퍼옴.

메모리 구조를 보장하기 위해 래치 래치 일관성 경량 동기화 메커니즘 SQL Server 엔진은 무엇입니까. 이러한 인덱스, 데이터 페이지 (예 : 비 잎 수준 인덱스 페이지 등) 내부 구조 등.

< 래치는

래치는 메모리 구조를 보장하기 위해 일관성있는 경량 동기화 메커니즘 SQL Server 엔진이 무엇인지입니다. 이러한 인덱스, 데이터 페이지 (예 : 비 잎 수준 인덱스 페이지 등) 내부 구조 등. SQL Server는 I / O 래치 보호가 버퍼 풀 페이지에로드되어 있지 않은, 사용 비 버퍼 래치 보호 메모리 내부 구조와, 버퍼 래치 보호 페이지 버퍼 풀을 ​​사용합니다.
  1. 버퍼 래치 : 작업자 스레드 전에 페이지가 버퍼 풀에 액세스 할 때, 먼저이 페이지에 래치 받아야합니다. 주로 사용자 개체 및 시스템 개체 페이지를 보호하기 위해 사용된다. 근로자가 요구하는 액세스 페이지가 버퍼 풀에없는, 그것은 풀에 해당하는 페이지를로드 스토리지 시스템에서 비동기 I / O를 보낼 것입니다 : _ *
  2. I / O를 래치 형 성능 PAGELATCH을 기다립니다. 이 과정은, 해당 페이지의 I / O 래치 얻을 호환 래치 풀로 동일한 페이지를로드 다른 스레드를 방지한다. 유형 성능 PAGEIOLATCH을 기다립니다 _ *
  3. 비 버퍼 래치 : 버퍼 풀 페이지 외부에서 내부 메모리 구조를 보호하기 위해 사용. 유형 성능있는 Latch_XX을 기다립니다.
래치 인보다는 ​​전체 트랜잭션을 유지하는 로크로만 대응 페이지 또는 내부 구조의 동작 동안 유지. 예를 들어, WITH NOLOCK 테이블을 조회하여. 쿼리 프로세스는 테이블의 모든 수준에서 공유 잠금을 획득하지 않지만 데이터 페이지 전에 읽을 수 있습니다, 당신은 얻을이 페이지를 래치 할 필요가있다.
=
래치 모드
래치 잠금 장치와 함께, 그것은 SQL 서버 엔진 동시성 제어의 일부입니다. 높은 동시성의 경우 래치하는 것은 피할 수없는 경쟁 환경. SQL 서버는 다른 마무리 대상 리소스를 액세스하기 위해 래치 대상 리소스를 해제 할 때까지 기다릴 호환 개의 래치에게 요청 스레드를 강제로 호환 모드를 사용한다.
래치 모드 5 종류가 있습니다 :
  • KP - 래치 구조 기준에 의해 파괴되지 않도록 유지 SH
  • - 필요한 경우 공유 래치는 데이터 페이지를 읽고
  • UP - 업데이트 래치 데이터 변경 페이지가 필요할 때
  • EX - 필요가 데이터 페이지를 작성하는 경우 독점 래치 전용 모드가 주로 사용됩니다
  • DT - 데이터가 필요
래치 모드 호환성에 의해 참조 될 때 래치 구조적 손상을 파괴, Y는 N을 나타내고, 호환 나타냅니다 호환되지 않습니다 :
KP SH UP EX DT
Y Y Y < /td> Y N
Y Y Y N N
Y Y N < /td> N N
Y N N N N
N N N < /td> N은 N
& LT/div>
  • 래치 경합에 미치는 영향 요인
요소 SLEEP_TASK
논리적 CPU 어떤 멀티 코어의 과도한 사용을 고백 래치 경합 시스템이 나타납니다. 래치 경합은 시스템의 허용 수준, 사용 16 이상의 코어의 대부분을 초과합니다.
건축 설계 및 액세스 모드 크기 B 트리 깊이, 인덱스, 밀도 및 페이지 디자인, 데이터 액세스 모드 동작이 과도 래치 경합으로 이어질 가능성이 높다
응용 프로그램 계층 동시성 높은 래치 경합 애플리케이션 층의 가장 높은 동시 요청을 동반한다.
레이아웃 데이터베이스 논리 파일 논리 파일 배치함으로써 경쟁 래치의 정도에 영향을 미치는 레이아웃, (등 PFS, GAM, SGAM, IAM, 등) 분배 장치 구조에 영향을 미친다. 이것의 가장 유명한 예는 다음과 같습니다 자주 PFS 페이지의 tempdb의 경쟁의 결과로 작성하고 임시 테​​이블을 삭제할 때
I / O 서브 시스템의 성능 PAGEIOLATCH는 SQL 서버의 I / O 서브 시스템을 기다리는 많은 의미 기다립니다 .
더 얕은 B 트리 많은 수의. 페이지 분할을 수행 할 때, 우리는 모든 수준에서 B- 트리 EX 래치를 수정 SH 래치를 얻고 데이터의 모든 페이지에서 얻을 필요가있다. 삽입의 경우에 발생하는 B- 트리 루트 페이지 분할로 매우 높은 동시성뿐만 아니라, 매우 가능성이 리드를 삭제합니다. 루트 페이지 분할 비 버퍼 래치로 이어질 것입니다 : ACCESS_METHODS_HBOT_VIRTUAL_ROOT을.
진단 래치 경합
주요 진단 방법과 도구는 다음과 같습니다 :
  • 관측 성능 모니터 CPU 사용률 및 SQL Server 대기 시간이 있는지 두 개의 관련 결정합니다.
  • 은 DMV 래치 특정 유형의 자원 경쟁에 의해 발생하기.
  • 특정 비 버퍼 래치 경합 진단, 또한 SQL 서버 프로세스의 메모리 덤프 파일을 획득하고 분석하기 위해 함께 윈도우 디버깅 툴을 결합해야.
래치 경합 정상적인 활동이고, 래치 경합이 발생하는 자원에 대한 액세스를위한 타겟 및 기다리는 시간이 시스템 처리량에 영향을 미치지 만하면 해로운 것으로 믿어졌다. 경합의 적당한 정도를 확인하기 위해, 함께 성능, 시스템 스루풋 처리, IO 및 CPU 자원 분석의 조합을 필요로한다.
[
래치 경합으로 시간이 애플리케이션 성능에 미치는 영향
1. 페이지 래치 평균 대기 시간의 성장과 증가 시스템 처리량을 처리 계약 을 측정 기다립니다. 페이지 래치 평균 대기 시간이 시스템 처리량을 증가시키고, 특히 성장 버퍼 래치 대기 시간을 일관된 성장을 관리하는 저장 시스템의 응답 시간을 초과하는 경우
, 현재 대기중인 작업을 확인할 sys.dm_os_waiting_tasks 사용해야한다. 또한 관찰 시스템 활동 및 부하 특성의 조합을 필요로한다. 일반 공정 진단 :
  • 사용 "쿼리 세션 ID 발주 sys.dm_os_waiting_tasks"스크립트 또는 "계산 대기 시간 동안"스크립트는 현재 작업하고 평균 대기 시간 상황 래치 대기를 관찰합니다.
  • 사용 "QueryBufferDescriptorsToDetermineObjectsCausingLatch"스크립트가 경합 (인덱스 및 테이블)의 발생 위치를 결정합니다.
  • MSSQL이 % 인스턴스 이름 % StatisticsPage 래치 WaitsAverage 대기 시간 또는은 sys.dm_os_wait_stats가 관찰 된 평균 대기 시간 페이지 래치 방문 기다립니다 관찰 할 성능 카운터를 사용.
(o.name), i.name, 총 대기 시간의 비즈니스 피크 대기 시간 래치 비율 (2).
래치는 비율이 하중 증가에 따라 선형 적으로 증가 대기 시간을 경우, 경합이 성능에 영향을 래치 할 수있다, 우리는 최적화 할 필요가있다. 하여 대기 통계 성능 수는 페이지와 비 페이지 래치가 상황을 기다려야 관찰했다. 그런 다음 CPURAMIONetwork 처리량 관련 카운터와 비교. 예를 들어, 거래 / 분파 및 배치 요청 / 초를 사용하여 자원 활용도를 측정합니다. 이 마지막 인스턴스 시작 (또는 비워) 이후 기록이기 때문에
은 sys.dm_os_wait_stats는 데이터를 기다린 후, 기다리는 대기 시간의 모든 유형을 포함하지. 또한 DBCC SQLPERF을 할 수 있습니다 ( '은 sys.dm_os_wait_stats는', '클리어') 수동으로 비 웁니다. 시간은 sys.dm_os_wait_stats 데이터를 취할 피크 사업하기 전에, 다음, 비즈니스에서 피크를 취할 차이를 계산합니다.
-
3. 증가없이 시스템 처리량 처리 (또는 감소), 응용 프로그램이로드가 무거운, SQL 서버에서 사용할 수있는 CPU 증가하면서 .
높은 동시성 및 멀티 CPU 시스템에서, 클러스터 된 인덱스가 자려 동시 삽입 유사 지금 등의 종류가 발생할 것이다 : CPU는 수를 증가 및 대기 래치 페이지가 증가하면서 시스템 스루풋이 저하된다.
4. 부하의 성장을 적용 할 때 CPU 사용률이 증가하지 않았다.
CPU 사용률 성장 나타내는 SQL 서버 리소스 (래치 경합 성능)을 기다리고 애플리케이션로드와의 동시가 없을 때.
으로
쿼리 현재 래치
현재 실시간 대기 정보 볼 수 있습니다 다음 쿼리. * 및 PAGEIOLATCH_ * 버퍼 래치가 기다리고 PAGELATCH_하는 wait_type.
SELECT wt.session_id, wt.wait_type
, er.last_wait_type 그대로 last_wait_type
, wt.wait_duration_ms
, wt.blocking_session_id , wt.blocking_exec_context_id, resource_description
FROM sys.dm_os_waiting_tasks 중량
가입 바로 sys.dm_exec_sessions ES ON wt.session_id = < /span> es.session_id
가입 sys.dm_exec_requests 어 ON wt.session_id = er.session_id
여기서 es.is_user_process es.is_user_process OBJECT_ID '
1 와 wt.wait_type )) 클러스터 < /span> '
ORDER ' ' ORDER 에 o.type

wt.wait_duration_ms

DESC
OBJECT_ID '
쿼리 열을 리턴으로 설명 :
설명 의 session_id
세션 ID 작업이 속한 Wait_type
현재 대기 유형 Last_wait_type
마지막 대기 유형은 Wait_duration_ms
대기 시간 합계 (MS)의 대기 유형을 기다립니다 Blocking_session_id
현재 차단되는 세션 ID Blocking_exec_context_id
현재 발생 한다, '버퍼'순서 ID
Resource_description
특정 대기
다음 쿼리는 반환 비 버퍼 래치 정보 을 선택 * sys.dm_os_latch_stats를에서 latch_class & LT의 리소스 작업 wait_time_ms에 의해 DESC
는 열 지침을 반환 :
설명 대기 시간 Latch_class
래치 유형 Waiting_requests_count
현재 래치 유형이 발생 < /div> Wait_time_ms
현재 래치 유형 합 대기 시간을 발생
Max_wait_time_ms
현재 래치 형 발생한 가장 긴
=
래치 일반적인 시나리오 경합을 <기다리는 동안/div>
데이터 마지막​​ 페이지 삽입 경합
, 그것은 경쟁을 래치 될 수 있습니다 . 이 시나리오에서
테이블은 거의 아카이브 삭제 및 업데이트 작업 할 때를 제외하고 적용되지/div>
인덱스에 데이터를 삽입 :
1 B- 트리를 검색, 새로운 페이지로 이동하여 저장하는 것입니다
이 페이지 플러스 전용 래치 (PAGELATCH_EX)에 2 ,. 다른 작업이 동시에이 페이지를 수정하지 마십시오. 모든 비 리프 페이지 플러스 공유 래치 (PAGELATCH_SH).
때때로 페이지가 직접 비 리프 페이지에 영향을 개로 나누어 독점 래치, 비 리프 페이지에.
3.이 행이 변경되었음을 나타냅니다 로그 파일에 기록을 작성
4. 페이지에 새 행을 작성하고 더러운 페이지로 표시 5. 릴리스 모든 래치. 线程获取到页上排他Latch。假设A获取EX Latch,则B就需要等待。则B就会在 sys.dm_os_waiting_tasks表现出等待类型为PAGELATCH_EX的等待。
, 새로운 라인이 페이지는 가득 찰 때까지, B- 트리의 마지막 페이지에 삽입됩니다. 높은 동시로드, 그것은 B- 트리가 가장 오른쪽 페이지 경합이다 집계 및 비 클러스터형 인덱스로 이어질 것입니다. 일반적으로이 메인 페이지와 밀도 인덱스를 삽입하는 동시성 경합이 발생합니다. sys.dm_db_index_operational_stats으로 상황은 라스 페이지 경합와 B 트리 리프 페이지에게 중앙 아프리카 래치 경합을 관찰 할 수있다.
예를 들어
동시에 스레드와 스레드 B는 새 행 (예 : 1999 등) Last (마지막)로 삽입합니다. 논리적으로, 둘 다 동시에 해당 행 수준의 행 마지막 페이지 단독 잠금을 얻을 수 있습니다. 그러나, 메모리의 무결성을 유지하기 위해
  • 하나는 하나의
  • 스레드 페이지에 배타적 래치를 획득 할 수있다. 이 EX 래치를 얻기 가정, 다음 B 기다릴 필요가있다. 그런 다음 B가 sys.dm_os_waiting_tasks에 전시된다 타입 PAGELATCH_EX 대기를 기다립니다. 작은 테이블의 임의 삽입에 리드
  • (32)
이 클러스터되지 않은 인덱스 래치 경합
임시 큐 구조는 일반적으로이 시나리오를 발생으로 테이블을 사용합니다. 다음 조건 (EX와 SH 포함) 래치 경합이 발생할 수 있습니다 사항 :
높은 동시 INSERT, DELETE, UPDATE 및 Operations (작업) 페이지 밀도, 좁은 라인 테이블의 행의 수는 적게, 그래서 B-나무도 등급 2-3 인덱스 깊이 얕은입니다. 페이지 분할을 일으킬 가능성이 INSERT의 임의의 실행의 를 필터링 ( o.name), i.name, 지수는 스크립트 다음 테이블의 깊이를 관찰 할 수있다 : 선택 o.name 으로 - 모든 인덱스 키 범위에 기존 데이터 분포를 사용하는 열은 테이블 ] , i.name 으로
SomeInt [ 인덱스 ] HashValue INDEXPROPERTY 으로 변경
OBJECT_ID 테이블 ' indexDepth + [ INDEXPROPERTY 차 TINYINT INDEXPROPERTY OBJECT_ID (o.name), i.name, ' isClustered
( SomeInt 등 깊이, 변경 리프 수준을 계산하지 않습니다보고 클러스터 된 인덱스 깊이 테이블 [ 행 ] , i.origFillFactor 차 모드 2 이동 CPU 코어는 TransactionId 번호 제 키 인덱스로 모듈로 사용하여, 삽입 작업이보다 균일하게 분산 된 테이블로된다. ( [ 행 ]
, i.origFillFactor ( BIGINT [ FILLFACTOR ] 그대로 의 경우 INT INDEXPROPERTY
( INT (o.name), i.name 널 (null) isClustered ] <그 속도를 대량로드 기술을 사용하는 것이 좋습니다span> 다음 때 '
1 (32) 다음 NULL ' - o.id 때 i.id
0 기능 [ 12 -
클러스터되지 않은 latch_contention_table 다른 )
와 통계
' 끝 - 표 입력 할 때 < /span> IX_Transaction_ID
SYSINDEXES에서 나는 가입 sysobjects의 O hash_col ' = '
여기서 ) = ( ' U '와 ') 파티션 구성표 )), ( (o.name), i.name, NOT isHypothetical '
) 의 사용을 필요로한다. 제 키의 지수는 일반적으로 선택된 열 또는 해시 열을 산출하고, 다른 열을 형성하도록 함께 결합 된 후 일부 열을 식별한다. 유일한 ID 열 값이 너무 과도 키 간격의 결과는 데이터 테이블의 물리적 구조를 만들기 때문에 열 열화를 이용한 해시 연산이 우수하다. 이하 해시 계산 열 인덱스 키 범위가 있지만, 래치 경합 INSERT 부하를 분산시키기 위해 감소된다하더라도, 충분하고있다. 예를 들어, 판매 시스템은하면 해시 값 모듈로서 CPU 코어 STORE_ID 번호를 사용할 수있다. 0 ' 가상 인덱스 ') INDEXPROPERTY OBJECT_ID ' isStatistics
' =
0
  • o.name
래치 PFS 경합 페이지
이 그것은
병목
상황을 할당에 속한다. PFS 레코드 공간 이용 데이터 페이지. 바이트 (바이트) 페이지의 PFS 페이지의 사용을 나타냅니다을 사용합니다. PFS 페이지 정도로 모든 8088 개의 데이터 페이지가 PFS 페이지가있을 것이다, 8088 데이터 페이지를 나타낼 수있다. 두 번째 페이지의 데이터 파일 PFS 페이지이다 (된 pageid = 2). 새 개체 또는 데이터 조작을위한 공간을 할당해야하는 경우
, SQL Server는 SH 래치를 사용할 단순한 대상 페이지가 있는지 여부를 확인 PFS 페이지에 사용할 수 있습니다. 존재하는 경우, 그것은 PFS 래치를 얻고, 해당 페이지 공간 사용량 정보를 업데이트한다. 유사한 프로세스는 SAM, GSAM 페이지에 발생합니다. 멀티 CPU 시스템, 파일 그룹, 몇 데이터 파일, 과도한 PFS 페이지 요청에, 그 래치 경합을 초래할 수있다. tempdb의 가장자리 장면은 몇 가지 비교적 흔한 것입니다. PFS 나 SGAM 페이지에 나타나면
Tempdb를 더 PATHLATCH_UP 대기, 당신은 래치 경합을 제거하기 위해 다음과 같은 방법을 수행 할 수 있습니다
임시 데이터베이스 데이터 파일은 코어 = CPU 번호의 수를 증가시키기 위해 < strong> 추적 플래그 (TF) 1118 사용
래치 Tempdb를 테이블 반환 ​​함수이 때문에 PFS와 래치 경합이 같은 발생
충돌로 이어집니다. 모든 다중 문 테이블 반환 ​​함수는 항상 래치 경합의 원인, 쿼리에 다중 문 테이블 반환 ​​함수를 생성하고 테이블을 삭제하는 많은 변수를 탄생 될 수있는 다수의 참조 테이블 변수를 생성하고 삭제할 호출 .
다른 모드가 경합을 래치 해결 은행 ATM 시스템에서 ATM_ID 장면의 사용을 고려하여 처리합니다 INSERT 작업 테이블은 모든 주요 범위로 배포됩니다. 동시에, 사용자는 단지 하나의 ATM을 사용할 수 있기 때문이다. 이러한 장면은 Checkout_ID STORE_ID 열 또는 열을 사용하여 고려할 수, 시스템을 판매 할 예정이다. 이 방법은 고유 지수

이 방법은, 인덱스 조각화를 증가 스캔 성능의 범위를 감소시킬 것이다. 또한, 이러한 절 새로운 인덱스 구조에 따라 조정해야 WHERE 같이, 애플리케이션 아키텍처를 수정할 필요가있다. 예 : 트랜잭션 테이블에서 32 코어 시스템에서 원래의 테이블 구조 : 생성 테이블 표
( 왼쪽 는 TransactionId BIGINT 없습니다
널 (null) ( 아이디 INT 하지

널 (null)
에 대한 < /span> INT
없습니다 널 (null) )
표 추가

제약
pk_table1 < /span> 키

클러스터 (는 TransactionId, 아이디) 이동 1. 모든 데이터가 사용자 ID 첫 번째 키를 사용하기 위해 인덱스와 방법, 작업을 삽입하기 위해 배포됩니다 페이지. 주 : 인덱스 변경, 모든 선택이 방정식 ID와는 TransactionId를 지정해야합니다 WHERE합니다. 테이블
표 VALUES 는 TransactionId BIGINT 없습니다
널 (null) 표 아이디 INT 없습니다
없습니다
널 (null)
0 INT
없습니다 널 (null) )
이동 표 추가

제약
pk_table1 키

클러스터 (사용자 ID,는 TransactionId)
테이블 널 (null) 는 TransactionId 없습니다
int 아이디
(

널 (null) 1
SomeInt 없습니다
) 이동 - ( 표 추가 [ 2 ] TINYINT AS ALTER < /span> ( CONVERT 9 [] ] 3 ABS [< /span>
는 TransactionId ) %
( ))) PERSISTED NOT
변경 테이블 표
추가
제약
pk_table1
  表分区能减少Latch争用。使用计算列对表进行Hash分区,一般的步骤:
  1. 클러스터
  2. (HashValue,는 TransactionId, 아이디)
이동
첫 번째 키 인덱스로 GUID 열을 사용하여
이 나는 난 아주 많이 여기의 무결성을 유지 플러스, 그것을 분석하고 싶지 않아, 동의하지 않습니다. 레디 스 제품을로드, 서브 테이블, 파티션을 배포 또는 사용하는 등 극단적 인 방법을 필요로 할만큼 심각한 동시로드 및 래치 경합 GUID는 더 나은 방법입니다. 테이블 해시 파티션의 계산 열을 사용하여 테이블 파티셔닝은 래치 경합을 줄일 수 있습니다. 테이블 해시 파티션의 계산 열, 일반적인 단계를 사용하여
새 또는 지구를 호스팅 기존의 파일 그룹을 사용하여 새 파일 그룹을 사용하는 경우, 당신은 데이터 입출력 서브 시스템 최적화 및 파일 그룹을 고려할 필요가 문서의 합리적 분배. INSERT 부하 비율이 높은 경우, CPU 코어의 1/4의 데이터 파일 그룹 추천 수 (또는 1/2와 같은 경우, 혹은 등전위가 될 수있다).
표는 N 개의 파티션으로 분할되어 파티션 함수를 만들 사용. N 값은 스텝 데이터 파일의 수와 동일하다. 파일 그룹에 결합 파티션 구성표를 만들 파티션 기능을 사용하고 해시 열의 SMALLINT 또는 TINYINT 유형을 추가 한 다음 해당 해시 분포 값 계산 (예를 들어 HashBytes 값 모듈에 대한 또는 Binary_Checksum 값을). 샘플 코드 : 파티션 방식과 기능을 생성, CPU 코어의 수를이 정렬 1 : 1까지 에 ( 코어 컴퓨터 ) 16 코어 시스템에 정렬이 아래에 대한 CREATE 있도록 파티션 pf_hash16
] (, ) , 범위 , , , (, , , , , , , 9, 4 , 5 , 6 , 7 , 8 , , ]
, 10 , 11 , , 13 [, (14) (15) CREATE ( 를 ps_hash16 ] < /span>

그대로 파티션
[ pf_hash16
] 모든 ] ( [ ALL_DATA 을 속도를 대량로드 기술을 사용하는 것이 좋습니다 ) -
(이 오프라인 작업입니다) 기존 테이블에 계산 된 열을 추가 ALTER ( DBO AS 0 [, ] 추가 [ HashValue [ ( CONVERT ( [
TINYINT ] ABS
(binary_checksum (Create the index on the new partitioning scheme
[ ] % (16) CREATE IX_Transaction_ID )))
PERSISTED CLUSTERED NULL - 새로운 분할 방식에 인덱스를 생성 ] < /span> UNIQUE ([ INDEX [, [ ON )
DBO ]
.
[
latch_contention_table
]
(
  • [
  • T_ID
  • ]

ASC

,

[

HashValue

]


Posted by Sumin Family

1. SQL Error Log 발생한 에러 

2012-11-27 17:16:55.590 spid3477     Error: 7886, Severity: 20, State: 1.2012-11-27 17:16:55.590 spid3477     A read operation on a large object failed while sending data to the client. A common cause for this is if the application is running in READ UNCOMMITTED isolation level. This connection will be terminated.

 


[그림 1-1]


- 어떤 쿼리(프로시저) 에서 발생하는 에러 인지를 찾기 에러가 주로 발생하는 시간 주기적 (15분 ~ 20분 사이) 발생하여 
   발생 후 10분 뒤부터 10분 동안 sp_trace_create 를 사용하여  Trace 수집

-  SQL Error Log 시간대의 TRC 파일 비교 분석 하여 에러 원인 분석 



- 원인 및 해결 방법  


[그림 1-2]

이 프로저의 에서 호출하는 1개의 ROW  Image 데이터 형식으로 라는 marshaled_data 필드를 가지고 있다. [그림 1-1] 601 에러가 먼저 발생 우 Error: 7886, Severity: 20, State: 1 가 발생한것을 알수 있다. [그림 1-2] SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 으로 인해 테이블 접근시 NOLOCK 로 커밋되지 않는 읽기르 우선 데이터를 읽어서 LOB 영역의 marshaled_data 데이터를 읽으려고 했으나 실제 marshaled_data 필드에 접근해 보니 일부 데이터의 위치가 변경되어 데이터를 찾지 못하게 되어  클라이언트에 데이터를 보내는 동안 큰 개체에서 읽기 작업이 실패 하게 되었고 클라이언트와 연결이 종료 된것으로 에러가 SQL LOG 에 찍히게 된것이다. 

해결 방법은 프로시저에 적용 하였던 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 를 제거 후 해결 되었다. 



Posted by Sumin Family

퍼온곳.    http://blog.daum.net/sdenver/423



마이크로소프트 오피스 제품군 완전 삭제 방법

 

오피스 2003, 2007, 2010, 2013 업그레이드나 신규 설치시 문제가 생겨서 설치가 중간에 멈추거나 하는

경우에 설치가 안되는 경우가 종종 있습니다.

 

이런 경우에 오피스를 완전 걷어 내고 새로이 설치를 해야하는데.. 그럴때 사용하는 도구입니다.~

 

Ms 에서는 이미 이 문제에 대해서 예전부터 알고 있었던듯 싶네요..

 

Microsoft Office 2013 제품군을 제거하는 방법 : http://support.microsoft.com/kb/2739501/ko 

 office2013_Remove.diagcab<- 요 파일을 저장한다음 실행(더블클릭) 실행하셔도 됩니다.

 

 

Microsoft Office 2010 제품군을 제거하는 방법 : http://support.microsoft.com/kb/290301/

 office2010_Remove.msi  <- 요 파일을 받아서 실행하셔도 됩니다.

 

 

Microsoft Office 2007 제품군을 제거 하는 방법 : http://support.microsoft.com/kb/928218/ko

 office2007_Remove.msi<- 요 파일을 받아서 실행하셔도 됩니다.

 

 

Microsoft Office 2003 제품군을 제거 하는 방법 : http://support.microsoft.com/kb/2639197/ko

 office2003_Remove.msi<- 요 파일을 받아서 실행하셔도 됩니다.

Posted by Sumin Family


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/320sec | F/8.0 | 0.00 EV | 18.0mm | ISO-1600 | Off Compulsory | 2014:10:03 11:35:29


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/320sec | F/8.0 | 0.00 EV | 18.0mm | ISO-1600 | Off Compulsory | 2014:10:03 11:35:30


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/320sec | F/8.0 | 0.00 EV | 18.0mm | ISO-1600 | Off Compulsory | 2014:10:03 11:35:30


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/320sec | F/8.0 | 0.00 EV | 18.0mm | ISO-1600 | Off Compulsory | 2014:10:03 11:35:31


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/2000sec | F/8.0 | 0.00 EV | 18.0mm | ISO-1600 | Off Compulsory | 2014:10:03 11:37:52


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/1600sec | F/8.0 | 0.00 EV | 18.0mm | ISO-1600 | Off Compulsory | 2014:10:03 11:42:52


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/1600sec | F/8.0 | 0.00 EV | 18.0mm | ISO-1600 | Off Compulsory | 2014:10:03 11:42:54


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/1600sec | F/8.0 | 0.00 EV | 18.0mm | ISO-1600 | Off Compulsory | 2014:10:03 11:42:56


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/1600sec | F/8.0 | 0.00 EV | 18.0mm | ISO-1600 | Off Compulsory | 2014:10:03 11:42:56


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/1600sec | F/8.0 | 0.00 EV | 18.0mm | ISO-1600 | Off Compulsory | 2014:10:03 11:42:57


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/1000sec | F/8.0 | 0.00 EV | 18.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:44:44


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/1000sec | F/8.0 | 0.00 EV | 18.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:44:50


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/80sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:46:08


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/80sec | F/8.0 | 0.00 EV | 96.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:46:39


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 96.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:46:42


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 96.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:46:42


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/80sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:47:00


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/50sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:47:13


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/160sec | F/8.0 | 0.00 EV | 28.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:51:09


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 28.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:51:29


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 28.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:51:40


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/30sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:52:33


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:53:09


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:08


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:08


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:08


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:09


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:09


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:09


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:10


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:10


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:12


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:13


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:13


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:14


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/200sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 11:54:14


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/25sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:03:04







Canon | Canon EOS Kiss Digital X | Manual | Average | 1/25sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:03:05


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/25sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:03:05


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/25sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:03:06


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/80sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:20:03


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/80sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:20:04


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/80sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:20:23


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/80sec | F/8.0 | 0.00 EV | 28.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:20:34


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/80sec | F/8.0 | 0.00 EV | 28.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:20:35


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 28.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:21:09


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 28.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:21:12


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 96.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:21:26


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 96.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:21:36


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/30sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:21:59


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/13sec | F/8.0 | 0.00 EV | 115.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:23:12


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/13sec | F/8.0 | 0.00 EV | 78.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:23:27


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/13sec | F/8.0 | 0.00 EV | 78.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:23:27


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:25:00


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 78.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:25:37


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 78.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:25:43


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 78.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:25:43


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 28.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:26:22


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 28.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:26:24


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/500sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:27:10


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/500sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:27:15


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/500sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:27:15


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/500sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:27:17


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/500sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:27:18




Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 96.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:29:17


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 28.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:30:11


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 24.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:30:37


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/160sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:34:09


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/160sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:34:35


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/160sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:34:37


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/160sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:34:38


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/160sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:35:15


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:38:38


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:38:38


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:38:38


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:38:44


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:38:44


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:38:44


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:39:12


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:39:12


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:39:14


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:39:17


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:39:25


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 78.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:39:29


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 63.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:39:29


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 63.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:39:30


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:39:30


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:39:32


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:41:01


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:41:02


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:41:02


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:41:03


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/160sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:43:17


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/160sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:43:18


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/160sec | F/8.0 | 0.00 EV | 35.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:43:19


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:43:36


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:44:00


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:44:19


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:44:20


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 42.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:44:22


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:46:40




Canon | Canon EOS Kiss Digital X | Manual | Average | 1/125sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:48:04


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:51:25


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:51:26


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:51:30


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:52:01


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:52:03


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:52:57


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:53:23


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:53:28


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:53:33


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 200.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:54:39


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 134.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:54:46


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 134.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:55:18


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 134.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:55:33


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 134.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:55:33


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 134.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:56:33


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/250sec | F/8.0 | 0.00 EV | 134.0mm | ISO-200 | Off Compulsory | 2014:10:03 12:56:36


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/30sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:03 13:01:31


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/15sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:03 13:01:53


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/80sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:03 13:02:59


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/60sec | F/8.0 | 0.00 EV | 200.0mm | ISO-1600 | Off Compulsory | 2014:10:03 13:03:11


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:08:15


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:08:17


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:08:18


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:08:27


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:08:27


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:08:27


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:08:28


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:08:28


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 51.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:08:28


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/100sec | F/8.0 | 0.00 EV | 18.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:33:38


Canon | Canon EOS Kiss Digital X | Manual | Average | 1/80sec | F/8.0 | 0.00 EV | 31.0mm | ISO-200 | Off Compulsory | 2014:10:03 13:38:29


'Child Story..' 카테고리의 다른 글

2014-10.03 수민, 가희 과천 어린이 대공원  (0) 2014.10.04
Posted by Sumin Family

서버관리 하는데 비용 등이 걱정된다. 


물론 사람을 뽑아 사용하면 되긴하나,  문제가 있다, 


비용 도 문제고 , 보안도 문제고,  사람이다보니 부딛히는 부분도 있을테고,,,  


이런저런 고민 하다보니, 서버 관리  호스팅 등을 직접 해주는곳이 있더군요, 


원격에서 모니터링 해주고,  문제 해결해주고,  보안 패치 알아서 연락 해주면서 처리 해주고, 


서버 증설 축소 등 문제생길때마다 전화하면   컨설팅 까지 ~~~   ㅎㅎ


뭐 손해는 없다.    전화해서 상담해보고  아닌것 같으면  안하면 되니까. ^^






'Server Story....' 카테고리의 다른 글

서버관리 괜찮은 대행  (0) 2014.09.22
smokeping  (0) 2014.06.30
Posted by Sumin Family

명령 프롬프트를 이용하여 감염/손상/삭제된 시스템 파일 복원하기 (Windows Vista/7)

인터넷을 사용할 수 없는 환경에서 필요할 경우 게시물을 인쇄하셔서 사용하기시 바랍니다.

사용된 데이터는 Vista 기준이지만 7 의 환경에서도 동일하므로 따로 7 관련 데이터는 사용하지 않았음을 밝힙니다.

 목차 ─
1. 안전 모드에서 SFC 유틸리티를 이용하여 복원하기
2. Windows System Rescue Tool 을 이용하여 복원하기



안전 모드에서 SFC 유틸리티를 이용하여 복원하기

준비물: Windows Vista 및 7 정품 미디어

(안전 모드 진입이 불가능한 상황일 경우는 Windows System Rescue Tool 을 이용하여 복원하기를 참고해주세요.)

1Windows 로고 또는 바(Bar)가 나오기 전 검은 화면 상태에서 F8 키를 누릅니다.

2. 아래와 같은 화면이 나오면 안전 모드를 선택합니다.
 (네트워킹 사용으로 부팅하실 경우 인터넷 사용 가능)


3. 안전 모드로 부팅이 완료되셨다면 Windows 미디어를 ODD 드라이브에 삽입합니다.

4. 좌측 아래 시작 버튼을 눌러 바로 위에 위치한 입력 란에 CMD를 입력하여 명령 프롬프트를 실행합니다.



5. 명령 프롬프트 창에서 SFC /SCANNOW 를 입력 후 실행합니다.


6. 실행 후 시스템 파일 복원 작업이 시작됩니다. 시간이 어느 정도 소요되므로 완료가 될 때까지 기다립니다.


7. 완료가 되었으면 재부팅 합니다.



Windows System Rescue Tool 을 이용하여 복원하기

준비물: Windows Vista 및 7 정품 미디어, Windows System Rescue Tool (모바일 보기)

(Windows System Rescue Tool 은 악성코드에 자주 변조되는 주요 시스템 파일만 다루고 있습니다.)

1. BIOS 설정에서 Windows 미디어를 삽입한 ODD 드라이브를 첫 번째 부트 드라이브로 설정합니다.


2. 아래와 같은 메시지가 나타나면 아무 키나 누릅니다.


3. 잠시 기다리면 아래와 같은 창이 뜹니다. 다음을 눌러주세요. (단축키: ALT+N)


4. 컴퓨터 복구(R)를 눌러줍니다. (단축키: ALT+R)


5. 복구할 운영체제를 선택하시고 다음을 눌러주세요. (단축키: ALT+N)


6. 명령 프롬프트 항목을 눌러주세요.


7. 운영체제 디렉토리로 이동하여 Windows System Rescue Tool 을 실행합니다. (rescue 실행)


8. 명령에 따라 복원할 파일을 선택하여 복원 작업을 수행합니다.

9
. 복원이 완료되었으면 창을 닫고 다시 시작 버튼을 눌러주세요.

Posted by Sumin Family



http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=8279



위의 링크에서 다운받자.. 


설치..



설치 했으면. 


시작 ->모든 프로그램 ->  Debugging Tools for Windows (x64) -> WinDbg 실행



file->Symbol File Path  선택



나오는 창에다

SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols

입력


물론 위의  c:\websymbols 이 푤더는 있어야 한다. 


자... 그다음. 



file -> Open Crash Dump  를 선택 한뒤  해당 덤프파일 을 오픈 한다. 



하단에 .reload 를 입력 하여  symbols 를 다시 인식시키고, 


!analyze -v 명령어로 해당 덤프파일을 분석하자. 


그럼 어떤문제로 된건지 대~~ 충 나온다..  머 이정도만 되도 땡큐긴 하지만서도,,  

Posted by Sumin Family


윈도우 파워쉘 사용을 위한 10가지 팁

          



파워쉘은 커맨드 라인을 대체할 마이크로 소프트의 새로운 툴이다. 아직은 베터버전 이지만, 여기서 최신 버전을 무료로 다운로드 받을 수 있다. 우리같이 좀 묵은 사람들은 예전에 한때 DOS를 썼었고, 좀 지나서는 윈도우즈 환경에서 DOS 커맨드 창과 거의 비슷한 CMD.exe를 사용했다. 그러나 파워쉘은 DOS의 업데이트 버전이 아니다. 파워쉘은 MS가 이전에는 제공했던 어떤 커맨드 라인 프롬프트보다 강력한 커맨드라인 시스템이다. 안타깝게도 이 툴을 배우기 전에 해야 할 일이 있다. (역자: 파워쉘 설치와 함께 XP service pack 2.0 이상과 .NET 프레임워크 2.0이 설치되어 있어야 한다.) 툴을 설치하고 살펴본 후에는 아래의 10가지 팁을 읽어보아라. 여러분의 인생을 보다 편안하게 해줄 것이다. 

1. 일관성을 기억하라 

커맨드는 동사-명사의 형태로 되어있고 파라미터는 a- 로 시작한다는 것을 기억하라. 경로명에는 \ 과 / 을 모두 사용할 수 있다. 

파워쉘을 사용하는데 있어 가장 기본이 되는 규칙은 커맨드의 형식이 항상 동일한 형태로 되어있는 것이다. 이러한 특성을 기억하면 커맨드들을 기억하기가 한결 쉬울 것이다. 

동사-명사 구조의 예는 다음과 같다.
Set-Date
Write-Debug
Get-Item
Get-WmiObject

각각의 커맨드는 동사와 명사 사이에 하이픈으로 연결된다. 커맨드의 명사는 복수형을 써야 할 것 같은 상황이라도 단수형을 쓴다.
Get-Process
현재 동작 중인 모든 프로세스를 반환한다. (역자: 여러 프로세스를 가져올 것이지만, Get-Processes가 아닌 Get-Process로 사용한다.) 

일관성은 커맨드 명에만 해당하는 것은 아니다. 파라메터 역시 일관적이다. DOS나 Unix 세상에서는 커맨드에서 - 나 / 모두 파라메터를 의미했다. 그러나 파워쉘에서는 모든 파라메터는 - 으로 시작한다. 하지만 경로명에서는 / (forward slash) 나 \ (backward slash) 모두 사용될 수 있다. 더 편하다고 느끼는 것을 사용하면 된다. 경로를 조합해야 할 경우가 있다면 내장된 커맨드인 join-path를 다음과 같이 사용하면 된다.
join-path c:\ \temp
결과는 C:\temp 가 된다. 

(이것은 두 문자열을 합칠 때 여러분이 중복된 slash를 직접 지우지 않아도 되기 때문에 편리하다.) 

2. 유용한 명령어를 기억하라 

커맨드 리스트를 보기위해 Get-Command를 사용하고 커맨드의 사용법을 알기위해서는 Get-Help를 써라. 또한 -? 파라미터를 써서 커맨드의 사용법을 알아낼 수 있다. TabExpansion을 사용해라 (그리고 TabExpansion을 대체할 것을 찾아보아라). 

새로운 언어를 쓰게 될 때 여러분은 우선 그 어휘를 알려고 할 것이다. 파워쉘 두 번째 배포에서는 129개의 명령어가 포함되었다. 129개는 배우기에 너무 부담스럽고 기억하기 어렵다. 그러나 여러분이 최소한 어떤 명령어가 사용 가능한지 알고 모든 커맨드 리스트를 보고 싶다면 이렇게 입력하라.
Get-Command
그리고 Get-Help가 있는데, Get-Help는 특정한 커맨드의 사용법을 알려준다.
Get-Help Get-Member
는 커맨드 Get-Members에 대한 도움말을 보여준다. 또는 다음과 같이 -? 파라미터를 전달할 수 있다.
Get-Member -?
이 내장 커맨드는 또한 다른 레벨의 설명을 제공한다. 기본 설명은 기초적인 정보를 보여준다. Get-Help에 -detailed를 파라메터로 붙여 상세한 설명을 제공받을 수 있다.
Get-Help Get-Member -detailed
여기에 더욱 보강된 설명을 얻고자 하면 -full을 사용한다.
Get-Help Get-Member -full
대다수의 커맨드들이 상당히 긴데, 우리 컴퓨터 족들은 보통 긴 명령어를 싫어한다. 그래서 파워쉘은 커맨드의 별칭들을 제공한다. 다음과 같은 모든 별칭의 리스트를 볼 수 있다.
PS C:\WINDOWS\system32> Get-Alias

CommandType     Name            Definition
-----------     ----            ----------
Alias           ac              Add-Content
Alias           asnp            Add-PSSnapin
Alias           clc             Clear-Content
Alias           cli             Clear-Item
Alias           clp             Clear-ItemProperty
...
원하는 커맨드를 찾을 때 Tab 키는 특별한 기능을 제공한다. 만약 동사를 기억한다면 동사와 하이픈를 입력하고 Tab을 반복해서 누르면 해당하는 동사로 시작하는 명령어가 자동으로 입력되며 순환한다. 만약 아래와 같이 입력했다면,
Get-
Tab을 눌러보아라. Get-Acl, Get-Alias, Get-AuthenticodeSignature 등등 명령어를 보게 될 것이다. Tab 표현식은 유연한 편이 바람직한데, MS도 이를 알고 있기 때문에 Tab표현식을 수정할 수 있게 하였다. 인터넷에서 PowerShell TabExpansion(Tab과 Expansion사이에 공백을 넣지 말 것)에 대해서 검색해보면 정보를 찾을 수 있을 것이다. 다른 사람들이 이미 Tab 표현식을 작성해 놓은 것이 있는데, 일부는 꽤 유용하다. 그 중에서 필요한 것을 찾아 사용하면 된다. (추가적으로, Get-Content function:TabExpansion을 사용하면 TabExpansion function의 소스를 볼 수 있다.) 여기 필자가 자주 사용하는 몇몇 커맨드를 나열했다. 커맨드를 사용할 때, 아마도 사용할 수 있는 별칭에 대해서도 알고 싶을 것이다.. 

커맨드 별칭 

커맨드별칭
Copy-Itemcpi, cp, copy
ForEach-Objectforeach, %
Get-ChildItemdir, ls
Get-Commandgcm
Get-Contentcat, type
Get-Contentgc, type, cat
Get-Helphelp
Get-Locationgl, pwd
Move-Itemmi, mv, move
Remove-Itemri, rd, del, rm, rmdir
Rename-Itemrni, ren
Set-Locationcd, chdir
Where-Objectwhere

Get-Command는 필요한 커맨드를 찾기 위한 파라메터를 지원한다. 이를테면 커맨드에 Format이라는 단어가 들어간 것들을 찾고자 한다면, 다음과 같이 입력한다.
Get-Command *Format*
동사 Format으로 시작되는 커맨드를 찾고싶을 수도 있다 (Format-Table과 같이). 그럴 때는 이렇게 입력한다.
Get-Command -verb Format
동사가 정확히 Format인 커맨드인 명령어를 반환할 것이다. 만약 아래와 같이 입력하면,
Get-Command -verb Form
아무런 결과도 얻지 못할 것이다. 이럴 때는 와일드카드 형식을 쓴다:
Get-Command -verb Form*
유사하게 명사에 대해서도 적용 할 수 있다.
Get-Command -noun Alias
Alias라는 단어가 들어가는 커맨드를 확인할 수 있을 것이다.. 

간단한 한 문자 별칭이 두 개 있는데, %는 ForEach-Object의 별칭이고 ?는 Where-Object의 별칭이다. 

3. 기본 타입과 내장 변수 배우기 

기본 타입과 파서가 그것을 어떻게 인지 하는지 배워보자. 정규 표현식을 마스터 하면 여러분 인생이 완전해질 것이다.. 파워쉘 스크립트 언어는 몇 개의 유용한 기본타입을 지원한다. 그리고 그러한 타입의 변수를 생성할 수 있다. 여기에는 문자열, 숫자, 배열과 사전형(Hash나 Map으로도 알려져 있는)이 있다. .NET에서 기본적으로 지원하는 타입은 모두 사용할 수 있다고 보면 된다. (다음 섹션에서 .NET에 대해서 이야기해 보겠다) 

커맨드 분석기는 입력하는 내용에 따라 타입을 결정한다. 만약 당신이 다음을 입력하면
5
당신은 숫자형을 선언한 것이다. 변수 이름은 $로 시작하며 숫자를 다음과 같이 저장할 수 있다.
PS C:\> $a = 5
PS C:\> $a
5
PS C:\>
GetType()을 호출하여 내장된 .NET 타입을 알아낼 수 있다.
PS C:\> $a.GetType()
IsPublic IsSerial Name              BaseType
-------- -------- ----              --------
True     True     Int32             System.ValueType
파서는 또한 다른 기본 타입도 알아낼 수 있다. 더블형은 소수점을 이용해 만들어 진다.
PS C:\> $b = 3.1415926
PS C:\> $b
3.1415926
PS C:\> $b.GetType().Name
Double
오늘날의 대다수의 스크립트 언어와 마찬가지로 스트링에 외 따옴표와 겹 따옴표를 모두 사용할 수 있다. 이는 몇몇 문제 상황에 편리한데, 이를테면 스트링에 겹 따옴표가 있으면 스트링 자체는 외 따옴표로 정의한다.
$c = '<span style="border:1px solid none">'
배열을 생성하기 위해서는 단지 항목을 구분하는 콤마를 쓰면 된다.
PS C:\> $d = 1,2,3,"Hello"
PS C:\> $d
1
2
3
Hello
PS C:\> $d.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

필요하다면 배열 주위를 괄호로 묶을 수 있다. 이것은 배열 안에 배열을 넣을 때 유용하다.
$e = (1,2,3,(4,5,6))
숫자의 범위는 .. 연산자를 사용하여 다음과 같이 지정할 수 있다.
$f = 1..5
1,2,3,4,5를 포함하는 배열이 생성될 것이다. 

사전형을 생성하기 위해서는 @를 다음과 같이 사용한다.:
PS C:\> $myhash = @{ 'one'=1; 'two'=2; 'three'=3 }
PS C:\> $myhash

Name                           Value
----                           -----
two                            2
three                          3
one                            1

PS C:\> $myhash['one']
1
PS C:\> $myhash['four']
PS C:\>
.NET은 강력한 정규 표현식을 지원하기 때문에, 파워쉘 역시 regex 타입을 지원한다. 정규 표현식을 생성하기 위해서는 대괄호([ ]) 안에 regex를 넣고 뒤에 문자열을 덧붙인다. 그러면 -match 연산자를 이용하여 정규 표현식을 사용할 수 있다. 

여기 예문이 있다.
PS C:\> $re = [regex]"abc[123]"
PS C:\> "abc1" -match $re
True
PS C:\> "abc4" -match $re
False
PS C:\>
만약 정규 표현식에 익숙치 않다면 지금이 배워야 할 때이다. 다른 프로그래밍 언어도 그렇지만, 정규 표현식을 많이 알수록 파워쉘을 더욱 쉽게 쓸 수 있다. 자주 사용하는 검색엔진으로 가서 "정규 표현식 배우기"라고 입력해봐라. 괜찮은 페이지가 몇 개 나올 것이다. 그렇지만 가장 좋은 자료는 제프리 프리들이 저술한 오렐리의 정규 표현식 완전 해부와 실습(Mastering Regular Expressions) 이다. 

이 책은 모든 컴퓨터 프로페셔널들이 읽어야 할 몇 안 되는 필독서다. 

쉘은 몇 가지 변수를 기본으로 내장 한다. 여기에 일부를 나열한다.
  • $$: 이전 줄의 마지막 토큰
  • $?: 마지막으로 성공이나 실패 상태
  • $^: 이전 줄의 첫번째 토큰
  • $pshome: 파워쉘이 설치된 디렉터리. 이 변수는 types.ps1xml같이 설정 관련 파일을 조작할 때 편리하다. 예를 들면,
    scite (join-path $pshome types.ps1xml)
(Scite는 내가 애용하는 공짜 텍스트 에디터다.) 

특정 구문에 의존하지 않는 타입을 원한다면, 파워쉘이 지원하는 바로 가기 타입을 이용하면 된다. 바로 가기 타입은 타입이름을 줄인 것으로 마이크로소프트 파워셀 블로그에 가면 그 리스트를 볼 수 있다. 타입을 배우고 익히는 것은 어렵다고 느낄 수 있다. 특히 커맨드가 생소한 타입의 오브젝트를 반환할 때는 더욱 그럴 것이다. 온라인 도움말을 잘 이해할 수 있다면 이 블로그를 방문해 보자. 모든 오브젝트 타입에 대한 설명을 볼 수 있어 파워쉘 실력을 키우데 많은 도움이 될 것이다. 

(만약 이것을 바꾸려거든 파일을 갱신해야 할 것이다. 팁 "개인 환경 설정하기"를 찾아보면 자세한 정보를 얻을 수 있다.) 이것을 변경할 때 어떤 오브젝트 타입에 대한 온라인 도움말도 찾을 수 있을 것이다. 그 기법은 완벽하지도 않고 모든 오브젝트에 대해 통하지도 않지만 대부분의 경우에는 잘 동작한다.. 

4. .NET 알기 

.NET 프레임워크는 파워쉘이 동작하는데 기반이 된다. .NET에 대해 잘 알게 된다면 독자의 파워쉘 내공도 한층 높아질 것이다.. 

파워쉘을 최대한 잘 사용하려면 .NET 프레임워크와 친해져야 한다. .NET 프레임워크에 대한 모든 설명은 온라인에서 구할 수 있다. .NET문서의 시스템 부분까지 이동해보자. 여기서 Int32, String, Array같은 기본 타입에 대한 설명을 찾아 볼 수 있다. 

간단히 말해서 .NET 프레임워크는 파워쉘 작업 중에 사용 할 수 있는 클래스와 타입들의 집합체라고 할 수 있다. 타입을 많이 알아두면 좋다. 타입들의 목록을 보면 해당 오브젝트로 할 수 있는 것을 알 수 있다. 이를테면 시스템 페이지를 클릭하고 스트링을 클릭하면 스트링 클래스의 목록을 얻을 수 있다. 

대부분의 커맨드는 .NET 오브젝트(혹은 오브젝트의 집합)을 반환한다. 예를 들어 Get-Date 커맨드는 화면에 현재 날짜와 시간을 출력할 것이다. 하지만 사실은 커맨드가 DateTime이라는 .NET 프레임워크의 타입을 반환한 것이다. 마찬가지로 Get-ChildItem(혹은 별칭인 dir)을 타이핑하면 디렉터리 리스트가 출력되지만 실제로는 .NET 프레임워크의 DirectoryInfo나 FileInfo 오브젝트의 집합을 보는 것이다. 

.NET 프레임워크는 거대한 계층으로 구성되어 있으며, 모든 클래스는 Object로부터 파생된다. Object 클래스는 .NET의 모든 클래스에 기본적이며 공통된 기능을 제공한다. 예를 들면 ToString 이라는 함수이다. 이 함수는 오브젝트를 표현할 수 있는 텍스트를 반환한다. 따라서 파워쉘의 어느 객체에 대해서도 이 함수를 호출하여 오브젝트를 표현하는 텍스트를 얻을 수 있다. (사실 정확히 말하자면 파워쉘이 오브젝트를 콘솔에 출력하는 방법을 의미한다) 

5. 파이프라인이 텍스트 기반이 아닌 오브젝트 기반이라는 것을 이해하라 

오브젝트가 단순히 텍스트를 통해서가 아니라 파이프라인을 통해서 진행된다는 것을 기억하라. 이는 파이프의 어떠한 시점에서도 세부적인 정보를 얻는 것이 가능하다는 것을 의미한다. 

만약 윈도우즈의 cmd나 다른 유닉스 계열의 쉘 같이 다른 쉘을 이용해본 적이 있다면 텍스트를 출력하는 커맨드가 다른 커맨드로 내용을 전달 할 수 있다는 것을 알 것이다. 예를 들면 cmd와 DOS의 dir 커맨드는 파일 리스트를 출력한다. 이 리스트가 텍스트의 형태다. 단순히 dir을 입력하면 윈도우 콘솔 화면에서 파일 리스트를 보게 될 것이다. 그러나 리스트를 화면에 출력하는 대신에 다른 커맨드에 입력으로 넣을 수 있다. 이것을 파이핑 이라고 부른다. more 커맨드는 텍스트를 읽거나 한 페이지 분량씩 출력하고 대기 하다가 키 입력이 있으면 다음 페이지를 보여주는 기능을 한다.
C:\WINDOWS >dir /ad | more
 Volume in drive C has no label.
 Volume Serial Number is BCFB-2313

 Directory of C:\WINDOWS

11/04/2006  10:59 PM    <DIR>          .
11/04/2006  10:59 PM    <DIR>          ..
06/07/2004  07:03 PM    <DIR>          $NtUninstallKB824105$
06/07/2004  07:05 PM    <DIR>          $NtUninstallKB824141$
10/15/2004  09:06 PM    <DIR>          $NtUninstallKB824151$
06/07/2004  07:01 PM    <DIR>          $NtUninstallKB825119$
06/07/2004  07:00 PM    <DIR>          $NtUninstallKB828035$
06/07/2004  06:58 PM    <DIR>          $NtUninstallKB828741$
06/07/2004  06:59 PM    <DIR>          $NtUninstallKB833407$
-- More  --
사람들은 이러한 파이프가 텍스트를 다루는데 막강한 유틸리티 라는 것을 알게 되었다. 몇 년 전에 awk와 grep이 개발되었고 이를 이용해서 텍스트를 처리하게 되었다. (awk는 공백으로 구분되는 레코드 파일로부터 조건을 만족하는 결과를 쉽게 얻을 수 있다. grep은 텍스트에서 패턴을 만족하는 부분을 찾을 수 있으며 현재까지도 많이 사용된다) 현재에 이르러서는 Perl 같은 훨씬 강력한 텍스트 처리 언어를 사용한다. 

DOS의 dir과 같이 간단한 커맨드가 텍스트를 이용하는 반면 보다 강력한 툴들은 오브젝트를 활용한다. 만약 윈도우즈 시스템에서 여러 개의 프로세스를 관리한다고 할 때 프로세스 하나는 텍스트 한 줄을 뜻하는 것은 아니다. 여기서 프로세스는 프로세스 ID나 보안 설정 값 등으로 구성된 하나의 오브젝트다. 이러한 것은 단순한 텍스트 이상의 것이다. 

만약 어떤 툴이 여러 프로세스를 가져와서 그 정보를 단순한 텍스트로 다른 툴에게 넘긴다면 정보를 넘겨 받은 툴은 속은 것이다. 그 툴은 실제 오브젝트가 아닌 단순한 프로세스의 텍스트 기반 정보를 얻은 것이다. 

더 좋은 방식은 간단하게 첫번째 툴이 두 번째 툴에게 실제 오브젝트를 전달(pipe)하는 것이다. 툴은 결국 텍스트를 출력하는 윈도우를 다루어야 하기 때문에 처음엔 문제인 것처럼 보일 수도 있다. 그렇지만 dir | more처럼 커맨드가 함께 동작하는 것을 생각해 보면 마지막으로 콘솔 윈도우에 출력되는 것은 단순한 출력 이상의 것이다. dir에서 more로 정보가 전달되는 것은 전혀 콘솔에 표시되지 않는다. 

여기 예가 있다.
PS C:\WINDOWS> dir | sort LastWriteTime | more


    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---          7/4/1995   1:33 PM      11776 Ckrfresh.exe
-a---         7/31/1995   5:44 PM     212480 PCDLIB32.DLL
-a---          5/3/1996  10:36 AM      18432 Setup_ck.dll
-ar--          5/3/1996  12:21 PM      27648 Setup_ck.exe
-a---         7/22/1998  12:29 AM         21 CS_SETUP.ini
-a---        10/29/1998   3:45 PM     306688 IsUninst.exe
-a---         1/12/1999  10:39 AM       6656 delttsul.exe
-a---         1/12/1999  10:40 AM      29184 rmud.exe
-a---         6/18/1999   4:49 PM     165888 Ckconfig.exe
-a---        11/10/1999   3:05 PM      86016 unvise32qt.exe
...

(dir은 Get-Children의 별칭이고 sort는 Sort-Object의 별칭이다. 그리고 more는 Out-Host -paging을 호출한다. 따라서 dir | sort LastWriteTime | more는 Get-Children | Sort-Object | Out-Host -Paging.을 줄인 것이다.) 

예에서 보이는 목록은 디렉터리를 LastWriteTime 필드로 정렬하고 한 페이지씩 출력하고 있다. 하지만 오브젝트들은 파이프라인으로 전달 된 후 마지막엔 결국 텍스트로 바뀌었기 때문에 아래와 같이 입력해서 결과를 변수에 저장할 수 있다.
PS C:\WINDOWS> $a = dir | sort LastWriteTime
변수 $a는 지금 Sort-Object 커맨드의 결과를 담고 있는데 $a의 내용은 단순한 텍스트가 아니다. dir(Get-ChildItem) 커맨드는 FileInfo와 DirectoryInfo 오브젝트의 리스트를 리턴받아 sort (Sort-Object) 커맨드에 전달했다. 따라서 $a는 FileInfo와 DirectoryInfo 오브젝트의 리스트이다. 아래와 같이 대괄호를 이용해서 각각의 원소에 접근할 수 있다.
PS C:\WINDOWS> $a[0]

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---          7/4/1995   1:33 PM      11776 Ckrfresh.exe


PS C:\WINDOWS> $a[1]

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         7/31/1995   5:44 PM     212480 PCDLIB32.DLL
다음 섹션에서 오브젝트의 멤버함수 호출에 대해서 더 자세히 다루겠다. 여기서는 GetType() 함수를 호출해서 해당 오브젝트(단순한 텍스트가 아닌)의 타입을 알아보자. 아래는 내가 변수 $a 의 타입을 알아본 것이다.
PS C:\WINDOWS> $a.GetType()

IsPublic IsSerial Name                BaseType
-------- -------- ----                --------
True     True     Object[]            System.Array
오브젝트 $a는 배열이다. 이제 첫번째 원소가 무엇인지 알아보자.
PS C:\WINDOWS> $a[0].GetType()

IsPublic IsSerial Name                BaseType
-------- -------- ----                --------
True     True     FileInfo            System.IO.FileSystemInfo
6. 오브젝트 활용하기 

파이프를 통해 전달되는 오브젝트는 클래스가 형상화된 것이다. 여러분들은 오브젝트의 데이터와 함수를 활용할 수 있다. 

커맨드의 리턴으로 받은 오브젝트를 포함해서 모든 오브젝트의 멤버를 이용할 수 있다는 것을 잊지 말아라. Get-Member 커맨드를 이용해서 오브젝트의 멤버를 알아낼 수 있다.
PS C:\Documents and Settings\Jeff> $a = "abc"
PS C:\Documents and Settings\Jeff> Get-Member -InputObject $a


   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone()
CompareTo        Method                System.Int32 CompareTo(Object value),...
Contains         Method                System.Boolean Contains(String value)
CopyTo           Method                System.Void CopyTo(Int32 sourceIndex,...
EndsWith         Method                System.Boolean EndsWith(String value)...
...
특정 커맨드의 결과를 파이프로 Get-Member에 넘기면 Get-Member는 커맨드가 리턴한 오브젝트의 멤버 리스트를 보여줄 것이다. 같은 타입인 두 오브젝트가 넘겨지는 경우에는 Get-Member는 타입에 대한 멤버의 목록을 한번만 보여줄 것이다. 예를 들어 당신이 Get-Process 커맨드로 리턴 받은 오브젝트의 멤버에 대해서 알고싶다고 하자. 그러면 파이프로 Get-Member에게 아래와 같이 전달한다.
PS C:\Documents and Settings\Jeff> Get-Process | Get-Member


   TypeName: System.Diagnostics.Process

Name                           MemberType     Definition
----                           ----------     ----------
Handles                        AliasProperty  Handles = Handlecount
Name                           AliasProperty  Name = ProcessName
NPM                            AliasProperty  NPM = NonpagedSystemMemorySize
PM                             AliasProperty  PM = PagedMemorySize
VM                             AliasProperty  VM = VirtualMemorySize
WS                             AliasProperty  WS = WorkingSet
add_Disposed                   Method         System.Void add_Disposed(Event...
add_ErrorDataReceived          Method         System.Void add_ErrorDataRecei...
...
Where-Object 커맨드는 주로 파이프라인에서 사용되며 정의된 기준을 만족하는 오브젝트만을 통과시킨다. 필터링 기준을 정의하여 파이프라인을 통과한 오브젝트의 멤버에만 접근하게 된다. 

이를테면 여기에 전체 출력을 보이지는 않았지만 Get-Process | Get-Member는 Get-Process의 결과로 VirtualMemorySize라는 멤버를 갖는 각각의 오브젝트를 보여준다. 만약 당신이 VirtualMemorySize가 100 MB (정확히는 104,857,600 bytes) 이상인 프로세스의 리스트를 보고싶다고 하자. 이런 경우 아래와 같이 할 수 있다.
PS C:\Documents and Settings\Jeff> Get-Process | Where-Object {$_.VirtualMemorySize -gt 104857600}

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    948      15    38928      52788   346    12.23    712 dexplore
    256      10    72624      81592   194   136.00   2664 firefox
    350      14    30948      44268   133     7.06   3576 OUTLOOK
    309       8    31928       6404   833   221.14    356 sqlservr
    334       9    22188      14784   817     0.53    852 sqlservr
   1598      91    18668      27404   142   156.75   1864 svchost
    356      24    15708      23740   169   201.47   1536 WINWORD
Where-Object 커맨드는 스크립트의 중괄호 안에 파라메터 값을 취한다. 그 스크립트는 파이프라인으로 넘겨받는 모든 오브젝트 대해 수행된다. 넘겨진 오브젝트 들은 변수 $_ 에 대입된다. 따라서 $_.VirtualMemorySize는 현재 파이프라인에 있는 오브젝트의 멤버 VirtualMemorySize를 가리킨다. -gt는 ~ 보다 크다는 비교 연산자다. 따라서 현재 오브젝트의 가상 메모리 크기가 100 MB보다 큰지 아래와 같이 테스트 할 수 있다.
Get-ChildItem | foreach { $_.Fullname }
지금까지 보았듯이 오브젝트의 멤버들에 익숙해져야 한다. 관련 내용은 온라인 도움말을 이용해서 찾아볼 수 있다. 온라인 도움말로 이동했으면 우선 시스템을 클릭하고 다시 스트링을 클릭하면 이제 스트링 클래스의 도움말 페이지에 도달해있을 것이다. 페이지의 하단부(왼쪽 창의 트리안)에 String Members라는 항목이 있다. 그 페이지는 스트링 클래스의 모든 멤버 리스트를 보여준다. 

예를들면 EndsWith라는 멤버가 있다. 이 멤버는 스트링의 끝이 주어진 문자 집합의 문자로 끝나는지의 여부를 알려준다. 

여기 예문이 있다.
PS C:\> $a = "This is a test"
PS C:\> $a.EndsWith("test")
True
PS C:\> $a.EndsWith("this")
False
PS C:\>
7. 출력 형식 

다양한 Format-커맨드를 이용해서 출력 형식을 구미에 맞게 변경할 수 있다. 

파워셀은 파이프라인을 통해서 오브젝트를 전달한다. 다만 화면출력을 해야 하는 경우에만 오브젝트의 텍스트 버전을 얻는다. Get-Process를 실행해서 나온 오브젝트의 멤버 목록을 본다면 출력되는 것 보다 많이 볼 수 있을 것이다. 어떤 멤버가 출력될까? 그 답은 시스템 설정에 있다. 파워쉘 디렉터리를 들여다 보면 dotnettypes.format.ps1xml라는 파일이 있다. 이 XML파일은 다양한 타입의 출력 형식을 정의한다. 디렉터리 내에는 각각의 타입을 정의하는 *.format.ps1xml의 형식의 파일이 몇 개 있다. 이것에 관해서는 여기서 더 배울 수 있다. 

출력 형식을 설정하기 위해 파워쉘 유저는 FormatTable이라는 커맨드를 사용한다. 이 커맨드는 오브젝트의 파이브라인을 취하며, 형식이 정의되 있는 *.format.ps1xml 파일을 이용한다. 다음과 같이 세팅을 오버라이딩 하고 멤버를 선택해서 화면에 출력할 수 있다.
Get-Process | Format-Table Id, Name
  Id Name
  -- ----
2876 alg
 532 ApntEx
2044 Apoint
3448 calc
1824 CFSvcs
2176 cmd
3760 cmd
1640 Crypserv
1316 csrss
위의 결과는 기본 세팅을 무시하고 테이블의 ID와 Name 컬럼을 출력한 것이다. 

파워셀에는 4개의 형식 커맨드가 있다.
  • Format-Custom
  • Format-List
  • Format-Table
  • Format-Wide
Get-Help 명령을 써서 각각의 명령에 대해 알아볼 수 있다. 

8. 모든 것은 계층화 되어있다 

파워쉘 드라이브는 단순히 파일 시스템 이상의 것이다. 레지스트리, 환경 그리고 다른 데이터에 드라이브로서 접근할 수 있다. 컴퓨터를 계층적으로 정의하는 것은 오래 전부터 나온 개념이다. 이를테면 유닉스는 하드웨어를 항상 계층형 파일시스템의 일부로 다뤄왔다. 유사하게 파워쉘은 컴퓨터의 다양한 부분을 드라이브로 다룬다. 아래와 같이 Get-PSDrive 커맨드를 사용하면 현재 어떠한 드라이브가 가능한지 볼 수 있다.
PS C:\Documents and Settings\Jeff> Get-PSDrive

Name       Provider      Root                       CurrentLocation
----       --------      ----                       ---------------
Alias      Alias
C          FileSystem    C:\                        Documents and Settings\Jeff
cert       Certificate   \
D          FileSystem    D:\
Env        Environment
Function   Function
HKCU       Registry      HKEY_CURRENT_USER
HKLM       Registry      HKEY_LOCAL_MACHINE
Variable   Variable

예를 들면 Alias는 별칭의 리스트를 의미하는 드라이브다. 아래와 같이 원하는 어느 드라이브로든 변경할 수 있다.
PS C:\WINDOWS\system32> cd alias:
PS Alias:\>
PS Alias:\> dir

CommandType     Name                  Definition
-----------     ----                  ----------
Alias           ac                    Add-Content
Alias           asnp                  Add-PSSnapin
Alias           clc                   Clear-Content
Alias           cli                   Clear-Item
Alias           clp                   Clear-ItemProperty
Alias           clv                   Clear-Variable
Alias: 드라이브는 하위 디렉터리를 지원하지 않지만 Registry 같은 경우에는 지원한다.
PS Alias:\> cd HKCU:
PS HKCU:\> dir

   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER

SKC  VC Name                           Property
---  -- ----                           --------
  2   0 AppEvents                      {}
  1   0 CLSID                          {}
  4  32 Console                        {ColorTable00, ColorTable01, ColorTab...
 24   1 Control Panel                  {Opened}
  0   8 Environment                    {BAKEFILE_PATHS, INCLUDE, LIB, PROMPT...
  0   1 HBA                            {Version}
  1   5 Identities                     {Identity Ordinal, Migrated5, Last Us...
  3   0 Keyboard Layout                {}
  0   0 Movie Magic Screenwriter       {}
 19   0 Movie Magic Screenwriter Vo... {}
  0   0 Network                        {}
  1   1 Note-It                        {(default)}
  4   1 Printers                       {DeviceOld}
  1   1 RemoteAccess                   {InternetProfile}
  1   7 S                              {AutodiscoveryFlags, DetectedInterfac...
100   1 Software                       {(default)}
  0   0 UNICODE Program Groups         {}
  2   0 Windows 3.1 Migration Status   {}
  1   0 Win_32                         {}
  0   1 SessionInformation             {ProgramCount}
  0   7 Volatile Environment           {LOGONSERVER, CLIENTNAME, SESSIONNAME...


PS HKCU:\> cd Software\Microsoft
PS HKCU:\Software\Microsoft> dir


   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microso
ft

SKC  VC Name                           Property
---  -- ----                           --------
  1   0 Active Setup                   {}
  3   0 ActiveMovie                    {}
  2   0 Advanced INF Setup             {}
  1   0 ASF Stream Descriptor File     {}
  1   0 Automap                        {}
  1   4 Broadband Networking           {StatusTimeout, InternetStatusTimeout...
  1   1 ClipArt Gallery                {UserAdded}
  0   5 Clipbook                       {WindowsClipBook Viewer, WindowsClipb...
  0   2 Clock                          {iFormat, {CCF5A555-D92E-457b-9235-2B...
DOS에서처럼 여기서도 파일명에 패턴을 쓸 수 있다.
PS HKCU:\Software\Microsoft> dir *windows*


   Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Microso
ft

SKC  VC Name                           Property
---  -- ----                           --------
  3   0 Windows                        {}
  0   1 Windows Genuine Advantage      {code}
  0   5 Windows Help                   {Maximized, Xl, Xr, Yd...}
  1   0 Windows Media                  {}
  1   0 Windows NT                     {}
  1   0 Windows Script                 {}
  1   0 Windows Script Host            {}
?는 문자 하나와 매칭된다. 예를 들면 abc? 는 abc로 시작하며 뒤에 문자 하나가 붙은 문자열과 매치된다. 대괄호를 써서 매치할 문자열을 정의할 수도 있다. abc[123]은 abc1, abc2, 그리고 abc3과 매치된다. 

9. 흐름과 스크립트를 사용해라 

파워셀은 강력하며 스크립트를 지원하는 언어다. 

많은 커맨드가 스크립트를 파라메터로 취한다. Where-Object가 한 예이다. 이전에 아래 코드를 본적이 있을 것이다.
Get-Process | Where-Object {$_.VirtualMemorySize -gt 104857600}
For-Each 오브젝트는 리스트의 각각 아이템에 대하여 스크립트를 실행시킨다. 

간단한 예제를 보자.
PS C:\WINDOWS\system32> 1..10 | foreach { $_ * 2 }
2
4
6
8
10
12
14
16
18
20
이것만으로는 별로 유용한 예제는 아닌 듯하다. 이러한 기법은 다양하게 응용될 수 있다. 이를테면 디렉터리 내의 첫번째 줄에 "#backup"이라는 문자열이 들어가는 모든 txt 파일을 C:\backups 디렉터리로 복사할 수 있다. 

한번 해보자.
dir *.txt | foreach { if ((Get-Content $_ -totalCount 1) -eq "#backup") { copy $_ c:\backups } }
우선 dir 커맨드의 결과가 파이프를 통해서 foreach 커맨드로 보내진다. foreach 커맨드는 각 항목마다 중괄호로 쌓여진 스크립트를 실행한다. 이 스크립트는 각 파일의 첫번째 줄을 읽어서(Get-Content의 -totalCount 1 은 첫번째 줄만 허용) #backup과 비교한다. 만약 문자열이 맞으면 스크립트는 그 파일을 복사한다. 

10. 개인 환경을 구축해라 

profile.ps1 파일을 수정해서 각자의 입맛에 맞게 환경을 세팅 할 수 있다. 

여러분들이 필요한 일을 수행하기 위해서 스크립트를 작성하고 나서는 나중을 위해서 그것을 보관하려고 할 것이다. 또한 기억하기 편하도록 명령어 몇 개에 별칭을 생성하고 싶어할 수 있다. 예를 들면 이전섹션에서 #backup이 들어가는 txt 파일을 저장하는 스크립트를 만들었다. 그것을 각자의 프로파일에 추가할 수 있다. 먼저 해당 스크립트는 아래와 같이 function 형식으로 만들어야 한다.
function Backup-TextFiles {
    dir *.txt | foreach {
        if ((Get-Content $_ -totalCount 1) -eq "#backup") { 
            copy $_ c:\backups } 
        }
    }
이 함수를 프로파일에 추가한다. 프로파일은 각자의 홈 디렉터리에 있는 Profile.ps1이라는 파일이다. 홈 디렉터리는 \Documents and Settings\<username>\My Documents\WindowsPowerShell\profile.ps1이며, <username>은 각자의 실제 유저 이름이다. 

하지만 스크립트를 실행하기 전에 보안 서명을 하는 절차가 있다. (이게 마음에 들지 않으면 보안 옵션을 해제할 수도 있다. 몇몇 블로그에서 이것에 대해서 말하지만 별로 좋은 생각은 아닌 듯 하다.) 이 링크는 각자가 작성한 스크립트에 서명하는 방법을 설명해 주는 괜찮은 곳이다. (기사에서 저자는 snap-in을 MMC에 추가하라고 언급했다. mmc.exe를 얻으려면 File->Add/Remove Snap-in을 클릭하라. makecert.exe를 확실히 동작시키려면, 저자가 말한 makecert.exe가 포함된 디렉터리에 위치해야 한다. 또한 변경 내용이 나오기 전에 MMC 윈도우를 리프레쉬 해야한다.) 

결론 

새로운 윈도우 파워쉘은 덩치가 크지만 거기에 압도될 필요는 없다. 내가 처음 파워쉘을 사용했을 때, 그것이 나의 인생을 이렇게 편하게 해주리라고는 상상도 못했었다. 너무 생소한 커맨드들이 즐비하고 하나 같이 타이핑 하기도 힘들게 길었다. 하지만 짧은 시간 안에 나는 커맨드와 별칭 그리고 파워쉘의 세상을 이해하는 공부를 시작했다. 마지막으로 이러한 툴을 제공해준 마이크로 소프트에 감사하며, 인생을 편안하게 해줄 파워쉘 관련 커뮤니티의 작품들을 볼 수 있을 것이라는 데 흥미를 느낀다. 파워쉘을 즐겨보자. 


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


원문 

아래에서 퍼왔지만 위에 원문 내용을 한글로 번역 한내용과 동일하며, 예제 부분이 알아볼수 없어서 원분 을 보고 다시 재수정함. 

퍼옴

Posted by Sumin Family


윈도우 암호 를 초기화하다보면,   윈도우 부팅시에 아래와 같은 오류메시지와 함께.  

부팅이 안되는 현상이 발생할수 있다, 




다음 오류로 인하여 보안 계정 관리자 초기화 작업을 실패했습니다. %hs 오류 상태: 0x%x. 시스템을 종료하고 안전 모드를 사용하려면 [확인]을 클릭하십시오. 자세한 내용은 이벤트 로그를 확인하십시오.



이럴땐  windows\repair 폴더안에 sam 파일을  windows\system32\config  폴더로 카피 하더라도 동일 현상이 발생한다. 


이때는  repair 폴더안에  security  파일을  config 폴더로 카피 하자, 


그렇게 되면,  보안 관련 설정들이 초기화 된다. 


그다음.. 다시 보안설정 해야지 않을까???



Posted by Sumin Family

암호 변경


cd 부팅


system recovery tool


command pormpt


X:   c:



windows \ system32 \


move Utilman.exe  Utilman.exe.bak

copy cmd.exe Utilman.exe


reboot





net user Administrator dkagh1234?


http://www.youtube.com/watch?v=Ar-VoO9ogHc


Posted by Sumin Family


티스토리 툴바