본문 바로가기

전체 글

(101)
[Sequel Safe] SP 작성 규칙 주석 작성 규칙 상단 주석 작성 방법 작성자, 작성일자, 내용, 리턴값을 기입합니다. 모든 SP는 int 타입의 값을 리턴합니다. 만약, 정의하지 않는다면 암묵적으로 0이 반환되는데... 이 값을 SP의 실행 결과 또는 에러 번호로 활용하는 것이 좋습니다. description 항목은 SP가 CREATE될 때, DDL트리거에 의해 확장 속성으로 자동 추가됩니다. /** author : doeyull.kim e-mail : purumae@gmail.com created date : 2009-03-31 description : 기사카테고리를추가합니다. return value : 0 = 에러가없습니다. 1 = 트랜잭션을Commit할수없는상태입니다. 트랜잭션을Rollback합니다. 100 = 시스템에러가발생하였..
[Sequel Safe] 테이블 명세 & 모듈 명세 개요데이터베이스와 연동하여 개발할 때, 개발자가 필요로하는 정보에는 이런 것들이 포함됩니다.데이터베이스 연결 정보 : 호스트 이름 (또는 IP주소), 포트 번호, 로그인 계정 및 패스워드ERD테이블 명세서모듈 명세서 (Stored Procedure, User Defined Function 등) 위에 나열한 정보 중 업데이트 주기는 이런 순서라고 보입니다.D > C = B > A그런데, 업데이트가 비교적 빈번한 C와 D항목을 사람이 일일이 수작업으로 문서화 하기는 어렵습니다. 이것이 가장 흔한 문제이면서 또한 가장 심각한 문제인데요. 즉, 시스템과 문서의 버전이 일치하지 않는다는 점입니다.회사마다 문서 관리 시스템이 상이하기 때문에 어떻게 문서를 관리하는 것이 정답이다라고 말할 수는 없습니다.다만, 제 경..
[Sequel Safe] 설치 및 개발 환경 셋업 Sequel Safe 설치다음 2개의 데이터베이스를 생성합니다.DBDailyBuild DB SQLSafe DB (2009.07.03 현재 최신 버전은 build 14입니다.)SQLSafe DB에서 다음 Query를 실행합니다. 12INSERT dbo.DBAs (loginName, registerDate)VALUES (ORIGINAL_LOGIN(), GETDATE());csmaster DB에서 아래 script를 실행합니다. History 2013.09.27 - 발판 코드로 생성한 SP가 SQL Server 2012에서 에러를 정상적으로 처리하지 못하는 오류 수정 - master 데이터베이스에서 master.sql을 실행해야합니다. 2009.10.23 - 개발 DB에서 SQL Agent에 의해 실행되는 D..
[Sequel Safe] 개요 데이터베이스에서 버전 관리의 대상이 되는 것은 무엇일까요? 1. Stored Procedure 2. User Defined Function 3. Trigger 4. DATABASE Snapshot 그러나 현업에서 상기의 요소들에 대해 버전 관리가 체계적으로 이뤄지는 경우는 많지 않습니다.SQL Server 개체에 대한 버전 관리의 필요성을 인식하지 못하거나, 필요성을 느끼더라도 마땅한 방법을 찾지 못했기 때문이겠죠.개발자로부터 DB에 대한 이런 불만을 들으면서, 필요성에 대해서는 확실히 인지할 수 있었습니다. "내가 작성한 소스 코드는 빌드 과정을 통해 버전 관리를 하고 있는데, DB는 빌드라는 개념이 없다보니 배포할 때 항상 불안하다. 심지어 DB가 누군가에 의해 수정되더라도 그 사실을 알아챌 수 없더..
모든 테이블의 데이터 일괄 삭제하기 프로젝트 초기에 개발 DB에서 자주 사용할 만한 쿼리일 듯 ^^ EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL' EXEC sp_MSForEachTable 'DELETE FROM ?' EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL' EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL' 출처 : http://www.devx.com/dbzone/Article/40967 하지만, 그대로 사용하기엔 좀 부족해 보인다. 아래 사항을 추가해서 ..
로그 DB 설계와 관리에 대한 컨셉 (슬라이딩 윈도우) 첫째, 로그를 DB에 적재하는 방법 1. 대량 로그이고 다음날 조회해도 되는 경우 => 로그를 파일로 쌓고, 필요한 것만 daily batch로 DB에 적재 2. 대량 로그이지만 실시간 조회가 필요한 경우 => 로그의 DB적재를 비동기 처리할 수 있는 미들웨어를 만듭니다. 3. 대량 로그가 아닌 경우 => Application Server에서 직접 DB에 INSERT 합니다. 둘째, DB에 적재한 로그 테이블의 용량을 관리하는 방법 1. 보통 슬라이딩 윈도우 기법을 사용합니다. A. 테이블을 일자 기준으로 파티셔닝하고, 기준 일자가 지난 데이터는 파티션을 스위치해서... 데이터를 다른 테이블로 옮기는 방식입니다 B. 이 방식을 사용하면 대량 데이터를 옮기는 동안에도 해당 테이블에 Lock이 걸리지 않습니..
Login을 각 Database의 User와 동기화하기 백업 파일로부터 DB를 새로 복원할 때 곤란한 점은 일일이 DB의 User와 SQL서버의 Login을 매핑해 줘야 한다는 점이다. 아래 스크립트를 사용하면 이 작업을 한번에 처리할 수 있다. 1. User와 Login의 Sync가 맞지 않는 내역이 있는지 확인 DECLARE @nvcCollation sysname; DECLARE @nvcStmt nvarchar(4000); DECLARE @tblTemp table ( DBName sysname NOT NULL, UserName sysname NOT NULL, LoginName sysname NOT NULL ); SET @nvcCollation = CAST(DatabasePropertyEx('master', 'Collation') AS sysname); S..
SQL Server 2005 Performance Dashboard Reports에서 Difference of two datetime columns caused overflow at runtime 에러 Fix하기 오늘 갑자기 Performance dashboard report에서 아래와 같은 에러가 발생했다. idle_connection_time을 구하는 과정에서 DATEDIFF함수로 두 날짜 사이의 차이를 Millisecond로 구하다보니... int값의 범위를 초과해 발생하는 에러였다. 처음 설치할때 사용한 setup.sql파일에서... sum(convert(bigint, datediff(ms, login_time, getdate()))) - sum(convert(bigint, s.total_elapsed_time)) as idle_connection_time, 위 구문을 아래 구문처럼 수정해 주고... sum(convert(bigint, cast(datediff(minute, login_time, getda..