web-dev-qa-db-ja.com

bakファイルからデータベースSQLサーバーを復元するスクリプトが機能しない

空のデータベースがあります:

DB_Clients

そして、.bakファイルからデータベースを復元したい:

OldDBClients.bak

これがパスです:

C:\OldDBClients.bak

そして、これは私のスクリプトです:

USE [master]
GO
    RESTORE DATABASE DB_Clients
    FROM DISK = 'C:\OldDBClients.bak'

実行すると、次のエラーメッセージが表示されます。

メッセージ3154、レベル16、状態4、行15
バックアップセットは、既存の「DB_Clients」データベース以外のデータベースのバックアップを保持します。
メッセージ3013、レベル16、状態1、行15
RESTORE DATABASEは異常終了しています。

誰かがこれがなぜ起こるのか教えてもらえますか?ファイルには読み取りと書き込みのアクセス許可があることを指摘する必要があります。

ありがとう。

17
Esraa_92

既存のデータベースを上書きするには、WITH REPLACEオプションを使用する必要があります。

RESTORE DATABASE DB_Clients
FROM DISK = 'C:\OldDBClients.bak'
WITH REPLACE

おそらく、WITH MOVEオプションも指定する必要があります。この場合:

  • RESTORE FILELISTONLY FROM DISK = 'C:\OldDBClients.bak'を使用して、MDF/LDFの論理名を確認します
  • rESTOREでWITH MOVEオプションを使用します

例えば:

RESTORE DATABASE DB_Clients
FROM DISK = 'C:\OldDBClients.bak'
WITH REPLACE,
MOVE 'YourMDFLogicalName' TO '<MDF file path>',
MOVE 'YourLDFLogicalName' TO '<LDF file path>'

空のDB_ClientsデータベースにDROPして、簡単なRESTOREを使用することもできます。

19
tezzo

この構文は次のとおりです。

USE [master]
GO
RESTORE DATABASE DB_Clients FROM DISK = 'C:\OldDBClients.bak' WITH 
MOVE 'DB_Clients' TO 'D:\SQLServer\Data\DB_Clients.mdf',
MOVE 'DB_Clients_log' TO 'D:\SQLServer\Log\DB_Clients.ldf', REPLACE

既存のコピーを上書きするようにSQL Serverに指示し、データファイルとログファイルの有効な場所を指定します

10
Jaco