SQL Server 2012の新しいDB名へのバックアップの復元


16

2008年に、復元ウィザードの[接続先データベース]フィールドの名前を変更することで、DBの新しいコピーにバックアップを復元できることを覚えているようです。これにより、新しいDBが作成されます。これは、元のDBのコピーであり、必要な時点に復元されます。私は、SQL 2012でこれを行う方法を理解していませんでした。

今、私は(アーロン・バートランドのおかげで)これは実際には変わらなかったことを理解し、2012年はこの戦略がそもそも悪い考えであったことを実際に私に明らかにしている!

そのため、私がする必要があるのは、バックアップファイルを使用して、既存のデータベース「MyDB」から新しいデータベース「MyDB_Copy」を作成することです。毎晩の完全バックアップ(.bak)と15分ごとのTLog(.trn)があります。既存の「MyDB」が「ライブ」であるため、まったく影響を受けたり触れられたりしたくない。

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


あなたやアーロンは、なぜこれが悪い考えなのかを共有できますか?またはそれが説明されている問題へのリンク?
トロンク

私はそれが変更されていない論理名に関するものだと思うので、同じ場所に異なる名前と物理ファイルを持っているが同じ論理名を持つ2つのDBになり、それが依存する保守計画の問題を引き起こす論理名で。私の状況では、これらの復元/コピーされたDBが数時間以上持続することはありませんでしたが、なぜそれが素晴らしいプラクティスではないのかがわかります。
NateJ

回答:


18

ドキュメントの例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;

そして最後の1つについて:

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


さて、それは少し助けた。ここで、数十個のTRNファイルを復元して、DBを金曜日の夜の状態に戻す必要があります(完全バックアップは毎日行われ、TLogバックアップは15分ごとに行われます)。サンプルを使用して、メインのBAKファイルからDBを作成しましたが、同様のステートメントでログを復元しようとすると、新しいエラーが発生します。「ファイルをロールフォワードする準備ができていないため、ログまたは差分バックアップを復元できません」と表示されます。
NateJ

@NateJでは、完全な質問をする必要があります。:-)
アーロンバートランド

1
素晴らしい、今入力中です!ご協力ありがとうございます。StackOverflowでネガティブな担当者を数人もらったのは残念ですが、これがうまくいけばそれだけの価値があるでしょう。
NateJ

1
@NateJ質問は移行時に削除された(または最終的には削除される)ため、その担当者を返送する必要があります。...それは私ではなかったが、私はそれが、これは1つのバージョンで働いていたが、それは明らかに起こっていただけの誤解であるとき、今しなかったことを理由あなたの告発であった疑いがある
アーロン・ベルトラン

ああ 以前は動作していたようなもの-何をどのように正確に覚えていないかもしれませんが、誤解されていることに同意します。私の同僚は上下に誓うが、今私はそれについて考えると、それは意味をなさない。GUIを使用して、何か別の方法で行ったはずです。あなたが提案したように、コマンド/スクリプトを使用する方が私たちにとって良いことだと思います。:)これまでのところ、ログは正常に復元されています!
NateJ

0

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

乾杯ダグ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.