본문 바로가기

전체 글

(101)
[SQL Sentry Plan Explorer] 쿼리 플랜을 보기좋게 보여주는 공짜 툴 SSMS에서 기본으로 제공하는 플랜 보여주는 방식도 나쁘진 않습니다만, SQL Sentry Plan Explorer를 조금 사용해보니 좋은 것 같아 소개합니다. 이 툴은 SSMS에서 저장한 플랜 파일 (*.sqlplan)을 여는 방식으로 사용할 수도 있고, 직접 SQL Server에 Query를 전달하는 방식으로도 사용할 수 있습니다. 후자의 경우 예상 계획과 실제 계획 모두를 지원하는데, 당연한 얘기지만 Actual Plan을 보는 경우에는 전달한 Query가 실제로 실행되니 주의하시기 바랍니다. 각설하고.. Query를 SQL Server에 전달하고 Actual Plan을 보는 방법은 아래의 순서와 같습니다. ^^ 1. Command Text 탭에서 Query를 작성합니다. 2. SQL Server ..
Foreign Key와 Index 를 Drop & Create 하는 구문 생성하기 요즘은 게임 DB 통합을 준비하고 있답니다. 게임의 장르에 따라 다르겠지만 월드 개념이 있는 경우, 유저의 접속 트래픽에 따라 신규 월드를 오픈하거나 기존의 월드를 합치는 이슈가 발생하는데요. 신규 월드를 오픈하는 것과는 달리 월드를 통합하는 일은 DBA의 역할이 매우 큽니다. 작업의 내용을 한마디로 정의한다면, "완전히 동일한 레이아웃을 가진 두개의 DB를 하나로 합치는 일" 이라고 할 수 있겠군요. 말은 간단하지만 고려해야 할 요소는 조금 있는 편입니다. - PK, UK의 중복 문제 - 데이터 merge 성능 (서비스 다운타임을 줄이기 위한 싸움) - 통합 진행 상황을 모니터할 수 있게끔 단계 별로 로깅 - 각 단계 별 에러 핸들링 오늘 포스팅할 내용은 데이터 merge 성능을 향상 시키기 위해 미리..
server collation과 database collation을 한번에 바꾸기 - SQL Server 인스턴스에 있는 모든 Database를 백업 받습니다. - 디스크 공간이 충분히 남아 있는지 확인합니다. - Windows Server 2003이라면 command prompt, 2008이라면 admin command prompt를 엽니다. - 다음의 명령을 실행합니다. 단, collation을 변경할 인스턴스의 sqlservr.exe라야 합니다. sqlservr.exe -m -T4022 -T3659 -q"latin1_general_ci_as" 또는 sqlservr.exe -m -T4022 -T3659 -q"latin1_general_ci_as" -s 인스턴스이름
m : n 모델을 단일 컬럼으로 표현하는 문제 cardinality 가 m : n 인 모델을 비정규화하여 표현해야하는 경우가 종종 있습니다. 예를 들어 설명하는 것이 이해를 도울 수 있을 것 같군요. 음.. 뭐가 좋을까요? . . 회원이 구독하는 메일링 리스트를 예로 들면 적당하겠군요. 정규화된 형태라면 아래와 같습니다. 그런데 개발자로부터 이런 요구를 받아 보신 적이 있으신지 궁금하네요. "메일링 리스트의 종류가 10개가 채 안되니.. 그냥 회원 테이블에 구독하는 메일링 리스트를 컬럼 1개에 넣어 주세요." 전 비슷한 요청을 참 많이 받아봤던 것 같습니다. 예의 메일링 리스트라던가.. 관리자의 권한이라던가.. 설문이라던가.. 등등 이때 개발자가 요구하는 1개의 컬럼이란 비트 연산의 결과를 integer나 binary로 저장해 달라는 뜻이 됩니다. ..
SQL Server Trace Flags 출처 : http://www.sqlservercentral.com/articles/trace+flags/70131/ flag Trace Flag Description (underlined are sp_configure’able) -1 Sets trace flags for all connections. Used only with DBCC TRACEON and TRACEOFF. The setting of the Trace flag -1 is not visible with DBCC TRACESTATUS command, but work without problems. 105 SQL Server 6.5 you can use maximum 16 tables or subqueries in a single select..
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를 호출하는 기능을 추가합니다. ..
SQL Server 2008에서 binary와 string의 상호 변환 SQL 2005에서 binary 0x0123을 string '0x0123'으로 변환하려면 문서화되지 않은 시스템 함수 master.sys.fn_varbintohexstr() 를 사용해야 했습니다. 전 2008에서도 여전히 그 방법을 사용하고 있었는데.. CONVERT() 함수에 해당 기능이 이미 들어가 있었더군요. 심지어 '0x0123'을 0x0123으로 반환할 수도 있습니다. (이래서 what's new는 꼼꼼히 살펴봐야...) binary to string SELECT CONVERT(char(6), 0x0123, 1) SELECT CONVERT(char(4), 0x0123, 2) string to binary SELECT CONVERT(binary(2), '0x0123', 1) SELECT CONVE..
primary key, foreign key, default constraint, index 이름을 명명 규칙에 맞게 일괄 수정 레거시 DB에 명명 규칙을 적용하느라 스크립트 하나 만들어 봤습니다. (SQL 2005 / 2008) 스크립트에 적용한 명명 규칙은 아래와 같습니다. - primary key : PK_테이블이름 - foreign key : FK_부모테이블이름_자식테이블이름_자식컬럼1_자식컬럼2_ ... - default constraint : DF_테이블이름_컬럼이름 - index non unique & non clustered : IX_NN_테이블이름_컬럼이름1_컬럼이름2_ ... non unique & clustered : IX_NC_테이블이름_컬럼이름1_컬럼이름2_ ... unique & non clustered : IX_UN_테이블이름_컬럼이름1_컬럼이름2_ ... unique & clustered : IX_UC..