2009-04-24 9 views
6

Environnement: SQL Server 2005 SP2 (9.0.3077) Publications transactionnelles (__gVirt_NP_NN_NNPS<__ Production et Beta)SQL Server 2005 Replication

J'ai une situation où j'ai deux différentes publications configuration de réplication qui utilisent certains des mêmes articles . Chacune de ces publications alimente un abonné sur une machine différente. L'un de ces articles partagés est un tableau. À intervalles réguliers, de nombreux enregistrements de ce tableau vieillissent et ne sont plus nécessaires. À ce moment une procédure stockée qui supprime des enregistrements est appelée. Pour économiser sur les ressources et améliorer les temps de latence pour les abonnés, j'ai défini la propriété replicate de cette procédure stockée sur "Exécution de la procédure stockée" au lieu de la valeur par défaut "Définition de procédure stockée uniquement". Ainsi, lorsque la procédure stockée supprime 2 000 000 d'enregistrements, ceux-ci ne sont pas répliqués vers les abonnés. Au lieu de cela, l'exécution de la procédure stockée est répliquée et la même procédure stockée répliquée sur les abonnés est exécutée et elle supprime les mêmes 2 000 000+ lignes.

Le problème que j'ai est avec ma deuxième publication. Comme je n'avais pas besoin de ce type de comportement, j'ai laissé la propriété article sur la procédure stockée définie sur "Définition de la procédure stockée uniquement" et attendait la réplication pour supprimer les lignes de l'autre abonné, mais ce n'était pas le cas. La table chez l'abonné a continué à gagner des records. Donc, pour le réparer, j'ai mis la propriété de l'article à "Exécution ..." et l'a appelé bon. Ce qui est probablement la meilleure solution, donc la version bêta correspond à la production, mais elle ressemble toujours à un kludge car les propriétés de la publication doivent fonctionner indépendamment les unes des autres. Question: Pourquoi la propriété article "Exécution de la procédure stockée" at-elle priorité et est-elle appliquée à l'autre publication même si elle est définie sur "Définition de la procédure stockée uniquement" dans l'autre publication?

+4

Ne voulant pas lire Stackoverlfow ici, mais cette question est une requête assez avancée de réplication SQL Server. Je suggère de l'afficher sur le forum de réplication de Microsoft SQL Server, puis de mettre à jour ce post avec les résultats. –

+2

Pendant que je travaille sur certaines choses de réplication maintenant, je suis d'accord avec John. C'est une question assez difficile. Bonne chance. :) Peut-être attendre jusqu'à ce que quelqu'un fasse querytimeout.com –

+3

D'accord, Hillary Cotter est un expert de la réplication bien connu et regarde le forum de réplication du serveur sql http://social.msdn.microsoft.com/Forums/en-US/sqlreplication –

Répondre

2

nous utilisons la réplication largement dans notre société que nous avons 38 entrepôts dans plusieurs pays répliquent tous vers notre serveur principal à Londres. En premier lieu, vos filtres de réplication doivent utiliser des vues, même les plus simples. De cette façon, si vous avez besoin d'ajuster le filtre (lisez la clause WHERE), vous avez juste besoin de modifier la vue et votre travail. Sinon, vous devez re-publier vos données, et ré-inscrire tout le monde qui peut être une vraie douleur.

Vous avez mentionné que vous exécutez la même suppression sur l'abonné et l'éditeur pour les maintenir synchronisés. Cela envoie des frissons dans ma colonne vertébrale. Il vaut mieux les supprimer en un seul endroit et laisser le serveur répliquer aux abonnés les modifications apportées. Depuis SQL Server 2005, la réplication est très rapide et efficace maintenant. SQL 2000 était et est assez lent pour la réplication.Si vous utilisez SQL 2005/2008, assurez-vous que votre niveau de compatibilité (clic droit sur db, propriétés, options) est défini sur 90 (2005) ou 100 (2008). Cela fait basculer le serveur SQL vers les méthodes de réplication rapides et efficaces.

Une autre façon est de ne pas supprimer les données, mais de les conserver et de les filtrer en utilisant une clause where dans la publication.

0

Cela fait longtemps que je n'ai pas administré activement la réplication mais je soupçonne que la réponse a à voir avec l'architecture du log-reader et que vous partagez un article entre les publications. Ma compréhension est que le log-reader parcourra le journal et recherchera des opérations sur des éléments qui sont répliqués. Selon les paramètres de l'article, les modifications individuelles apportées aux données peuvent être enregistrées dans une table de la base de données de distribution ou un enregistrement de l'appel de procédure doit être publié. En tout cas, c'est une propriété de l'article et non la publication (s) que l'article est un membre. Je suppose (mais je n'ai pas testé et vérifié) que vous pouvez créer plusieurs articles sur le même objet de base de données et en avoir un avec @ type = 'logbased' et l'autre avec @ type = 'proc exec'

prenez tout cela avec une grande pincée de sel: bien que je développe maintenant sur SQL Server 2008, la dernière fois que je l'ai fait quoi que ce soit avec la réplication SQL était 7.

pjjH