2008-12-03 6 views
2

Nous avons une base de données sur SQL Server 2000 qui devrait être tronquée de temps en temps. Il semble que la solution la plus simple consisterait à créer une base de données en double et à y copier la base de données primaire. Ensuite, la base de données primaire peut être tronquée en toute sécurité par des procédures stockées spécialement adaptées.Quelle est la fiabilité de la réplication du serveur SQL?

La réplication unidirectionnelle garantirait que la base de données de sauvegarde contient toutes les mises à jour de la base de données principale.

Nous prévoyons d'utiliser la base de données de sauvegarde pour la création de rapports et les données primaires pour les données opérationnelles. La base de données principale sera tronquée la nuit une fois tous les deux jours. La base de données est plusieurs gigaoctets. Seules plusieurs tables sont assez grandes (1-2 mln lignes)

Quels sont les pièges possibles? Quelle serait la fiabilité d'une telle solution? Ralentira-t-il la base de données primaire?

Mise à jour: Variante avec DTS pour faire de la copie bien mais présente ses propres inconvénients. Il nécessite un script assez robuste qui fonctionnerait pendant environ une heure pour copier les lignes mises à jour. Il y a aussi un problème avec les contraintes d'intégrité dans la base de données primaire qui rendrait la tâche non triviale tronquée. En raison de cette réplication, le froid redresse considérablement les choses.

Il est également possible, mais pas tout à fait une bonne variante d'utiliser VIEW union parce que le système qui woks la plupart du temps en mode sans surveillance whiteout personnel de soutien dédié. C'est une question connexe mais pas technique cependant.

Répondre

4

Bien que la réplication soit généralement robuste, il existe des cas où elle peut se casser et nécessiter une actualisation. La gestion et la maintenance de la réplication peuvent devenir compliquées. Une fois la base de données primaire tronquée, vous devez vous assurer que cette action n'est pas répliquée. Vous pouvez également avoir besoin d'un système d'identification de ligne amélioré car après avoir tronqué plusieurs fois les tables de la base de données primaire, vous aurez toujours un historique complet dans votre base de données secondaire.

Il y a une baisse des performances sur l'éditeur (principal) car des threads supplémentaires doivent être exécutés pour lire le journal des transactions. À moins que vous ne soyez lourdement chargé pour le moment, vous ne remarquerez probablement pas cet effet. La gestion du journal des transactions peut également devenir plus importante. Au lieu de cela, j'examinerais une solution différente pour votre problème. Par exemple, avant de tronquer, vous pouvez effectuer une sauvegarde de la base de données et la restaurer en tant que nouveau nom de base de données. Vous disposez alors d'une copie de la base de données telle qu'elle était avant la troncature, et vous pouvez interroger les deux à la fois en utilisant des noms en trois parties.

Vous avez mentionné que le but des données secondaires est de maintenir le rapport désactivé. Dans ce cas, vous pouvez créer une vue comme SELECT * FROM Primaire.dbo.Table UNION ALL SELECT * FROM SecondaireDBJune2008.dbo.Table UNION ALL SELECT * FROM SecondaryDBOctober2008.dbo.Table. Vous devriez ensuite garder cette vue à jour chaque fois que vous effectuez une troncature.

L'autre solution consisterait à prendre un instantané des données actuelles avant la troncature et à l'insérer dans une base de données de rapports unique. Alors vous auriez juste les bases de données primaires et historiques - pas besoin de modifier les vues une fois qu'elles ont été créées.

De combien de données parlons-nous en GB? Comme vous prévoyez d'effectuer la troncature une fois tous les deux jours, je recommanderais la deuxième alternative, l'instantané des données avant la troncature dans une base de données historique unique. Cela peut être facilement fait avec un travail SQL Agent, sans avoir à se soucier de la réplication en gardant les deux ensembles de données synchronisés.

+0

Nous avons besoin de toutes les anciennes données disponibles pour les rapports. Donc, la sauvegarde/restauration n'aiderait pas. – Din

+0

J'ai mis à jour avec quelques idées sur la façon dont vous pouvez toujours signaler à partir d'une sauvegarde/restauration. –

2

Je n'utiliserais pas de réplication pour cela. Nous avons une configuration de réplication assez complexe fonctionnant avec plus de 80 branches répliquant quelques tables vers une base de données centrale. Lorsque la connectivité diminue pendant quelques jours, les problèmes de gestion des données sont liés à l'élévation des cheveux.

Si vous souhaitez archiver des données plus anciennes, utilisez plutôt DTS. Vous pouvez ensuite créer la copie et la troncation/suppression de données dans le même package DTS, en le définissant de sorte que la suppression ne se produise que si la copie a réussi.

+0

Malheureusement, sans répétition, les choses se compliquent également. Mais bon côté, c'est qu'ils sont complexes dès le départ, ce qui signifie qu'un seul script de copie fait beaucoup moins de problèmes par la suite. – Din

Questions connexes