SQL Server 2012 Standardデータベースをlocaldbインスタンスにコピーしようとしています。 localdbがSQL Server 2005以降の高速インスタンスでないことを警告するウィザードを試しました。バックアップ/復元も行いましたが、localdbで復元すると、次のエラーが発生します...
これを実行しています...
RESTORE DATABASE CSODev
FROM DISK = 'C:\MyBckDir\CSODev.bak'
WITH MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf',
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf',
REPLACE
表示されるエラーメッセージ...
ファイル1のデータベース「CSODev」、ファイル「CSOdev_Data」の8752ページを処理しました.
ファイル1のデータベース「CSODev」、ファイル「CSOdev_Log」の5ページを処理しました.メッセージ1853、レベル16、状態1、行1
論理データベースファイル「CSOdev_Log」が見つかりません。ファイルの完全パスを指定します。
メッセージ3167、レベル16、状態1、行1
RESTOREはデータベース「CSODev」を開始できませんでした。
メッセージ3013、レベル16、状態1、行1
RESTORE DATABASEが異常終了しています。
データベースは「リカバリー保留」モードになります。ログファイルに問題があるようです。 1つが破損した場合に備えて、2つの異なるバックアップを試しました。
LocalDBには 既知の制限 (実際には実際のバグ)があります。データベースファイルが別のフォルダーにある場合、MOVEを使用したRESTOREは失敗します。
元のフォルダーに復元する必要があります(MOVEは不可)。ドライブを偽造する必要がある場合は、SUBSTなどのcmdツールを使用します。
私も同じ問題を抱えていました。最終的に機能したのは次のとおりです。
最後のステップで起こったことは、SSDTがデータファイルのアップグレードを実行したことです。これは明らかに古い形式でした。それが完了すると、データベースは問題なく動作し始めました!
私も同じ問題を抱えていて、少しオンライン調査を行った後、それを機能させるための独創的な方法を見つけました(かなりハックではありますが)。基本的に、あなたは:
SqlLocalDb c tmp -s
_)を作成します。SqlCmd -E -S <localdb connection string> -Q "RESTORE DATABASE ..."
_)。SqlLocalDb p tmp
_)を停止します。SqlLocalDb d tmp
_)を削除します。SqlLocalDb c persistent -s
_)を作成します。SqlCmd -E -S <persistent connection string> -Q "Create Database <dbname> On (Filename = '<Mdf file location'), (Filename = '<Ldf Filename'>) For Attach"
。そしてうまくいけばそれはうまくいくはずです。オリジナルのアイデアについては こちら を参照してください。
編集:追加 Jason Brady によるcreateコマンドの修正。
データベースをスキーマおよびデータとしてスクリプト化し、ローカルでスクリプトを実行してみてください。
RESTORE FILELISTONLY
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK'
ALTER DATABASE yourdatabasename
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE
RESTORE DATABASE yourdatabasename
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK'
with replace,
move 'logical name from file stream' to
'C:\yourdatabase.mdf',
move 'logical name from file stream' to 'C:\Yourdatabase.ldf'
ALTER DATABASE Qatar_DB SET MULTI_USER
私も同じ問題を抱えていました。管理者としてVisual Studioを実行して、次のコマンドを試してください
RESTORE DATABASE CSODev
FROM DISK = 'C:\MyBckDir\CSODev.bak'
WITH NORECOVERY, MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf',
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf',
PDATE:これは正確に機能しませんでした!
上記のステートメントはエラーを生成せず、正常に完了しますが、データベースは「保留中の回復」状態のままであり、いかなる方法でもアクセスできません。 「RESTORE WITH RECOVER」を実行してデータベースをオンラインにしようとすると、上記の質問と同じエラーが発生しました。
したがって、私の場合、MSSQL 2008 R2で実行しているDEVサーバーにバックアップを復元して、タスク->スクリプトの生成->スクリプトを実行するオブジェクトを選択して次へ-> [詳細設定]ボタンをクリックして、[選択]をクリックします。スクリプト化するデータのタイプ」:スキーマとデータ。次に、生成されたスクリプトをローカルデータベースに対して実行します。
同じ問題、助けてくれてありがとう。私のローカルデータベースはMS SQL 2014です。「SQL Server 2014 Management Studio」を開きます
それは私のために働きます。データベースをバックアップした後、エラーなしでデータベースを復元できます。ありがとう。
次のスクリプトを試してみてください(私が個人的にテストしたadventureworks2012の例):
RESTORE FILELISTONLY
FROM DISK = 'c:\temp\adv2012.bak'
これにより、ファイル名が次のように表示されます。
AdventureWorks2012 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQL2012RTM\MSSQL\DATA\AdventureWorks2012.mdf
AdventureWorks2012_log C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQL2012RTM\MSSQL\DATA\AdventureWorks2012_log.ldf
これらのファイル名を使用して、次のように最終的なスクリプトを作成します。
RESTORE DATABASE AdventureWorks2012
FROM DISK = 'C:\temp\adv2012.bak'
WITH MOVE 'AdventureWorks2012' TO 'C:\cnom_WS\Local-Databases\AdventureWorks\AdventureWorks2012.mdf',
MOVE 'AdventureWorks2012_log' TO 'C:\cnom_WS\Local-Databases\AdventureWorks\AdventureWorks2012_log.ldf',
REPLACE;
ところで、私はこれらをVisual Studio(SQL Server Object Explorer)で実行していますが、これはSSMSで簡単に実行できると思います;-)