Non renouvellement des plages d'identités d'une réplication de fusion

Le
Test recherche
Bonjour
Je dispose d'un serveur SQL 2005 x 64 (9.0.4207) sur un windows 2003 serveur
x64. 2 processeurs avec 4 cores chacun soit 8 cores au total, 2.93Ghz, 12 Go
de ram.

J'ai une réplication de fusion entre ce serveur qui est l'éditeur et deux
abonnés (un sql 2005 et un sql 2000).

Régulièrement j'ai une erreur de ce style
L'instruction INSERT est en conflit avec la contrainte CHECK
'repl_identity_range_4748231C_3C2B_45AF_B529_F604D965DB3A'. Le conflit s'est
produit dans la base de données 'XXXXXXX', table 'dbo.XXXXX', column
'id_XXXX'.

- L'instruction a été arrêtée.



J'ai constaté que l'éditeur ou l'abonné est au bout de sa plage d'identité
et lors de la tentative d'ajout d'un enregistrement la dernière valeur de la
plage d'identité est continuellement fourni.



J'ai bien un travail qui éxecute toutes les minutes la commande Exec
sp_adjustpublisheridentityrange @publication = 'Réplication de fusion', mais
cela ne sert à rien.

J'ai agrandi mes plages, baissé mon seuil, cela retarde juste l'erreur.



Certaine de mes tables ont des plages de 10000 avec un seuil à 70 % et une
chose est sûre la plage ne se renouvelle pas une fois le seuil dépassé.

Et cela attend, pour certaines tables, le dernier moment, ce qui lors de
gros traitement provoque ces erreurs.



Est ce que quelqu'un sait comment résoudre ce problème.

Merci d'avance



Très cordialement

Stéphane
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Med Bouchenafa
Le #21128371
Dans l'urgence, sauvegarde ton journal meme dans le vide
Cela a pour effet de le vider
Il faut ensuite tout de suite apres faire un BACKUP complet de ta base

Bien cordialement
Med Bouchenafa


"Test recherche" news:hke630$29s$
Bonjour
Je dispose d'un serveur SQL 2005 x 64 (9.0.4207) sur un windows 2003
serveur
x64. 2 processeurs avec 4 cores chacun soit 8 cores au total, 2.93Ghz, 12
Go
de ram.

J'ai une réplication de fusion entre ce serveur qui est l'éditeur et deux
abonnés (un sql 2005 et un sql 2000).

Régulièrement j'ai une erreur de ce style
L'instruction INSERT est en conflit avec la contrainte CHECK
'repl_identity_range_4748231C_3C2B_45AF_B529_F604D965DB3A'. Le conflit
s'est produit dans la base de données 'XXXXXXX', table 'dbo.XXXXX', column
'id_XXXX'.

- L'instruction a été arrêtée.



J'ai constaté que l'éditeur ou l'abonné est au bout de sa plage d'identité
et lors de la tentative d'ajout d'un enregistrement la dernière valeur de
la plage d'identité est continuellement fourni.



J'ai bien un travail qui éxecute toutes les minutes la commande Exec
sp_adjustpublisheridentityrange @publication = 'Réplication de fusion',
mais cela ne sert à rien.

J'ai agrandi mes plages, baissé mon seuil, cela retarde juste l'erreur.



Certaine de mes tables ont des plages de 10000 avec un seuil à 70 % et une
chose est sûre la plage ne se renouvelle pas une fois le seuil dépassé.

Et cela attend, pour certaines tables, le dernier moment, ce qui lors de
gros traitement provoque ces erreurs.



Est ce que quelqu'un sait comment résoudre ce problème.

Merci d'avance



Très cordialement

Stéphane






Med Bouchenafa
Le #21128361
Je pense qu'il faudra que tu passes par le support Microsoft
Il y a tellement d'aleas possibles

Bien cordialement
Med Bouchenafa

"Test recherche" news:hke630$29s$
Bonjour
Je dispose d'un serveur SQL 2005 x 64 (9.0.4207) sur un windows 2003
serveur
x64. 2 processeurs avec 4 cores chacun soit 8 cores au total, 2.93Ghz, 12
Go
de ram.

J'ai une réplication de fusion entre ce serveur qui est l'éditeur et deux
abonnés (un sql 2005 et un sql 2000).

Régulièrement j'ai une erreur de ce style
L'instruction INSERT est en conflit avec la contrainte CHECK
'repl_identity_range_4748231C_3C2B_45AF_B529_F604D965DB3A'. Le conflit
s'est produit dans la base de données 'XXXXXXX', table 'dbo.XXXXX', column
'id_XXXX'.

- L'instruction a été arrêtée.



J'ai constaté que l'éditeur ou l'abonné est au bout de sa plage d'identité
et lors de la tentative d'ajout d'un enregistrement la dernière valeur de
la plage d'identité est continuellement fourni.



J'ai bien un travail qui éxecute toutes les minutes la commande Exec
sp_adjustpublisheridentityrange @publication = 'Réplication de fusion',
mais cela ne sert à rien.

J'ai agrandi mes plages, baissé mon seuil, cela retarde juste l'erreur.



Certaine de mes tables ont des plages de 10000 avec un seuil à 70 % et une
chose est sûre la plage ne se renouvelle pas une fois le seuil dépassé.

Et cela attend, pour certaines tables, le dernier moment, ce qui lors de
gros traitement provoque ces erreurs.



Est ce que quelqu'un sait comment résoudre ce problème.

Merci d'avance



Très cordialement

Stéphane






Med Bouchenafa
Le #21133671
Desolé,
Cette reponse s'appliquait plutot au message de Hithlain

Bien cordialement
Med Bouchenafa

"Med Bouchenafa" news:
Dans l'urgence, sauvegarde ton journal meme dans le vide
Cela a pour effet de le vider
Il faut ensuite tout de suite apres faire un BACKUP complet de ta base

Bien cordialement
Med Bouchenafa


"Test recherche" news:hke630$29s$
Bonjour
Je dispose d'un serveur SQL 2005 x 64 (9.0.4207) sur un windows 2003
serveur
x64. 2 processeurs avec 4 cores chacun soit 8 cores au total, 2.93Ghz, 12
Go
de ram.

J'ai une réplication de fusion entre ce serveur qui est l'éditeur et deux
abonnés (un sql 2005 et un sql 2000).

Régulièrement j'ai une erreur de ce style
L'instruction INSERT est en conflit avec la contrainte CHECK
'repl_identity_range_4748231C_3C2B_45AF_B529_F604D965DB3A'. Le conflit
s'est produit dans la base de données 'XXXXXXX', table 'dbo.XXXXX',
column 'id_XXXX'.

- L'instruction a été arrêtée.



J'ai constaté que l'éditeur ou l'abonné est au bout de sa plage
d'identité et lors de la tentative d'ajout d'un enregistrement la
dernière valeur de la plage d'identité est continuellement fourni.



J'ai bien un travail qui éxecute toutes les minutes la commande Exec
sp_adjustpublisheridentityrange @publication = 'Réplication de fusion',
mais cela ne sert à rien.

J'ai agrandi mes plages, baissé mon seuil, cela retarde juste l'erreur.



Certaine de mes tables ont des plages de 10000 avec un seuil à 70 % et
une chose est sûre la plage ne se renouvelle pas une fois le seuil
dépassé.

Et cela attend, pour certaines tables, le dernier moment, ce qui lors de
gros traitement provoque ces erreurs.



Est ce que quelqu'un sait comment résoudre ce problème.

Merci d'avance



Très cordialement

Stéphane








SQLpro
Le #21151921
Bonjour,

La réplication de fusion, fait partie des choses les plus complexes à
administrer. C'est la pire des réplication et elle devrait être
réservée à quelques cas particulier. Mieux vaut utiliser les mode
transactionnel ou snapshot.
Pour la réplication de fusion, Il faut la penser au niveau du modèle.
Le fait de décaler des plages de clef n'est pas la panacée. Pour ma
part j'utilise une chose très simple. Par exemple si j'estime qu'au
maximum il n'y aura jamais plus de 100 machines qui répliquent, alors
chaque version de la base reçoit un IDENTITY (n, 100) dans chacune des
clef des tables, avec pour la première base n = 1, pour la deuxième
n=2, pour la 3e n = 3, etc. Ainsi il n'y a jamais de recouvrement des
clefs.

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage
SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning,
optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var
Technologies
*********************** http://www.sqlspot.com
*************************


On 4 fév, 11:09, "Test recherche"
Bonjour
Je dispose d'un serveur SQL 2005 x 64 (9.0.4207) sur un windows 2003 serv eur
x64. 2 processeurs avec 4 cores chacun soit 8 cores au total, 2.93Ghz, 12 Go
de ram.

J'ai une réplication de fusion entre ce serveur qui est l'éditeur et deux
abonnés (un sql 2005 et un sql 2000).

Régulièrement j'ai une erreur de ce style
L'instruction INSERT est en conflit avec la contrainte CHECK
'repl_identity_range_4748231C_3C2B_45AF_B529_F604D965DB3A'. Le conflit s' est
produit dans la base de données 'XXXXXXX', table 'dbo.XXXXX', column
'id_XXXX'.

                     - L'instruction a été arr êtée.

J'ai constaté que l'éditeur ou l'abonné est au bout de sa plage d'i dentité
et lors de la tentative d'ajout d'un enregistrement la dernière valeur de la
plage d'identité est continuellement fourni.

J'ai bien un travail qui éxecute toutes les minutes la commande Exec
sp_adjustpublisheridentityrange @publication = 'Réplication de fusion ', mais
cela ne sert à rien.

J'ai agrandi mes plages, baissé mon seuil, cela retarde juste l'erreur.

Certaine de mes tables ont des plages de 10000 avec un seuil à 70 % et une
chose est sûre la plage ne se renouvelle pas une fois le seuil dépass é.

Et cela attend, pour certaines tables, le dernier moment, ce qui lors de
gros traitement  provoque ces erreurs.

Est ce que quelqu'un sait comment résoudre ce problème.

Merci d'avance

Très cordialement

    Stéphane


Serguei Tarassov
Le #21156751
On 04/02/2010 11:09, Test recherche wrote:
Bonjour
Je dispose d'un serveur SQL 2005 x 64 (9.0.4207) sur un windows 2003 serveur
x64. 2 processeurs avec 4 cores chacun soit 8 cores au total, 2.93Ghz, 12 Go
de ram.

J'ai une réplication de fusion entre ce serveur qui est l'éditeur et deux
abonnés (un sql 2005 et un sql 2000).

Régulièrement j'ai une erreur de ce style
L'instruction INSERT est en conflit avec la contrainte CHECK
'repl_identity_range_4748231C_3C2B_45AF_B529_F604D965DB3A'. Le conflit s'est
produit dans la base de données 'XXXXXXX', table 'dbo.XXXXX', column
'id_XXXX'.

- L'instruction a été arrêtée.



J'ai constaté que l'éditeur ou l'abonné est au bout de sa plage d'identité
et lors de la tentative d'ajout d'un enregistrement la dernière valeur de la
plage d'identité est continuellement fourni.



J'ai bien un travail qui éxecute toutes les minutes la commande Exec
sp_adjustpublisheridentityrange @publication = 'Réplication de fusion', mais
cela ne sert à rien.

J'ai agrandi mes plages, baissé mon seuil, cela retarde juste l'erreur.



Certaine de mes tables ont des plages de 10000 avec un seuil à 70 % et une
chose est sûre la plage ne se renouvelle pas une fois le seuil dépassé.

Et cela attend, pour certaines tables, le dernier moment, ce qui lors de
gros traitement provoque ces erreurs.



Est ce que quelqu'un sait comment résoudre ce problème.

Merci d'avance



Très cordialement

Stéphane




Stéphane,

Apriori, t'a un problème au niveau de conception.
Pour la réplication bidirectionnelle il faut éviter absolument les
identificateurs qui ne sont pas unique globalement (comme "identity").
Les solution possibles :
- passe sur les GUIDs (uniqueidentificator)
- gère les IDs de type entière à la main
Par exemple ID = ID du serveur * 10000000 + ID généré dans la BD (11 *
1000000 + 12345 = 110012345)

En plus, la replication de fusion ne te garantie pas toujours que la
ligne de table "parent" sera transmet avant la ligne de table "enfant"
ce que provoque les erreurs d'intégrité référentiel.

A+
Serguei TARASSOV
MCITP SQL Server Dev/DBA
http://sgbd.arbinada.com
Publicité
Poster une réponse
Anonyme