Je cherche à copier une base de données SQL Server 2012 Standard sur mon instance localdb. J'ai essayé l'assistant qui se plaint que localdb n'est pas une SQL Server 2005 ou une instance plus récente de Express . J'ai également effectué une sauvegarde/restauration mais lors de la restauration dans ma localdb, l'erreur suivante s'affiche:.
En cours d'exécution ...
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
Message d'erreur que je reçois ...
8752 pages traitées pour la base de données 'CSODev', fichier 'CSOdev_Data' sur le fichier 1.
Traité 5 pages pour la base de données 'CSODev', fichier 'CSOdev_Log' du fichier 1.Msg 1853, niveau 16, état 1, ligne 1
Le fichier de base de données logique 'CSOdev_Log' est introuvable. Spécifiez le chemin complet du fichier.
Msg 3167, Niveau 16, Etat 1, Ligne 1
RESTORE n'a pas pu démarrer la base de données 'CSODev'.
Msg 3013, niveau 16, état 1, ligne 1
RESTORE DATABASE se termine de manière anormale.
La base de données se termine en mode "Récupération en attente". Il semble que le fichier journal pose des problèmes. J'ai essayé 2 sauvegardes différentes au cas où l'une d'entre elles serait simplement corrompue.
Il y a limitation connue (un vrai bogue, en fait) pour localDB. Toute restauration avec MOVE échouera si vos fichiers de base de données sont situés dans des dossiers différents.
Vous devez restaurer dans les dossiers d'origine (pas MOVE). Utilisez l'outil cmd tel que SUBST si vous devez simuler un lecteur:/chemin.
J'ai eu le même problème. Ce qui a finalement fonctionné était le suivant:
Lors de la dernière étape, SSDT a mis à niveau les fichiers de données, apparemment dans un format plus ancien. Quand cela a été fini, la base de données a commencé à fonctionner sans problème!
J'avais le même problème et après avoir fait une petite recherche en ligne, j'ai trouvé un moyen ingénieux de le faire fonctionner (bien que tout à fait hacky). En gros, vous:
SqlLocalDb c tmp -s
).SqlCmd -E -S <localdb connection string> -Q "RESTORE DATABASE ..."
).SqlLocalDb p tmp
).SqlLocalDb d tmp
).SqlLocalDb c persistent -s
).SqlCmd -E -S <persistent connection string> -Q "Create Database <dbname> On (Filename = '<Mdf file location'), (Filename = '<Ldf Filename'>) For Attach"
.Et j'espère que cela devrait fonctionner. Voir ici pour l'idée originale.
Edit: Added Jason Brady 'correction de la commande create.
Essayez d’écrire votre base de données sous forme de schéma et de données, puis d’exécuter le script localement.
RESTORE FILELISTONLY
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK'
ALTER DATABASE yourdatabasename
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE
RESTORE DATABASE yourdatabasename
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK'
with replace,
move 'logical name from file stream' to
'C:\yourdatabase.mdf',
move 'logical name from file stream' to 'C:\Yourdatabase.ldf'
ALTER DATABASE Qatar_DB SET MULTI_USER
J'ai eu le même problème. Essayez d’exécuter Visual Studio en tant qu’administrateur et essayez la commande suivante
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',
MISE À JOUR: Cela n'a pas fonctionné exactement!
Bien que l'instruction ci-dessus ne génère aucune erreur et se termine correctement, la base de données reste à l'état "PENDING RECOVERY" et n'est accessible d'aucune façon. Lorsque j'ai essayé de "RESTORE WITH RECOVER" pour mettre la base de données en ligne, j'ai eu la même erreur que dans la question ci-dessus.
Donc, dans mon cas, j'ai fini par restaurer la sauvegarde sur un serveur DEV que j'ai exécuté avec MSSQL 2008 R2, puis choisi: Tâches -> Générer des scripts -> choisi des objets dans le script & Suivant -> cliquez sur le bouton "Avancé" -> sélectionnez " types de données au script ": Schéma et données. Exécutez maintenant le script généré sur la base de données locale.
Même problème, merci pour l'aide. Ma base de données locale est MS SQL 2014. Ouvrir "SQL Server 2014 Management Studio"
Cela fonctionne pour moi. Après avoir sauvegardé la base de données, vous pouvez restaurer la base de données sans erreur. Merci.
Essayez ces scripts (par exemple avec adventureworks2012 que j’ai personnellement testé):
RESTORE FILELISTONLY
FROM DISK = 'c:\temp\adv2012.bak'
Cela fera apparaître les noms de fichiers comme:
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
Utilisez ces noms de fichiers pour structurer votre script final de la manière suivante:
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;
BTW, je les exécute via Visual Studio (Explorateur d’objets SQL Server), mais j’imagine fort que cela pourrait s’exécuter facilement sur SSMS ;-)