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


15

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を復元し、前にファイルへの同じ物理パスで空のデータベースを作成し、そこに復元しようとしましたprodにアップロードする前に、いくつかの異なる.bakファイルを作成し、それらが検証されていることを確認します。実際、.mdfファイルと.ldfファイルのディレクトリがprodに存在することは知っていますが、ファイル自体は存在しません。[OK]をクリックして復元する前に[オプション]タブに移動すると、次のエラーが表示されます。

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

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


私はこれに1日を費やして時間を無駄にしましたが、私の場合は2k8 R2から2k5への後方互換性の問題のようです。

回答:


7

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


4

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


1
SqlExpressがインストールされているかどうかを確認することが重要です(気づかないうちにインストールされている場合があります)。誤ってSqlExpressにログインしてからパニックするのは非常に簡単です。2008データベースを復元できないためです。これはおそらく、このエラーが発生する非常に一般的な理由です。
サイモン

2

SQL Serverファミリでは、バックアップを2000〜2005または2008に進めることができますが、戻すことはできません。SQLServer 2000でSQL Server 2005バックアップを復元することはできません。


1

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

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


1

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


1

(ほっとため息。)ああ、それが問題だ。

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

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

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

「デバイス「D:\ DatabaseBackup_21_02_2011.bak」のメディアファミリの形式が正しくありません。SQLServerはこのメディアファミリを処理できません。」

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

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


0

いくつかの考え:

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

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

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


0

こんにちは、MikeがDatabase Publishing Wizardをお勧めするように提案しているように、すばらしい仕事をしています。

私が最初に使用た回避策は、完全に示唆するものではありません少しゲットーのようです。


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

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

更新:2005年から2000年に行くことはできないようです。次のポストリンクテキストを見つけました。上記のメソッドを使用できるように思えますが、すべてのオブジェクトのスクリプトを作成してから2000で実行することもできます。

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