분류 전체보기 1385

통계정보와 실제 데이터 분포 확인하기

통계정보와 실제 데이터 분포 확인하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 통계(Statistics)는 검색 조건이 주어질 때 해당 컬럼으로 구성되는 인덱스를 사용할지 여부를 옵티마이저가 판단의 근거로 활용되는 자료이다. 통계는 데이터가 있는 컬럼에 대해 인덱스가 만들어질 때 이 컬럼 값의 히스토그램 및 관련정보를 이용하여 만들어진다. 통계 : http://sqlmvp.kr/140165557766 통계의 경우 데이터가 변경됨에 따라 그 정보도 업데이트되는데 일정 비율이상 데이터가 변경될 업데이트 된다. 간혹 특정 시점에서 쿼리가 느린 경우가 발생하는데 통계정보와 실제 데이터의 분포가 다를 경우 옵티마이저가 잘못된 판단을 하여 최적화된 플랜..

SQL Server Failover Cluster 설치시 네트워크 이름으로 인한 설치 오류

SQL Server Failover Cluster 설치시 네트워크 이름으로 인한 설치 오류 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 SQL Server Failover Cluster 인스터스를 설치할 때 발생하는 일반적인 오류에 대해서 다루어본다. SQL Server를 설치할 때 설치시 인스턴스 구성페이지에서 아래와 같은 오류 메시지를 쉽게 볼 수 있다. 설치 과정에서 SQL Server 네트워크 이름 및 인스턴스 이름을 입력 후 클릭하였을 때 이 시점에서 설치 프로그램이 몇 가지 유효성을 수행한다. 그 검증이 실패할 경우 화면 하단에 오류 메시지를 확인할 수 있다. 오류 메시지를 클릭하면 메시지에 포함된 몇 가지 추가 정보를 볼 수 있다. ..

SSIS 실행 로그 남기기

SSIS 실행 로그 남기기 Version : SSIS Server 2005, 2008, 2008R2, 2012, 2014, 2015 SSIS 패키지를 운영할 때 중요한 요소 중 하나는 로깅이다. SSIS에서는 다양한 로깅 방법을 지원한다. 텍스트 파일 – 가장 기본적인 로깅 SQL Server 테이블 – 가장 큰 장점은 쉽게 로그 결과를 조회할 수 있다. SQL Server 프로파일러 – 이벤트 프로파일 캡처할 수 있다. 추적에 기록된다. Windows 이벤트 로그 XML 파일 [SQL Server 테이블에 로깅] SQL Server 테이블에 로깅하는 방법에 대해서 알아본다. (다른 옵션들을 선택해도 설정 방법은 유사하기 때문에 응용하여 사용할 수 있다.) 로깅을 테스트하기 위해 SSIS 제어흐름에서 S..

SSRS 2016 향상된 구독(Subscription) 기능

SSRS 2016 향상된 구독(Subscription) 기능 Version : SSRS 2016 SQL Server 2016 Reporting Service에서 몇 가지 향상된 기능이 추가 되었다. 그 중 구독(Subscription) 기능에 대해서 향상된 부분을 알아본다. [구독의 활성 및 비활성] SSRS를 운용할 때 일시적으로 특정 레포트의 구독을 중지 해야하는 경우가 발생한다. SSRS 2016에서는 다음과 같이 구독을 선택하고 활성 및 비활성 할 수 있다. 구독을 선택하고 비활성화 할 경우 Status 항목에 Disabled 라고 표시되며 녹색 동그라미 부분이 비활성 상태로 표시 된다. 구독을 활성활 할 경우 Status는 Ready 상태로 표시된다. [구독 소유자 변경] SSRS 2016에서 ..

확장이벤트를 사용한 실행 계획 캡처

확장이벤트를 사용한 실행 계획 캡처 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 확장이벤트를 사용하여 실행 계획을 캡처하는 방법에 대해서 알아본다. 캡처된 쿼리 실행 목록에 다음과 같은 이름이 있다면 플랜을 확인하여 검토할수 있도록 한다. NojoinPredicate (2005 이상) ColumnWithNoStatistics (2005 이상) UnmatchedIndexes (2008 이상) PlanAffectingConvert (2012 이상) 아래 스크립트는 확장이벤트를 생성한다. 확장이벤트 생성시 너무 많은 오버헤드가 발생하지 않도록 필요한 내용만 추가하도록 한다. 아래 확장 이벤트는 SQL_Text(쿼리문)과 plan_handle(실행계획)..

테이블 외래키 트리 확인 및 데이터 삭제하기

테이블 외래키 트리 확인 및 데이터 삭제하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 SQL Server에서 데이터 무결성을 유지하기 위해 생성한 외래키 제약조건이 있는 경우 데이터를 삭제 할 때 제약 조건에 위배되지 않도록 순차적으로 작업을 해야 한다. 테이블에 생성되어있는 외래키 연결에 대해 트리 구조로 살펴보고 순차적으로 데이터를 삭제할 수 있는 방법에 대해서 알아본다. 실습을 위해 테이블을 생성한다. 스크립트를 실행 하면 그림과 같은 외래키로 구성된 테이블이 생성된다. -- sample tables with FKs create table dbo.M (id int primary key, M_c1 int not null, M_c2 date..

기본 추적을 사용한 SQL Server 스키마 변경사항 캡처

기본 추적을 사용한 SQL Server 스키마 변경사항 캡처 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 SQL Server에서 스키마 변경이 발생하였을 때 이를 캡처하고 확인할 수 있는 방법에 대해서 알아본다. 기본적으로 SSMS에서는 스키마 변경 기록 보고서를 제공한다. 이 보고서에서는 DDL 작업에 대한 내용과 시간, 로그인 사용자, 사용자 이름 등 유용한 정보가 표시되지만 SQL Server가 시작된 이후의 내용만 확인할 수 있다. SQL Server가 다시 시작되더라도 변경 내용을 히스토리로 관리할 수 있도록 사용자 테이블에 변경 내역을 저장하는 방법에 대이다. 우선 변경 내용을 저장할 테이블을 생성한다. -- create table t..

SQL Server 2016 JSON 출력에 NULL 값 포함하기

SQL Server 2016 JSON 출력에 NULL 값 포함하기 Version : SQL Server 2016 SQL Server 2016의 새로운 기능인 JSON 형식에서 기본적으로 NULL 값은 표시 하지 않는다. JSON 형식의 출력에서 강제로 NULL 값을 포함하는 방법에 대해서 알아본다. 아래 스크립트는 전형적인 SQL Server 출력을 나타내는 결과이다. Size열을 보면 NULL값이 표시됨을 확인할 수 있다. Use AdventureWorks2014 go SELECT M.ProductModelID,M.Name as [ProductModel.Name], ProductID, Size FROM Production.Product P INNER JOIN Production.ProductModel ..

SQL Server 특정 테이블의 모든 컬럼에서 문자열 찾기

SQL Server 특정 테이블의 모든 컬럼에서 문자열 찾기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 특정 문자열을 사용하는 값을 찾을 때 일반적으로 like를 사용한다. 예를들면 아래 스크립트과 같이 특정 컬럼을 지정하여 그 안에서 like 검색을 한다. select * from Person.Address where city like '%test%' 한 컬럼에서 찾을 때에는 매번 손으로 타이핑하여 찾을 수도 있지만 테이블의 여러 컬럼을 확인확인 할 때 컬럼명을 계속 입력하는 것도 매우 불편한 일이다. 아래 스크립트를 사용하여 SP를 생성하여 사용하면 테이블의 모든 컬럼에서 문자열 검색을 사용할 수 있어 편리하다. USE master GO C..

SQL Server 임시 테이블 특성

SQL Server 임시 테이블 특성 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 임시 테이블은 tempdb 데이터베이스에 저장되었다가 더 이상 사용되지 않을 때 자동으로 삭제 된다. 그 외 기능은 일반 테이블과 비슷하다. 임시 테이블에는 전역과 로컬 두 유형이 있으며 로컬은 # 기호로 시작하며 전역은 ## 기호로 시작한다. 로컬 임시테이블은 현재 사용자의 연결에만 표시되고 사용자가 SQL Server 인스턴스와의 연결을 종료하면 삭제 된다. 전역은 테이블 생성 후 모든 사용자에게 표시되고 테이블을 참조하는 모든 사용자가 SQL Server인스턴스와 연결을 종료하면 삭제 된다. 즉 테이블을 생성한 사용자가 SQL Server와 연결을 끊어도 다른..