23

同じインスタンスにコピーを作成したい SQL2005 Express データベースがあります。スクリプトでこれを行うにはどうすればよいですか?

バックアップを生成するためのスクリプトは既にありますが、復元に失敗しています...

エラー:

メッセージ 3234、レベル 16、状態 2、行 2 論理ファイル 'MyDB_data' はデータベース 'MyDB_Test' の一部ではありません。論理ファイル名を一覧表示するには、RESTORE FILELISTONLY を使用します。
メッセージ 3013、レベル 16、状態 1、行 2 RESTORE DATABASE が異常終了しています。

解決策:

RESTORE DATABASE [MyDB_Test]
FROM DISK = 'C:\temp\SQL\MyDB.bak'
WITH
MOVE 'MyDB' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test.mdf'
, MOVE 'MyDB_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test_log.ldf'
, REPLACE;

理由:
最初の試行で論理パスを正しく識別できませんでした。

4

3 に答える 3

42

RESTORE FILELISTONLY は情報コマンドであり、復元を実行する必要はありません。ユーザーはこれを使用して、データ ファイルの論理名を把握できます。これをMOVEコマンドで使用して、データベースを新しい場所に復元できます。

RESTORE FILELISTONLYエラーメッセージで示唆されているように、データベースの論理名を確認するために使用する必要があります。復元コマンドにはこれらの問題があります。

これはあなたがする必要があることの実例です:

--backup the database
backup database test1 to disk='c:\test1_full.bak'

-- use the filelistonly command to work out  what the logical names 
-- are to use in the MOVE commands.  the logical name needs to
-- stay the same, the physical name can change
restore filelistonly from disk='c:\test1_full.bak'
 --------------------------------------------------
|  LogicalName  |           PhysicalName           |
 --------------------------------------------------
| test1         | C:\mssql\data\test1.mdf          |
| test1_log     | C:\mssql\data\test1_log.ldf      |
 -------------------------------------------------

restore database test2 from disk='c:\test1_full.bak'
with move 'test1' to 'C:\mssql\data\test2.mdf',
move 'test1_log' to 'C:\mssql\data\test2.ldf'
于 2009-09-01T05:26:04.503 に答える
6

方法: データベースを新しい場所と名前に復元する (Transact-SQL)

于 2009-09-01T04:38:32.477 に答える
0

いくつかの代替手段を次に示します。

データベース復元 (.BAK から) ソフトウェア::

1) SqlRestoreSetup

2) アペックス SQL リストア

于 2014-07-23T14:00:11.890 に答える