IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Script de sauvegardes


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut Script de sauvegardes
    Bonjour,

    j'essaie de sauvegarder les bases de données hébergées par un serveur SQL Server 2008 (SP3) vers un espace de stockage situé sur un serveur Windows 2012 distant.

    J'ai récupéré des scripts sur différents sites et j'ai finalement ce script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    DECLARE @name VARCHAR(50) -- database name  
    DECLARE @path VARCHAR(256) -- path for backup files  
    DECLARE @fileName VARCHAR(256) -- filename for backup  
    DECLARE @fileDate VARCHAR(20) -- used for file name
     
     
    -- specify database backup directory
    SET @path = '\\serveurdistant\backupdir'  
     
     
    -- specify filename format
    SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 
     
     
    -- delete backups older than 6 days
    EXEC xp_cmdshell 'FORFILES /p 'N:' /s /m *.bak /d -6 /c "CMD /C del /Q /F @FILE"'
     
    DECLARE db_cursor CURSOR FOR  
    SELECT name 
    FROM master.dbo.sysdatabases 
    WHERE name NOT IN ('model','tempdb')  -- exclude these databases
     
     
    OPEN db_cursor   
    FETCH NEXT FROM db_cursor INTO @name   
     
     
    WHILE @@FETCH_STATUS = 0   
    BEGIN   
           SET @fileName = @path + '_' + @name + '_' + @fileDate + '.BAK'  
           PRINT 'BACKUP DATABASE @name TO DISK = [' + @filename + ']'  
     
     
           FETCH NEXT FROM db_cursor INTO @name   
    END   
     
     
    CLOSE db_cursor   
    DEALLOCATE db_cursor




    ( Au départ j'avais des problèmes de droits d'accès au répertoire distant que j'ai réglé en mettant l'administrateur du domaine pour le lancement de SQL Server.
    Puis avec le @filename que j'ai remplacé par [' + @filename + ']'... Ça marche mais je ne comprends rien à cette syntaxe... )
    J'utilise maintenant N: au lieu du nom UNC car FORFILES me rendait une erreur comme quoi il ne gère pas les chemins UNC.
    J'ai un problème du même genre maintenant et j'obtiens ce message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Syntaxe incorrecte vers ' /s /m *.bak /d -6 /c "CMD /C del /Q /F @FILE"'


    J'enlève, j'ajoute des ', des ", des [ etc. mais rien n'y fait... Merci pour votre aide!

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Le problème semble se situer dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC xp_cmdshell 'FORFILES /p 'N:' /s /m *.bak /d -6 /c "CMD /C del /Q /F @FILE"'
    Et plus précisément derrière N:.
    Je ne connais pas la commande que tu cherches à exécuter mais il y a de fortes chances que celle-ci attende que N: soit encadré de guillemets, ce qui n'est pas le cas ici puisque lesdits guillemets sont utilisés pour encadrer la commande...
    Essaye peu-être en échappant les guillemets autour du N: :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC xp_cmdshell 'FORFILES /p \'N:\' /s /m *.bak /d -6 /c "CMD /C del /Q /F @FILE"'
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut
    Merci pour ton aide.
    Avec ta modification, j'ai le même genre d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Syntaxe incorrecte vers '\'.
    Je cherche à supprimer les anciens fichiers de sauvegarde. Mais il y a peut-être plus simple? Un argument dans BACKUP etc.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut
    Si j'enlève les guillemets autour de N: alors le message d'erreur est que le chemin spécifié n'existe pas.
    Si (toujours sans les guillemets) je remplace N par un lecteur local alors ça fonctionne...

    Je ne peux ni utiliser de chemin UNC, ni de lettre de lecteur réseaux? Sans ça, je ne vois pas comment faire pour atteindre le répertoire distant...

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut
    Je me suis débrouillé avec un "WITH INIT" en argument de BACKUP.
    Je laisse ouvert au cas où quelqu'un peut expliquer pour la solution avec FORFILES.

    Merci!

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut
    En fait ça ne marche pas...
    Toujours les problèmes de guillemets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      PRINT 'BACKUP DATABASE [' + @name + '] TO DISK = [' + @filename + ']
    		WITH NOFORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,  STATS = 5'
    Pareil j'ai essayé dans tous les sens sauf celui qu'il faut j'imagine...

    édit: ça a l'air bon avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      PRINT 'BACKUP DATABASE [' + @name + '] TO DISK = ''[' + @filename + ']''
    		WITH NOFORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,  STATS = 5'

    Ce qui ne va pas maintenant c'est le chemin Il pointe vers C:\program files...

    édit 2 : Ça marche si je copie-colle le contenu du "PRINT" avec 3 ' ... et en virant les crochets...
    Si j'enlève le "PRINT" et utilise le script tel quel, ça me rend une erreur sur le nom de la base après BACKUP DATABASE sûrement à cause des crochets... Et si je les enlève ça ne passe pas non plus...

Discussions similaires

  1. Script pour sauvegarde OVH
    Par d10g3n dans le forum Linux
    Réponses: 6
    Dernier message: 18/12/2006, 16h09
  2. Shell script de sauvegarde
    Par marza dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 22/11/2006, 22h32
  3. Script de sauvegarde FTP
    Par goldorax113 dans le forum Développement
    Réponses: 5
    Dernier message: 09/11/2006, 11h08
  4. Script de sauvegarde sous REDHAT 7.3
    Par florfilla18 dans le forum Linux
    Réponses: 12
    Dernier message: 22/08/2006, 17h03
  5. erreur sur script de sauvegarde
    Par zouetchou dans le forum Langage
    Réponses: 5
    Dernier message: 08/12/2005, 08h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo