Dans SQL Server 2008 R2, j'ai défini les locations de Data
et de Log
sur F:\moved\
en cliquant avec le button droit sur le server dans SQL Server Management Studio et en les définissant.
Toutefois, lorsque je restaure une database à l'aide de sqlcmd
, la database est sqlcmd
dans E:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA
qui semble être l'location par défaut de SQL Server.
J'ai besoin que les bases de données soient toujours restaurées à F:\moved\
à des fins de stockage mais quand j'utilise ce qui suit dans mon script, j'ai parfois une erreur:
RESTORE DATABASE $(database) FROM DISK = '$(root)\$(database).bak' WITH RECOVERY, MOVE '$(database)' TO '$(datadir)$(database).mdf', MOVE '$(database)_log' TO '$(datadir)$(database).ldf' GO
Erreur:
Context de database modifié à 'maître'.
Msg 3234, niveau 16, état 2, server SQL1, ligne 3
Le file logique 'userdb1' ne fait pas partie de la database 'userdb1'. Utilisez RESTORE FILELISTONLY pour répertorier les noms de files logiques.
Msg 3013, niveau 16, état 1, server SQL1, ligne 3
RESTORE DATABASE se termine anormalement.
Est-ce que sqlcmd
peut être forcé de restaurer en F:\moved\
par défaut, sans avoir à le spécifier manuellement comme je l'ai vu ci-dessus pour éviter l'erreur?
Ne pouvez-vous pas simplement définir la variable datadir
dans votre script sqlcmd
?
Quelque chose comme ça:
:setvar datadir F:\moved\ RESTORE DATABASE $(database) FROM DISK = '$(root)\$(database).bak' WITH RECOVERY, MOVE '$(database)' TO '$(datadir)$(database).mdf', MOVE '$(database)_log' TO '$(datadir)$(database).ldf' GO
Avec cette ligne en place, sqlcmd
doit toujours utiliser ce directory (au lieu de SQL Server par défaut)
Ou vous pouvez également définir cette valeur de variable à tout ce que vous voulez sur la command line en sqlcmd
:
C:\> sqlcmd -v datadir=F:\moved\ (script name)