Bonjour,
Je fait de l'administration SQL depuis quelques temps.
Et depuis tout ce temps, malgré les formations et les recherches, je ne suis pas satisfait de mes sauvegardes !
J'ai des petites bases. Entre 10 Mo et 5 Go.
J'ai des serveurs en SQL 2008
Certaines sont en mode de récupération simple : pas de problème : Je fais un backup database with init tous les soirs. Et je sais que je ne peux revenir qu'à la date de la sauvegarde. Et je sais que le fichier log est purger à l'occasion de la sauvegarde.
La plupart des bases sont en mode de récupération Complet : là est mon soucis.
Je fais une sauvegarde complète à 22:00 Les données d'abord avec backup database with init. Puis les log dans le même device avec backup log.
Ensuite toute les heures je fais une sauvegarde des log toujours dans le même device avec backp log.
Et à 21:30 chaque jour, je copie mon fichier device sur le réseau pour une sauvegarde "bande".
J'avais l'impression d'être propre avec cela.
Puis en regardant la taille de mes sauvegardes, je me dis que je dois pouvoir améliorer. En effet le premier backup log effectué juste après la sauvegarde data me parait très gros. Pourtant je croyais que le backup log purgeait le fichier des transactions ...
Bref je suis perdu. Il me manque quelquechose.
Est-il conseillé de valider toutes les transaction avec de faire la sauvegarde complète des data ? Comment ?
Pourquoi la première sauvegarde des log est-elle grosse ? En posant la question, je me demande si je n'ai pas trouvé la réponse ... Je fais en début de job de sauvegarde, un check (EXECUTE sp_MSForEachTable
@command1 ='DBCC CheckDB With NO_INFOMSGS') puis un rebuild index (voir script plus loin).
Comment m'organiser pour minimiser l'espace disque occupée par les sauvegardes, tout en étant heureux de pouvoir restaurer à toute heure ?
Merci de votre aide.
Ludovic.
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 DECLARE @Database VARCHAR(255) DECLARE @Table VARCHAR(255) DECLARE @cmd NVARCHAR(500) DECLARE @fillfactor INT SET @fillfactor = 90 DECLARE DatabaseCursor CURSOR FOR SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN ('master','model','msdb','tempdb','distrbution') ORDER BY 1 OPEN DatabaseCursor FETCH NEXT FROM DatabaseCursor INTO @Database WHILE @@FETCH_STATUS = 0 BEGIN SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT table_catalog + ''.'' + table_schema + ''.'' + table_name as tableName FROM ' + @Database + '.INFORMATION_SCHEMA.TABLES WHERE table_type = ''BASE TABLE''' -- create table cursor EXEC (@cmd) OPEN TableCursor FETCH NEXT FROM TableCursor INTO @Table WHILE @@FETCH_STATUS = 0 BEGIN -- SQL 2000 command --DBCC DBREINDEX(@Table,' ',@fillfactor) -- SQL 2005 command SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')' EXEC (@cmd) FETCH NEXT FROM TableCursor INTO @Table END CLOSE TableCursor DEALLOCATE TableCursor FETCH NEXT FROM DatabaseCursor INTO @Database END CLOSE DatabaseCursor DEALLOCATE DatabaseCursor
Partager