web-dev-qa-db-ja.com

SQL Serverがバックアップを復元するとエラーが発生する

Dev(Windows Server 2008上のSQL Server 2005)にデータベースがあり、prod(Windows Server 2003上のSQL Server 2000)に移動する必要があります。私のプロセスは次のとおりです:

  1. 開発者にログインし、SQL Server Management Studioを開きます
  2. データベースを右クリック|タスク|バックアップ。すべてのデフォルトオプション(フルバックアップなど)を保持する
  3. .bakファイルをローカルでprod(ネットワークドライブなし)に移動し、prodにログインして、SQL Server Enterprise Managerを開きます。
  4. データベースノードを右クリック|すべてのタスク|データベースを復元します。
  5. データベースとして復元を変更して、同じデータベース名を反映させます。
  6. 「デバイスから」ラジオボタンをクリックします。 [デバイスを選択]をクリックします
  7. [復元元:追加...]をクリックし、.bakファイルを参照します(小さい-6MBのみ)

これでデータベースを復元する準備ができたので、[OK]をクリックして次のエラーを取得します。

「デバイス 'E:... bak'のメディアファミリーの形式が正しくありません。SQLServerはこのメディアファミリーを処理できません。RESTOREDATABASEは異常終了しています。」

このエラーは即時です。

私はこれのいくつかの異なるバリエーションを試しました-異なるdb名とログファイル名(元の場所)でdevマシンにdbを復元し、ファイルへの同じ物理パスで空のデータベースを作成してから復元しようとしました、いくつかの異なる.bakファイルを作成し、それらを製品にアップロードする前に検証されることを確認します。事実、.mdfファイルと.ldfファイルのディレクトリはprodに存在しますが、ファイル自体は存在しません。 [OK]をクリックして復元する前に、代わりに[オプション]タブに移動すると、次のエラーが発生します。

エラー3241:デバイス 'E:... bak'のメディアファミリーの形式が正しくありません。 SQL Serverはこのメディアファミリを処理できません。 RESTORE FILELISTが異常終了しています。

誰かが明るいアイデアを持っていますか?

15
Mario

MSSQL2008のバックアップヘッダーは、問題の原因である可能性が高いMSSQL2005のヘッダーとは異なります。バックアップと復元のパラダイムの代わりにDBをエクスポートするか、DEVサーバーでMSSQL2008をセットアップしてください。

7
Thunder3

Mike Dimmickが言うように-SQL 2000はSQL 2005のバックアップを認識しません(Word 2000が2007のDOCXファイルを認識しないように)。したがって、SQLスクリプトなど、より一般的な分母の形式でデータを移行する必要があります。スキーマとデータの両方に対して単一のSQLファイルを生成するSQL Server Hosting Toolkitの一部である Database Publishing Wizard を試してください。

4
Duncan Smart

SQL Serverファミリでは、バックアップを前方に移動できます。つまり、2000から2005または2008に移動できますが、後方に移動することはできません。SQLServer 2000でSQL Server 2005のバックアップを復元することはできません。

2
Mike Dimmick

復元しようとしたときにファイルが作成されないようにする権限の問題である可能性があります。ターゲットに同じ名前で新しいデータベースを作成してから、その上に復元してみてください。

また、外付けハードドライブまたはネットワーク共有からバックアップを復元しようとしている場合は、バックアップファイルをローカルマシンにコピーしてから復元を試みてください。

1
Ryan Roper

既定では、SQL Server 2005の2つのオブジェクトエクスプローラーがあります。server/ sqlexpressオブジェクトで試行していると思います。別のものに復元してみてください。

1
Nagaraju

(ため息を和らげた。)ああ、それが問題だ。

SQL Server 2008 SP1をリモートPCで実行しています。データベースをバックアップしましたが、.bakファイルから復元するSQL Server 2008のlocalコピーを取得できませんでした。

[イニ]が言うように、これはSQL Server 2008のコピーがSQL ServerではなくローカルPCでSQL Server 2005インスタンスを開いていたためです2008年のインスタンス。天才。

そして、私は[イニ]に完全に同意します。まあ、SQL Server 2008バックアップを2005インスタンスに復元することはできませんが、少なくともMicrosoftはまともなエラーメッセージを表示することができます。

「デバイス 'D:\ DatabaseBackup_21_02_2011.bak'のメディアファミリーは正しく形成されていません。SQLServerはこのメディアファミリーを処理できません。」

私のバックアップではなかったの形式が正しくありません。 SQL Server 2008 SP1を実行している場合でも、SQL Server 2005インスタンスに復元することはできません。

これをエラーメッセージに入れるのは本当に難しいのでしょうか……?

1
Mike Gledhill

いくつかの考え:

  • 復元するデータベースのおおよそのサイズは?
    唯一の このエラーに関するサポート記事 はSQL 2000用であり、大きなログファイルについて話します。 SQL 2000を使用していない場合、ログが特に大きい場合は、最初にログのサイズを小さくすることをお勧めします。

  • データベースをDevサーバーに(別のデータベース名として、別のファイルに)復元できますか?これは、SQL 2005に関する限り、ファイル自体に問題がないかどうかを証明します。

  • そのDevサーバーから他のデータベースを製品に復元できますか?

0
Rory

皆さん、こんにちは。データベース公開ウィザードをお勧めすることをマイクが提案しているように、それは素晴らしい仕事をします。

これは私が最初に使用した回避策ですが、私は完全には提案しませんが、少しゲットーのようです。


1)prodにdbを作成し、適切な権限を持つdbユーザーを作成し、リモートアクセスを許可するファイアウォールのポートを開きます
2)SQL Server Management Studioのdevから、db->タスク->データのエクスポートを右クリックします。宛先を選択するときは、必ずポートxxx.xxx.xxx.xxx、1764を指定してください。
3)転送するすべてのテーブルを選択し、次の100回クリックして完了です。

警告:これはストアドプロシージャを上書きしません。
警告:これは、int列のIDをコピーしません

更新:2005年から2000年に移行できないようです。次の投稿を見つけました リンクテキスト -上記の私の方法を使用できるようですが、すべてのオブジェクトをスクリプト化して実行することもできます2000年に。

0
Mario