Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2011, 09h55   #1
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
Par défaut Erreur de syntaxe backup

Bonjour a tous
voici le probleme, nous avons un sql server 2005 et plusieurs bases de données.
2 d'entres elles sont de la forme:

ePO4_TC-ANTIVIRUS

C'est a dire avec un tirait au beau milieu.
A cause du tirait la commande backup database nom...plante avec l'erreur:
sintaxe incorecte au niveau du -
Les autres bases sans tirait se backup sans problemes.

Quelqu'un a deja vu ça? J'ai essayer un escape caracter mais j'y arrive pas.
Merci pour votre aide.

Salut
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 10h14   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonjour,

Entourez le nom de votre base avec des guillements ou des crochets :

Code :
1
2
BACKUP DATABASE [ePO4_TC-ANTIVIRUS] TO ... 
BACKUP DATABASE "ePO4_TC-ANTIVIRUS" TO ...
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 10h53   #3
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
Bonjour
ok individuellement ça marche.
Maintenant j'ai le probleme de faire marcher ce script, car je voudrais faire un backup de toutes mes bases:

Code :
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
DECLARE @name NVARCHAR(MAX) -- Nombre de la base de datos 
DECLARE @path NVARCHAR(MAX) -- Ruta en donde se guardaran los backups
DECLARE @fileName NVARCHAR(MAX) -- Nombre de archivo para los backups
DECLARE @fileDate VARCHAR(20) -- fecha usada para el nombre de archivo
DECLARE @msgMail NVARCHAR(MAX) -- usado para report de backups enviado por mail
DECLARE @estado VARCHAR (20) -- variable de control de backups
DECLARE @shortName VARCHAR (35)--250
DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
DECLARE @subStart DATETIME
DECLARE @subEnd DATETIME
DECLARE @totalFiles INT
DECLARE @totalError INT
DECLARE @subjectMsg VARCHAR(256)
SET @path = 'G:\Backup\'
SET @startDate = CONVERT(VARCHAR(24), GETDATE(), 113)
SET @endDate = @startDate;
SET @subStart = @startDate;
SET @subEnd = @startDate;
SET @totalFiles = 0
SET @totalError = 0
 
SET @fileDate = CONVERT(VARCHAR(4), YEAR(GETDATE()))+'-'
+ CONVERT(VARCHAR(2), MONTH(GETDATE()))
+'-'+CONVERT(VARCHAR(2), DAY(GETDATE()))
 
 
 
DECLARE db_cursor CURSOR FOR 
SELECT name
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb') 
 
OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @name  
 
WHILE @@FETCH_STATUS = 0  
BEGIN  
 
       SET @fileName = @path + @name + '_' + @fileDate + '.bak' 
       BACKUP DATABASE @name TO DISK = @fileName WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD
 
 
       FETCH NEXT FROM db_cursor INTO @name  
END  
 
CLOSE db_cursor
Je supose que pour arriver au meme resultat que tu proposais, il faut mettre des " ou [ ici:

Et bien ça me donne erreur aussi.
D'avance merci
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 10h58   #4
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Moi je modifierais la ligne de code suivante en utilisant la fonction QUOTENAME :

Code :
1
2
3
4
5
DECLARE db_cursor CURSOR FOR
SELECT QUOTENAME(name)
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb') 
...
Pensez également à désallouer votre curseur avec DEALLOCATE

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 11h30   #5
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
Bonjour de nouveau

et bien ça marche pas:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE db_cursor CURSOR FOR 
SELECT QUOTENAME(name)
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb','ePO4_ATC-ANTIVIRUS') 
 
OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @name  
 
WHILE @@FETCH_STATUS = 0  
BEGIN  
 
      SET @fileName = @path + @name + '_' + @fileDate + '.bak' 
      BACKUP DATABASE @name TO DISK = @fileName WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD
 
       FETCH NEXT FROM db_cursor INTO @name  
END  
 
CLOSE db_cursor

Comment je peux faire pour voir la valeur des variables? Comme un echo
J'aimerais pour savoir quelles valeurs se trouvent dans les variables.
le nouveau message d'erreur est:

Code :
Ejecutado como usuario: ATC\Administrador. No se puede crear el proceso para el paso 1 del trabajo 0xC706C1E3006F63469108EB081CBC2923 (motivo: El sistema no puede hallar el archivo especificado).  Error en el paso.
Traduction: Ne peux pas creer le process pour le pas 1 du job ..... le system ne trouve pas le fichier specifié.

D'avance merci
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 12h01   #6
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Essayez avec ceci :

Vos variables sont en NVARCHAR(MAX) et vous n'avez pas besoin de ce type de données pour le nom de la base par exemple. Un type SYSNAME suffit amplement.

Code :
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
DECLARE @name NVARCHAR(MAX) -- Nombre de la base de datos 
DECLARE @path NVARCHAR(MAX) -- Ruta en donde se guardaran los backups
DECLARE @fileName NVARCHAR(MAX) -- Nombre de archivo para los backups
DECLARE @fileDate VARCHAR(20) -- fecha usada para el nombre de archivo
DECLARE @msgMail NVARCHAR(MAX) -- usado para report de backups enviado por mail
DECLARE @estado VARCHAR (20) -- variable de control de backups
DECLARE @shortName VARCHAR (35)--250
DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
DECLARE @subStart DATETIME
DECLARE @subEnd DATETIME
DECLARE @totalFiles INT
DECLARE @totalError INT
DECLARE @subjectMsg VARCHAR(256)
SET @path = 'E:\MSSQL\'
SET @startDate = CONVERT(VARCHAR(24), GETDATE(), 113)
SET @endDate = @startDate;
SET @subStart = @startDate;
SET @subEnd = @startDate;
SET @totalFiles = 0
SET @totalError = 0
 
SET @fileDate = CONVERT(VARCHAR(4), YEAR(GETDATE()))+'-'
+ CONVERT(VARCHAR(2), MONTH(GETDATE()))
+'-'+CONVERT(VARCHAR(2), DAY(GETDATE()))
 
 
 
DECLARE db_cursor CURSOR FOR 
SELECT name
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  
 
OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @name  
 
WHILE @@FETCH_STATUS = 0  
BEGIN  
 
       SET @fileName = @path + @name + '_' + @fileDate + '.bak' 
       PRINT @fileName
       PRINT @name
       EXEC('BACKUP DATABASE [' + @name + '] TO DISK = ''' + @fileName + ''' WITH NOFORMAT, INIT, SKIP, NOREWIND, NOUNLOAD');
 
 
       FETCH NEXT FROM db_cursor INTO @name  
END  
 
CLOSE db_cursor
DEALLOCATE db_cursor
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 12h52   #7
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
Bonjour
ok cette fois c'est la bonne.
Tout marche bien,
merci beaucoup pour votre aide.
Bon week end
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h46.


 
 
 
 
Partenaires

Hébergement Web