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 :

[sql2005] pblm script sauvegarde


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut [sql2005] pblm script sauvegarde
    Bonjour,

    Suite à un problème de place pour les sauvegardes , je mets en place un job qui liste l'ensemble des bases et ensuite fait la sauvegarde et la compression des bases.

    Cependant je ne sais pas pourquoi la sauvegarde et la compression ne se fait pas pour toutes les bases (seulement 10 sur 240).
    je n'ai pas de message d'erreur et tous semble s'exécuter normalement

    ce que je ne comprend c'est que lorsque je remplace les traitements dans les if part des print @nom_base , il m'affiche bien le nom de toutes les bases


    Ci dessous le code .

    une idée ?

    Cordialement,


    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    -- déclaration variable
    Declare @nom_base varchar(255),
    		@FileName varchar(255),
    		@backup varchar(255),
    		@CMD varchar(255),
    		@File_Exists int;
     
    --recupération de la liste des bases
     
     
    declare curseur_liste_base cursor for select [name] from sys.databases where  sys.databases.name != 'tempdb' ;
    Open curseur_liste_base
    while (1=1) 
    	BEGIN ;
     
    --parcours de la liste des bases 
    		Fetch next from curseur_liste_base into @nom_base; 
    	    IF @@FETCH_STATUS < 0 BREAK;
     
    		SELECT @FileName='D:\Backup\'+ @nom_base 
    		SET @backup= @FileName + '\' + @nom_base + REPLACE(REPLACE(REPLACE(CONVERT(CHAR(16),CURRENT_TIMESTAMP, 120), '-', ''), ' ', ''), ':', '') + '.bak' --chemin + nom sauvegarde
     
     
     
     
    		EXEC Master.dbo.xp_fileexist @FileName, @File_Exists OUT  --test de l'existance du recpertoite de sauvegarde 	
    		IF @File_Exists = 1 --si exite  sauvegarde 
    			Begin
    				BACKUP DATABASE @nom_base TO DISK = @backup WITH NOFORMAT, NOINIT,  NAME = @nom_base,  STATS = 10 
    				SET @CMD = 'C:\WINDOWS\system32\gzip ' + @backup -- compression 
    				EXEC xp_cmdshell @CMD 
     
    			END
    		Else -- si n'existe pas 
    			Begin 
    				SET @CMD = 'MD '+ @FileName -- creation du repertoire 
    				EXEC xp_cmdshell @CMD 
    				BACKUP DATABASE @nom_base TO DISK = @backup WITH NOFORMAT, NOINIT,  NAME = @nom_base, SKIP, NOREWIND, NOUNLOAD,  STATS = 10 
    				SET @CMD = 'C:\WINDOWS\system32\gzip ' + @backup --compression 
    				EXEC xp_cmdshell @CMD		
     
    			END
     
        END;
     
    -- Close and deallocate the cursor.
    CLOSE curseur_liste_base;
    DEALLOCATE curseur_liste_base;

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    - Il faudrait ajouter ... and state_desc = 'ONLINE' dans le curseur, ça évitera d'essayer de backuper des bases offline ou restoring.
    - Au lieu de faire une boucle infinie avec un break, tester le statut de @@fetch_status directement dans le while():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    declare curseur_liste_base cursor FOR SELECT [name] FROM sys.DATABASES WHERE  sys.DATABASES.name <> 'tempdb' and state_desc = 'ONLINE';
    Open curseur_liste_base
    Fetch next FROM curseur_liste_base INTO @nom_base; 
     
    while (@@FETCH_STATUS = 0) 
    	BEGIN ;
     
    --parcours de la liste des bases 
    		Fetch next FROM curseur_liste_base INTO @nom_base; 
    (...)
    etc

  3. #3
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Citation Envoyé par dbaffaleuf Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT [name] FROM sys.DATABASES WHERE  sys.DATABASES.name != 'tempdb' ;
    Noter au passage que l'opérateur != n'est pas du SQL !
    Par contre <> l'est !
    Etienne ZINZINDOHOUE
    Billets-Articles

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    @etienne c'est corrigé thx

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut
    Bonjour,

    Merci pour les info.

    j' ai donc modifié le script avec vos recommandations mais toujours sans résultats.

    ci dessous le code avec l'ajout de quelques print pour mieux comprendre :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    -- déclaration variable
    Declare @nom_base varchar(255),
    		@FileName varchar(500),
    		@backup varchar(500),
    		@CMD varchar(500),
    		@File_Exists int;
     
    --recupération de la liste des bases
     
    declare curseur_liste_base cursor FOR SELECT [name] FROM sys.DATABASES WHERE  sys.DATABASES.name <> 'tempdb' AND state_desc = 'ONLINE';
     
    Open curseur_liste_base
    Fetch next FROM curseur_liste_base INTO @nom_base; 
     
    while (@@FETCH_STATUS = 0) 
    	BEGIN ;
     
    --parcours de la liste des bases 
     
    		Fetch next FROM curseur_liste_base INTO @nom_base; 
     
    		SELECT @FileName='D:\Backup\'+ @nom_base 
    		SET @backup= @FileName + '\' + @nom_base + REPLACE(REPLACE(REPLACE(CONVERT(CHAR(16),CURRENT_TIMESTAMP, 120), '-', ''), ' ', ''), ':', '') + '.bak' --chemin + nom sauvegarde
    		print @nom_base
    		print @FileName
    		print @backup
    		print '==================='
     
     
    		EXEC Master.dbo.xp_fileexist @FileName, @File_Exists OUT  --test de l'existance du recpertoite de sauvegarde 	
    		IF @File_Exists = 1 --si exite  sauvegarde 
    			Begin
    				print @backup
    				BACKUP DATABASE @nom_base TO DISK = @backup WITH NOFORMAT, NOINIT,  NAME = @nom_base, SKIP, NOREWIND, NOUNLOAD,  STATS = 10 
    				SET @CMD = 'C:\WINDOWS\system32\gzip ' + @backup -- compression 
    				EXEC xp_cmdshell @CMD 
     
    			END
    		Else -- si n'existe pas 
    			Begin 
    				print @backup
    				SET @CMD = 'MD '+ @FileName -- creation du repertoire 
    				EXEC xp_cmdshell @CMD 
    				BACKUP DATABASE @nom_base TO DISK = @backup WITH NOFORMAT, NOINIT,  NAME = @nom_base, SKIP, NOREWIND, NOUNLOAD,  STATS = 10 
    				SET @CMD = 'C:\WINDOWS\system32\gzip ' + @backup --compression 
    				EXEC xp_cmdshell @CMD		
     
    			END
     
        END;
     
    -- Close and deallocate the cursor.
    CLOSE curseur_liste_base;
    DEALLOCATE curseur_liste_base;


    ci dessous le résultat des message affiché :

    (1 row(s) affected)
    BDD_CMS01
    D:\Backup\BDD_CMS01
    D:\Backup\BDD_CMS01\BDD_CMS01201206081417.bak
    ===================

    (1 row(s) affected)
    D:\Backup\BDD_CMS01\BDD_CMS01201206081417.bak

    (2 row(s) affected)
    Processed 422832 pages for database 'BDD_CMS01', file 'BDD_CMS01' on file 1.
    100 percent processed.
    Processed 2 pages for database 'BDD_CMS01', file 'BDD_CMS01_log' on file 1.
    BACKUP DATABASE successfully processed 422834 pages in 555.032 seconds (6.240 MB/sec).

    (1 row(s) affected)
    BDD_CMS02
    D:\Backup\BDD_CMS02
    D:\Backup\BDD_CMS02\BDD_CMS02201206081435.bak
    ===================

    (1 row(s) affected)
    D:\Backup\BDD_CMS02\BDD_CMS02201206081435.bak

    (2 row(s) affected)
    Processed 438680 pages for database 'BDD_CMS02', file 'BDD_CMS02' on file 1.
    100 percent processed.
    Processed 2 pages for database 'BDD_CMS02', file 'BDD_CMS02_log' on file 1.
    BACKUP DATABASE successfully processed 438682 pages in 542.796 seconds (6.620 MB/sec).

    (1 row(s) affected)
    BDD_CMS03
    D:\Backup\BDD_CMS03
    D:\Backup\BDD_CMS03\BDD_CMS03201206081452.bak
    ===================

    (1 row(s) affected)
    D:\Backup\BDD_CMS03\BDD_CMS03201206081452.bak

    (2 row(s) affected)
    Processed 654024 pages for database 'BDD_CMS03', file 'BDD_CMS03' on file 1.
    100 percent processed.
    Processed 2 pages for database 'BDD_CMS03', file 'BDD_CMS03_log' on file 1.
    BACKUP DATABASE successfully processed 654026 pages in 854.211 seconds (6.272 MB/sec).

    (1 row(s) affected)

    D:\Backup\
    D:\Backup\ \ 201206081519.bak
    ===================

    (1 row(s) affected)
    D:\Backup\ \ 201206081519.bak

    Msg 911, Level 16, State 11, Line 44
    Could not locate entry in sysdatabases for database ' '. No entry found with that name. Make sure that the name is entered correctly.
    Msg 3013, Level 16, State 1, Line 44
    BACKUP DATABASE is terminating abnormally.
    On constate qu'il y à problème avec le nom de la base qui ne ressort pas on a juste la date "D:\Backup\ \ 201206081519.bak".

    j'ai regardé il n'y a pas de nom avec des espaces , le nom le plus long et "compliqué" est celui ci : SharePoint_AdminContent_a3b9384c-78b2-474a-892c-18532a5ec6bf.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    que renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [name] FROM sys.DATABASES WHERE  sys.DATABASES.name <> 'tempdb' AND state_desc = 'ONLINE';

Discussions similaires

  1. Script sauvegarde totale rman oracle 10g
    Par milka dans le forum Recovery Manager
    Réponses: 26
    Dernier message: 17/11/2010, 17h52
  2. [Sql server 2005 Express]script Sauvegarde Base
    Par nabil1 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 09/06/2009, 11h47
  3. Script sauvegarde journalière
    Par tekpi dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/05/2009, 13h19
  4. Réponses: 4
    Dernier message: 11/12/2008, 11h57
  5. [sql2005] Composant Script et PostExecute
    Par Monnier Eric dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/04/2008, 11h43

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