본문 바로가기

전체 글

(101)
[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 역할에 속합니다..
[Sequel Safe] Programmability 버전 관리 저장 프로시저를 조회하고 수정할 때 어떻게 하시는지요? 아마 대다수의 개발자 분들이 아래 스샷의 방법을 사용하고 있으리라 생각합니다. 저도 현업에 발을 들인 이후 한참 동안이나 이런 방법을 사용해 왔습니다. 그러다 모듈 별로 버전 관리가 필요하다는 걸 느꼈고, 당시 선택했던 방법은 Visual Source Safe 사용이었습니다. 모듈 하나 하나를 파일로 만들어 관리했죠. 그런데, 이 방법에도 문제가 있었습니다. 아무리 주의를 기울여도... 개발 DB와 소스 파일의 싱크가 어긋나는 일이 발생하더군요. 한 100개에 1개 정도? 그러던차에 SQL 2005를 접했고, DDL트리거를 사용해 보기로 했고... 그 산출물이 지금 강좌를 진행하고 있는 Sequel Safe입니다. 각설하고... 몇 가지 이유로 인해..
[Sequel Safe] 발판 코드 or CRUD 코드를 이용하여 SP작성하기 테이블의 레이아웃 정보를 이용하여 CRUD용 SP 코드를 자동 생성해 주는 기능입니다. 참고로 CRUD란... Create Retrieve Update Delete의 머리 글자에서 따온 용어입니다. 발판 코드의 잇점을 나열하면 이렇습니다. 1. 테이블 별로 INSERT, SELECT, UPDATE, DELETE 작업을 수행하는 SP를 빠르게 작성할 수 있다. 2. 주석, 변수 명명, 에러 핸들링과 같은 코딩 규칙을 통일 할 수 있다. 3. 테이블의 컬럼 정의를 SP의 파라미터 정의에 재활용하여 주석 작성 시간을 줄여준다. 제 경험으로보면, 통상 테이블 수의 3 ~ 4배 가량의 Stored Procedure가 만들어집니다. (그 이상이라면 SP가 적절히 추상화되지 못했기 때문일 겁니다.) 그 중 50% 이..
[Sequel Safe] 에러 핸들링 (下) ErrorHandler 레이블 에러 핸들링을 위한 루틴은 아래와 같이 레이블(Label)로 만듭니다. ErrorHandler: IF XACT_STATE() 0 ROLLBACK TRANSACTION; IF @intReturnValue IS NULL OR @intReturnValue = 0 EXEC @intReturnValue = dbo.P_AddErrorLog; RETURN @intReturnValue; ErrorHandler 레이블에서의 프로세스는... 1. 현재 트랜잭션이 열려있으나 commit할 수 없는 상태이면, 트랜잭션을 rollback 한다. 2. @intReturnValue 변수의 값이 NULL이거나 0이면, P_AddErrorLog를 호출하고 해당 SP의 리턴 값을 @intReturnValu..
[Sequel Safe] 에러 핸들링 (上) Stored Procedure에서의 에러 핸들링은 매우 중요한 주제입니다. 따라서, 에러를 핸들링하는 방법은 그 규칙을 정해 모든 개발자가 지키도록 하는 것이 바람직하다고 생각합니다. 에러 핸들링을 아예 하지 않는 것도 좋지 않고, 개발자마다 각자의 방식을 사용하는 것도 좋지 않습니다. 누군가가 이 역할을 맡아 주어야 하는데, DBA가 해주면 좋지만 여건이 되지 않는다면 이 글을 읽고 계신 여러분이 직접 해 보는 건 어떨까요? 에러에는 어떤 종류가 있을까? 간단히 분류해 본다면, 논리적 에러와 시스템 에러가 있습니다. 여기서 시스템 에러를 다시 둘로 나누면, 에러는 다음과 같이 분류할 수 있습니다. 1. 논리적 에러 로직을 처리하는 과정에서 "예외 사항"로 분류하여 실행을 중단하거나 롤백 해야 하는 상황..