web-dev-qa-db-ja.com

マスターファイルをそのbakファイルから復元するにはどうすればよいですか?

侵入テスト中に、MSSQLデータベースの複数の.bakファイルが見つかりました。それらをすべて復元したい。 Windowsの場合VM SQL Server 2017をインストールしました。マスターデータベースを復元するために、サーバーをシングルユーザーモードにして、次のようにデータベースの復元を試みました(SSMSでも同じことを試みました)。

RESTORE DATABASE master
FROM DISK = 'C:\Foo\<path>\master.bak'
WITH MOVE 'master' TO 'C:\Foo\master.mdf',
MOVE 'master_log' TO 'C:\Foo\master_log.ldf',
REPLACE
GO

これは私に次のようなエラーを与えました:

..このサーバー(14 ...)とは異なるバージョンのサーバー(13.00.4435)によって作成されたため、復元できません。

次に、my.visualstudio.comで "Visual Studio Dev Essentials"にサブスクライブして、MSSQL 2016 Service Pack 1をダウンロードしました。今私はエラーを得ました:

..このサーバー(13.00.4001)とは異なるバージョンのサーバー(13.00.4435)によって作成されたため、復元できません。

だから今私は更新する必要がありました。 MSSQL 2016 Service Pack 2をダウンロードしましたが、エラーが発生しました。

..このサーバー(13.00.5026)とは異なるバージョンのサーバー(13.00.4435)によって作成されたため、復元できません。

だから私は本当に正確なパッチが必要なようです。ただし、対応するサーバーバージョンのパッチのリストが見つかりません。誰かが正しいパッチを見つける方法についてのアイデアを持っていますか?

.bakファイルを.mdf-および.ldfファイルに抽出できれば十分です。 MSSQL .bakファイルを復元するためのたくさんのツールを見つけましたが、すべてのデータベースに接続したい(簡単な復元を行うため)。 SQL Serverの適切なバージョンを入手するか、.bakファイルを抽出できたら非常にうれしいです。

6
Graa

マスターデータベースは特別で、他のデータベースとは異なります。これは、SQL Serverが内部オブジェクトを格納するシステムデータベースです。サーバーを通常の状態に復元するのは、サーバーを完全に復元する場合のみです。通常、マスターをあるデータベースから別のデータベースに復元する必要はありません。

シナリオで、データベースの内容に興味がある場合は、次のように、マスターを別のデータベース名で復元します。

RESTORE DATABASE master_copy
FROM DISK = 'C:\Foo\<path>\master.bak'
WITH MOVE 'master' TO 'C:\Foo\master_copy.mdf',
MOVE 'master_log' TO 'C:\Foo\master_copy_log.ldf',
GO

次に、復元が完了したら、master_copyデータベースのオブジェクトをクエリできます。

14
Brent Ozar

コメントとしては答えられないので、これは通常のコメントと同じです。

SQL-Serverバージョンの問題については、 https://support.Microsoft.com/en-us/help/3177312/sql-server-2016-build-versions をご覧ください。

そこに、バックアップファイルがSQL Server 2016 SP1 CU3からのものであることがわかります。 Microsoftは、SQL 7.0までのすべてのバージョンのMSSQLについてこれらのリストを管理しています。

1
Marcel Klein