본문 바로가기

SQL

(39)
SSIS 패키지를 SP 호출하여 실행하기 SSIS 패키지를 DBA가 아닌 일반 관리자가 관리툴을 통해 직접 실행해야하는 경우가 있습니다. 간단한 팁으로 sp_start_job을 사용할 수 있더군요. ^^ 1. 먼저 SSIS 패키지를 작업으로 등록합니다. 2. 관리툴에서 사용하는 DB 로그인을 [msdb]에 사용자로 추가합니다. 3. 추가한 사용자를 SQLAgentOperatorRole의 멤버로 포함시킵니다. 2항, 3항을 스크립트로 표현하면 아래와 같습니다. USE [msdb] GO CREATE USER [ToolLogin] FOR LOGIN [ToolLogin] GO EXEC sp_addrolemember N'SQLAgentOperatorRole', N'ToolLogin' GO 4. 관리툴에서 아래와 같이 SP를 호출하는 기능을 추가합니다. ..
여러개의 스페이스를 한개로 REPLACE 하기 REPLACE Multiple Spaces with One By Jeff Moden, 2009/11/16 http://www.sqlservercentral.com/articles/T-SQL/68378/
SPARSE 컬럼 테이블에서 NULL 값을 허용하는 컬럼에 사용하는 옵션으로 SPARSE 가 있습니다. [SQL Server 2008] SPARSE 컬럼에 NULL 값이 입력되면 저장 공간을 전혀 차지 하지 않지만, NULL이 아닌 값이 저장될 경우에는 4byte의 추가 공간을 필요로합니다. BOL에서는 SPARSE 컬럼의 사용으로 인해 20% ~ 40% 정도의 공간이 절약될 수 있다면 SPARSE 컬럼을 사용하라고 권고하는군요. 아래 표는 SPARSE 컬럼을 사용했을 때 40%의 공간을 절약하기 위해 필요한 NULL 값 비율을 데이터 타입 별로 나타내고 있습니다. 데이터 타입 NULL 비율 bit 98% tinyint 86% smallint 76% int 64% bigint 52% real 64% float 52% sm..
계륵 같은 SNAPSHOT 격리 수준 - SET TRANSACTION ISOLATION LEVEL SNAPSHOT SNAPSHOT 격리 수준에서는 행 버전이 관리되기 때문에 Lock을 걸지 않고도 commit된 버전의 행을 읽어 올 수 있습니다. 읽은 데이터의 일관성을 유지 할 수 있을 뿐더러... 읽기 작업에 Lock이 사용되지 않기 때문에 동시성이 좋아집니다. 하지만 행 버전을 관리하기 위한 오버헤드 (tempdb 사용, 데이터에 행 버전 정보 추가 등)도 무시할 순 없습니다. 결국 데이터베이스의 사용 패턴에 따라 선택해줘야 할 사항이 하나 늘었달까요? ^^ SNAPSHOT 격리 수준을 사용하려면 아래와 같이 데이터베이스를 세팅 해 주어야 합니다. ALTER DATABASE SET ALLOW_SNAPSHOT_ISOLATION ON; 재미있는 것은 기존의 READ COMMITTED 격리 수준에서도 Lock 대신 행..
hierarchyid의 method 정리 휴... hierarchyid 공부 끝 ^^; 알고보면 기존 버전에서 계층형 설계에 사용하던 materialized path 개념과 같지만... 코드 작성은 훨씬 편해졌습니다. 이제 개념은 잡았으니... 메서드 목록만 적어 놓으면 될 듯... GetAncestor() 현재 항목의 n번째 상위 항목을 나타내는 hierarchyid를 반환합니다. child.GetAncestor(n) GetDescendant() 부모의 자식 노드를 반환합니다. parent.GetDescendant (child1, child2) parent가 NULL인 경우 NULL을 반환합니다. parent가 NULL이 아니고 child1과 child2가 모두 NULL인 경우 부모의 자식을 반환합니다. parent와 child1이 NULL이..
SQL Server 2008 암호화 - TDE (Transparent Data Encryption) SQL Server 2008부터 지원하기 시작한 새로운 암호화 방식으로 TDE가 있습니다. TDE를 사용하면 데이터 파일과 로그 파일을 실시간으로 I/O 암호화 및 복호화하게 되는데... 우리는 TDE를 사용함으로써 누군가에 의해 DB 백업파일 또는 데이터 파일이 유출된다해도 DB를 복원하지 못하도록 막을 수 있습니다. 이때, 데이터베이스 파일 암호화는 페이지 수준에서 수행되는데 암호화된 후 디스크에 작성되고 메모리로 읽어 들일 때 복화하되며 데이터베이스의 크기는 증가하지 않습니다. 위 그림을 아래에서 위로 거꾸로 살펴보면 아래와 같이 정리할 수 있습니다. - 데이터베이스는 데이터베이스 암호화 키(DEK)에 의해 대칭키 암호화 - 데이터베이스 암호화 키는 인증서에 의해 암호화 - 인증서는 데이터베이스 마..
SQL Server 로그인 및 사용자 권한 정책 오늘은 SQL Server 사용자 권한 정책에 대해 얘기 해 보겠습니다. 이하의 내용은 저희 회사에서 제가 사용하는 방법으로... 당연한 얘기지만 이 방법이 모든 경우에 적합하다고 볼 수는 없습니다. 첫번째 고민 : Windows 인증을 사용할까? SQL Server 인증을 사용할까? 일반적인 권고는 Windows 인증입니다. 아무래도 여러사람에 의해 공유되는 SQL Server 인증은 관리면이나 보안면에서 좋지 않을테니까요. 하지만 SQL Server 인증을 아예 사용하지 않는 것도... 현실적으론 어렵더군요. - Windows 도메인 로그인을 가지고 있는 사람들... DBA, 개발자와 같은 이들에게는 Windows 인증을 사용합니다. - 웹 서버, 미들웨어 서버 등의 어플리케이션 서버는 SQL Ser..
affinity mask, affinity I/O mask, soft NUMA 적용 SQL Server에서는 CPU 및 I/O의 affinity를 지정할 수 있습니다. 목적은 CPU를 특정 스레드에 할당하여 컨텍스트 스위치를 줄임으로써 성능을 향상시키는 것입니다. 물론 대부분의 경우 OS가 컨트롤 하도록 놔두는 것이 더 좋습니다. 그럼 어떤 경우에 이런 설정이 필요할까요? - 멀티 인스턴스 환경에서 인스턴스 별로 CPU를 할당하고 싶다. - 단일 인스턴스 환경에서 CPU 집약적 작업과 디스크 I/O작업의 비율이 극단적으로 다를 때, 각 작업에 CPU를 할당하고 싶다. - 위 두가지 모두... 이 정도 이유가 있을 듯 하네요. 각 옵션의 기능은 아래와 같습니다. - affinity mask 옵션을 사용하면 SQL Server 인스턴스가 사용할 CPU를 지정 - affinity I/O ma..