Bonjour,
je souhaite automatiser le déploiement de la base de donnée
Je suppose donc que vous avez une base de données existante.
Vous avez dans ce cas deux options :
- restaurer une sauvegarde de la base de données (plus long mais plus sûr)
- détacher la base de données de son instance de développement, copier les fichiers de la base de données, puis rattacher la base de données chez le client (très rapide mais peu sécurisé).
Dans tous les cas vous pouvez faire cela à l'aide de l'utilitaire SQLCMD :
- dans le premier cas à l'aide de l'instruction RESTORE
- dans le second cas à l'aide de la procédure stockée sp_attach_db
Pour la restauration de la sauvegarde :
sur l'instance SQL Server qui héberge actuellement votre base de données :
1 2 3 4
| -- Sauvegarde
BACKUP DATABASE maBaseDeDonnees
TO DISK = 'C:\mabaseDeDonnesPourClient.bak'
WITH COMPRESSION, CHECKSUM, COPY_ONLY, STATS = 5 |
Et sur la machine du client :
1 2 3 4 5
| RESTORE DATABASE maBaseDeDonnees
FROM DISK = 'F:\mabaseDeDonnesPourClient.bak'
WITH MOVE 'nomLogiqueFicherDonnees' TO 'C:\monFichierDonnees.MDF'
, MOVE 'nomLogiqueFicherJournalDesTransactions' TO 'C:\monFichierJournalDesTransactions.LDF'
, STATS = 5 |
Les noms de fichiers logiques s'obtiennent :
- quand la base de données est en ligne :
1 2 3
| SELECT name AS nomFichierLogique
, type_desc
FROM maBaseDeDonnees.sys.database_files |
- à partir du fichier de sauvegarde :
1 2
| RESTORE FILELISTONLY
FROM DISK = 'C:\mabaseDeDonnesPourClient.bak' |
Vous pouvez appeler l'utilitaire SQLCMD à partir d'un batch DOS en passant en paramètre le nom du fichier de script SQL qui contiendrait l'instruction précédente :
SQLCMD -S nomServeur[\nomInstance] -U utilisateur -P motDePasse -i monFichierRestaurationBD.sql
Vous pouvez faire de même avec sp_attach_db
@++
Partager