Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Backup script : zipper les ficheirs *.bak obtenus ?

10 réponses
Avatar
Florent G.
bonjour,

j'utilise le petit script de backup ci-dessous qui boucle sur toutes les
bases présentes sur mon serveur SQL 2000 (hormis une liste de bases définies)
:

=============================================
set quoted_identifier off
declare @query varchar(1000)
declare @path_backup varchar(100)
declare @dbname varchar(128)
declare @backup_mode varchar(10)
set @path_backup ='d:\mssql2000\MSSQL\BACKUP\'

-- ATTENTION --
-- @backup_mode peut etre : ' with init' ou '' selon que l'on veut ecraser
-- les anciens backups présents dans le fichiers de destination de la
sauvegarde ou non
-- set @backup_mode =''
set @backup_mode =' with init'

print 'Début des Sauvegardes initiales'

declare DBcursor cursor for select name from sysdatabases where name not in
('tempdb')
open DBCursor
Fetch DBCursor into @dbname
while @@fetch_status = 0
begin
set @query = 'backup database ' + @dbname + ' to disk="' + @path_backup +
'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
commande suivante :'
print @query
exec (@query)
Fetch DBCursor into @dbname
end
close DBCursor
deallocate DBCursor

print 'Fin des Sauvegardes'
========================================

Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin d'effectuer
un zippage automatique de chaque fichier *.bak obtenu.
Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande de winzip
9...dont la Syntaxe est :

wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak

Comment puis je effectuer cette opération dans mon script ?

merci d'avance de votre aide.

10 réponses

Avatar
Jean-Baptiste JONDEAU
Bonjour,

Tu peux utiliser la procédure stockée xp_cmdshell de la base de
données MASTER qui permet l'execution de commandes systèmes, cela devrait te
donner quelque chose du genre :
EXEC xp_cmdshell '"wzzip.zip db_SERVEURNAME_DBNAME.bak.zip
db_SERVEURNAME_DBNAME.bak"'
Penses à ajouter le chemin complet des fichiers et de l'executable
et à mettre le tout entre ""


Cordialement

Jean-Baptiste JONDEAU

"Florent G." a écrit dans le message de
news:
bonjour,

j'utilise le petit script de backup ci-dessous qui boucle sur toutes les
bases présentes sur mon serveur SQL 2000 (hormis une liste de bases


définies)
:

============================================ > set quoted_identifier off
declare @query varchar(1000)
declare @path_backup varchar(100)
declare @dbname varchar(128)
declare @backup_mode varchar(10)
set @path_backup ='d:mssql2000MSSQLBACKUP'

-- ATTENTION --
-- @backup_mode peut etre : ' with init' ou '' selon que l'on veut ecraser
-- les anciens backups présents dans le fichiers de destination de la
sauvegarde ou non
-- set @backup_mode =''
set @backup_mode =' with init'

print 'Début des Sauvegardes initiales'

declare DBcursor cursor for select name from sysdatabases where name not


in
('tempdb')
open DBCursor
Fetch DBCursor into @dbname
while @@fetch_status = 0
begin
set @query = 'backup database ' + @dbname + ' to disk="' + @path_backup +
'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
commande suivante :'
print @query
exec (@query)
Fetch DBCursor into @dbname
end
close DBCursor
deallocate DBCursor

print 'Fin des Sauvegardes'
======================================= >
Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin


d'effectuer
un zippage automatique de chaque fichier *.bak obtenu.
Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande de


winzip
9...dont la Syntaxe est :

wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak

Comment puis je effectuer cette opération dans mon script ?

merci d'avance de votre aide.


Avatar
Oliv'
Salut
tu ajoutes à la fin
declare @vcCmdt varchar (256),


select @vcCmd= 'wzzip.zip db_SERVEURNAME_DBNAME.bak.zip
db_SERVEURNAME_DBNAME.bak'

Exec master.dbo.xp_cmdshell @vcCmd, no_output

Oliv'

"Florent G." a écrit dans le message de
news:
bonjour,

j'utilise le petit script de backup ci-dessous qui boucle sur toutes les
bases présentes sur mon serveur SQL 2000 (hormis une liste de bases
définies)
:

============================================ set quoted_identifier off
declare @query varchar(1000)
declare @path_backup varchar(100)
declare @dbname varchar(128)
declare @backup_mode varchar(10)
set @path_backup ='d:mssql2000MSSQLBACKUP'

-- ATTENTION --
-- @backup_mode peut etre : ' with init' ou '' selon que l'on veut ecraser
-- les anciens backups présents dans le fichiers de destination de la
sauvegarde ou non
-- set @backup_mode =''
set @backup_mode =' with init'

print 'Début des Sauvegardes initiales'

declare DBcursor cursor for select name from sysdatabases where name not in
('tempdb')
open DBCursor
Fetch DBCursor into @dbname
while @@fetch_status = 0
begin
set @query = 'backup database ' + @dbname + ' to disk="' + @path_backup +
'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
commande suivante :'
print @query
exec (@query)
Fetch DBCursor into @dbname
end
close DBCursor
deallocate DBCursor

print 'Fin des Sauvegardes'
=======================================
Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin d'effectuer
un zippage automatique de chaque fichier *.bak obtenu.
Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande de winzip
9...dont la Syntaxe est :

wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak

Comment puis je effectuer cette opération dans mon script ?

merci d'avance de votre aide.
Avatar
Chris V.
Proposition hors sujet, mais apres tout :)
Pourquoi pas activer la compression windows sur le dossier recevant les
backups ? Ca t'evite des trop en faire dans SQL.

Chris.

--
______________________________________________
It's still better that if it would have been worst, isn't it ?
C'est toujours mieux que si c'etait pire !
"Florent G." wrote in message
news:
bonjour,

j'utilise le petit script de backup ci-dessous qui boucle sur toutes les
bases présentes sur mon serveur SQL 2000 (hormis une liste de bases


définies)
:

============================================ > set quoted_identifier off
declare @query varchar(1000)
declare @path_backup varchar(100)
declare @dbname varchar(128)
declare @backup_mode varchar(10)
set @path_backup ='d:mssql2000MSSQLBACKUP'

-- ATTENTION --
-- @backup_mode peut etre : ' with init' ou '' selon que l'on veut ecraser
-- les anciens backups présents dans le fichiers de destination de la
sauvegarde ou non
-- set @backup_mode =''
set @backup_mode =' with init'

print 'Début des Sauvegardes initiales'

declare DBcursor cursor for select name from sysdatabases where name not


in
('tempdb')
open DBCursor
Fetch DBCursor into @dbname
while @@fetch_status = 0
begin
set @query = 'backup database ' + @dbname + ' to disk="' + @path_backup +
'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
commande suivante :'
print @query
exec (@query)
Fetch DBCursor into @dbname
end
close DBCursor
deallocate DBCursor

print 'Fin des Sauvegardes'
======================================= >
Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin


d'effectuer
un zippage automatique de chaque fichier *.bak obtenu.
Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande de


winzip
9...dont la Syntaxe est :

wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak

Comment puis je effectuer cette opération dans mon script ?

merci d'avance de votre aide.


Avatar
Florent G.
Hummm...je prefere eviter ce genre de "gadget" et tout incorporer dans mon
script de backup pour le moment.

Je l'ai mis en oeuvre et là, totu est ok; maintenant, il ne me reste plus
qu'à ajouter quelques améliorations de sécurité au script, comme par exemple :

verifier que la compression s'est bien terminée et envoyer une alerte (net
send ou mail) en cas de probleme.

La doc winzip indique :
wzzip filename.zip *.doc
If Not ErrorLevel 1 Goto Exit
Echo ***SERIOUS ERROR DETECTED***
:Exit

Comment puis je récuperer cet errorlevel dans ma boucle afin d'executer un
traitement nécessaire ?
Comment vérifier que le fichier wzzip.exe est bien présent dnas le path de
la machine (pré-requis) ?

merc id'avance de votre aide.


"Chris V." a écrit :

Proposition hors sujet, mais apres tout :)
Pourquoi pas activer la compression windows sur le dossier recevant les
backups ? Ca t'evite des trop en faire dans SQL.

Chris.

--
______________________________________________
It's still better that if it would have been worst, isn't it ?
C'est toujours mieux que si c'etait pire !
"Florent G." wrote in message
news:
> bonjour,
>
> j'utilise le petit script de backup ci-dessous qui boucle sur toutes les
> bases présentes sur mon serveur SQL 2000 (hormis une liste de bases
définies)
> :
>
> ============================================ > > set quoted_identifier off
> declare @query varchar(1000)
> declare @path_backup varchar(100)
> declare @dbname varchar(128)
> declare @backup_mode varchar(10)
> set @path_backup ='d:mssql2000MSSQLBACKUP'
>
> -- ATTENTION --
> -- @backup_mode peut etre : ' with init' ou '' selon que l'on veut ecraser
> -- les anciens backups présents dans le fichiers de destination de la
> sauvegarde ou non
> -- set @backup_mode =''
> set @backup_mode =' with init'
>
> print 'Début des Sauvegardes initiales'
>
> declare DBcursor cursor for select name from sysdatabases where name not
in
> ('tempdb')
> open DBCursor
> Fetch DBCursor into @dbname
> while @@fetch_status = 0
> begin
> set @query = 'backup database ' + @dbname + ' to disk="' + @path_backup +
> 'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
> print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
> commande suivante :'
> print @query
> exec (@query)
> Fetch DBCursor into @dbname
> end
> close DBCursor
> deallocate DBCursor
>
> print 'Fin des Sauvegardes'
> ======================================= > >
> Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin
d'effectuer
> un zippage automatique de chaque fichier *.bak obtenu.
> Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande de
winzip
> 9...dont la Syntaxe est :
>
> wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak
>
> Comment puis je effectuer cette opération dans mon script ?
>
> merci d'avance de votre aide.





Avatar
Chris V.
Comme ca (en tout cas, ca marche chew moi)

create table #Output
(
TextLine varchar(256)
)
select @vcCmd= 'wzzip.zip db_SERVEURNAME_DBNAME.bak.zip
db_SERVEURNAME_DBNAME.bak'

insert into #output Exec master.dbo.xp_cmdshell @vcCmd

if (select count(*) from #output where Textline like '%Error%') <> 0
begin
-- Mettre ici le traitement d'erreur
end

drop table #Output

Chris
--
______________________________________________
It's still better that if it would have been worst, isn't it ?
C'est toujours mieux que si c'etait pire !
"Florent G." wrote in message
news:
Hummm...je prefere eviter ce genre de "gadget" et tout incorporer dans mon
script de backup pour le moment.

Je l'ai mis en oeuvre et là, totu est ok; maintenant, il ne me reste plus
qu'à ajouter quelques améliorations de sécurité au script, comme par


exemple :

verifier que la compression s'est bien terminée et envoyer une alerte (net
send ou mail) en cas de probleme.

La doc winzip indique :
wzzip filename.zip *.doc
If Not ErrorLevel 1 Goto Exit
Echo ***SERIOUS ERROR DETECTED***
:Exit

Comment puis je récuperer cet errorlevel dans ma boucle afin d'executer un
traitement nécessaire ?
Comment vérifier que le fichier wzzip.exe est bien présent dnas le path de
la machine (pré-requis) ?

merc id'avance de votre aide.


"Chris V." a écrit :

> Proposition hors sujet, mais apres tout :)
> Pourquoi pas activer la compression windows sur le dossier recevant les
> backups ? Ca t'evite des trop en faire dans SQL.
>
> Chris.
>
> --
> ______________________________________________
> It's still better that if it would have been worst, isn't it ?
> C'est toujours mieux que si c'etait pire !
> "Florent G." wrote in message
> news:
> > bonjour,
> >
> > j'utilise le petit script de backup ci-dessous qui boucle sur toutes


les
> > bases présentes sur mon serveur SQL 2000 (hormis une liste de bases
> définies)
> > :
> >
> > ============================================ > > > set quoted_identifier off
> > declare @query varchar(1000)
> > declare @path_backup varchar(100)
> > declare @dbname varchar(128)
> > declare @backup_mode varchar(10)
> > set @path_backup ='d:mssql2000MSSQLBACKUP'
> >
> > -- ATTENTION --
> > -- @backup_mode peut etre : ' with init' ou '' selon que l'on veut


ecraser
> > -- les anciens backups présents dans le fichiers de destination de la
> > sauvegarde ou non
> > -- set @backup_mode =''
> > set @backup_mode =' with init'
> >
> > print 'Début des Sauvegardes initiales'
> >
> > declare DBcursor cursor for select name from sysdatabases where name


not
> in
> > ('tempdb')
> > open DBCursor
> > Fetch DBCursor into @dbname
> > while @@fetch_status = 0
> > begin
> > set @query = 'backup database ' + @dbname + ' to disk="' +


@path_backup +
> > 'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
> > print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
> > commande suivante :'
> > print @query
> > exec (@query)
> > Fetch DBCursor into @dbname
> > end
> > close DBCursor
> > deallocate DBCursor
> >
> > print 'Fin des Sauvegardes'
> > ======================================= > > >
> > Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin
> d'effectuer
> > un zippage automatique de chaque fichier *.bak obtenu.
> > Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande de
> winzip
> > 9...dont la Syntaxe est :
> >
> > wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak
> >
> > Comment puis je effectuer cette opération dans mon script ?
> >
> > merci d'avance de votre aide.
>
>
>


Avatar
Oliv'
Re.
au lieu d'executer 1 seule ligne de commande tu peux executer un fichier
batch
@vcCmd='postecbatch.cmd'
dans lequel tu mets
::POUR SE POSITIONNER DANS LE REPERTOIRE DE SAUVEGARDE
c:
cd monrepdesauvegarde
:: VERIFIE SI WINZIP EXISTE SINON LE COPIE A PARTIR D'UN EMPLACEMENT
if not exist wzzip.exe copy serveurpartagewzzip.exe

'wzzip.zip db_SERVEURNAME_DBNAME.bak.zip
If Not ErrorLevel 1 Goto Exit
Echo ***SERIOUS ERROR DETECTED***
:: ENVOI UN MESSAGE SUR TON POSTE par exemple
net send monlogin "erreur traitement sauvegarde"

:Exit

Attention a bien mettre des chemins UNC car le xp_cmdshell s'execute à
partir du serveur il me semble !!!!

Oliv'

"Florent G." a écrit dans le message de
news:
Hummm...je prefere eviter ce genre de "gadget" et tout incorporer dans mon
script de backup pour le moment.

Je l'ai mis en oeuvre et là, totu est ok; maintenant, il ne me reste plus
qu'à ajouter quelques améliorations de sécurité au script, comme par exemple
:

verifier que la compression s'est bien terminée et envoyer une alerte (net
send ou mail) en cas de probleme.

La doc winzip indique :
wzzip filename.zip *.doc
If Not ErrorLevel 1 Goto Exit
Echo ***SERIOUS ERROR DETECTED***
:Exit

Comment puis je récuperer cet errorlevel dans ma boucle afin d'executer un
traitement nécessaire ?
Comment vérifier que le fichier wzzip.exe est bien présent dnas le path de
la machine (pré-requis) ?

merc id'avance de votre aide.


"Chris V." a écrit :

Proposition hors sujet, mais apres tout :)
Pourquoi pas activer la compression windows sur le dossier recevant les
backups ? Ca t'evite des trop en faire dans SQL.

Chris.

--
______________________________________________
It's still better that if it would have been worst, isn't it ?
C'est toujours mieux que si c'etait pire !
"Florent G." wrote in message
news:
> bonjour,
>
> j'utilise le petit script de backup ci-dessous qui boucle sur toutes les
> bases présentes sur mon serveur SQL 2000 (hormis une liste de bases
définies)
> :
>
> ============================================ > > set quoted_identifier off
> declare @query varchar(1000)
> declare @path_backup varchar(100)
> declare @dbname varchar(128)
> declare @backup_mode varchar(10)
> set @path_backup ='d:mssql2000MSSQLBACKUP'
>
> -- ATTENTION --
> -- @backup_mode peut etre : ' with init' ou '' selon que l'on veut
> ecraser
> -- les anciens backups présents dans le fichiers de destination de la
> sauvegarde ou non
> -- set @backup_mode =''
> set @backup_mode =' with init'
>
> print 'Début des Sauvegardes initiales'
>
> declare DBcursor cursor for select name from sysdatabases where name not
in
> ('tempdb')
> open DBCursor
> Fetch DBCursor into @dbname
> while @@fetch_status = 0
> begin
> set @query = 'backup database ' + @dbname + ' to disk="' + @path_backup
> +
> 'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
> print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
> commande suivante :'
> print @query
> exec (@query)
> Fetch DBCursor into @dbname
> end
> close DBCursor
> deallocate DBCursor
>
> print 'Fin des Sauvegardes'
> ======================================= > >
> Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin
d'effectuer
> un zippage automatique de chaque fichier *.bak obtenu.
> Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande de
winzip
> 9...dont la Syntaxe est :
>
> wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak
>
> Comment puis je effectuer cette opération dans mon script ?
>
> merci d'avance de votre aide.





Avatar
Florent G.
Hummm..j'aime bien cette version ;-))


Me manque plus que la détection du wzzip.exe pré-requis dnas le PATH et ce
sera top ;-))

Florent.

"Chris V." a écrit :

Comme ca (en tout cas, ca marche chew moi)

create table #Output
(
TextLine varchar(256)
)
select @vcCmd= 'wzzip.zip db_SERVEURNAME_DBNAME.bak.zip
db_SERVEURNAME_DBNAME.bak'

insert into #output Exec master.dbo.xp_cmdshell @vcCmd

if (select count(*) from #output where Textline like '%Error%') <> 0
begin
-- Mettre ici le traitement d'erreur
end

drop table #Output

Chris
--
______________________________________________
It's still better that if it would have been worst, isn't it ?
C'est toujours mieux que si c'etait pire !
"Florent G." wrote in message
news:
> Hummm...je prefere eviter ce genre de "gadget" et tout incorporer dans mon
> script de backup pour le moment.
>
> Je l'ai mis en oeuvre et là, totu est ok; maintenant, il ne me reste plus
> qu'à ajouter quelques améliorations de sécurité au script, comme par
exemple :
>
> verifier que la compression s'est bien terminée et envoyer une alerte (net
> send ou mail) en cas de probleme.
>
> La doc winzip indique :
> wzzip filename.zip *.doc
> If Not ErrorLevel 1 Goto Exit
> Echo ***SERIOUS ERROR DETECTED***
> :Exit
>
> Comment puis je récuperer cet errorlevel dans ma boucle afin d'executer un
> traitement nécessaire ?
> Comment vérifier que le fichier wzzip.exe est bien présent dnas le path de
> la machine (pré-requis) ?
>
> merc id'avance de votre aide.
>
>
> "Chris V." a écrit :
>
> > Proposition hors sujet, mais apres tout :)
> > Pourquoi pas activer la compression windows sur le dossier recevant les
> > backups ? Ca t'evite des trop en faire dans SQL.
> >
> > Chris.
> >
> > --
> > ______________________________________________
> > It's still better that if it would have been worst, isn't it ?
> > C'est toujours mieux que si c'etait pire !
> > "Florent G." wrote in message
> > news:
> > > bonjour,
> > >
> > > j'utilise le petit script de backup ci-dessous qui boucle sur toutes
les
> > > bases présentes sur mon serveur SQL 2000 (hormis une liste de bases
> > définies)
> > > :
> > >
> > > ============================================ > > > > set quoted_identifier off
> > > declare @query varchar(1000)
> > > declare @path_backup varchar(100)
> > > declare @dbname varchar(128)
> > > declare @backup_mode varchar(10)
> > > set @path_backup ='d:mssql2000MSSQLBACKUP'
> > >
> > > -- ATTENTION --
> > > -- @backup_mode peut etre : ' with init' ou '' selon que l'on veut
ecraser
> > > -- les anciens backups présents dans le fichiers de destination de la
> > > sauvegarde ou non
> > > -- set @backup_mode =''
> > > set @backup_mode =' with init'
> > >
> > > print 'Début des Sauvegardes initiales'
> > >
> > > declare DBcursor cursor for select name from sysdatabases where name
not
> > in
> > > ('tempdb')
> > > open DBCursor
> > > Fetch DBCursor into @dbname
> > > while @@fetch_status = 0
> > > begin
> > > set @query = 'backup database ' + @dbname + ' to disk="' +
@path_backup +
> > > 'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
> > > print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
> > > commande suivante :'
> > > print @query
> > > exec (@query)
> > > Fetch DBCursor into @dbname
> > > end
> > > close DBCursor
> > > deallocate DBCursor
> > >
> > > print 'Fin des Sauvegardes'
> > > ======================================= > > > >
> > > Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin
> > d'effectuer
> > > un zippage automatique de chaque fichier *.bak obtenu.
> > > Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande de
> > winzip
> > > 9...dont la Syntaxe est :
> > >
> > > wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak
> > >
> > > Comment puis je effectuer cette opération dans mon script ?
> > >
> > > merci d'avance de votre aide.
> >
> >
> >





Avatar
Chris V.
pour la detection de l'exe..euh ... laisse le path travailler pour toi,
parce que j'ai jamais trouve de moyen propre pour faire ca (et je n'ai pas
voulu utilise de script tel vbs par exemple pour garder le controle des
ressources et ne pas multiplier les technologies).

Dans le script ci dessous, il faut remplace '%Error%' par la chaine que
renvoie wzzip.exe quand il se banane (et ca..j' en ai aucune idee)

Chris
--
______________________________________________
It's still better that if it would have been worst, isn't it ?
C'est toujours mieux que si c'etait pire !
"Florent G." a écrit dans le message de
news:
Hummm..j'aime bien cette version ;-))


Me manque plus que la détection du wzzip.exe pré-requis dnas le PATH et ce
sera top ;-))

Florent.

"Chris V." a écrit :

Comme ca (en tout cas, ca marche chew moi)

create table #Output
(
TextLine varchar(256)
)
select @vcCmd= 'wzzip.zip db_SERVEURNAME_DBNAME.bak.zip
db_SERVEURNAME_DBNAME.bak'

insert into #output Exec master.dbo.xp_cmdshell @vcCmd

if (select count(*) from #output where Textline like '%Error%') <> 0
begin
-- Mettre ici le traitement d'erreur
end

drop table #Output

Chris
--
______________________________________________
It's still better that if it would have been worst, isn't it ?
C'est toujours mieux que si c'etait pire !
"Florent G." wrote in message
news:
> Hummm...je prefere eviter ce genre de "gadget" et tout incorporer dans
> mon
> script de backup pour le moment.
>
> Je l'ai mis en oeuvre et là, totu est ok; maintenant, il ne me reste
> plus
> qu'à ajouter quelques améliorations de sécurité au script, comme par
exemple :
>
> verifier que la compression s'est bien terminée et envoyer une alerte
> (net
> send ou mail) en cas de probleme.
>
> La doc winzip indique :
> wzzip filename.zip *.doc
> If Not ErrorLevel 1 Goto Exit
> Echo ***SERIOUS ERROR DETECTED***
> :Exit
>
> Comment puis je récuperer cet errorlevel dans ma boucle afin d'executer
> un
> traitement nécessaire ?
> Comment vérifier que le fichier wzzip.exe est bien présent dnas le path
> de
> la machine (pré-requis) ?
>
> merc id'avance de votre aide.
>
>
> "Chris V." a écrit :
>
> > Proposition hors sujet, mais apres tout :)
> > Pourquoi pas activer la compression windows sur le dossier recevant
> > les
> > backups ? Ca t'evite des trop en faire dans SQL.
> >
> > Chris.
> >
> > --
> > ______________________________________________
> > It's still better that if it would have been worst, isn't it ?
> > C'est toujours mieux que si c'etait pire !
> > "Florent G." wrote in message
> > news:
> > > bonjour,
> > >
> > > j'utilise le petit script de backup ci-dessous qui boucle sur
> > > toutes
les
> > > bases présentes sur mon serveur SQL 2000 (hormis une liste de bases
> > définies)
> > > :
> > >
> > > ============================================ >> > > > set quoted_identifier off
> > > declare @query varchar(1000)
> > > declare @path_backup varchar(100)
> > > declare @dbname varchar(128)
> > > declare @backup_mode varchar(10)
> > > set @path_backup ='d:mssql2000MSSQLBACKUP'
> > >
> > > -- ATTENTION --
> > > -- @backup_mode peut etre : ' with init' ou '' selon que l'on veut
ecraser
> > > -- les anciens backups présents dans le fichiers de destination de
> > > la
> > > sauvegarde ou non
> > > -- set @backup_mode =''
> > > set @backup_mode =' with init'
> > >
> > > print 'Début des Sauvegardes initiales'
> > >
> > > declare DBcursor cursor for select name from sysdatabases where
> > > name
not
> > in
> > > ('tempdb')
> > > open DBCursor
> > > Fetch DBCursor into @dbname
> > > while @@fetch_status = 0
> > > begin
> > > set @query = 'backup database ' + @dbname + ' to disk="' +
@path_backup +
> > > 'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
> > > print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant
> > > la
> > > commande suivante :'
> > > print @query
> > > exec (@query)
> > > Fetch DBCursor into @dbname
> > > end
> > > close DBCursor
> > > deallocate DBCursor
> > >
> > > print 'Fin des Sauvegardes'
> > > ======================================= >> > > >
> > > Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin
> > d'effectuer
> > > un zippage automatique de chaque fichier *.bak obtenu.
> > > Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande
> > > de
> > winzip
> > > 9...dont la Syntaxe est :
> > >
> > > wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak
> > >
> > > Comment puis je effectuer cette opération dans mon script ?
> > >
> > > merci d'avance de votre aide.
> >
> >
> >







Avatar
Florent G.
Bonjour,

j'ai essayé d'améliorer mon script de backup en y incorporant une réduction
des fichiers de log (*.ldf).

Mais apparement, il manque un "USE LABASE" quelque part et jesais pas
comment l'indiquer..

merci de votre aide (en effet, dans mon log, j'obtiens toujours le fait
qu'il essaye de réduire le fichier de log de la base master par défaut....au
lie ude la base sur laquelle on boucle actuellement)

mon script :
========================================= set quoted_identifier off
declare @query_backup varchar(1000)
declare @query_purge_logs varchar(1000)
declare @query_reduire_logs varchar(1000)
declare @path_backup varchar(100)
declare @dbname varchar(128)
declare @backup_mode varchar(10)
declare @ZipCommand varchar(1000)
declare @NetSendCommand varchar(128)
declare @destinataire_netsend varchar(128)
set @path_backup ='d:mssql2000MSSQLBACKUP'
set @destinataire_netsend ='w-fgi'

-- ATTENTION --
-- @backup_mode peut etre : ' with init' ou '' selon que l'on veut ecraser
-- les anciens backups présents dans le fichiers de destination de la
sauvegarde ou non
-- set @backup_mode =''
set @backup_mode =' with init'

print 'Début des Sauvegardes - ' + replace(replace(convert
(varchar(22),getdate(),120),':','-'),' ','-')

declare DBcursor cursor for select name from sysdatabases where name not in
('tempdb','savprod','test_JSP_F0X_2005','test_xavier')
open DBCursor
Fetch DBCursor into @dbname
while @@fetch_status = 0
begin

-- Purge du log de la base
set @query_purge_logs = 'backup log ' + @dbname + ' with no_log'
print 'Purge du log de la base : '+ @dbname + ' en utilisant la commande
suivante :'
print @query_purge_logs
exec (@query_purge_logs)

-- Reduction de la taille du fichier de log de la base
set @query_reduire_logs = 'dbcc shrinkfile(2,500)'
print 'Reduction de la taille du fichier de log de la base : '+ @dbname + '
en utilisant la commande suivante :'
print @query_reduire_logs
exec (@query_reduire_logs)

-- Sauvegarde de la base vers un fichier *.bak
set @query_backup = 'backup database ' + @dbname + ' to disk="' +
@path_backup + 'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
commande suivante :'
print @query_backup
exec (@query_backup)

-- On créé une table temporaire pour y stocker le résultat de la commande de
zippage
-- pour vérifier sa bonne exécution
create table #Output
(
TextLine varchar(256)
)

-- On construit la commande shell qui va être exécutée pour la compression
du fichier en cours
select @ZipCommand = 'wzzip.exe -ex -m ' + @path_backup + 'db_' +
@@SERVERNAME + '_' + @dbname + '.bak.zip ' + @path_backup + 'db_' +
@@SERVERNAME + '_' + @dbname + '.bak'
print 'Compression du fichier de backup en utilisant la commande suivante :'
print @ZipCommand

-- On exécute la compression et on envoi le résultat dans la table temporaire
insert into #Output Exec master.dbo.xp_cmdshell @ZipCommand

-- On vérifie si la compression s'est bien passée
if (select count(*) from #Output where Textline like '%Error%') <> 0
begin
-- Erreur de compression, on alerte l'administrateur
select @NetSendCommand = 'net send ' + @destinataire_netsend + ' "Erreur
de compression du backup sur ' + @@SERVERNAME + ' pour la base ' + @dbname +
'"'
Exec master.dbo.xp_cmdshell @NetSendCommand
end

-- On supprime la table temporaire
drop table #Output

-- On passe a la base suivante
Fetch DBCursor into @dbname
end
close DBCursor
deallocate DBCursor

print 'Fin des Sauvegardes - ' + replace(replace(convert
(varchar(22),getdate(),120),':','-'),' ','-')
=========================================
Merci

FLorent


"Oliv'" a écrit :

Re.
au lieu d'executer 1 seule ligne de commande tu peux executer un fichier
batch
@vcCmd='postecbatch.cmd'
dans lequel tu mets
::POUR SE POSITIONNER DANS LE REPERTOIRE DE SAUVEGARDE
c:
cd monrepdesauvegarde
:: VERIFIE SI WINZIP EXISTE SINON LE COPIE A PARTIR D'UN EMPLACEMENT
if not exist wzzip.exe copy serveurpartagewzzip.exe

'wzzip.zip db_SERVEURNAME_DBNAME.bak.zip
If Not ErrorLevel 1 Goto Exit
Echo ***SERIOUS ERROR DETECTED***
:: ENVOI UN MESSAGE SUR TON POSTE par exemple
net send monlogin "erreur traitement sauvegarde"

:Exit

Attention a bien mettre des chemins UNC car le xp_cmdshell s'execute à
partir du serveur il me semble !!!!

Oliv'

"Florent G." a écrit dans le message de
news:
Hummm...je prefere eviter ce genre de "gadget" et tout incorporer dans mon
script de backup pour le moment.

Je l'ai mis en oeuvre et là, totu est ok; maintenant, il ne me reste plus
qu'à ajouter quelques améliorations de sécurité au script, comme par exemple
:

verifier que la compression s'est bien terminée et envoyer une alerte (net
send ou mail) en cas de probleme.

La doc winzip indique :
wzzip filename.zip *.doc
If Not ErrorLevel 1 Goto Exit
Echo ***SERIOUS ERROR DETECTED***
:Exit

Comment puis je récuperer cet errorlevel dans ma boucle afin d'executer un
traitement nécessaire ?
Comment vérifier que le fichier wzzip.exe est bien présent dnas le path de
la machine (pré-requis) ?

merc id'avance de votre aide.


"Chris V." a écrit :

> Proposition hors sujet, mais apres tout :)
> Pourquoi pas activer la compression windows sur le dossier recevant les
> backups ? Ca t'evite des trop en faire dans SQL.
>
> Chris.
>
> --
> ______________________________________________
> It's still better that if it would have been worst, isn't it ?
> C'est toujours mieux que si c'etait pire !
> "Florent G." wrote in message
> news:
> > bonjour,
> >
> > j'utilise le petit script de backup ci-dessous qui boucle sur toutes les
> > bases présentes sur mon serveur SQL 2000 (hormis une liste de bases
> définies)
> > :
> >
> > ============================================ > > > set quoted_identifier off
> > declare @query varchar(1000)
> > declare @path_backup varchar(100)
> > declare @dbname varchar(128)
> > declare @backup_mode varchar(10)
> > set @path_backup ='d:mssql2000MSSQLBACKUP'
> >
> > -- ATTENTION --
> > -- @backup_mode peut etre : ' with init' ou '' selon que l'on veut
> > ecraser
> > -- les anciens backups présents dans le fichiers de destination de la
> > sauvegarde ou non
> > -- set @backup_mode =''
> > set @backup_mode =' with init'
> >
> > print 'Début des Sauvegardes initiales'
> >
> > declare DBcursor cursor for select name from sysdatabases where name not
> in
> > ('tempdb')
> > open DBCursor
> > Fetch DBCursor into @dbname
> > while @@fetch_status = 0
> > begin
> > set @query = 'backup database ' + @dbname + ' to disk="' + @path_backup
> > +
> > 'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
> > print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
> > commande suivante :'
> > print @query
> > exec (@query)
> > Fetch DBCursor into @dbname
> > end
> > close DBCursor
> > deallocate DBCursor
> >
> > print 'Fin des Sauvegardes'
> > ======================================= > > >
> > Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin
> d'effectuer
> > un zippage automatique de chaque fichier *.bak obtenu.
> > Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande de
> winzip
> > 9...dont la Syntaxe est :
> >
> > wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak
> >
> > Comment puis je effectuer cette opération dans mon script ?
> >
> > merci d'avance de votre aide.
>
>
>





Avatar
Chris V.
A premiere vue, et sans doc a porte de main :

-- Reduction de la taille du fichier de log de la base
set @query_reduire_logs = 'dbcc shrinkfile(2,500)'
print 'Reduction de la taille du fichier de log de la base : '+ @dbname + '
en utilisant la commande suivante :'
print @query_reduire_logs
-- connection a la bonne DB
use @dbname
exec (@query_reduire_logs)
-- Reconnection a Master
use master

--
______________________________________________
It's still better that if it would have been worst, isn't it ?
C'est toujours mieux que si c'etait pire !
"Florent G." a écrit dans le message de
news:
Bonjour,

j'ai essayé d'améliorer mon script de backup en y incorporant une
réduction
des fichiers de log (*.ldf).

Mais apparement, il manque un "USE LABASE" quelque part et jesais pas
comment l'indiquer..

merci de votre aide (en effet, dans mon log, j'obtiens toujours le fait
qu'il essaye de réduire le fichier de log de la base master par
défaut....au
lie ude la base sur laquelle on boucle actuellement)

mon script :
========================================= > set quoted_identifier off
declare @query_backup varchar(1000)
declare @query_purge_logs varchar(1000)
declare @query_reduire_logs varchar(1000)
declare @path_backup varchar(100)
declare @dbname varchar(128)
declare @backup_mode varchar(10)
declare @ZipCommand varchar(1000)
declare @NetSendCommand varchar(128)
declare @destinataire_netsend varchar(128)
set @path_backup ='d:mssql2000MSSQLBACKUP'
set @destinataire_netsend ='w-fgi'

-- ATTENTION --
-- @backup_mode peut etre : ' with init' ou '' selon que l'on veut ecraser
-- les anciens backups présents dans le fichiers de destination de la
sauvegarde ou non
-- set @backup_mode =''
set @backup_mode =' with init'

print 'Début des Sauvegardes - ' + replace(replace(convert
(varchar(22),getdate(),120),':','-'),' ','-')

declare DBcursor cursor for select name from sysdatabases where name not
in
('tempdb','savprod','test_JSP_F0X_2005','test_xavier')
open DBCursor
Fetch DBCursor into @dbname
while @@fetch_status = 0
begin

-- Purge du log de la base
set @query_purge_logs = 'backup log ' + @dbname + ' with no_log'
print 'Purge du log de la base : '+ @dbname + ' en utilisant la commande
suivante :'
print @query_purge_logs
exec (@query_purge_logs)

-- Reduction de la taille du fichier de log de la base
set @query_reduire_logs = 'dbcc shrinkfile(2,500)'
print 'Reduction de la taille du fichier de log de la base : '+ @dbname +
'
en utilisant la commande suivante :'
print @query_reduire_logs
exec (@query_reduire_logs)

-- Sauvegarde de la base vers un fichier *.bak
set @query_backup = 'backup database ' + @dbname + ' to disk="' +
@path_backup + 'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' +
@backup_mode
print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
commande suivante :'
print @query_backup
exec (@query_backup)

-- On créé une table temporaire pour y stocker le résultat de la commande
de
zippage
-- pour vérifier sa bonne exécution
create table #Output
(
TextLine varchar(256)
)

-- On construit la commande shell qui va être exécutée pour la compression
du fichier en cours
select @ZipCommand = 'wzzip.exe -ex -m ' + @path_backup + 'db_' +
@@SERVERNAME + '_' + @dbname + '.bak.zip ' + @path_backup + 'db_' +
@@SERVERNAME + '_' + @dbname + '.bak'
print 'Compression du fichier de backup en utilisant la commande suivante
:'
print @ZipCommand

-- On exécute la compression et on envoi le résultat dans la table
temporaire
insert into #Output Exec master.dbo.xp_cmdshell @ZipCommand

-- On vérifie si la compression s'est bien passée
if (select count(*) from #Output where Textline like '%Error%') <> 0
begin
-- Erreur de compression, on alerte l'administrateur
select @NetSendCommand = 'net send ' + @destinataire_netsend + ' "Erreur
de compression du backup sur ' + @@SERVERNAME + ' pour la base ' + @dbname
+
'"'
Exec master.dbo.xp_cmdshell @NetSendCommand
end

-- On supprime la table temporaire
drop table #Output

-- On passe a la base suivante
Fetch DBCursor into @dbname
end
close DBCursor
deallocate DBCursor

print 'Fin des Sauvegardes - ' + replace(replace(convert
(varchar(22),getdate(),120),':','-'),' ','-')
========================================= >
Merci

FLorent


"Oliv'" a écrit :

Re.
au lieu d'executer 1 seule ligne de commande tu peux executer un fichier
batch
@vcCmd='postecbatch.cmd'
dans lequel tu mets
::POUR SE POSITIONNER DANS LE REPERTOIRE DE SAUVEGARDE
c:
cd monrepdesauvegarde
:: VERIFIE SI WINZIP EXISTE SINON LE COPIE A PARTIR D'UN EMPLACEMENT
if not exist wzzip.exe copy serveurpartagewzzip.exe

'wzzip.zip db_SERVEURNAME_DBNAME.bak.zip
If Not ErrorLevel 1 Goto Exit
Echo ***SERIOUS ERROR DETECTED***
:: ENVOI UN MESSAGE SUR TON POSTE par exemple
net send monlogin "erreur traitement sauvegarde"

:Exit

Attention a bien mettre des chemins UNC car le xp_cmdshell s'execute à
partir du serveur il me semble !!!!

Oliv'

"Florent G." a écrit dans le message
de
news:
Hummm...je prefere eviter ce genre de "gadget" et tout incorporer dans
mon
script de backup pour le moment.

Je l'ai mis en oeuvre et là, totu est ok; maintenant, il ne me reste plus
qu'à ajouter quelques améliorations de sécurité au script, comme par
exemple
:

verifier que la compression s'est bien terminée et envoyer une alerte
(net
send ou mail) en cas de probleme.

La doc winzip indique :
wzzip filename.zip *.doc
If Not ErrorLevel 1 Goto Exit
Echo ***SERIOUS ERROR DETECTED***
:Exit

Comment puis je récuperer cet errorlevel dans ma boucle afin d'executer
un
traitement nécessaire ?
Comment vérifier que le fichier wzzip.exe est bien présent dnas le path
de
la machine (pré-requis) ?

merc id'avance de votre aide.


"Chris V." a écrit :

> Proposition hors sujet, mais apres tout :)
> Pourquoi pas activer la compression windows sur le dossier recevant les
> backups ? Ca t'evite des trop en faire dans SQL.
>
> Chris.
>
> --
> ______________________________________________
> It's still better that if it would have been worst, isn't it ?
> C'est toujours mieux que si c'etait pire !
> "Florent G." wrote in message
> news:
> > bonjour,
> >
> > j'utilise le petit script de backup ci-dessous qui boucle sur toutes
> > les
> > bases présentes sur mon serveur SQL 2000 (hormis une liste de bases
> définies)
> > :
> >
> > ============================================ >> > > set quoted_identifier off
> > declare @query varchar(1000)
> > declare @path_backup varchar(100)
> > declare @dbname varchar(128)
> > declare @backup_mode varchar(10)
> > set @path_backup ='d:mssql2000MSSQLBACKUP'
> >
> > -- ATTENTION --
> > -- @backup_mode peut etre : ' with init' ou '' selon que l'on veut
> > ecraser
> > -- les anciens backups présents dans le fichiers de destination de la
> > sauvegarde ou non
> > -- set @backup_mode =''
> > set @backup_mode =' with init'
> >
> > print 'Début des Sauvegardes initiales'
> >
> > declare DBcursor cursor for select name from sysdatabases where name
> > not
> in
> > ('tempdb')
> > open DBCursor
> > Fetch DBCursor into @dbname
> > while @@fetch_status = 0
> > begin
> > set @query = 'backup database ' + @dbname + ' to disk="' +
> > @path_backup
> > +
> > 'db_' + @@SERVERNAME + '_' + @dbname + '.bak"' + @backup_mode
> > print 'Sauvegarde a chaud de la base : '+ @dbname + ' en utilisant la
> > commande suivante :'
> > print @query
> > exec (@query)
> > Fetch DBCursor into @dbname
> > end
> > close DBCursor
> > deallocate DBCursor
> >
> > print 'Fin des Sauvegardes'
> > ======================================= >> > >
> > Maintenant, vu la taille des fichiers *.bak obtenus, j'ai besoin
> d'effectuer
> > un zippage automatique de chaque fichier *.bak obtenu.
> > Pour ce faire, j'ai a ma disposition, l'outil de ligne de commande de
> winzip
> > 9...dont la Syntaxe est :
> >
> > wzzip.zip db_SERVEURNAME_DBNAME.bak.zip db_SERVEURNAME_DBNAME.bak
> >
> > Comment puis je effectuer cette opération dans mon script ?
> >
> > merci d'avance de votre aide.
>
>
>