데이터베이스 복원(카피)
유지보수중인 서비스의 요청사항이 들어왔습니다.
서비스의 장기 미 접속 유저에 대한 잠금설정 기능추가가 필요하다는 겁니다.
일사천리로 진행되나 싶더니.. 작업 중.. 손가락이 미끄러져서 잠금값을 바꾼다는게 그만 삭제값을 True로 바꿔버렸습니다!! 히힛!
뭐 일반 유저 데이터면 큰 문제일테지만 장기 미 접속 유저 아니겠습니까?
매일 데이터를 백업하고 있었기 때문에 백업한 DB를 다른 이름으로 복구해서 해당 값들을 원상복구하면 되겠구나~ 하는 가벼운 생각으로 복구 작업을 시작했습니다.
MSSQL을 사용하기 때문에 GUI에서 작업하는 경우가 많아서 SQL Server Management Studio에서 복원을 시작했는데 복구가 잘 되지 않습니다!
정상적인 .BAK파일 일텐데?
오류 번호 : 3154
'백업 세트에 기존 'DB명' 데이터베이스가 아닌 데이터베이스의 백업이 있습니다'
위와 같은 오류를 발생 시키는 겁니다. 뭐 이것저것 해보다 결국 아래 명령어를 사용하여 복구했습니다!
DB 복원
아래 명령어로 해당 백업파일 복구 시 필요한 값을 확인합니다.(mdf, mdl)
restore filelistonly from disk = 'D:\DB_Backup\dbTemp_20161027.bak'
여기서 조회 한 mdf data와 ldf 로그파일을 아래서 써줍니다.
원본 - dbTemp
복원(카피)할 DB명 - dbTemp_full <- 데이터베이스를 미리 생성하지 않아도 됩니다.
Restore database dbTemp_full
from disk = 'D:\DB_Backup\dbTemp_20161027.BAK'
with move 'dbTemp' to 'D:\DB_Backup\dbTemp_full.mdf',
move 'dbTemp_log' to 'D:\DB_Backup\dbTemp_full_log.ldf'
자 이제 dbTemp의 Bakup 데이터가 dbTemp_full로 생성되신 걸 확인 하실 수 있습니다!
DB 백업
BACKUP DATABASE [DB_Name] TO DISK='D:\db_backup\dbTemp_20161027.bak'
백업은 위 명령어로 하실 수 있습니다.
백업복원 포스트라면 백업먼저 알려줘야 하지 않느냐? 하시겠지만 복원 관련해서 작성하다가 추가 하는 터라 뒤에 추가했습니다.
백업을 잘해놔야 이렇게 복원도 수월하게 하실 수 있으니 백업! 반드시 합시다.
물론 복원도 좋지만 다신 이런일 없게 정신 바짝 차리고 작업 해야겠습니다!!
(음 검색해서 이 포스트를 보시는 분들은 이미… 화이팅입니다.)