SQL Server 818

최신 SQL Server Native Client 설치하기

최신 SQL Server Native Client 설치하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server용 서비스팩(SP) 또는 누적 업데이트(CU)를 설치하는 경우 SQL Server Native Client가 업데이트 되지 않는 것을 알 수 있다. 또한 업데이트를 찾기가 어려울 수 있다. SP또는 CU 패키지에서 가져오는 방법에 대해서 알아본다. SP 또는 CU 패키지를 실행할 때 설치될 폴더를 확인할 수 있다. 확인된 폴더의 위치를 탐색기를이용하여 이동하면 SQL 설치 랜딩 페이지를 볼 수 있다. 여기에서 해당 지역의 폴더로 이동한다. KOR의 경우 1042 폴더이며 ENU는 1033 폴더이다. 여기서 /x64/setup/x64로 이..

Sys.dm_os_waiting_tasks를 활용한 실행중인 병렬쿼리 확인

Sys.dm_os_waiting_tasks를 활용한 실행중인 병렬쿼리 확인 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 Sys.dm_os_waiting_tasks를 활용하여 실행중인 병렬쿼리의 정보를 확인한다. SELECT [owt].[session_id], [owt].[exec_context_id], [ot].[scheduler_id], [owt].[wait_duration_ms], [owt].[wait_type], [owt].[blocking_session_id], [owt].[resource_description], CASE [owt].[wait_type] WHEN N'CXPACKET' THEN RIGHT ([owt].[resource_de..

DBCC DROPCLEANBUFFERS가 작동하지 않을 때

DBCC DROPCLEANBUFFERS가 작동하지 않을 때 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 DBCC DROPCLEANBUFFERS는 버퍼 풀에서 빈 버퍼를 모두 제거하는 명령이다. 이 명령을 사용하면 서버를 종료하고 다시 시작하지 않아도 완전히 빈 버퍼 캐시를 사용하여 쿼리를 테스트할 수 있다. 버퍼풀에서 빈 버퍼를 삭제하려면 CHECKPOINT를 사용하여 빈 버퍼 캐시를 만든다. CHECKPOINT는 현재 데이터베이스에 대한 모든 커밋되지 않은 페이지를 디스크로 기록하고 버퍼를 비운다. 다음 내용은 DBCC DROPCLEANBUFFERS 사용하어 빈 버퍼를 제거한 상태에서 SELECT를 이용하여 데이터를 조회하였는데 물리적 읽기가 ..

손상된 부트페이지 복구하기

손상된 부트페이지 복구하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 데이터베이스 장애 중 큰 이슈는 부트페이지 손상이다. 부트 페이지가 손상된 경우에는 데이터베이스를 온라인 또는 긴급 모드로 전환될 수 없다. 이번 포스트는 손상된 부트페이지를 복구하는 방법에 대해서 알아본다. 부트 페이지를 손상하고 복원하기 위한 테스트 데이터베이스를 생성한다. 생성된 데이터베이스를 분리하여 데이터파일에 사용자가 접근할 수 있도록 한다. -- Drop old database USE [master]; GO IF DATABASEPROPERTYEX (N'Company', N'Version') > 0 BEGIN ALTER DATABASE [Company] SET SI..

Temp table 객체 생성시 세션간 충돌하지 않는 이유

Temp table 객체 생성시 세션간 충돌하지 않는 이유 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 데이터베이스를 사용할 때 temp table(임시 테이블)을 많이 사용한다. 단일 tempdb가 여러 세션에서 동일한 개체를 만드는 경우에도 어떻게 충돌을 방지할 수 있을까? 다음 간단한 테스트를 통해서 임시테이블 생성과 충돌 방지에 대해서 알아본다. 아래 스크립트는 임시 테이블을 생성한다. -- Session 1: Table creation CREATE TABLE #temptable_test ( id INT NOT NULL IDENTITY (1,1) ,Name CHAR(100) NOT NULL ,DOJ DATETIME NOT NULL ); 테..

SQL Server 데이터베이스 메일 계정 수정

SQL Server 데이터베이스 메일 계정 수정 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 SQL Server에서 제공하는 데이터베이스 메일 기능을 사용하면 SQL Server에서 발생하는 다양한 이벤트를 관리자에게 이메일로 발송할 수 있다. Tempdb 증가시 이메일로 경고 받기 : http://sqlmvp.kr/220067810433 SQL Server 데이터베이스 메일은 SMTP 서버 이름, 포트번호, 이메일 주소 등을 이용하여 메일을 발송한다. 이번 포스트는 생성된 데이터베이스 메일의 계정 및 기타 정보 수정방법에 대해서 알아본다. 데이터베이스 메일 정보 수정은 SSMS 및 T-SQL로 가능하다. [SSMS로 데이터베이스 메일 정보 변경..

XEvent(확장이벤트)를 활용한 활성 로그 모니터링 하기

XEvent(확장이벤트)를 활용한 활성 로그 모니터링 하기 Version : SQL Server 2012, 2014 XEvent의 file_wirte_complete, transaction_log 이벤트를 사용하여 트랜잭션이 커밋될 때 트랜잭션 로그 파일에 기록되는 것을 모니터링할 수 있다. 실습을 위해 테스트 테이블을 생성한다. CREATE TABLE TestTable ( c1 INT IDENTITY, c2 CHAR (1000) DEFAULT 'a'); GO INSERT INTO [TestTable] DEFAULT VALUES; GO XEvent를 설정한다. -- Drop the session if it exists. IF EXISTS ( SELECT * FROM sys.server_event_sess..

특정 사용자에 대한 트랜잭션 로그 찾기

특정 사용자에 대한 트랜잭션 로그 찾기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서 일어나는 모든 일은 트랜잭션 로그에 기록 된다. 이전에도 트랜잭션로그를 이용하여 삭제된 데이터를 복구하거나 트랜잭션 발생 시간 및 사용자 찾는 방법에 대해서 다룬적이 있다. SQL Server 트랜잭션 로그 읽기 : http://sqlmvp.kr/140202102618 트랜잭션 로그 및 LSN을 이용한 삭제된 데이터 복구 : http://sqlmvp.kr/140206499367 SQL Server에서 Drop 및 Delete 사용자 찾기 : http://sqlmvp.kr/140202164558 변경된 테이블 이름 복구하기 : http://sqlmvp...

SQL Server I/O 서브시스템 레이턴시 확인

SQL Server I/O 서브시스템 레이턴시 확인 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 데이터베이스 성능에 큰 영향을 주는 부분이 디스크이다. 보통 데이터베이스 시스템의 부하가 증가하면 I/O 서브시스템의 작업량이 증가한다. 만약 I/O 대기 시간이 증가되었음을 발견되었다면 I/O 서브시스템은 이전의 SQL 서버 동작에서 변화가 발생한 것이다. 예를 들면 인덱스가 테이블 스캔을 실행할 정도로 통계가 오래된 경우, 코드 변경, 암시적 변환, 쿼리 계획 변경, 인덱스 추가, 인덱스 유지 관리 작업, 액세스 패턴, 페이지 분할, 데이터 캡처, 변경 내용 추적, 임시테이블 사용, 버퍼풀 부족으로 인한 지연 기록기 증가 또는 호스트의 다른 작업에 의한 증가..

실행계획의 물리 및 논리연산자 설명

실행계획의 물리 및 논리연산자 설명 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 쿼리 최적화 프로그램은 쿼리 계획을 논리 연산자로 이루어진 트리로 만든다. 쿼리 최적화 프로그램은 쿼리 계획을 만든 다음 각 논리 연산자에 대해 가장 효율적인 물리연산자를 선택한다. 쿼리 최적화 프로그램은 비용 기반을 둔 방법을 사용하여 논리 연산자를 구현할 물리 연산자를 결정한다. 일반적으로 여러 물리 연산자가 하나의 논리 연산자를 구현할 수 있다. 그러나 간혹 하나의 물리 연산자가 여러 논리 연산자를 구현하는 경우도 있다. 아래 표는 논리 및 물리 연산자에 대한 실행계획 아이콘과 설명이다. 쿼리 실행계획을 분석하는데 참고 할 수 있도록 한다. [참고자료] https://te..