web-dev-qa-db-ja.com

SQL Serverデータベースの復元エラー:指定されたキャストは無効です。 (SqlManagerUI)

本番用WebサイトにはSQL Server 2008 R2 Standard(バージョン10.50.1600.1)を使用し、データベースとしてのローカルホストにはAdvanced Services(v10.50.1600.1)付きのSQL Server Expressエディションを使用しています。

SQL Serverがクラッシュした数日前に、ローカルホストに新しい2008 R2 Expressバージョンをインストールする必要がありました。 Express版から取った古いバージョンを復元したときはうまくいきましたが、運用サーバーから取った.bakファイルからデータベースを復元しようとすると次のエラーが発生します。

エラー:指定されたキャストは無効です。 (SqlManagerUI)

コマンドを使用してデータベースを復元しようとしたとき

Use Master
Go
RESTORE DATABASE Publications
FROM DISK = 'C:\Publications.bak'
WITH MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
MOVE 'AlPublications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'

それは別のエラーを生成します

メッセージ3154、レベル16、状態4、行1
バックアップセットは、既存の 'Publications'データベース以外のデータベースのバックアップを保持しています。
メッセージ3013、レベル16、状態1、行1
RESTORE DATABASEが異常終了しています

バージョンをクロスチェックしました。下の画像に示すように、それらはすべて私と一致しているようです

以前は標準バージョンからエクスプレス版にデータベースを復元することができましたが、今は失敗します。データベースを削除して、再作成しようとしました。それも失敗します。

何が悪いのかわからない。私はこれに関する助けに感謝します

問題は解決しました .bakファイルが破損しているようです。別のファイルで試したところ、うまくいきました。

89
Learning

GUIは時々気まぐれになることがあります。 T-SQLを使用しているときに発生したエラーは、既存のデータベースを上書きしようとしていますが、既存のデータベースを上書きまたは置換することを指定していないためです。以下がうまくいくかもしれません:

Use Master
Go
RESTORE DATABASE Publications
  FROM DISK = 'C:\Publications_backup_2012_10_15_010004_5648316.bak'
  WITH 
    MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
    MOVE 'Publications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'
, REPLACE -- Add REPLACE to specify the existing database which should be overwritten.
39
SchmitzIT

SQL Server 2012バージョンのバックアップファイルをSQL Server 2008 R2またはそれ以下に復元したことが原因と考えられます。

161
Subhash Makkena

ようやくこのエラーで復元できなくなりました。私は欲求不満からSQL2012に移行しましたが、これはおそらく2008R2でも機能すると思います。私は論理名を使わなければなりませんでした:

RESTORE FILELISTONLY
FROM DISK = ‘location of your.bak file’

そしてそこから論理名を使ってMOVEでrestoreステートメントを実行しました。

RESTORE DATABASE database1
FROM DISK = '\\database path\database.bak'
WITH
MOVE 'File_Data' TO 'E:\location\database.mdf',
MOVE 'File_DOCS' TO 'E:\location\database_1.ndf',
MOVE 'file' TO 'E:\location\database_2.ndf',
MOVE 'file' TO 'E:\location\database_3.ndf',
MOVE 'file_Log' TO 'E:\location\database.ldf'

それが復元されたとき、私はほとんど喜びで泣きました。

がんばろう!

15

この問題の2つの理由は次のとおりです。

  1. SQL 2012およびRestore Headeronlyでのバックアップは、SQL 2008 R2で行われました。

  2. バックアップメディアが破損しています。

以下のコマンドを実行すると、常に実際のエラーを見つけることができます。

restore headeronly
from disk = 'C:\Users\Public\Database.bak'

引用符でデータベースファイルの完全な場所を指定してください

それが役に立てば幸い

3
Keren Caelen