Hallo zusammen,
ich habe schon recht umfangreich nach meinem Problem gegoogelt und viele Hinweise aber keine Lösung gefunden.
Suchbegriff: "The Publisher failed to allocate a new set of identity ranges for the subscription"
Wir haben zuerst MsSQL 2005 SP3 verwendet und haben mittlerweile auf MsQL 2008 R2 umgestellt, in der Hoffnung, dass da das Problem gelöst ist. Leider nicht.
Das Problem ist folgendes:
Wir lassen auf einem Server eine Merge Replikation laufen und spielen so Teile einer DB per VPN auf einen anderen Server. Die Tabellen verwenden alle einen Spalte ID vom Typ Int die wie folgt deklariert ist:
Mit
kann man schön erkennen welche ID-Ranges vergeben worden sind. In unserem Beispiel steht
Normalerweise hätte ich erwartet, dass MsSQL mit der ID automatisch in next_range weitermacht, wenn der erste Range aufgebraucht ist. Tatsächlich kommt aber eine Fehlermeldung sobald man mehrere neue Datensätze anlegt und dabei range_end überschreitet.
Der Anwender bekommt den Fehler
In der nächsten Replikation steht im Protokoll die Meldung
Keine Ahnung was der Hinweis "...Konvertierung des nvarchar...", denn ID ist sicher Int und RowGuid uniqueidentifier.
Bevor man nun die Stored procedure sp_adjustpublisheridentityrange aufruft, müssen erst alle Anwender die DB verlassen. Sobald sp_adjustpublisheridentityrange dann ausgeführt ist. Klappt Neuvergabe und Replikation wieder einwandfrei. Bis das Bandende wieder erreicht ist.
Was mach ich falsch oder was läuft hier falsch?
Vielen Dank für jegliche Unterstützung
Gerd
ich habe schon recht umfangreich nach meinem Problem gegoogelt und viele Hinweise aber keine Lösung gefunden.
Suchbegriff: "The Publisher failed to allocate a new set of identity ranges for the subscription"
Wir haben zuerst MsSQL 2005 SP3 verwendet und haben mittlerweile auf MsQL 2008 R2 umgestellt, in der Hoffnung, dass da das Problem gelöst ist. Leider nicht.
Das Problem ist folgendes:
Wir lassen auf einem Server eine Merge Replikation laufen und spielen so Teile einer DB per VPN auf einen anderen Server. Die Tabellen verwenden alle einen Spalte ID vom Typ Int die wie folgt deklariert ist:
- Datentyp int
- (Ist Identity) Ja
- ID-Ausgangswert 1
- ID-Inkrement 1
- Nicht für Replikation Ja
- und zusätzlich eine Spalte RowGUID
Mit
Code:
select * from MSmerge_identity_range order by next_range_end desc
- range_begin 5693228
- range_end 5694228
- next_range_begin 5697228
- next_range_begin 5698228
Normalerweise hätte ich erwartet, dass MsSQL mit der ID automatisch in next_range weitermacht, wenn der erste Range aufgebraucht ist. Tatsächlich kommt aber eine Fehlermeldung sobald man mehrere neue Datensätze anlegt und dabei range_end überschreitet.
Der Anwender bekommt den Fehler
Fehler beim Einfügen. Es lag ein Konflikt mit einer Einschränkung für die Identitätsbereichsüberprüfung in der YYY-Datenbank in der replizierten Tabelle XXX vor. Falls die Identitätsspalte automatisch von der Replikation verwaltet wird, aktualisieren Sie den Bereich wie folgt: Führen Sie sp_adjustpublisheridentityrange für den Verleger und den Verteilungs-Agent oder den Merge-Agent für den Abonnenten aus.
The Publisher failed to allocate a new set of identity ranges for the subscription. This can occur when a Publisher or a republishing Subscriber has run out of identity ranges to allocate to its own Subscribers or when an identity column data type does not support an additional identity range allocation. If a republishing Subscriber has run out of identity ranges, synchronize the republishing Subscriber to obtain more identity ranges before restarting the synchronization. If a Publisher runs out of identit (Quelle: MSSQL_REPL, Fehlernummer: MSSQL_REPL-2147199417)
Hilfe abrufen: http://help/MSSQL_REPL-2147199417
Fehler beim Konvertieren des nvarchar-Datentyps in numeric. (Quelle: MSSQLServer, Fehlernummer: 8114)
Hilfe abrufen: http://help/8114
Hilfe abrufen: http://help/MSSQL_REPL-2147199417
Fehler beim Konvertieren des nvarchar-Datentyps in numeric. (Quelle: MSSQLServer, Fehlernummer: 8114)
Hilfe abrufen: http://help/8114
Bevor man nun die Stored procedure sp_adjustpublisheridentityrange aufruft, müssen erst alle Anwender die DB verlassen. Sobald sp_adjustpublisheridentityrange dann ausgeführt ist. Klappt Neuvergabe und Replikation wieder einwandfrei. Bis das Bandende wieder erreicht ist.
Was mach ich falsch oder was läuft hier falsch?
Vielen Dank für jegliche Unterstützung
Gerd
Comment