MS SQL Exec sp_detach_db 주의해서 사용하기!

MS SQL의 트랜젝션에는 sp_detach_db 라는 것이 있다.

이것은 현재 물려져 있는 DB의 데이터 파일(보통 C:\Microsoft SQL Server\MSSQL.1\MSSQL\Data 이런 곳에 있는)인 mdf파일과 ldf파일의 백업/복원 (좀 원시적인 방법이나..) 을 할때 사용된다.
MDF파일과 LDF파일은 DB가 실행되어 있으면 DB에 물려있기 때문에 복사,삭제 등이 불가능하지만

EXEC sp_detach_db ‘test’, ‘true’

 

쿼리를 이런 식으로 날리면 mdf파일과 ldf파일의 이동이 가능해진다.
오늘, 이번부터 작업에 들어갈 MS SQL서버에서 DB를 가져와 테스트 서버를 구축하려고 했는데 MDF파일이 그냥 복사가 안되는 것이다.
한참 백업/복원 방법을 찾다가 날으는 물고기 님의 글을 보게 되었다.
거기서 하란 데로 일단 실행! 그래서 복사하고 테스트 서버로 내려받게 되었다.
그러나.. 아직 작업도 들가지 않은 운영중인 실제 서버의 DB연결이 안되는 것이다!!
MS SQL Server Management Studio Express 를 통해 접속해 보니 아니!! DB가 사라져 있다??
MDF파일은 그대로 있는데 이상하다… 아놔 일냈네..
진짜 필사적으로 구글링을 해본 결과.. detach가 있으면 attach가 있다는 사실을 알아내고 말았다.

USE master

GO

exec sp_attach_db @dbname = ‘test’,

@filename1 = ‘D:\Microsoft SQL Server\MSSQL\Data\test.mdf’,

@filename2 = ‘D:\Microsoft SQL Server\MSSQL\Data\test_log.ldf’

GO

휴.. 이렇게 하니깐 잘 된다… ;ㅅ;

그런데 주의할 점은, 우선 MSSSMS를 한번 껏다가 키고 이 구문을 실행시켜야 한다는 점이다.
참고로 백업/복원 과정을 간단히 설명하면..(매우간단한 버전)

 복사할 DB에서

EXEC sp_detach_db ‘test’, ‘true’ (여기서 test는 백업할 db명)
이 쿼리를 날리고
복사되야 할 DB에서

USE master

GO

exec sp_attach_db @dbname = ‘test’,

@filename1 = ‘D:\Microsoft SQL Server\MSSQL\Data\test.mdf’,

@filename2 = ‘D:\Microsoft SQL Server\MSSQL\Data\test_log.ldf’

GO

이 쿼리를 날린다. 위에서 test는 백업한 db명이고, 파일 경로는 복원할 mdf파일의 경로와 같아야 한다.

 

아.. 큰 걸 얻은 기분, 정말 요 근래들어 지옥의 10분을 경험한 기분이다… 큰일을 감수했다는 점에서 항상 실 데이터를 다룰 때에는 주의해야 한다는 점을 명심해야 겠다!!

안녕하세요, 개발자 메튜장 입니다. 약 6년간 개발해 왔으며, 현재는 유라임 이라는 자기관리 웹 서비스를 창업하여 개발/운영하고 있습니다. 모던웹 개발, UX와 마이크로서비스, 대용량 아키텍처에 특히 관심이 많습니다. 개발 토크는 언제나 환영합니다. 댓글 혹은 이메일 ([email protected]) 으로 연락주세요 :-)

Translate »