23

SQL Server 2012 Standard データベースを localdb インスタンスにコピーしようとしています。localdb がSQL Server 2005 以降の Express インスタンスではないことを訴えるウィザードを試しました。バックアップ/復元も行いましたが、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

私が得るエラーメッセージ...

データベース 'CSODev'、ファイル 1 のファイル 'CSOdev_Data' の 8752 ページを処理しました。データベース 'CSODev'、ファイル 'CSOdev_Log' のファイル 1
の 5 ページを処理しました。

メッセージ 1853、レベル 16、状態 1、行 1
論理データベース ファイル 'CSOdev_Log' が見つかりません。ファイルのフル パスを指定します。
メッセージ 3167、レベル 16、状態 1、行 1
RESTORE でデータベース 'CSODev' を開始できませんでした。
メッセージ 3013、レベル 16、状態 1、行 1
RESTORE DATABASE が異常終了しています。

データベースは「リカバリ保留中」モードになります。ログファイルに問題があるようです。1 つが破損した場合に備えて、2 つの異なるバックアップを試しました。

4

9 に答える 9

16

There is known limitation (a real bug, in fact) for localDB. It will fail any RESTORE with MOVE whenever your database files are located in different folders.

You have to restore in the original folders (no MOVE). Use cmd tool such as SUBST if you need to fake a drive:/path.

于 2014-04-27T01:45:54.983 に答える
5

私も同じ問題を抱えていました。最終的にうまくいったのはこれでした:

  1. データベースを復元しようとしています (OP でエラーが発生します)
  2. データベースのデタッチ
  3. データベースの再接続

最後のステップで起こったことは、SSDT がデータ ファイルのアップグレードを実行したことでした。これは明らかに古い形式でした。それが完了すると、データベースは問題なく動作し始めました!

于 2013-09-13T17:36:47.560 に答える
4

私は同じ問題を抱えていました.少しオンラインで調査した後、それを機能させるための独創的な方法に出くわしました(かなりハックですが). 基本的に、あなたは:

  1. SqlLocalDb インスタンスを作成します ( SqlLocalDb c tmp -s)。
  2. 上記のようにデータベースを復元します (例: SqlCmd -E -S <localdb connection string> -Q "RESTORE DATABASE ...")。
  3. SqlLocalDb インスタンスを停止します ( SqlLocalDb p tmp)。
  4. SqlLocalDb インスタンスを削除します ( SqlLocalDb d tmp)。
  5. 新しい SqlLocalDb インスタンスを作成します ( SqlLocalDb c persistent -s)。
  6. アタッチして、新しいインスタンスにデータベースを作成します ( SqlCmd -E -S <persistent connection string> -Q "Create Database <dbname> On (Filename = '<Mdf file location'), (Filename = '<Ldf Filename'>) For Attach".

そしてうまくいけば、うまくいくはずです。原案はこちらをご覧ください。

編集: create コマンドのJason Bradyの修正を追加しました。

于 2013-08-11T18:11:38.193 に答える
3

データベースをスキーマとデータとしてスクリプト化し、そのスクリプトをローカルで実行してみてください。

于 2013-07-04T15:48:13.280 に答える
2

同じ問題、助けてくれてありがとう。私のローカル データベースは MS SQL 2014 です。「SQL Server 2014 Management Studio」を開きます。

  1. データベースを右クリックし、[タスク] に移動し、[オフラインにする] をクリックします。
  2. データベースを切り離す
  3. データベースをアタッチする

それは私のために働く。データベースをバックアップした後、エラーなしでデータベースを復元できます。ありがとう。

于 2016-04-27T16:32:10.630 に答える
1

これらのスクリプトを試してください (私が個人的にテストした 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 オブジェクト エクスプローラー) で実行していますが、これは SSMS で簡単に実行できるのではないかと強く思っています ;-)

于 2019-02-15T11:47:07.760 に答える
1

私も同じ問題を抱えていました。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',

更新:これは正確には機能しませんでした!

上記のステートメントはエラーを生成せず、正常に完了しますが、データベースは「PENDING RECOVERY」状態のままで、どのような方法でもアクセスできません。データベースをオンラインにするために「RESTORE WITH RECOVER」を試みたところ、上記の質問と同じエラーが発生しました。

したがって、私の場合、MSSQL 2008 R2で実行しているDEVサーバーにバックアップを復元することになり、次を選択しました:タスク->スクリプトの生成->スクリプトを作成するオブジェクトを選択して次へ->「詳細」ボタンをクリック->「」を選択スクリプトを作成するデータの種類" : スキーマとデータ。生成されたスクリプトをローカル データベースに対して実行します。

于 2013-01-25T11:07:21.283 に答える