본문 바로가기

SQL/SQL Server 2005

SQL Server 2005 master DB를 이용한 복원

SQL Server 2005
2008. 02. 02.
안혁
http://hyok.kr



SQL  Server 2005에서 제공하는 백업/복원을 사용하여 데이터베이스를 복원할 수도 있겠지만, DB 전체에 대하여 복원하는 것은 매우 번거로운 작업입니다. 기존 DB에 대한 mdf/ldf 파일들이 존재한다면 master DB만 복원하여 전체 데이터베이스를 복원할 수 있습니다.(데이터베이스 서버 이전 작업 또는 OS 재 설치의 경우가 이에 해당 - 데이터 베이스 백업 파일만 존재한다면 일반적인 복원 절차를 진행해야 할 것임)

먼저 mdf/ldf 파일들이 기존 사용되던 위치에 존재해야 합니다. master DB에 모든 데이터베이스에 대한 정보(데이터베이스 파일의 위치 역시 가지고 있음)가 존재하므로, 복원 후에 그 정보를 사용하여 데이터베이스를 연결하려고 할 것입니다. SQL Server 2005를 기존에 설치했던 위치와 동일하게 설치하고, mdf/ldf 파일 역시 이전과 동일한 위치에 복사합니다.

다음으로 전체 데이터베이스에 대한 정보를 가지고 있는 master DB를 복원만 하면 전체 데이터베이스에 대한 복원 작업이 완료됩니다. master DB는 시스템 데이터베이스이므로 Single Mode에서 작업해야합니다. 저는 D 드라이브에 SQL  Server 2005가 설치되어 있는 것으로 진행합니다.

cd "d:\Program Files\MicrosoftSQL Server\MSSQL.1\MSSQL\Binn"
sqlservr.exe -m


명령어 철자에 주의하세요. server이 아닙니다. servr입니다. 이미 실행중이라면 다음처럼 사용 중이라는 에러가 발생할 것입니다.

사용자 삽입 이미지

이런 경우에는, mssqlserver 서비스를 종료하고 다시 실행하세요.

net stop mssqlserver


제대로 실행하면 조금은 다른 메세지들이 출력됩니다.

사용자 삽입 이미지

Single Mode로 실행되면 다른 명령 실행 창에서 sqlcmd.exe를 실행하고 다음 명령을 입력합니다.

RESTORE DATABASE [master] FROM DISK = N'D:\Backup\master.bak' WITH REPLACE, RECOVERY

GO

물론 백업 파일의 위치는 상황에 따라 달라질 수 있겠습니다. 명령이 실행되면 sqlservr.exe는 종료됩니다. mssqlserver 서비스를 시작합니다.

net start mssqlserver


이렇게 하면 전체 데이터베이스가 모두 복원되어 있는 것을 확인할 수 있습니다. mdf/ldf 파일이 존재하지 않는 데이터베이스는 로딩이 안됩니다. 이렇게 하면 한가지 작업만이 남습니다.

복원을 모두 했는데 더 무슨 작업이 필요할까요?  복원이 모두 끝난 것 처럼 보이지만, 연결된 서버 작업 시 문제가 발생합니다.

사용자 삽입 이미지

SQL Server 2005가 되면서 보안적인 요소가 강화되었다고 합니다. 서비스 마스터 키라는 개념이라고 하는데요.쉽게 이야기 하자면, 기존에 사용하던 키도 백업해뒀다가 master DB를 복원할 때 같이 복원해야한다는 것입니다. 옛날 자물쇠를 새 자물쇠용 열쇠로 열려고 하니 안된다는 것이지요. 옛날 자물쇠용 열쇠가 필요합니다.

마지막 작업은 간단합니다. 이전 SQL Server에서 서비스 마스터 키를 백업 받아 새로운 SQL Server에 복원하는 것입니다. 명령어는 다음과 같습니다.

BACKUP SERVICE MASTER KEY TO FILE = 'c:\ServiceMasterKey' ENCRYPTION BY PASSWORD = 'P@ssw0rd'

RESTORE SERVICE MASTER KEY FROM FILE = 'c:\ServiceMasterKey' DECRYPTION BY PASSWORD = 'P@ssw0rd' FORCE

복구 시 FORCE가 있는 이유는 그렇지 않으면 실행이 안되기 때문입니다. 암호 해독을 못하겠다면서 말이죠. 이 작업을 마지막으로 복원은 완료됩니다.

서비스 마스터 키에 대하여 더 자세히 알고 싶다면 다음의 문서를 참고하세요.

http://technet.microsoft.com/ko-kr/library/ms189586(SQL.90).aspx
http://msdn.microsoft.com/ko-kr/library/ms187788.aspx