전체 글 1383

601 Error, Could not continue scan with NOLOCK due to SQL Server data Movement

601 Error, Could not continue scan with NOLOCK due to SQL Server data Movement 메시지 601, 수준 12, 상태 3, 프로시저 usp_SQLMVP, 줄 23 데이터 이동으로 인해 NOLOCK으로 계속 검색할 수 없습니다. Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 데이터 조회 프로시저 호출에서 다음과 같이 601 에러가 발생 하였다. 601 에러는 어떨떄 발생 할까? 601에러는 READ UNCOMMITTED, NOLOCK 힌트를 사용하여 데이터를 조회 할 때 하나 이상의 데이터가 페이지가 없기 때문에 발생한다. 페이지 분할로 이동했거나 페이지가 삭제되었을 경우 발생 한다. 즉 SQL Serv..

데이터베이스의 모든 인덱스 생성 삭제 스크립트 만들기

데이터베이스의 모든 인덱스 생성 삭제 스크립트 만들기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 데이터베이스에 생성되어 있는 모든 인덱스를 생성하거나 삭제하는 스크립트를 만들어 본다. 이렇게 스크립트를 만들어 놓는 이유는 DBA로서 항상 복구할 준비를 할 수 있어야 하기 때문이다. 인덱스가 삭제되거나 손상되었을 때 또는 사본을 만들어야 할 때 유용하게 사용할 수 있다. [인덱스 삭제 스크립트] 데이터베이스에 있는 모든 인덱스를 삭제하는 스크립트를 생성한다. DECLARE @SchemaName VARCHAR(256)DECLARE @TableName VARCHAR(256) DECLARE @IndexName VARCHAR(256) DECLARE @TSQLDro..

SQL Server Spinlock 소개

SQL Server Spinlock 소개 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 Spinlock은 Latch처럼 공유 데이터 구조에 대한 접근 스레드가 동기화 스토리지 엔진에 의해 사용되는 경량의 동기화 객체이다. Latch가 발생할 경우 연관된 오버헤드가 발생하는데 바쁠 때는 래치의 데이터 구조를 보호하는 것은 의미가 없다. 이 때문에 SQL Server는 Spinlock를 구현한다. SQL Server IO and Latch 설명 : http://sqlmvp.kr/140199995476 Latch의 경우는 쿼리가 Latch를 획득하지 못하였을 경우에는 대기 상태로 대기하고 이후에 실행 가능한 상태로 이동한다. 쿼리는 CPU에서 실행된 상태가 아니기..

Ad-hoc 쿼리와 실행계획

Ad-hoc 쿼리와 실행계획 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 Ad-hoc 쿼리를 실행 할 때 대소문자, 띄어쓰기, 스키마에 따라 기존의 실행 계획이 사용되지 않고 새로운 실행 계획이 생성되어 사용된다. Ad-hoc 쿼리는 컴파일 과정을 거치며 실행 계획을 생성하며 컴파일과 실행 계획 생성에 따른 성능 병목이 발생 할 수 있다. [대소문자, 공백에 따른 실행계획 생성] Ad-hoc으로 쿼리를 사용 할 경우 Case와 공백에 따라서도 다른 쿼리로 인식되어 새로운 실행계획이 생성된다고 하였다. 다음 예제를 통해 알아보자. USE AdventureWorks2014; DBCC FREEPROCCACHE WITH NO_INFOMSGS; GO SELECT S..

로그인 계정이 접근할 수 있는 데이터베이스 확인

로그인 계정이 접근할 수 있는 데이터베이스 확인 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server 로그인 계정은 특정한 데이터베이스에 접근할 수 있다. 생성된 로그인 계정이 접근 할 수 있는 데이터베이스를 확인하는 방법에 대해서 알아본다. 실습을 위해 로그인 계정을 생성한다. USE [master]; GO -- add "boss" to sysadmin: CREATE LOGIN boss WITH PASSWORD = 'x', CHECK_POLICY = OFF; ALTER SERVER ROLE sysadmin ADD Member boss; -- add "dev1" to serveradmin: CREATE LOGIN dev1 WITH PASSWORD..

클러스터된 SQL 서버 인스턴스에 대한 호스트 이름 확인

클러스터된 SQL 서버 인스턴스에 대한 호스트 이름 확인 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server 클러스터 페일오버를 트러블슈팅할때 페일오버된 시간과 페일오버 이전 호스트의 이름을 확인하는 것은 필수 사항이다. 이번 시간에 장애조치가 발생한 시간과 이전에 실행된 SQL Server 이름을 확인하는 방법에 대해서 알아본다. SQL Server 클러스터링 환경에서 페일오버 이후에는 이전의 SQL Server 노드를 식별하는 것이 곤란하다. 로깅의 대부분이 네트워크 또는 가상 서버의 인스턴스명을 사용하기 때문이다. 이때 SQL Server 에러로그와 이벤트 뷰어 로그를 사용하여 확인 할 수 있다. SQL Server가 현재 실행중인 노드/..

sys.dm_tran_locks 를 이용한 잠금 정보 확인

sys.dm_tran_locks 를 이용한 잠금 정보 확인 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 Sys.dm_tran_locks는 현재 활성 상태인 잠금 관리자 리소스에 대한 정보를 반환 한다. 각 행은 이미 허용된 잠금 또는 허용 대기 중인 잠금에 대해 현재 활성 상태인 잠금 관리자 요청을 나타낸다. Sys.dm_tran_locks : http://msdn.microsoft.com/ko-kr/library/ms190345.aspx select * from sys.dm_tran_locks; Resource_type : 리소스 유형을 나타낸다. 리소스는 DATABASE, FILE, OBJECT, PAGE, KEY, EXTENT, RID, APPLICA..

외래키 제약 조건 삭제 후 재작성 스크립트 생성하기

외래키 제약 조건 삭제 후 재작성 스크립트 생성하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 외래키 삭제 후 재작성 하는 스크립트를 생성하는 스크립트이다. SSMS 기능에도 스크립트 생성 기능은 있지만 스키마 또는 데이터 및 스키마, 데이터만 가능하다. 아래 스크립트는 외래키만 삭제, 생성하는 쿼리문을 만들어 제공한다. CREATE TABLE #x -- feel free to use a permanent table ( drop_script NVARCHAR(MAX), create_script NVARCHAR(MAX) ); DECLARE @drop NVARCHAR(MAX) = N'', @create NVARCHAR(MAX) = N''; -- drop is ..

페이지 ID로 테이블 이름 찾기

페이지 ID로 테이블 이름 찾기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 손상된 페이지가 있을 때 어느 테이블의 손상인지 확인 하는 방법에 대해서 알아본다. 손상된 페이지가 있을 경우 일반적으로 DBCC CHECKDB를 실행하지만 데이터베이스가 TB 단위인 경우에는 이 문제를 파악하기 위해 몇 시간이 걸릴지도 모르는 일이다. 또 다른 확인 방법으로는 PAGELATCH_EX 대기를 보고 sys.dm_os_waiting_tasks 의 resource_description 정보를 이용하여 테이블 이름을 알아 낼 수도 있다. suspect_pages 테이블의 데이터를 이용하여 테이블 이름을 확인해 보자. Suspect_page 테이블은 SQL Server 20..

DBCC CHECKPRIMARYFILE 사용법

DBCC CHECKPRIMARYFILE 사용법 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 현재 생성되어 있는 데이터베이스의 파일정보를 확인하는 방법에는 SSMS를 활용한 방법과 쿼리로 확인하는 방법이 있다. SSMS의 UI를 사용하는 경우 데이터베이스 수 만큼 클릭하여 확인해야 하는 반복적인 노동 작업이다. 문서화 되지 않은 DBCC CHECKPRIMARYFILE 명령을 이용하면 파일의 메타 정보(디스크 경로, 데이터베이스 이름)를 쉽게 확인 할 수 있다. 비록 문서화 되어 있지 않은 명령어 이지만 위험성이 없는 작업이므로 걱정하지 않아도 된다. [기본 구문] Syntax:DBCC CHECKPRIMARYFILE ({'PhysicalFileName'} [,..