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 02/01/2011, 14h30   #1
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 770
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 770
Points : 1 833
Points : 1 833
Par défaut Sauvegarde et copie distante

Bonjour à tous,
Je suis en train de mettre en place un système de maintenance sur un serveur comportant plusieurs instance MS SQL Server.
J'ai commencé à utiliser les plans de maintenance intégré puis je suis finalement parti sur un véritable package SSIS qui me permet entre autre d'utiliser des tâches de copie de fichiers.


J'opère donc mes maintenances, sauvegardes complètes et des journaux de transaction dans les répertoires par défaut de chacune des instances.
Une tâche de nettoyage s'occupe de virer les .bak vieux de plus de 3 jours et les .trn de la journée.
Il faut ensuite que je déplace ces fichiers, notamment sur un serveur différent afin de prévenir d'un crash complet du serveur de base de données.

C'est là que les questions commencent...
Est-ce bien à chaque processus (full, système, journaux * toutes les instances) de copier ses fichiers vers un répertoire distant ?

Comment opérer le nettoyage des fichiers sur le répertoire distant pour conserver les .bak :
- des 5 derniers jours
- du dernier dimanche pendant 1 mois.

Est-ce que je centralise les fichiers de sauvegarde vers un répertoire globale sur le serveur de DB pour ensuite mettre en place le processus de copie vers l'autre serveur + suppression des sauvegardes hors date ?

Merci pour vos idées et bonnes pratiques.
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 00h23   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 665
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 665
Points : 8 707
Points : 8 707
Bonjour,

Citation:
st-ce bien à chaque processus (full, système, journaux * toutes les instances) de copier ses fichiers vers un répertoire distant ?
Malheureusement je n'ai jamais eu l'occasion d'utiliser des plans de maintenance pour effectuer des sauvegardes.

Ce que je sais c'est qu'en utilisant des instruction T-SQL, vous pouvez effectuer un BACKUP en copiant les fichiers de sauvegarde sur un autre serveur en utilisant la clause MIRROR TO.
Je ne sais pas si cela est possible dans un plan de maintenance.

Citation:
Comment opérer le nettoyage des fichiers sur le répertoire distant pour conserver les .bak :
- des 5 derniers jours
- du dernier dimanche pendant 1 mois.
De ce que j'ai pu lire sur les plans de maintenance, il n'est pas possible d'utiliser des variables dans les packages SSIS sous-jacents aux plans de maintenance, donc vous ne pouvez pas faire calculer au package la nom du fichier qui doit être supprimé.

Le mieux est donc de créer une tâche d'exécution de lot SQL dans lequel vous appelez une procédure stockée.
Cette procédure stockée interroge la table d'historique des sauvegardes de bases de données : c'est dbo.backupset dans la base de données système msdb.
Intéressez vous notamment aux colonnes database_name, backup_start_date et backup_finish_date, qui vous permettront de trouver les bons noms de fichiers de sauvegardes.
Vous serez ensuite obligé d'appeler la procédure stockée étendue xp_cmdshell pour supprimer le fichier à l'aide de la commande DOS DEL.

Sinon vous pouvez écrire une procédure stockée d'assembly qui se charge de faire cela pour vous, et appelez là dans votre package SSIS, de la même façon.

Malheureusement cela fait plus d'un objet à copier pour votre plan de maintenance standard ...

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 07h46   #3
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 770
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 770
Points : 1 833
Points : 1 833
En fait des plans de maintenance, je suis passé à de véritable packages SSIS qui utilisent seulement les tâches de maintenance. Je profite donc de toute la puissance des packages SSIS.

Merci pour l'idée des tables systèmes d'enregistrement de backup. J'étais d'ailleurs tombé sur ce billet qui les utilise et j'allais m'en inspirer.

SI vous n'utilisez que des scripts et non des tâches SSIS de maintenance, même de cette manière, qu'elle est la politique, un peu générale que vous utilisez ?
Vous utilisez la commande backup avec un MIRROR TO pour déplacer les fichiers sur un autre serveur ?
Ou est-ce un agent extérieur qui s'occupe du déplacement, nettoyage etc. ?


Merci.
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 14h34   #4
Membre régulier
 
Homme Christian Brossault
Administrateur de base de données
Inscription : avril 2006
Messages : 52
Détails du profil
Informations personnelles :
Nom : Homme Christian Brossault
Âge : 39
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : avril 2006
Messages : 52
Points : 72
Points : 72
Bonjour,

Si vous utilisez toutes les fonctionnalités de SSIS (et non pas seulement les outils liés au plan de maintenance), vous pouvez faire des scripts pour vos sauvegardes en pointant directement vers un "backup device" (périphérique de sauvegarde) qui va écrire vos fichiers .bak sur un serveur distant.
== backup database [ma_base] to [mon_peripherique] with...
Vous pouvez aussi utiliser les variables du package pour définir un nom à votre fichier .bak avec un compteur (date + heure par exemple si vous faites plusieurs sauvegardes quotidiennes).
Vous pouvez aussi définir une période de rétention à vos sauvegardes pour que sql server les suppriment automatiquement au bout de x jours.
Sinon, en fonction de la méthode que vous souhaitez mettre en place, vous pouvez faire appel à une procédure stockée qui va procéder à ces nettoyages.

Christian
Christianbt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 16h39   #5
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,

@Elsuket

Citation:
Ce que je sais c'est qu'en utilisant des instruction T-SQL, vous pouvez effectuer un BACKUP en copiant les fichiers de sauvegarde sur un autre serveur en utilisant la clause MIRROR TO.
Je ne sais pas si cela est possible dans un plan de maintenance.
Non pas possible

@Jinroh77

Citation:
C'est là que les questions commencent...
Est-ce bien à chaque processus (full, système, journaux * toutes les instances) de copier ses fichiers vers un répertoire distant ?
Il y a plusieurs façons de faire. Vous pouvez par exemple implémenter cette tâche dans votre package SSIS directement ou l'externaliser via une tâche planifiée et un script vbs ou powershell ...

Vous parlez de plusieurs instances sur un serveur mais votre package SSIS sera présent sur chaque serveur ou vous allez faire un package "centralisé" ?

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 17h08   #6
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 770
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 770
Points : 1 833
Points : 1 833
Citation:
Envoyé par mikedavem Voir le message
@Jinroh77

Il y a plusieurs façons de faire. Vous pouvez par exemple implémenter cette tâche dans votre package SSIS directement ou l'externaliser via une tâche planifiée et un script vbs ou powershell ...

Vous parlez de plusieurs instances sur un serveur mais votre package SSIS sera présent sur chaque serveur ou vous allez faire un package "centralisé" ?
++
J'ai créé un package par instance. aintenance pus compliquée mais au moins je peux préciser ce que je souhaite sauvegarder par instance.

Par contre, le package qui s'occupe de récupérer les sauvegardes, les déplacer, les nettoyer est lui, unique et déclenché par 1 seul job sur 1 instance que j'ai sélectionné.
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 13h38   #7
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 770
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 770
Points : 1 833
Points : 1 833
Finalement j'ai créé un nouveau package qui s'occupe du nettoyage de tous les fichiers de toutes les instances.
Celui-ci boucle sur une liste des instances et pour chacune il interroge les tables de la msdb pour récupérer tous les noms de fichier de backup sur un laps de temps.
Je filtre etc. pour ne garder que les fichiers que je souhaite supprimer (le tout est en 1 requête entièrement variabilisée dans mon package).

Ensuite pour chacun, il extrait le nom du fichier et le fait précéder du nom UNC de mon répertoire de backup. Cette liste passe enfin dans une boucle forEach avec un script C# qui pour chacun des paths, vérifie si le fichier existe puis le supprime.
Jinroh77 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 14h42.


 
 
 
 
Partenaires

Hébergement Web