DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 953481 - Dernière mise à jour: vendredi 11 juillet 2008 - Version: 1.0

 
 
Bogue #: 50002854 (correctifs SQL)
Microsoft distribue les correctifs Microsoft SQL Server 2005 le biais comme un fichier téléchargeable. Les correctifs étant cumulatifs, chaque nouvelle version contient tous les correctifs et tous les correctifs de sécurité qui étaient fournis avec la précédente SQL Server 2005 version du correctif.

Sommaire

Symptômes

Envisagez le scénario suivant. Dans SQL Server 2005, vous pouvez configurer une composition de fusion. Vous ajoutez une table qui contient une colonne compteur à la composition de fusion et publipostage. Ensuite, vous insérez des données dans la table dans l'Éditeur. Vous synchronisez les données entre l'abonné et l'éditeur et puis vous essayez d'insérer des données supplémentaires dans l'éditeur. Dans ce scénario, le message d'erreur suivantes dans l'éditeur s'affiche :
Message 548, Niveau 16, État 2, ligne 1
Échec de l'insertion. Entre en conflit avec une identité plage vérifier contrainte dans la base de données ' DatabaseName », table répliquée « Schema. TableName », colonne « ColumnName ». Si la colonne des identités est automatiquement gérée par la réplication, mettre à jour la plage comme suit : pour le Publisher, exécutez sp_adjustpublisheridentityrange ; pour l'abonné, exécuter l'agent de distribution ou l'Agent de fusion.
Si vous essayez d'exécuter la procédure sp_adjustpublisheridentityrange stockées dans l'éditeur comme indiqué dans le message d'erreur, vous ne pouvez pas encore résoudre ce problème.

Ce problème se produit lorsque plusieurs agents de fusion et synchroniser les données en même temps pour la même composition de fusion et publipostage. Ce problème peut être aggravé si vous avez nombreux abonnés à la composition de fusion et publipostage.

Cause

Ce problème se produit car la valeur d'identité en cours de la table dans l'éditeur n'est pas dans la plage d'identité de la contrainte de vérification identité plage. Ce problème se produit lorsque plusieurs agents fusion essayez accroître la plage d'identité en même temps de création de la plage d'identité suivante sur l'éditeur.

Résolution

Le correctif de ce problème a été tout d'abord publié en mise à jour cumulative 8. Pour plus d'informations sur l'obtention de ce package de mise à jour cumulative de SQL Server 2005 Service Pack 2, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
951217  (http://support.microsoft.com/kb/951217/LN/ ) Package de cumulative mise à jour 8 pour SQL Server 2005 Service Pack 2
note Les versions étant cumulatifs, chaque nouvelle version de correctif contient tous les correctifs et tous les correctifs de sécurité qui étaient fournis avec la précédente SQL Server 2005 version du correctif. Microsoft recommande que vous considérez comme application de la version de correctif plus récente qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
937137  (http://support.microsoft.com/kb/937137/LN/ ) SQL Server 2005 crée publiés après que SQL Server 2005 Service Pack 2 a été publié
Les correctifs Microsoft SQL Server 2005 sont créés pour service packs SQL Server spécifiques. Vous devez appliquer un correctif SQL Server 2005 Service Pack 2 à une installation de SQL Server 2005 Service Pack 2. Par défaut, aucun correctif qui est fourni dans un service pack SQL Server est inclu dans le prochain service pack SQL Server.

Contournement

Pour contourner ce problème, vous devez empêcher plusieurs synchronisations fusion simultanées. Pour ce faire, définissez la max_concurrent_merge propriété sur la composition de fusion et en exécutant l'instruction suivante :
sp_changemergepublication '<PublicationName>', 'max_concurrent_merge', 1
Remarque après que vous utilisez cette solution de contournement, performances peuvent diminuer si vous avez plusieurs abonnés pour la composition. Ce problème se produit car qu'un seul abonnement pouvez synchroniser les données en un temps.

Statut

Microsoft a confirmé que c'est un problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations

Comment faire pour déterminer si vous rencontrez ce problème

Pour déterminer si vous rencontrez ce problème, procédez comme suit :
  1. Vérifiez que la valeur d'identité actuelle est inférieure à la limite inférieure de la première plage identité de la contrainte de vérification identité plage.

    Pour obtenir la valeur d'identité en cours, exécutez l'instruction suivante :
    SELECT IDENT_CURRENT ('<TableName>')
    Pour obtenir les plages d'identité de la contrainte de vérification identité plage, exécutez une des instructions suivantes :
    Relevé 1
    sp_helpconstraint '<TableName>'
    Instruction 2
    select * from MSmerge_identity_range
    where is_pub_range <>1
    AND artid IN 
     (select artid from sysmergearticles where name='<TableName>')
    AND subid in 
     (select subid from sysmergesubscriptions  MS
    join sysmergepublications MP 
    on MS.subscriber_server=MP.publisher
    AND MS.db_name = MP.publisher_db
    WHERE name='<PublicationName>'
    )
    
  2. Une trace du Générateur de profils SQL Server permet de déterminer si entrelacées exécutions de la procédure sp_MSsetup_publisher_idrange stockées sont démarrées par les sessions Agent de fusion distinctes de la même composition.

    Cependant, entrelacées exécutions de la procédure sp_MSsetup_publisher_idrange stockés ne pas toujours indiquent que vous rencontrez ce problème. Cela est dû au fait que SQL Server Profiler a été inactif lorsque l'occurrence d'origine de la synchronisation de fusion généré le premier message d'erreur. Toutefois, entrelacées exécutions de la procédure sp_MSsetup_publisher_idrange stockées augmenter la possibilité de rencontre ce problème.
  3. Vous pouvez trouver chevauchement des synchronisations de fusion et publipostage qui se produisent lorsque vous recevez le message d'erreur "548 se produit. Pour ce faire, vous pouvez consulter l'historique de fusion et publipostage dans la base de données de distribution. Pour ce faire, exécutez les instructions suivantes : max(time)
    Use distribution
    GO
    select session_id, agent_id, B.publication, min(time) as StartTime, max(time) as EndTime
    into #sessiontimes
    from dbo.MSmerge_history A
    join dbo.msmerge_agents B
    on A.agent_id = B.id
    group by session_id, agent_id, publication
    order by 3 desc
    GO
    -- The left side result is the original session. The right side result is the overlapping session.
    select A.*, B.* 
    from #sessiontimes A
    Join #sessiontimes B
    On B.StartTime >= A.StartTime
    AND B.StartTime <= A.EndTime
    AND A.session_id <> B.session_id
    And A.publication=B.publication
    Order By A.StartTime asc
    GO
    drop table #sessiontimes
    

Comment faire pour corriger existant endommagée tranches d'identité pour une table problématique

Après avoir installé la mise à jour cumulative ou après avoir utilisé la méthode décrite dans la section Solution de contournement, une plage endommagé identité existante dans une table n'est pas corrigée. Vous recevrez toujours les message d'erreur "548 si vous essayez d'insérer des données dans la table et synchroniser les données sur un abonné. Par conséquent, vous devez corriger manuellement les plages identité endommagées de la table. Pour ce faire, procédez comme suit.

note Ces étapes impliquent manuellement remplacer la valeur de départ identité actuelle de la table reseed correctement la valeur d'identité à l'éditeur. Dans l'état endommagé, la valeur identité actuelle est inférieure à la première plage identité dans la contrainte check fusion réplication identité plage. Les étapes augmenter manuellement la valeur d'identité à compris trouve dans la plage d'identité est définie par la contrainte check fusion réplication identité plage. Ces étapes supposent que les identités sont configurées de manière par ordre croissant et que L'incrément d'identité est configuré pour augmenter une valeur de 1.
  1. Vérifiez que la valeur d'incrément d'identité est 1 et que l'identité se poursuit en croissant manière. Vous pouvez obtenir la valeur d'incrément identité en exécuté la déclaration suivante dans l'éditeur :
    SELECT IDENT_INCR( '<TableName>')
  2. Exécutez l'instruction suivante dans l'Éditeur de trouver la valeur actuelle de la identité dans la colonne posant problème identité :
    DBCC CHECKIDENT ('<TableName>')
    Après avoir reçu le résultat, notez la valeur valeur d'identité en cours de comparaison dans les étapes ultérieures. Notez que le valye valeur actuelle de la colonne peut-être mal supérieure ou inférieure à la valeur d'identité en cours .

    Si la valeur valeur colonne actuelle est supérieure à la valeur valeur identité actuelle , la valeur de la colonne peut avoir provient à autres réplications dans la topologie et fusionnées correctement avec la réplication de publisher. Si la valeur valeur colonne actuelle est inférieure à la valeur d'identité en cours , les valeurs peuvent ont été insérés dans l'éditeur à la fois précédente à l'aide de SET IDENTITY_INSERT ON instruction avant la configuration de réplication de fusion et publipostage.
  3. Exécutez les instructions suivantes dans l'éditeur pour déterminer les tranches d'identité en cours de la plage d'identité vérifier contrainte pour la table problématique :
    Use <PublishedDatabaseName>
    GO
    sp_helpconstraint '<TableName>'
    GO
    
    Après avoir reçu le résultat, notez la valeur de la colonne constraint_keys de l'enregistrement où la valeur de la colonne constraint_name est « repl_identity_range_ GUID ». La valeur de GUID correspond à la valeur de la colonne artid pour l'article dans la table système sysmergearticles. Pour obtenir le GUID, exécutez l'instruction suivante : artid sélectionnez
    select artid from sysmergearticles where name = '<TableName>'
    la contrainte de vérification identité plage s'étend sur deux plages distincts. Les deux ensembles de plages est inutile d'être contiguë. Par exemple, la valeur de la colonne constraint_keys peut être comme suit :
    ([nomcolonne] > (1001) et [ColumnName]<=(2001)
    OU [nomcolonne] > (9001) et [ColumnName]<=(10001))
    note Cet article utilise cet exemple pour présenter le code dans le reste des étapes.

    Dans cet exemple, les plages s'étendre sur les valeurs de 1 000. 1 000 est la taille de plage par défaut. Toutefois, vous pouvez modifier la taille de plage d'identité à l'aide de l'une des méthodes suivantes :
    • Spécifiez le @pub_identity_range paramètre lorsque vous exécutez le sp_addmergearticle une procédure stockée.
    • Modifier la propriété taille plage abonné pour l'article dans la boîte de dialogue Propriétés de l'article .
  4. Si vous rencontrez le problème décrit dans la section « Symptômes », la valeur d'identité actuelle noté à l'étape 2 doit être inférieure à la limite inférieure de la première plage d'identité de la contrainte check plage identité noté à l'étape 3.

    Si la valeur identité actuelle dans l'étape 2 est supérieure à la limite supérieure de la seconde plage identité de la plage identité vérifier contrainte, résoudre le problème en utilisant la méthode est recommandée dans le message d'erreur. Par conséquent, vous devez exécuter la procédure sp_adjustpublisheridentityrange stockées dans l'éditeur.

    Pour plus d'informations sur la procédure sp_adjustpublisheridentityrange stockés, reportez-vous au site de Web MSDN (Microsoft Developer Network) suivant :
    http://msdn.microsoft.com/en-us/library/ms181527.aspx (http://msdn.microsoft.com/en-us/library/ms181527.aspx)
  5. Exécutez l'instruction suivante pour déterminer si les lignes sont dans les plages identité en cours de la contrainte identité plage vérification :
    SELECT COUNT(*) FROM TableName WHERE 
    ([ColumnName]>(1001) AND [ColumnName]<=(2001) 
    OR [ColumnName]>(9001) AND [ColumnName]<=(10001))
    
    notes
    • Si l'instruction renvoie la valeur 0, aucune ligne n'est dans les tranches d'identité en cours. Dans ce cas, passez à étape 6.
    • Si l'instruction renvoie une valeur qui est supérieure à 0, exécutez l'instruction suivante pour obtenir la valeur maximale d'identité dans les plages identité en cours :
      SELECT MAX(ColumnName) as MaxValue FROM TableName WHERE 
      ([ColumnName]>(1001) AND [ColumnName]<=(2001) OR 
      [ColumnName]>(9001) AND [ColumnName]<=(10001))
      
      Notez la valeur renvoyée et passez à étape 7.
  6. Reseed manuellement l'identité actuelle de la table problématique pour se trouvent dans une plage valide.

    Reseed l'identité actuelle à la valeur plus faible des tranches d'identité en cours plus 1. Par exemple, si la valeur plus faible des plages d'identité en cours est 1001, la première possible de plage valeur est 1002 parce que la fin faible de la tranche de la contrainte de vérification identité plage utilise plus que le signe (>). Pour cela, exécutez l'instruction suivante dans l'éditeur et passez à l'étape 8 :
    DBCC CHECKIDENT ('TableName', RESEED, 1002)
  7. Reseed manuellement l'identité actuelle de la table problématique pour se trouvent dans une plage valide.

    Supposons que L'incrément d'identité est 1. Reseed l'identité en cours la valeur que vous avez noté à l'étape 5, puis ajoutez 1. Par exemple, si la valeur notée à l'étape 5 est 1507, reseed l'identité actuelle à 1508. Pour ce faire, exécutez l'instruction suivante dans l'éditeur :
    DBCC CHECKIDENT ('TableName', RESEED, 1508)
  8. Effectuer un test pour déterminer si les nouvelles lignes peuvent être insérées dans la table dans la base de données d'éditeur sans erreur 548 produit.
Pour plus d'informations sur les fichiers sont modifiés et pour des informations sur les conditions préalables pour appliquer le package de mise à jour cumulative qui contient le correctif qui est décrit dans cet article de la base de connaissances Microsoft, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
951217  (http://support.microsoft.com/kb/951217/LN/ ) Package de cumulative mise à jour 8 pour SQL Server 2005 Service Pack 2

Références

Pour plus d'informations sur la liste des builds sont disponibles après SQL Server Service Pack 2, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
937137  (http://support.microsoft.com/kb/937137/LN/ ) SQL Server 2005 crée publiés après que SQL Server 2005 Service Pack 2 a été publié
Pour plus d'informations sur le modèle de service incrémentiel pour SQL Server, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
935897  (http://support.microsoft.com/kb/935897/LN/ ) Un modèle de service incrémentielle est disponible auprès de l'équipe SQL Server pour fournir des correctifs pour les problèmes signalés
Pour plus d'informations sur la façon d'obtenir SQL Server 2005 Service Pack 2, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
913089  (http://support.microsoft.com/kb/913089/LN/ ) Comment obtenir le dernier pack service pour SQL Server 2005
Pour plus d'informations sur les nouvelles fonctionnalités et les améliorations dans SQL Server 2005 Service Pack 2, reportez-vous au site de Web Microsoft suivant :
http://go.microsoft.com/fwlink/?LinkId=71711 (http://go.microsoft.com/fwlink/?LinkId=71711)
Pour plus d'informations sur le schéma d'appellation pour SQL Server mises à jour, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
822499  (http://support.microsoft.com/kb/822499/LN/ ) Nouveau modèle d'affectation de noms pour les packages de correctifs logiciels Microsoft SQL Server
Pour plus d'informations sur la terminologie mise à jour logicielles, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
824684  (http://support.microsoft.com/kb/824684/ ) Description de la terminologie standard utilisée pour décrire les mises à jour logicielles Microsoft

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Workgroup Edition
Mots-clés : 
kbmt kbhotfixrollup kbfix kbpubtypekc kbqfe kbexpertiseadvanced kbhotfixserver kbautohotfix kbsql2005repl KB953481 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 953481  (http://support.microsoft.com/kb/953481/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store