SQLServer 53

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..

SQL Server Page Life Expectancy (PLE)

SQL Server Page Life Expectancy (PLE) Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server Page Life Expectancy(PLE)는 페이지 참조 없이 데이터가 버퍼 풀에 남아 있는 시간으로 성능 카운터의 SQL Server:Buffer Manager, SQL Server:Buffer Node에서 현재 값을 확인 할 수 있다. SQL Server:Buffer Manager / Page life expectancy : 페이지가 참조 없이 버퍼풀에 남아 있는 시간(초) SQL Server:Buffer Node / Page life expectancy : 페이지가 참조 없이 노드에서 버퍼풀에 남아 있는 시간(초). ..

트랜잭션로그 파일이 손상된 데이터베이스 복원 하기

트랜잭션로그 파일이 손상된 데이터베이스 복원 하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서 데이터베이스를 연결할 때 sp_attach_db명령을 사용한다. 하나 이상의 로그파일이있는 경우 여러 로그파일을 다시 작성하려면 CREATE DATABASE … FOR ATTACH_REBUILD_LOG를 사용한다. 아래 스크립트는 AdventureWorks2012의 파일을 현재 데이터베이스 연결한다. EXEC sp_attach_db @dbname = N'AdventureWorks2012', @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\A..

트랜잭션 로그 백업을 읽고 트랜잭션 발생 시간 및 사용자 찾기

트랜잭션 로그 백업을 읽고 트랜잭션 발생 시간 및 사용자 찾기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 데이터베이스에서 발생하는 행위는 모두 트랜잭션 로그에 기록된다. 트랜잭션 로그를 읽는 방법과 트랜잭션 로그에서 삭제된 데이터 복구, 삭제한 사용자 찾기에 대한 내용은 이전 아티클을 참고 한다. SQL Server 트랜잭션 로그 읽기 : http://sqlmvp.kr/140202102618 트랜잭션 로그 및 LSN을 이용한 삭제된 데이터 복구 : http://sqlmvp.kr/140206499367 SQL Server에서 Drop 및 Delete 사용자 찾기 : http://sqlmvp.kr/140202164558 변경된 테이블 이름 복구하기 : htt..

TDE 암호화된 데이터베이스 복원

TDE 암호화된 데이터베이스 복원 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server 2008부터 도입된 암호화 솔루션인 TDE는 전체 데이터베이스를 암호화 하고 암호화된 데이터베이스에 액세스하는 응용프로그램에 완전히 투명하게 하도록 하는 기능을 제공한다. TDE는 고급 암호화 표준(AES) 또는 트리플 DES(3DES) 암호화를 사용하여 데이터베이스 파일(MDF)과 로그파일(LDF) 모두에 저장된 데이터를 암호화 한다. 이 암호화 에서는 DEK(데이터베이스 암호화 키)를 사용하며 이 키는 복구하는 동안 사용할 수 있도록 데이터베이스 부트 레코드에 저장된다. DEK는 서버의 master 데이터베이스에 저장된 인증서 또는 EKM 모듈로 보호되는 ..

인덱스 리빌드는 통계를 업데이트 할까?

인덱스 리빌드는 통계를 업데이트 할까? Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 인덱스를 리빌드하면 통계가 업데이트 될까? 이 질문에 많은 사람들은 "YES"라고 답할 것이다. 사실은 모든 통계를 업데이트를 하지 않는다. 인덱스를 리빌드 하는경우 해당 인덱스와 관련된 통계만 업데이트 된다. Index Stats Non-index stats ALTER INDEX REORG NO NO ALTER INDEX REBUILD 해당 인덱스와 관련된 인덱스 통계 업데이트 됨 NO ALTER INDEX ALL REBUILD 모든 인덱스 통계 업데이트 됨 NO DBREINDEX (old syntax) YES YES 위에서 볼 수 있듯이 모든 통계는 인덱스 리빌드 작업을..

인덱스 유지관리 작업과 SQL Server 쿼리 성능

인덱스 유지관리 작업과 SQL Server 쿼리 성능 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server 데이터베이스 엔진에서는 기본 데이터에 삽입, 업데이트 또는 삭제 작업을 수행할 때마다 인덱스를 자동으로 유지 관리한다. 이러한 수정이 거듭되면 시간이 흐름에 따라 인덱스의 정보가 조각화되어 데이터베이스 내에 흩어지게 될 수 있다. 조각화는 키 값을 기준으로 하는 인덱스의 논리적 페이지 순서가 데이터 파일 내의 물리적 순서와 일치하지 않을 때 나타난다. 심하게 조각화된 인덱스는 쿼리 성능을 저하시키고 응용 프로그램의 응답이 느릴 수 있다. 인덱스 조각화가 심할 경우에는 Reorganization 또는 Rebuild에 대한 고민을 하게 되는데 ..

네트워크 드라이브에 데이터베이스 복원하기

네트워크 드라이브에 데이터베이스 복원하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서 데이터베이스 복원작업을 진행 할 때 SSMS를 사용할 경우 로컬 드라이브만 표시 된다. 원격지의 네트워크 드라이브에 데이터베이스를 복원할 때 드라이브 목록에 네트워크 드라이브를 추가할 수 있는 방법에 대해서 알아 본다. 데이터베이스를 복원할 때 로컬의 드라이브만 표시 된다. 네트워크 드라이브를 추가 하기 위해 Windows에서 네트워크 드라이브를 매핑해야 한다. 네트워크 드라이브 매핑이 완료 되었으면 SQL Server에서 해당 네트워크 드라이브를 식별하기 위해 xp_cmdshell 명령을 사용해야 한다. Xp_cmdshell은 기본적으로 비활성화 ..