web-dev-qa-db-fra.com

script pour restaurer le serveur SQL de base de données à partir du fichier bak, ne fonctionne pas

J'ai une base de données vide:

DB_Clients

Et je veux restaurer la base de données à partir d'un .bak fichier:

OldDBClients.bak

Voici le chemin:

C:\OldDBClients.bak

Et voici mon script:

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

Lorsque je l'exécute, j'obtiens ce message d'erreur:

Msg 3154, niveau 16, état 4, ligne 15
Le jeu de sauvegarde contient une sauvegarde d'une base de données autre que la base de données 'DB_Clients' existante.
Msg 3013, niveau 16, état 1, ligne 15
RESTORE DATABASE se termine anormalement.

Quelqu'un peut-il me dire pourquoi cela se produit? Je dois souligner que le fichier a les autorisations de lecture et d'écriture.

Merci.

17
Esraa_92

Vous devez utiliser WITH REPLACE option pour écraser la base de données existante.

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

Vous devrez probablement également spécifier WITH MOVE options; dans ce cas:

  • utilisation RESTORE FILELISTONLY FROM DISK = 'C:\OldDBClients.bak' pour connaître le nom logique de votre MDF/LDF
  • utilisation WITH MOVE options dans votre RESTORE

Par exemple:

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

Veuillez noter que vous pouvez également DROP votre vide DB_Clients base de données et utilisez un simple RESTORE.

19
tezzo

Vous devez cette syntaxe:

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

Il demande à SQL Server d'écraser la copie existante et spécifie un emplacement valide pour vos données et fichiers journaux

10
Jaco