본문 바로가기

SQL Server

(81)
Change Tracking [SQL Server 2008] 변경이 잦지 않은 대용량 테이블의 데이터 또는 데이터베이스에 비교적 큰 부하가 걸리는 Query의 결과셋을 미들웨어 서버의 메모리에 캐시함으로써, 데이터베이스의 부하를 줄일 수 있습니다. 이런 미들웨어 서버를 만들 때 가장 신경 쓰이는 부분은 "데이터베이스에서 데이터가 변경되었는지 여부를 어떻게 판단할 것인가?" 인데, 보통 이런 방법이 사용됩니다. - 변경이 발생할 때마다 Trigger를 사용하여 별도의 테이블에 변경을 기록한다. 미들웨어 서버는 추가 테이블을 확인. => 개인적으론 잘만든 Trigger는 나쁘게 생각하지 않지만, 그래도 Trigger는 보통 지양되는 경향이 있습니다. 추가 테이블을 사용해야한다는 것도 조금 걸리는 부분. - timestamp열을 추가하고 변경이 발생하면 timestam..
[Sequel Safe / update] build 13 변경 사항 테이블, 뷰, 인덱스, 스토어드 프로시저, 사용자 정의 함수, 트리거 별로 오브젝트 버전을 관리할 수 있도록 기능을 보강하였습니다. SQLSafe Build 13을 적용하면, 아래와 같이 변경된 기능을 사용할 수 있습니다. sp_objecthistory 첫번째 레코드 셋 : 데이터베이스 이름, 오브젝트 이름, 오브젝트 유형, 현재 개발 DB에서 삭제되었는지 여부 (1=삭제, 0=미삭제) 두번째 레코드 셋 : 오브젝트의 버전 변경 이력 sp_helpmodule Summary 정보에 모듈의 현재 버전 정보 표시하도록 수정 sp_editmodule 모듈을 수정하기 위해 소스 코드를 가져오면, 자동으로 버전 넘버 1증가된 상태의 소스 코드를 반환합니다. 이 값을 임의로 수정하면 모듈은 수정되지 않습니다. (모듈..
테이블 변수 vs 임시 테이블 테이블 변수와 임시 테이블을 비교한 좋은 글 원문 Comparing Table Variables with Temporary Tables By Wayne Sheffield http://www.sqlservercentral.com/articles/Temporary+Tables/66720/ 테이블 변수와 임시 테이블은 공통된 성격으로 인해 둘 중 하나를 선택해 사용해야하는 경우가 많은데, 어느 한쪽이 절대적으로 좋고 한쪽은 나쁘다라고 결론 지을 수 없다. 중요한 것은 둘의 차이를 정확히 이해하는 것. 그리고 어느 한쪽을 선택할 때는 충분한 테스트가 필요하다는 것. 그리고 미신을 믿지 말자. 미신 1 테이블 변수는 메모리에 위치한다. 미신 2 임시 테이블은 항상 물리 I/O가 발생한다. 미신 3 테이블 변수는 ..
Vardecimal Storage Format을 사용하여 데이터베이스 사이즈 줄이기 decimal 데이터 타입을 가변 길이형으로 저장하여 데이터베이스 사이즈를 줄이고 I/O를 개선할 수 있다. 단, CPU에 추가로 발생하는 오버해드를 고려해야 한다. 사용 조건 - SQL 2005 SP2 이상 - Enterprise, Developer, Evaluation Edition - ALTER DATABASE 권한 sp_db_vardecimal_storage_format [ [ @dbname = ] 'database' ] [ , [ @vardecimal_storage_format = ] {'ON' | 'OFF' }] [ ; ] 다음과 같은 경우 sp_db_vardecimal_storage_format이 실패합니다. - 데이터베이스에 활성 사용자가 있는 경우 - 데이터베이스를 미러링에 사용할 수 있..
[Sequel Safe] 데이터베이스 일일 빌드 (Database Daily Build) 제가 생각하는 데이터베이스의 일일 빌드 (daily build)란.. "현재 버전의 개발 DB가 오류 있는 상태인지, 오류 없는 상태인지 확인하기 위한 수단" 입니다. 테이블, 컬럼, 뷰, SP, UDF 등을 추가, 수정, 삭제할 때 신경 쓰이는 점 중 하나로 Dependency를 꼽을 수 있을텐데요. "내가 작업한 내용이 개체간의 dependency를 깨지 않았다"라고 확신하기란... 말만큼 쉽지 않은데, 특히... 하나의 DB를 여러명의 개발자가 공유하여 개발하거나, 여러명의 선임자들에 의해 관리되어온 DB를 인계받은 경우엔 그 어려움이 더 클 수 밖에 없습니다. 만약 우리가 데이터베이스를 매일 (또는 특정 주기로..) 재생성하고 개체간의 참조에 이상이 없는지 확인하는 작업을 자동화할 수 있다면.....
[Sequel Safe] 데이터베이스 빌드와 배포 개발이 막 끝난 코드가 바로 프로덕트 코드로 사용되는 경우는 드뭅니다. 회사마다 차이가 있겠지만, 보통 개발망과 Release망 사이에는 여러 단계의 배포 계층이 있게 마련입니다. Sequel Safe에서는 배포 계층을 크게 3가지로 나눕니다. 1. development 2. intermediate - development와 release 사이의 모든 계층 (QA, RC 등의 목적) 3. release or product 배포 작업에 대한 선행 작업은 "배포 대상 데이터베이스의 생성"과 "데이터베이스 빌드" 입니다. I. 배포 대상 데이터베이스 생성 각 망은 분리된 인스턴스이므로, 아래와 같이 3개의 인스턴스를 사용하여 샘플 데이터베이스를 구성합니다. 1. QA 망 두번째 인스턴스에 Demo DB를 생성..
NON-IDENTITY 컬럼을 IDENTITY 컬럼으로 바꾸기 (출처 : http://www.sqlservercentral.com/articles/T-SQL/61979/) SQL Server 2005의 "ALTER TABLE ~ SWITCH ~ TO ~" 구문을 응용한 방법만 발췌하여 소개합니다. 1. 원본 테이블을 참조하는 모든 참조키를 DROP 한다. 2. 원본 테이블을 SCHEMABINDING 하는 모든 개체를 수정한다. (SCHEMABINDING 하지 않도록~) 3. 원본 테이블의 모든 인덱스를 DROP 한다. 4. 원본 테이블과 동일한 레이아웃의 테이블을 생성한다. 단, IDENTITY 속성을 가지도록 한다. 5. 원본 테이블에서 사본 테이블로 파티션을 스위치한다. 6. 원본 테이블을 DROP 한다. 7. 사본 테이블의 이름을 원본 테이블의 이름으로 변경한..
[Sequel Safe] SQL 서버 Login 권한 정책 및 물리 모델 변경 제약 I. Sequel Safe에서 DBA로 지정된 사용자만이 모델을 수정할 수 있습니다. 먼저 Sequel Safe에 국한하여 다음과 같이 용어를 재 정의합니다. DBA SQLSafe.dbo.DBAs 테이블에 등록되어 있는 Login을 말합니다. 모델러 & SQL개발을 담당하는 sysadmin에 속한 사람을 등록합니다. SQLDeveloper 개발 네트워크의 개발 DB에 추가되어 있는 DB Role입니다. 개발 DB에 대해 db_owner 역할에 속하지만, 테이블과 뷰를 생성할 권한은 없습니다. SQL개발을 담당하는 사람이 이 Role에 속합니다. Developer 개발, 테스트 & QA 네크워크의 DB에 추가되어 있는 DB Role입니다. db_datareader와 db_datawriter 역할에 속합니다..