2007/02/22

SQL Server 데이터베이스 전체를 이전 하는 방법

일반적으로 SQL Server 를 설치하게 되면, 기본 데이터베이스 디렉토리는 "C:\Program Files\Microsoft SQL Server\MSSQL" 입니다.

물론, 설치과정에서 주로 "D:\Microsoft SQL Server\MSSQL" 처럼 별도의 파티션을 지정하여 설치하는 경우가 많습니다. --> 보안 및 복구를 위함이죠..^^

본 포스트는 다음과 같은 상황을 전제로 한 것입니다.

1. 위 데이터베이스 디렉토리를 시스템데이터베이스를 포함하여 일괄 다른 파티션으로 변경
2. 현재 서버의 데이터베이스와 계정정보등 모두를 DTS 나 attach, detach 등의 방법없이 이전
3. 메인 디스크가 깨졌으나, 데이터베이스 파티션 디스크는 살아서  복구가 필요한 경우

위의 경우에 대부분 attach 및 detach를 이용하여 많이들 작업을 하게 됩니다. 그런데 이 경우는 몇개의 사용자 DB 에 해당하는 것이고 사전에 해당 DB 의 사용자 계정 작업을 해놓아야 합니다.

물론 DTS도 마찮가지이기는 하나 역시 더 많은 작업과정을 거치게 됩니다.

특히나,. master, msdb, model, tempdb 등 시스템데이터 베이스를 옮긴다는 것은 여간 쉽지 않은 작업입니다.

이런 경우 다음과 같은 작업과정을 통해서 시스템데이터베이스와 사용자데이터베이스 모두 일괄 변경을 할수 있습니다.


1. master 데이터베이스의 시작 매개 변수 설정

SQL Server의 시작매개 변수는, EM 에서 설정이 가능하나 이 경우는 EM으로 작업이 이미 가능한 경우에만 해당됩니다.



시작매개변수는 EM에서 가능하나, 이 정보는 다음 레지스트리 경로에서 가져오게 됩니다. 그래서 레지스트리값을 변경해 주면 됩니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\Parameters 

   -dD:\MSSQL\data\master.mdf
   -eD:\MSSQL\log\ErrorLog
   -lD:\MSSQL\data\mastlog.ldf

이는 SQL Server 서비스가 최초 복구모드 상태에서는 master 데이터에비스에 접근이 가능해 집니다.


2. master 이외의 데이터베이스를 복구하지 않도록 3608 추적 플래그와 함께 시작.

NET START MSSQLSERVER /f /T3608


3. osql -E 유틸리티로 접근

SQL Server의 모든 데이터베이스 정보는 master 데이터베이스에 저장되어 있습니다. 그중에 sysaltfiles 테이블과 sysdatabases 에 저장되어 있습니다.

이 두개의 테이블에 각 데이터베이스 파일의 경로가 이전 경로가 지정되어 있는데요. 이 부분을 변경된 디렉토리 경로로 변경을 해주어야 합니다.

UPDATE  sysaltfiles  SET  filename = REPLACE(filename, 'D:\DBdata', 'D:\Microsoft SQL Server\MSSQL\Data')

go

UPDATE  sysdatabases  SET  filename = REPLACE(filename, 'D:\DBdata', 'D:\Microsoft SQL Server\MSSQL\Data')

go

UPDATE  sysaltfiles  SET  filename = REPLACE(filename, 'C:\Program Files', 'D:\')

go

UPDATE  sysdatabases  SET  filename = REPLACE(filename, 'C:\Program Files', 'D:\')

go


물론 위 경로는, 이전이 완료되는 데이터베이스 경로에 맞게 수정을 해줘야 합니다.


4. 복구모드 종료후 정상 서비스 시작

NET STOP MSSQLSERVER
NET START MSSQLSERVER


정상모드로의 데이터베이스 시작시 경로가 맞지 않으면 데이터베이스가 시작도중 종료됩니다. 특히나 시스템데이터 베이스의 경우에 말이죠. 시작후 필히 응용프로그램 이벤트로그를 검토하여 오류가 나는 부분이 있는지 확인해 주어야 합니다.


이렇게 작업을 하게 되면, 기존 데이터베이스 목록뿐만 아니라 계정정보를 일체 변경없이 그대로 복구 또는 이전이 가능하게 됩니다.

이런 과정을 통해서 소요되는 시간은 데이터베이스파일 복사소요 시간과 위와 같은 작업소요 시간외에는 추가과정이 없어서 아주 짧은 시간에 데이터베이스를 일괄 이전할수 있습니다.^^


21-mssql-param.png

댓글 없음:

댓글 쓰기

가장 많이 본 글