본문 바로가기

SQL

(39)
SQL Server 2005 암호화 안쓰면 쉽게 잊는다지만... 나이 때문일까? 머리 속 지우개 성능이 갈수록 좋아지고 있다. ㅎㅎㅎ 매번 BOL 찾아 보기도 좀 그렇고... 복습하기 쉽게 간단히 정리해 봅니다. SQL Server 2005의 암호화 계층은 아래와 같습니다. 이 그림을 보면 데이터라는 박스를 3곳에서 찾을 수 있습니다. 각 데이터 박스의 바로 윗 계층을 읽어보면 인증서, 대칭키, 비대칭키입니다. 즉, 데이터를 암호화하는데 사용되는 것에는 인증서, 대칭키 그리고 비대칭키가 있다... 라는 의미가 되겠죠. 실제로 SQL Server 2005에서 데이터를 암호화하는 함수로는 아래의 4가지 함수를 제공하고 있습니다. - EncryptByAsmKey() : 비대칭키를 사용하여 암호화 - EncryptByCert() : 인증서를 사용..
INSERT 스크립트 생성하기 테이블 내용을 읽어 INSERT문을 생성해 주는 스크립트는 거의 누구나 가지고 있으리라 생각합니다. 저도 누군가의 스크립트를 가지고 있는데... 버그가 좀 있습니다. 그래서 오늘 하나 만들어 봤습니다.. master.sys.fn_varbintohexstr 함수를 사용해 봤는데 꽤 유용하네요. 하지만, 저도 완벽하게는 못 만들겠더군요. 다음과 같은 제한 사항이 있습니다. - SQL 2005와 SQL 2008에서 사용할 수 있습니다. - 사용자 정의 형식, hierarchyid 형식은 지원하지 않습니다. - float와 real 형식은 데이터가 손상 될 수 있습니다. - binary, varbinary, image는 3998 byte까지만 지원합니다. 소스는 아래 박스를 참고하세요. p.s 해당 SP의 두번..
ER/Studio 8.0.3 DB모델링에 ER/Studio를 사용한지 몇 년 되는군요. 처음엔 ER-Win을 사용했었는데 ER/Studio를 접한 이후 다른 CASE툴은 사용하지 않고 있습니다. ^^; 처음에 7.0을 사용했고 1년 반정도 7.5를... 그리고 오늘 8.0으로 업데이트했네요. 사실 회사 옮긴 직후 ER/Studio 구매 요청을 했고, 그 때 구입한 버전은 7.6이었습니다. 불행히도 7.6은 매우 불안정한 버전이었는데... 7.5에서 작성한 파일을 읽거나, 특정 세팅의 SQL Server를 Reverse Engineering하면 비정상 종료되곤했습니다. 할 수 없이 7.5로 다운 그레이드한 채 1년 반을 지냈죠. ㅎㅎ 얼마전 엠바카테로에서 데브기어라는 사이트를 오픈하고 데이터베이스 툴 런칭 행사를 했었죠. 저도 참석하..
XML을 사용하여 문자열 Split 하기 문자열을 특정 구분자를 기준으로 split하는 방법에는 여러가지가 있습니다. 제가 최근까지 사용하던 방법은 순번(sequential number)이 들어있는 테이블을 이용한 방법이었습니다. 그래서 제가 디자인한 데이터베이스에는 항상 Tally라는 테이블과 IF_Split이라는 인라인함수가 들어있죠. SELECT TOP 10000 IDENTITY(int, 1, 1) AS n INTO dbo.Tally FROM master.dbo.syscolumns A CROSS JOIN master.dbo.syscolumns B GO ALTER TABLE dbo.Tally ADD CONSTRAINT PK_Tally PRIMARY KEY CLUSTERED (n) GO CREATE FUNCTION dbo.IF_Split ( ..
[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 테이블 변수는 ..
[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를 생성..