Puis-je avoir des sauvegardes complètes sur plusieurs disques?


8

Actuellement, je n'ai qu'un seul fichier de sauvegarde, IMTDB.bak, et il se trouve sur le même disque dur que la base de données elle-même. Je souhaite augmenter la redondance de cette sauvegarde de base de données en la "copiant" essentiellement sur un autre disque, mais j'obtiens le message d'erreur "La sauvegarde a échoué pour le serveur, le support est formaté pour prendre en charge 2 familles de supports". Je pense que cela signifie que lorsque j'ai créé la sauvegarde, elle est uniquement destinée à mettre la sauvegarde sur un lecteur, et je ne peux pas en ajouter plus rétroactivement. Je veux migrer la sauvegarde vers cet autre lecteur (vraiment juste la copier), mais je ne veux pas avoir à supprimer la sauvegarde actuelle pour le faire.

Que fais-je? Suis-je en sécurité en copiant simplement IMTDB.bak dans un dossier sur l'autre lecteur?


sûr. L'utilisation de l'explorateur pour copier le fichier d'un emplacement à un autre n'est pas du tout un problème. Vous voudrez peut-être envisager d'automatiser le processus, peut-être avec le planificateur Windows.
Max Vernon

Où / comment voyez-vous cette erreur: "La sauvegarde a échoué pour le serveur, le média est formaté pour prendre en charge 2 familles de médias"
Max Vernon

Lorsque vous accédez à Tâches -> Sauvegarder et essayez de faire "Ajouter" et de sélectionner le disque que j'ai.
ijustlovemath

L'ajout d'un autre disque étendra simplement la sauvegarde sur plusieurs disques, réduisant encore la fiabilité du fichier de sauvegarde, car si l'un des deux disques tombe en panne, le fichier de sauvegarde sera inutilisable. Faites comme @Kin le suggère dans sa réponse et utilisez la BACKUP DATABASEcommande T-SQL pour sauvegarder simultanément sur deux emplacements.
Max Vernon

Réponses:


12

Puisque vous n'êtes pas familier avec la BACKUP DATABASEcommande T-SQL , j'ai pensé ajouter quelques détails à ce sujet.

Vous souhaitez probablement exécuter quelque chose dans le sens de l'instruction suivante via le service Planificateur de tâches de Windows, car vous n'avez pas accès à l'Agent SQL Server (je vois dans vos autres questions que vous utilisez SQL Server Express).

BACKUP DATABASE [xyz]
TO DISK = 'C:\somepath\mybackupfile.bak'
MIRROR TO DISK = 'D:\somepath\myotherbackupfile.bak'
WITH FORMAT
    , INIT
    , SKIP
    , STATS = 1;

Vous voudrez peut-être sérieusement envisager de faire MIRROR TOpointer la clause vers un emplacement qui ne se trouve pas sur votre ordinateur local, car si vous perdez complètement votre ordinateur local, vous ne pourrez peut-être pas accéder à l'un ou l'autre des fichiers de sauvegarde. La spécification d'une MIRROR TOclause vous oblige à spécifier le FORMATmot - clé dans la WITHclause la première fois que vous exécutez cette instruction de sauvegarde.

Vous pouvez utiliser le nom d'un partage Windows, par exemple \\SomeServer\SQLBackups\MyBackupFile.baktant que les autorisations de sécurité sur le partage autorisent l'accès au service Planificateur Windows.

La WITH FORMAT, INITpartie indique à SQL Server d'écraser toutes les sauvegardes existantes qui peuvent être dans les fichiers de sauvegarde. Vous pouvez changer cela en WITH NOINITune fois que vous avez terminé la première sauvegarde en miroir si vous souhaitez que plusieurs sauvegardes (c'est-à-dire des sauvegardes à différents moments) soient enregistrées dans ces fichiers. NOSKIPindique à SQL Server de ne pas vérifier l'expiration de la sauvegarde, entre autres. STATS = 1affichera la sortie par 1incréments de pourcentage. Vous pouvez changer ce nombre en ce que vous voulez. J'utilise 1pour des bases de données très volumineuses car cela donne des indications de progrès.

Pour que cela s'exécute via le service Planificateur de tâches de Windows, vous devrez enregistrer cette commande (une fois que vous l'avez testée dans SQL Server Management Studio) dans un fichier sur votre disque; appelons cela C:\somefolder\BackupMyDB.sql. Vous souhaiterez ensuite ajouter la commande suivante au planificateur Windows:

<path to sqlcmd>sqlcmd -S localhost -E -i C:\somefolder\BackupMyDB.sql

Vous voudrez que cette tâche "s'exécute en tant que" vous.

Une fois que vous avez fait tout cela, vous voulez sérieusement envisager de tenter de restaurer la sauvegarde sur une autre machine afin de comprendre comment le faire. Les sauvegardes ne sont qu'une partie d'un plan de reprise après sinistre; la partie sans doute la plus importante est de tester ce plan.

Le processus de restauration utiliserait une commande comme:

RESTORE DATABASE [xyz]
FROM DISK = 'D:\somepath\myotherbackupfile.bak'
WITH RECOVERY
    , STATS = 1;

Soyez averti, l'exécution RESTORE DATABASEsur la machine où réside votre base de données actuelle peut remplacer la base de données actuelle sans confirmation ni avertissement, alors assurez-vous d'évaluer soigneusement le nom de la base de données, [xyz]dans mon exemple, et les autres options que vous utilisez. (Cela n'écrasera pas la base de données existante à moins que vous n'ajoutiez le REPLACEmot - clé à la WITHclause - je veux juste souligner la prudence.)


Merci! Étant donné que mon fichier .bak contient déjà des sauvegardes, le miroir créé comprendra-t-il automatiquement ces sauvegardes? Ou tout simplement le plus récent?
ijustlovemath

Je suggère de déplacer ce fichier quelque part si vous souhaitez le conserver, car MIRRORvous devez formater le fichier de sauvegarde la première fois que vous l'utilisez, ce qui supprimera toutes les sauvegardes contenues dans ce fichier.
Max Vernon

1
Merci encore pour le détail de votre message. Vraiment utile à un débutant sans aucune autre ressource!
ijustlovemath

mon plaisir. Je ne saurais trop insister sur l'importance d'une stratégie de sauvegarde et de restauration testée et fiable . J'ai recommandé de tester la restauration sur une autre machine afin que vous n'ayez pas la possibilité d'encombrer votre base de données existante, ce qui est facile à faire lorsque vous apprenez.
Max Vernon

5

Vous pouvez utiliser backup database .... MIRROR TO DISK =pour sauvegarder la base de données vers un emplacement supplémentaire.

Suis-je en sécurité en copiant simplement IMTDB.bak dans un dossier sur l'autre lecteur?

Oui, vous pouvez le faire une fois la sauvegarde terminée.

Remarque: assurez-vous que vous utilisez T-SQL par opposition à GUI qui a limité les options de sauvegarde exposées.


Quelles sont les options recommandées ici? Ma base de données est très simple, seulement quatre tables, dont trois n'ont que 90 000 lignes, la quatrième ayant ~ 75M. C'est aussi une taille fixe; aucune autre donnée ne lui sera ajoutée. Je ne lancerai que des requêtes contre lui.
ijustlovemath

5
Je vous suggère de mettre votre base de données en read_onlymode et de prendre juste une dernière sauvegarde avec COMPRESSION. Conservez-le dans un endroit sûr.
Kin Shah
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.