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


91

運用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
バックアップセットは、既存の「パブリケーション」データベース以外のデータベースのバックアップを保持します。
メッセージ3013、レベル16、状態1、行1
RESTORE DATABASEが異常終了しています。

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

以前は、データベースを標準バージョンからExpress Editionに復元できましたが、現在は失敗します。データベースを削除して再作成しようとしました。それも失敗します。

何が悪いのかわかりません。これについて助けていただければ幸いです

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


これはプロではありませんが、簡単な質問ですが、データベースのx86およびx64アーキテクチャは互換性がありますか?
グスタフクリムト

その時点で以前にデータベースを復元していましたが、そのような問題に直面することはありませんでした。何らかの理由で、今では私は、データベースサーバーの照合順序が問題を作成しているわけではないことを確認する場合にエラーが発生
ラーニング

,REPLACET-SQLコマンドに追加して、既存のAlHabtoorPublicationsデータベースを上書きしてみてください。
SchmitzIT 2012年

今日、職場で同じ問題に遭遇しました。FTP転送を行った後、ファイルサイズをチェックするだけでは不十分のようです。ファイルは非常に機密性が高いようです。転送を実行する前にファイルを圧縮することで問題を解決しました。
rofans91 2015

Scenerio私はSQL SERVER 2008でデータベースのバックアップを取り、SQL SERVER 2008 R2でそれを復元しようとしました。理想的には正常に動作するはずですが、バックアップファイルを選択しているときに、SQL Management Studio 2208 R2で「指定されたキャストが指定されていません。(SqlManagerUI)」というエラーが発生していました。理由とトラブルシューティングこれは、FTP転送中の.BAKファイルの破損が原因でした(転送モードがASCIIに設定されている)。常に、データベースの.BAKファイルを転送するときは、FTP転送モードをBINARYに設定してください。
Rohan Sarkar 2017年

回答:


40

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.

奇数、私はあなたの元のステートメントを再利用しました。いずれにせよ、私が追加した唯一のthignは最後の行でした: , REPLACE
SchmitzIT

1
実際、はをFailed: 38示しますreached end of the file。(コマンドウィンドウでを実行しますNET HELPMSG 38)。:それは、通常、破損したバックアップを示しstackoverflow.com/questions/5656363/...
SchmitzIT

問題なく復元された少し古い.bakファイルで復元をテストしました。この特定の.bakファイルは壊れているようです
学習

クラッシュの結果であった可能性があります。ドライブの一部が故障した可能性があります。別のバックアップで問題を解決できたことをうれしく思います:)
SchmitzIT

次のエラーメッセージ3203、レベル16、状態1、行1を生成するスクリプトは "C:\ Publications.bak"の読み取りに失敗しました:38(このエラーのテキストを取得できませんでした。理由:15105)メッセージ3013、レベル16、状態1 、行1のRESTORE DATABASEが異常終了しています。
学習

163

SQL Server 2012バージョンのバックアップファイルをSQL Server 2008 R2以下に復元したことが原因である可能性があります。


4
代わりに「スクリプトの生成」を使用する必要があります。
kroiz 2014年

4
これが私の問題でした。これらのケースのいくつかについて、MSがより役立つメッセージを提供することはそれほど難しいことではないようです。
John Gilmer、2015

Pinal Daveはここの理由を説明- blog.sqlauthority.com/2015/06/01/...
shrivb

15

最後に、復元時にこのエラーが発生しないようにしました。私はフラストレーションからSQL2012に移動しましたが、おそらくこれは2008R2でも機能するでしょう。私は論理名を使わなければなりませんでした:

RESTORE FILELISTONLY
FROM DISK = location of your.bak file

そこから、MOVE論理名を使用して復元ステートメントを実行しました。

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'

復元が終わったとき、私はほとんど喜びで泣きました。

幸運を!


4

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

  1. SQL 2012で行われたバックアップとRestore HeaderonlyはSQL 2008 R2で行われました

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

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

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

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

それが役に立てば幸い

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