전체 글 1383

다양한 포맷의 이름 파싱 하기

다양한 포맷의 이름 파싱 하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 비즈니스 파트마다 다양한 형식의 이름(또는 전화번호) 세트를 사용한다. 이러한 경우 성과 이름을 어떻게 구분하여 정리 업무를 수행하는 사람이라면 한 번쯤 고민해보았을 것이다. 이번 시간에는 구분 할 수 있는 특정한 기호를 기준으로 이름을 파싱하여 사용하는 방법에 대해서 알아본다. [공백으로 구분된 경우] 성과 이름 사이에 공백이 있는 포맷을 파싱하여 사용하는 방법이다. 실습용 테이블을 생성하고 데이터를 입력 한다. -- create temporary table for storing source name strings -- and their associated name parts IF..

비결정적 사용자 정의 함수 사용으로 인한 느린 쿼리

비결정적 사용자 정의 함수 사용으로 인한 느린 쿼리 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서는 사용자 정의 함수를 생성하고 사용할 수 있다. 사용자 정의 함수는 매개변수를 허용하고 복잡한 계산 등의 동작을 수행하며 해당 동작의 결과를 값으로 반환한다. 반환 값은 단일 스칼라 값이나 테이블일 수 있다. 사용자 정의 함수 만들기 : http://msdn.microsoft.com/ko-kr/library/ms186755.aspx 이번 포스트는 비결정적인 사용자 정의 함수로 인하여 쿼리가 느린 상황을 살펴보고 해결하는 방법에 대해서 살펴본다. 포스트의 내용은 CSS SQL Engineers를 참고 하였으며 읽고 이해한 내용을 정리하였다...

스냅숏 격리 수준(SNAPSHOT ISOLATION LEVEL)

스냅숏 격리 수준(SNAPSHOT ISOLATION LEVEL) Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 트랜잭션 격리 수준은 SQL Server에 연결하여 실행하는 T-SQL문의 잠금 및 행 버전 관리 기능을 제공한다. 격리 수준은 여러 종류가 있으며 격리 수준 기능은 다음과 같다. SNAPSHOT 격리 수준은 트랜잭션에서 읽은 데이터가 다른 트랜잭션으로부터 일관성이 유지되도록 한다. 트랜잭션은 시작되기 전에 커밋된 데이터 내용만 인식할 수 있다. 현재 트랜잭션이 시작된 후 다른 트랜잭션에서 수정한 데이터는 현재 트랜잭션에서 실행되는 결과에 표시되지 않는다. 따라서 트랜잭션의 결과는 트랜잭션 시작 당시 커밋된 데이터의 스냅숏을 가져오는 것처럼 보인다...

SQL Server 파라메터 스니핑의 다양한 접근

SQL Server 파라메터 스니핑의 다양한 접근 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서 저장프로시저가 잘 수행되다가 갑자기 실행 시간이 급등한 경우가 있다. 다양한 이유가 있지만 대부분 이런 현상이 나타날 때 일반 적인 상황은 파라메터 스니핑과 관련이 있다. 다음 포스트는 파라메터 스니핑과 관련된 내용이다, 파라메터 스니핑과 데이터 스큐 : http://sqlmvp.kr/140196990001 매개변수 값의 변경과 SQL 서버 성능 저하 : http://sqlmvp.kr/140193296636 파라메터 스니핑(Parameter Sniffing)은 SQL Server에서 프로시저를 처음 호출 할 때(또는 SQL Server 재실..

잘못된 개체를 참조하는 SQL Server 개체 찾기

잘못된 개체를 참조하는 SQL Server 개체 찾기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서 개발을 하다 보면 수 많은 프로시저를 사용하게 되는데 스키마 변경이 발생 하였을 때 프로시저에서 유효성이 일치하지 않는 객체를 식별하는 방법에 대해서 알아본다. SQL Server에서는 sys.sp_refreshsqlmodule을 제공하여 종속성에 대한 유효성을 확인한다. sys.sp_refreshsqlmodule는 현재 데이터베이스에서 지정된 비스키마 바운드 저장 프로시저, 사용자 정의 함수, 뷰, DML 트리거, 데이터베이스 수준 DDL 트리거 또는 서버 수준 DDL 트리거에 대한 메타데이터를 업데이트 한다. 기본 개체가 변경되면 매..

전체 백업에서 포함되는 트랜잭션 범위

전체 백업에서 포함되는 트랜잭션 범위 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server 전체 백업을 진행 할 때 마지막 포함된 트랜잭션 범위에 대해서 알아보자. 백업작업 시 체크포인트를 실행하여 버퍼풀에 있는 모든 더티 페이지를 강제로 디스크에 기록한다. 백업 작업은 데이터베이스에 할당된 페이지를 읽기 시작한다. 백업 작업이 페이지 X를 읽는다. 트랜잭션 A가 발생 한다. 트랜잭션 A가 페이지 X를 변경한다. 트랜잭션 B가 발생 한다. 트랜잭션 A가 끝나고 페이지 X에 대한 변경사항을 커밋한다. 백업 데이터 읽기 작업이 완료되고 트랜잭션 로그를 읽기 시작한다. 백업 데이터 읽기 작업이 완료된 시점에 트랜잭션 A에 대한 내용은 트랜잭션로그에 커..

REPL_SCHEMA_ACCESS 대기 유형

REPL_SCHEMA_ACCESS 대기 유형 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server의 고가용성 솔루션인 복제 구성에서 트랜잭션 복제 지연 문제가 발생 할 때 나타나는 대기와 이를 해결 할 수 있는 방법에 대해서 알아본다. 이 포스트는 CSS SQL Server Engineers 팀 블로그의 내용을 읽고 이해한 것을 정리하였으며 번역의 오류나 기술적 오류 가능성이 있으므로 자세한 내용은 원문을 참고한다. DMV를 사용하여 현재 실행 중인 각 요청에 대한 정보를 확인 한다. REPL_SCHEMA_ACCESS 대기를 확인 할 수 있다. select * from sys.dm_exec_requests REPL_SCHEMA_ACCESS 대기는..

Database 손상시 Emergency 모드로 복구하기

Database 손상시 Emergency 모드로 복구하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server에서 데이터베이스가 손상되었을 때 조치할 수 있는 방법에 대해서 알아본다. 데이터베이스가 손상되었을 때 유일하게 접속할 수 있는 방법은 Emergency 모드이다. 시나리오는 다음과 같다. Emergency 모드로 데이터베이스에 접근 한다. 새로운 트랜잭션로그를 구축하기 위해 문서화 되지 않은 DBCC REBUILD_LOG 명령을 사용한다. 데이터 파일에 대한 손상을 해결하기 위해 REPAIR_ALLOW_DATA_LOSS 옵션으로 DBCC CHECKDB를 실행 한다. 데이터복구가 완료되면 백업을 진행하고 Emergency 모드를 해제 한다..

서버 그룹을 이용한 다중서버 쿼리하기

서버 그룹을 이용한 다중서버 쿼리하기 Version : SQL Server 2008, 2008R2, 2012, 2014 여러 SQL Server에 동일한 쿼리를 실행하는 경우가 있다. 관리하는 서버 수가 적다면 직접 서버에 접속하여 하나씩 실행해도 되지만 관리하는 서버가 많다면 하나씩 실행하는 것은 많은 리소스가 소모되는 일이다. SQL Server 2008부터는 중앙관리 서버 기능을 사용하여 서버그룹에 등록되어있는 서버에 대해서는 다중 서버 쿼리가 가능하다. 다중 서버 쿼리를 사용하기 위해서는 우선 서버 그룹에 서버를 등록해야 한다. 등록된 서버를 보기 위해서는 메뉴에서 [보기] [등록된 서버]를 실행 한다. [등록된 서버]에서 로컬 서버 그룹에서 마우스 오른쪽 버튼을 클릭하여 [새 서버 그룹]을 생성..

SQL Server Agent에서 CmdExec 오류

SQL Server Agent에서 CmdExec 오류 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server 마이그레이션 후 CmdExec 실행 시 다음과 같은 오류가 발생한다면 각 하위 시스템에해당하는 파일이 지정된 경로에 있는지 확인해 볼 필요가 있다. Unable to start execution of step 1 (reason: The CmdExec subsystem failed to load [see the SQLAGENT.OUT file for details]; The job has been suspended). The step failed. 하위 시스템 경로에 dll 파일이 존재하지 않으면 다음과 같은 에러를 확인 할 수 있다. 하위 ..