同じインスタンスにコピーを作成したいSQL2005Expressデータベースがあります。スクリプトを使用してこれをどのように実行しますか?
バックアップを生成するためのスクリプトはすでにありますが、復元が失敗しています...
エラー:
メッセージ3234、レベル16、状態2、行2論理ファイル「MyDB_data」はデータベース「MyDB_Test」の一部ではありません。 RESTORE FILELISTONLYを使用して、論理ファイル名をリストします。
メッセージ3013、レベル16、状態1、行2 RESTOREDATABASEが異常終了しています。
解決策:
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;
理由:
最初の試行で論理パスを正しく識別できませんでした。
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'