본문 바로가기

SQL Server

(81)
모든 테이블의 데이터 일괄 삭제하기 프로젝트 초기에 개발 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..
64bit 환경에서 Excel 작업이 포함된 SSIS Package 실행하기 SSIS 패키지를 이용해 Excel 파일을 다루는 경우... 해당 패키지를 64bit 환경에서 Jobs에 등록하여 실행하면 작업이 실패한다. 엑셀 파일 입출력에 필요한 드라이버가 32bit 용 밖에 없기 때문인데... 이 문제를 해결하려면 간단히 32bit용 DTExec.exe를 WOW 안에서 돌려주면 된다. 즉, Step (= 단계)을 추가할 때, Type을 Operation system (CmdExec)를 선택하고... Command 란에... "C:\Program Files (x86)\Microsoft SQL Server\90\DTS\Binn\DTExec.exe" /FILE "" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF /REPORTING EW 라고 적어주면 끝~
파티션 스키마를 참조하는 인덱스 목록 보기 파티션 스키마를 참조하는 인덱스 목록 보기 SELECT PS.[name] AS PSName, OBJECT_NAME([object_id]) AS tableName, I.[name] AS indexName FROM sys.indexes I INNER JOIN sys.partition_schemes PS ON I.data_space_id = PS.data_space_id ORDER BY PSName, tableName, indexName
SP, UDF, Trigger 문서 자동화 하기 Stored Procedure, User Defined Function, Trigger와 같이 Programmable한 DB Object의 Document 관리는 어떻게 해야 할까? 여러가지 방법이 있겠지만, 개인적으로는 소스 코드의 주석과 Extended Property를 활용하는 방법을 선호한다. 즉, DB로부터 SP 정보를 추출하여 문서화하자는 얘기. (UDF, Trigger도 마찮가지) 첨부 파일의 샘플 SP를 등록하고… 실행하면, 아래와 같은 문서를 얻을 수 있다. 만약, sp_helpmodule에 아무런 인자도 주지 않는다면, 해당 DB 컨텍스트의 모든 module에 대한 문서가 작성된다. EXEC sp_helpmodule 'P_AddExtraUser' 결과 === dbo.P_AddExtraU..
SQL Server Internals Viewer SQL 서버의 데이터의 저장 구조를 좀 더 쉽고 직관적으로 볼 수 없을까하는 바램이 있었다. 그 바램을 풀어줄 툴을 찾은듯 싶다 ㅎㅎ SQL Server Internals Viewer 다운로드는 여기서 -> http://internalsviewer.codeplex.com/ 위 사이트에서 업어온 퀵 스타트 동영상