SQL Server 2012 새 DB 이름으로 백업 복원


16

2008 년에는 "대상 데이터베이스"필드의 이름을 복원 마법사에서 변경하여 백업을 새로운 DB 복사본으로 복원 할 수 있습니다. 새로운 시점의 DB가 생성되어 원하는 시점으로 복원 된 원본 DB의 사본입니다. 나는 내 인생에서 SQL 2012 가이를 수행하는 방법을 알아 내지 못했습니다.

이제 (아론 베르트랑 (Aaron Bertrand) 덕분에) 이것이 실제로 변하지 않았 음을 이해하고 있으며, 2012 년은 실제로이 전략이 처음에는 나쁜 생각이라는 것을 더욱 분명하게 보여주고 있습니다!

따라서 백업 파일을 사용하여 기존 DB 'MyDB'에서 새 DB 'MyDB_Copy'를 만듭니다. 야간 전체 백업 (.bak)과 15 분마다 TLog (.trn)가 있습니다. 기존 'MyDB'가 "실시간"이기 때문에 영향을 받거나 건 드리기를 원하지 않습니다.

MyDB_Copy가 기본 전체 백업 파일에서 작성된 후, 특정 시점으로 가져 오기 위해 수십 개의 TLog 백업을 복원해야합니다.


당신이나 아론이 왜 이것이 나쁜 생각인지 공유 할 수 있습니까? 또는 설명 된 문제에 대한 링크?
Thronk

논리적 이름이 변경되지 않는 것으로 생각하므로 동일한 위치에 이름과 물리적 파일이 다르지만 논리적 이름이 동일한 두 개의 DB가 생겨서 유지 관리 계획에 문제가 발생합니다. 논리 이름에. 제 상황에서 복원 / 복사 된 DB는 몇 시간 이상 지속되지 않았지만 왜 이것이 좋은 습관이 아닌지 알 수 있습니다.
NateJ

답변:


18

documentation의 예제 E를 기준으로 새 쿼리 창을 열고 다음을 실행하십시오.

RESTORE DATABASE MyDB_Copy FROM DISK = 'C:\blahblah\MyDB.bak'
  WITH REPLACE, RECOVERY,
  MOVE 'MyDB' TO 'C:\blahblah\Data\MyDB_Copy.mdf',
---------------------------------------^^^^^
  MOVE 'MyDB_log' TO 'C:\blahblah\Data\MyDB_Copy.ldf';
-------------------------------------------^^^^^

논리적 이름은 중요하지 않습니다. 실제 파일 이름입니다. 이것은 논리 파일 이름과 두 개만 있다고 가정합니다. EXEC MyDB..sp_helpfile;확실하게 실행 하십시오.

로그를 복원해야하는 경우 다음으로 변경 RECOVERY하십시오 NORECOVERY.

  WITH REPLACE, NORECOVERY,
----------------^^

그런 다음 일련의 문제를 발행 할 수 있습니다.

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\file1.trn' WITH NORECOVERY;

그리고 가장 마지막에 :

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\fileN.trn' WITH RECOVERY;

또는 특정 시점까지만 로그 업이 필요한 경우 (LSN 및 시간이 어디 있는지 확인한 후 필요한 파일을 정확히 알고 있다고 가정합니다).

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\fileN.trn' WITH 
  STOPAT = '<some point in time Friday>', RECOVERY;

백업이 다른 서버에서 온 것이 아니라면 이전 버전에서 작업 한 방식은 결코 작동하지 않았을 것입니다. 기본적으로 새 mdf 및 ldf 파일을 정확하게 같은 위치에 배치하려고 시도하지만 불가능합니다.


좋아, 조금 도움이 되었어. 이제 DB를 금요일 밤의 상태로 되돌리려면 수십 개의 TRN 파일을 복원해야합니다 (전체 백업은 매일 만 수행되며 TLog 백업은 15 분마다 발생 함). 샘플을 사용하여 기본 BAK 파일에서 DB를 만들었지 만 로그를 복원하기 위해 비슷한 명령문을 시도 할 때 새 오류가 발생합니다. "롤 포워드 할 파일이 없기 때문에 로그 또는 차등 백업을 복원 할 수 없습니다"라고 표시되어 있습니다.
NateJ

@NateJ 당신은 전체 질문을해야합니다. :-)
Aaron Bertrand

1
신난다, 지금 타이핑 중이다! 도와 주셔서 감사합니다. 나는 StackOverflow에서 몇 가지 부정적인 담당자를 얻었 지 만 이것이 효과가 있다면 그만한 가치가 있습니다.
NateJ

1
@NateJ 질문이 마이그레이션 될 때 삭제되었으므로 (또는 결국 종료 될 것이므로) 해당 담당자에게 연락해야합니다. 그것은 내가 아니었지만 나는 이것이 하나의 버전에서 작동했지만 지금 일어나지 않았다는 비난 때문이라고 생각합니다.
Aaron Bertrand

어머. 이전에 사용했던 것과 같은 것-정확히 무엇을 / 어떻게 기억하지 못할 지 모르지만, 그것이 잘못 이해되었다는 데 동의합니다. 제 동료가 위아래로 맹세하지만 이제는 생각해 보니 이해가되지 않습니다. GUI를 사용하여 다르게 수행해야합니다. 당신이 제안한대로 명령 / 스크립트를 사용하는 것이 더 좋습니다. :) 지금까지 로그가 성공적으로 복원되고 있습니다!
NateJ

0

동일한 데이터베이스를 여러 번 복원하려면 해당 데이터베이스의 디스크 파일 이름을 변경하기 만하면됩니다. 분명히 SQL Server의 다른 데이터베이스와 데이터베이스 이름을 다르게 지정해야합니다. 복원 할 .bak 파일을 선택하고 데이터베이스 이름을 입력 한 후 SSMS에서 왼쪽의 "페이지 선택"섹션에서 '파일'을 클릭하고 디스크 파일의 이름 만 변경하십시오.

건배 더그

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.