Il est indispensable de sauvegarder régulièrement les bases de données SQL. Nous avons déjà couvert les moyens de sauvegarder facilement toutes vos bases de données SQL Server sur un disque dur local, mais cela ne protège pas contre les pannes de disque et / ou du système. En tant que couche supplémentaire de protection contre ce type de sinistre, vous pouvez copier ou créer directement vos sauvegardes sur un partage réseau.
Sauvegarde locale, puis copie sur le partage réseau
Le moyen préféré et le plus direct d’accomplir cette tâche consiste simplement à créer une sauvegarde locale d’une base de données, puis à copier le fichier de sauvegarde correspondant sur un partage réseau. Vous pouvez faire cela en créant un script batch qui ressemble à ceci:
SET LocalFolder=C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLBackup SqlCmd -E -Q “Backup Database MyDB To Disk=’%LocalFolder%MyDB.bak'” XCopy “%LocalFolder%MyDB.bak” “192.168.16.55BackupDatabases” /Z /V DEL “%LocalFolder%MyDB.bak”
Ce script effectue les opérations suivantes (ligne par ligne):
- Définit une variable sur le répertoire de sauvegarde SQL local.
-
Crée une sauvegarde SQL de MyDB (à l'aide de l'authentification Windows) dans le répertoire de sauvegarde SQL local.
- Copie le fichier de sauvegarde local sur un partage réseau.
- Supprime le fichier de sauvegarde local.
Là encore, il s'agit de la méthode préférée, car elle fonctionne immédiatement et la probabilité d'un échec de sauvegarde est minime, car la sauvegarde est créée sur un disque local. Toutefois, si vous ne disposez pas de suffisamment d'espace disque pour stocker des copies locales des fichiers de sauvegarde, cette action échouera. Dans ce cas, vous devrez ajouter de l'espace disque supplémentaire ou effectuer une sauvegarde directement sur un partage réseau.
Sauvegarde directe sur un partage réseau
En règle générale, lorsque vous essayez de créer une sauvegarde directement sur un partage réseau à l'aide d'une commande telle que:
SqlCmd -E -Q “Backup Database MyDB To Disk=’192.168.16.55BackupDatabasesMyDB.bak'”
Vous obtiendrez probablement une erreur du type:
Msg 3201, Level 16, State 1, Server JF, Line 1 Cannot open backup device ‘192.168.16.55BackupDatabasesMyDB.bak’. Operating system error 5(Access is denied.). Msg 3013, Level 16, State 1, Server JF, Line 1 BACKUP DATABASE is terminating abnormally.
Cette erreur se produit malgré le fait que vous ayez exécuté la commande de sauvegarde SQL à l'aide de l'authentification Windows (commutateur -E) et que le compte Windows permette d'accéder aux fichiers et de les copier sur le partage via l'Explorateur Windows.
Sur notre système, la commande de sauvegarde sur un partage réseau échoue car le service SQL Server s'exécute en tant que système local qui, une fois encore, ne peut accéder aux ressources du réseau.
Modifiez les propriétés du service SQL Server et, sous l'onglet Connexion, configurez le service pour qu'il s'exécute sous un autre compte disposant de droits d'accès au réseau.
SqlCmd -E -Q “Backup Database MyDB To Disk=’192.168.16.55BackupDatabasesMyDB.bak'”
Vous devriez voir un message de réussite:
Processed 152 pages for database ‘MyDB’, file ‘MyDB’ on file 1. Processed 2 pages for database ‘MyDB’, file ‘MyDB_log’ on file 1. BACKUP DATABASE successfully processed 154 pages in 0.503 seconds (2.493 MB/sec).
Avec le fichier de sauvegarde maintenant dans le répertoire de partage réseau:
Considérations sur le partage réseau
Il est important de noter que la commande de sauvegarde s'attend à pouvoir se connecter directement au partage réseau sans être invité à fournir des informations d'identification. Le compte sur lequel vous avez configuré le service SQL Server pour qu'il soit exécuté doit avoir une connexion sécurisée avec le partage réseau où les informations d'identification respectives autorisent l'accès, sinon une telle erreur peut se produire:
Msg 3201, Level 16, State 1, Server JF, Line 1 Cannot open backup device ‘192.168.16.55BackupDatabasesMyDB.bak’. Operating system error 1326(Logon failure: unknown user name or bad password.). Msg 3013, Level 16, State 1, Server JF, Line 1 BACKUP DATABASE is terminating abnormally.
Cette erreur indique que le nom d'utilisateur et le mot de passe du compte n'ont pas été acceptés par le partage réseau et que la commande a échoué.
Un autre problème à garder à l'esprit est que la sauvegarde est effectuée directement sur une ressource réseau. Par conséquent, tout problème dans la connexion réseau peut entraîner l'échec de votre sauvegarde. Pour cette raison, vous ne devez sauvegarder que sur des emplacements réseau stables (c’est-à-dire sans doute pas un VPN).
Implications pour la sécurité
Comme indiqué précédemment, il est préférable d’utiliser la méthode de sauvegarde locale, puis de copie sur un partage réseau, car elle vous permet d’exécuter le service SQL en tant que compte disposant uniquement d’un accès au système local.
En exécutant le service en tant que compte alternatif, vous ouvrez la porte à des problèmes de sécurité potentiels. Par exemple, un script SQL illicite pourrait s'exécuter sous le compte alternatif et attaquer les ressources du réseau. En outre, toute modification apportée au compte concerné (modifications / expirations du mot de passe ou suppression / désactivation du compte) empêchera le service SQL Server de démarrer.
Il est important de garder ces points à l'esprit si vous exécutez votre instance SQL Server à l'aide d'un autre compte. Bien que ces précautions ne soient pas arrêtées si les précautions appropriées sont prises, vous devez envisager d'ajouter de l'espace supplémentaire sur le disque dur, puis implémenter la sauvegarde et la copie locales afin de pouvoir exécuter le service SQL à l'aide d'un compte local.