web-dev-qa-db-ja.com

SQL Server 2012でバックアップを新しいDB名に復元

2008年には、「宛先データベース」フィールドの名前をrestore-wizardから変更することで、DBの新しいコピーにバックアップを復元できることを覚えているようです。新しいDBが作成されます。これは、必要な時点に復元された元のDBのコピーです。 SQL 2012でこれを行う方法を理解するために、私は一生懸命考えていません。

これで、(Aaron Bertrandのおかげで)これは実際には変更されなかったことを理解しています。2012年は、この戦略が最初から悪い考えだったことを実際に明らかにしています。

したがって、私がする必要があるのは、バックアップファイルを使用して、既存のDB「MyDB」から新しいDB「MyDB_Copy」を作成することです。毎晩の完全バックアップ(.bak)と15分ごとのTLog(.trn)があります。 「MyDB」は「ライブ」であるため、既存の「MyDB」に影響や変更を加えたくありません。

MyDB_Copyがメインの完全バックアップファイルから作成された後、特定の時点にそれを取得するために、数十のTLogバックアップを復元する必要があります。

16
NateJ

大まかに ドキュメントの例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';
-------------------------------------------^^^^^

論理名は重要ではありません。物理ファイル名は次のとおりです。これにより、論理ファイル名が2つしかないことが想定されます。実行EXEC MyDB..sp_helpfile; 念のため。

ログを復元する必要がある場合は、RECOVERYNORECOVERYに変更します。

  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ファイルをまったく同じ場所に配置しようとしますが、これは不可能です。

18
Aaron Bertrand

同じデータベースを複数回復元するために必要なのは、そのデータベースのディスクファイルの名前を変更することだけです。明らかに、データベースにSQL Serverの他のデータベースと異なる名前を付ける必要があります。復元する.bakファイルを選択し、データベースの名前を入力した後のSSMSで、左側の[ページの選択]セクションの[ファイル]をクリックし、ディスクファイルの名前を変更します。

乾杯ダグ

0
Doug