Sébastien Pertus
Sql Server : Six façons d’administrer son serveur SQL Server
Comment administrer un serveur SQL SERVER en utilisant des scripts sql, la console de management SQL SERVER, le framework ADO.NET, le SDK SMO (Sql Management Objects), l’outil en ligne de commandes SQL CMD et enfin PowerShell.
Par Sébastien Pertus publié le 31/05/2009 à 22:28, lu 1704 fois, 7 pages
 5 | SqlCmd
Nous sortons de la juridiction du développeur pour nous orienter maintenant vers un outil dédié et conçu plus particulièrement pour les administrateurs systèmes : SqlCmd.
SqlCmd est un outil en ligne de commandes permettant d’exécuter des ordres Transact-SQL sur un serveur SQL SERVER donné. Il nécessite donc des connaissances du langage SQL.
SqlCmd permet en outre d’exécuter des scripts SQL présents dans un fichier, passé en arguments.
Il existe donc deux méthodes pour exécuter un backup via SqlCmd :
  • Exécuter l’ensemble des commandes directement depuis la console SqlCmd
  • Lancer l’exécution d’un fichier SQL contenant les instructions de sauvegarde depuis SqlCmd.
Note : Avant de poursuivre, Il vous ait fortement conseillé de faire un petit tour de l’aide via la commande SqlCmd / ?
Voici les principaux arguments que nous utiliserons pour la suite :
  • -S : Nom du serveur auquel se connecter.
  • -E : Connexion approuvée (mode Authentification Windows)
  • -i : Fichier SQL d’entrée.
  • -o : Fichier résultat de sortie.
-v var : Ajout d’une variable de script SqlCmd.
L’utilitaire SqlCmd se lance depuis une console DOS. La connexion à un serveur SQL se fasse via la commande :

SqlCmd –S «(local)\SQL2008 » -E

Nous sommes connectés à notre serveur et nous pouvons maintenant exécuter directement du code SQL.
Par exemple lister les bases de données de notre instance :

Select top 5 database_id, name from sys.databases

Résultat en image dans notre console SqlCmd :
 
/content/dbe53563-69de-4c92-9e8a-f1033fe789c2/image9.png
 
Maintenant, la réalisation de la sauvegarde de notre base de données :

BACKUP DATABASE [PerfSamples]

TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\Backup\PerfSampleBackup.bak'

WITH NOFORMAT, NOINITNAME = N'PerfSamples-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO

Le résultat de l’opération :
 
/content/dbe53563-69de-4c92-9e8a-f1033fe789c2/image10.png
 
Nous pouvons très bien imaginer un administrateur système préparait un script SQL, sauvegardé dans un fichier .SQL et demander à exécuter ce script directement depuis SqlCmd.
Pour ce faire, nous reprenons notre script, enregistré dans un fichier backupbdd.sql et stocké quelque part sur le disque dur (la racine C:\ ici pour des raisons de simplicité de l’exemple)
L’exécution du script contenu dans le fichier .sql s’effectue via la commande :

SqlCmd -S "(local)\sql2008" -E -i "c:\BackupBdd.sql" -o "c:\backupbdd.sql.txt"

Le script SQL va être effectué et le résultat de son exécution stocké dans le fichier nommé "backupbdd.sql.txt".
SqlCmd n’ayant rien à afficher dans la console, celle-ci ne renvoie rien de particulier :
 
/content/dbe53563-69de-4c92-9e8a-f1033fe789c2/image11.png
 
Le fichier résultat contient les lignes suivantes :

Processed 248 pages for database 'PerfSamples', file 'PerfSamples' on file 5.

Processed 1 pages for database 'PerfSamples', file 'PerfSamples_log' on file 5.

BACKUP DATABASE successfully processed 249 pages in 0.249 seconds (7.812 MB/sec).

SqlCmd permet d’aller plus loin dans la personnalisation et propose un mécanisme simple d’ajout de variables.
Il devient aisé alors de créer un fichier SQL, indépendant de la base de données à sauvegarder, dont le nom serait passé en paramètre lors de l’exécution du script !
  • Dans le script SQL à exécuter les variables sont déclarées en entête via la commande :setvar DataBaseName=PerfSamples
  • Ou directement depuis la ligne de commande via l’argument –v DataBaseName=PerfSamples
Les variables sont ensuite utilisées dans le code via sous forme $(maVariable).
Notre script Sql devient alors :

BACKUP DATABASE [$(DataBaseName)]

TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\Backup\$(DataBaseName)Backup.bak'

WITH NOFORMAT, NOINITNAME = N'$(DataBaseName)-Full Database Backup'

Note : Attention, à partir de maintenant, notre fichier script ne peut être appelé uniquement que depuis une commande SqlCmd. Il n’est plus possible d’exécuter directement le script depuis la console SQL SERVER.
L’appel du fichier à exécuter depuis SqlCmd est identique au précédent si ce n’est le rajout du nom de la base de données à sauvegarder :
Pour l’exemple, nous créons la sauvegarde des bases de données master et Perfsamples :
 
/content/dbe53563-69de-4c92-9e8a-f1033fe789c2/image12.png
 
 
» Démarrer une discussion