본문 바로가기

SQL Server

(81)
[Service Broker] 시작하며... 이런 저런 핑계를 대며 미루고 미뤘던 Service Broker - 이하 SSB라고 쓰겠습니다 - 에 대한 포스팅을 시작합니다. - MESSAGE TYPE - CONTRACT - QUEUE - SERVICE - ROUTE - ENDPOINT - REMOTE SERVICE BINDING SSB를 구성하는 개체들입니다만.. 각각의 역할과 각 개체 간의 상관 관계를 이해하기가 쉽지는 않더군요. 아마 MS SQL 구성 요소 중 가장 불친절한 친구 중 하나가 아닌가 싶습니다. 그럼에도 공부할 가치가 있는가? 네, 전 있다고 생각합니다. Service Broker 란? BOL을 보면 "메시징 및 큐", "서로 다른 데이터베이스 간에 통신", "데이터베이스 작업을 여러 데이터베이스에 분산" 이란 말이 나옵니다. SS..
SSMS 에러 - Cannot show requested dialog. There is no row at position 0. 오늘 SSMS에서 데이터베이스 속성창을 띄웠는데 갑자기 아래와 같은 에러 메세지가 출력되었습니다. 어떤 이유인지 모르겠지만 master DB의 spt_values 테이블이 비워져 있었고, 그것이 원인이었습니다. SQL 서버를 기본 경로로 설치했다면 아래와 같은 경로에 u_tables.sql 파일이 있는데.. 이 스크립트 파일로 테이블을 복구할 수 있습니다. C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Install\u_tables.sql
SSMS에서 Ctrl-F, Ctrl-H 단축키가 동작하지 않을 때 어제 SSMS로 작업 중이었는데, 갑자기 Ctrl-F와 Ctrl-H 단축키가 먹통이 되었습니다. SSMS를 다시 시작해봐도 소용 없고 OS를 리부팅해도 소용 없더군요. 아.. 그 당황스러움이란.. ^^ 구글링을 조금 해보니 원인까지는 잘 모르겠지만 해결 방법은 찾을 수 있었습니다. 혹시 같은 문제를 겪고 계시다면 아래와 같이 해결할 수 있습니다. SSMS의 상단 메뉴 표시줄에서 Window 메뉴 > Reset Window Layout 클릭
Disk Partition Alignment 개요 스토리지의 성능 최적화를 위해 우리가 고려해야할 요소가 많습니다. 아마 디스크 개수, RAID Mode, Stripe Size, File Allocation Unit Size 등을 떠올릴 수 있을 겁니다. 그런데 이런 요소들 중 과소 평가되거나, 혹은 아예 고려하지 않는 것으로 "Disk Partition Alignment" 라는 부분이 있습니다. 우리말로 하면 "디스크 파티션 정렬" 정도가 되겠군요. 참고로 파티션을 정렬한다는 것은 파티션이 시작하는 시작점을 특정 값으로 설정하는 것을 의미합니다. 첫번째 의문 - 파티션은 원래 0번째 byte 지점에서 시작하는게 아닌가? 네, 아닙니다. 디스크에서 기록이 시작되는 맨 앞부분의 63 섹터 (= 31.5 KB)는 MBR - Master Boot Rec..
[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로 저장해 달라는 뜻이 됩니다. ..