Benutzer mit den meisten Antworten
Einrichtung Mergereplikation mit Datenbanktabellen die mehr als 246 Spalten besitzen.

Frage
-
Hallo Community,
wir möchten gerne unser Produkt (CRM/Auftragsabwicklung/Fakturieren für Unternehmen aus der Aballwirtschaft) in einer SQL-Server-Umgebung mit "MergeReplikation" einsetzen.
OS: Windows Server 2008 R2
SQL-Server: 2008 R2
Aktuelle Service-Paks und Updates sind installiert.
Leider treffen wir schon bei der Einrichtung der Mergereplikation auf dem ersten SQL-Server (Verleger!) auf folgende Fehlermeldung beim Abschluss der Einrichtung über den Assistenten:
Meldungen· SQL Server Management Studio konnte den EntAuftrag-Artikel nicht erstellen. (Assistent für neue Veröffentlichung)
------------------------------
ZUSÄTZLICHE INFORMATIONEN:
Ausnahme beim Ausführen einer Transact-SQL-Anweisung oder eines Transact-SQL-Batches. (Microsoft.SqlServer.ConnectionInfo)
------------------------------
Der Artikel kann für die [dbo].[EntAuftrag]-Tabelle nicht erstellt werden, da mehr als 246 Spalten darin enthalten sind.
Der Datenbankkontext wurde auf 'david_replication' geändert. (Microsoft SQL Server, Fehler: 20068)
Hilfe erhalten Sie durch Klicken auf: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1600&EvtSrc=MSSQLServer&EvtID=20068&LinkId=20476
------
Wie die Fehlermeldung richtig besagt, enthält unsere Datenbank zwei Tabellen ("EN" + "EntAuftrag") in denen mehr als 246 Spalten definiert sind (ein mal 248 und ein mal 350 Spalten).
Eine erste Recherche ergab, dass dieses Limit von 246 Spalten erst mit der SQL-Server Version 2005 eingeführt wurde und das vorher mehr Spalten möglich waren. Die Frage die sich nun für uns ergibt : was können wir tun?
Im Rahmen eines großen Projektes muss die Integration unserer Datenbank mit Mergereplikation zwingend ermöglicht werden. Gibt es hier einen Workaround, der mehr als 246 Spalten pro Tabelle ermöglicht? Oder ist die einzige Möglichkeit das "splitten" der großen Tabellen in Teiltabellen? Wie wurden dann alte Systeme die davon betroffen waren auf SQL 2005/2008 migriert?
Ein splitten der Tabelle kommt auf Grund des Aufwands der damit verbunden ist eigentlich kaum in Frage. Daher hoffe ich, hier eine alternative Lösung zu finden.
Mit freundlichen Grüßen,C.Groebel
- Typ geändert 2rsoftware_Groebel Freitag, 23. September 2011 14:59 Falsch als Diskussion angelegt
Antworten
-
Hallo Zusammen,das ist leider eine Einschränkung, wenn auch dokumentiert:Spezifikationen der maximalen Kapazität für SQL ServerSiehe hier auch den folgenden Hinweis zur Mergereplikation:Wenn Zeilennachverfolgung zur Konflikterkennung verwendet wird (Standard),kann die Basistabelle maximal 1.024 Spalten enthalten. Die Spalten müssenaber aus dem Artikel herausgefiltert werden, sodass maximal 246 Spaltenveröffentlicht werden. Wenn Spaltennachverfolgung verwendet wird, kann dieBasistabelle maximal 246 Spalten enthalten. Weitere Informationen zurNachverfolgungsebene finden Sie im Abschnitt zur Nachverfolgungsebene unter(http://msdn.microsoft.com/de-de/library/ms151749.aspx) Konflikterkennungund -lösung bei der Mergereplikation.Das bedeutet also auf jeden Fall eine Einschränkung auf 246 Spalten unddamit eine Anpassung der Software, oder?Einen schönen Tag noch,Christoph--Microsoft SQL Server MVPwww.insidesql.org/blogs/cmu
- Als Antwort markiert 2rsoftware_Groebel Samstag, 24. September 2011 05:15
-
Hallo Herr Groebel,
Was genau wird hier als "Artikel" bezeichnet? Lässt sich auf einer Tabelle die mehr als 246 Spalten besitzt festlegen, welche Spalten synchronisert werden sollen? Wenn ja, wäre das keine Alternative die geprüft werden sollte?
Ja, genau ist dies zu verstehen. Werden denn wirklich alle Spalten benötigt oder sind da nicht einige Spalten dabei die mit Standardwerten aus den Werten anderer Spalten gefüllt werden können?
Wenn die Datenbanktabellen unter keinen Umständen mehr als 246 Spalten besitzen dürfen, scheint die Anpassung / das "splitten" der Tabelle die einzige Möglichkeit zu sein.
Sollte die oben genannte Möglichkeit wirklich nicht machbar sein, so ist dies die einzige Alternative.
Gruß Falk
- Als Antwort markiert 2rsoftware_Groebel Samstag, 24. September 2011 05:15
Alle Antworten
-
Hallo Herr Groebel,
wenn ich mich richtig erinnere, gilt diese Einschränkung nur bei der Anwendung der Nachverfolgung auf Spaltenebene. Bei der Anwendung der Nachverfolgung auf Zeilenebene ist die Spaltenanzahl auf 1024 beschränkt, was in Ihrem Falle ausreichend wäre.
Spricht etwas gegen diese Umstellung?
Gruß Falk
-
Hallo Zusammen,das ist leider eine Einschränkung, wenn auch dokumentiert:Spezifikationen der maximalen Kapazität für SQL ServerSiehe hier auch den folgenden Hinweis zur Mergereplikation:Wenn Zeilennachverfolgung zur Konflikterkennung verwendet wird (Standard),kann die Basistabelle maximal 1.024 Spalten enthalten. Die Spalten müssenaber aus dem Artikel herausgefiltert werden, sodass maximal 246 Spaltenveröffentlicht werden. Wenn Spaltennachverfolgung verwendet wird, kann dieBasistabelle maximal 246 Spalten enthalten. Weitere Informationen zurNachverfolgungsebene finden Sie im Abschnitt zur Nachverfolgungsebene unter(http://msdn.microsoft.com/de-de/library/ms151749.aspx) Konflikterkennungund -lösung bei der Mergereplikation.Das bedeutet also auf jeden Fall eine Einschränkung auf 246 Spalten unddamit eine Anpassung der Software, oder?Einen schönen Tag noch,Christoph--Microsoft SQL Server MVPwww.insidesql.org/blogs/cmu
- Als Antwort markiert 2rsoftware_Groebel Samstag, 24. September 2011 05:15
-
Hallo Herr Muthmann,
vielen Dank für diese Klarstellung. Was mir jedoch nicht klar wird, ist der folgende Satz:
Die Spalten müssen aber aus dem Artikel herausgefiltert werden, sodass maximal 246 Spalten
veröffentlicht werden.
Was genau wird hier als "Artikel" bezeichnet? Lässt sich auf einer Tabelle die mehr als 246 Spalten besitzt festlegen, welche Spalten synchronisert werden sollen? Wenn ja, wäre das keine Alternative die geprüft werden sollte?
Wenn die Datenbanktabellen unter keinen Umständen mehr als 246 Spalten besitzen dürfen, scheint die Anpassung / das "splitten" der Tabelle die einzige Möglichkeit zu sein.
Mit freundlichen Grüßen,
C.Groebel
- Bearbeitet 2rsoftware_Groebel Freitag, 23. September 2011 09:40
-
Hallo Herr Groebel,
Was genau wird hier als "Artikel" bezeichnet? Lässt sich auf einer Tabelle die mehr als 246 Spalten besitzt festlegen, welche Spalten synchronisert werden sollen? Wenn ja, wäre das keine Alternative die geprüft werden sollte?
Ja, genau ist dies zu verstehen. Werden denn wirklich alle Spalten benötigt oder sind da nicht einige Spalten dabei die mit Standardwerten aus den Werten anderer Spalten gefüllt werden können?
Wenn die Datenbanktabellen unter keinen Umständen mehr als 246 Spalten besitzen dürfen, scheint die Anpassung / das "splitten" der Tabelle die einzige Möglichkeit zu sein.
Sollte die oben genannte Möglichkeit wirklich nicht machbar sein, so ist dies die einzige Alternative.
Gruß Falk
- Als Antwort markiert 2rsoftware_Groebel Samstag, 24. September 2011 05:15
-
Hallo Herr Krahl,
vielen Dank! Wie es aussieht, wird das splitten der Tabelle mit 350 Spalten die einzige Option sein. Die Konsequenzen sind leider enorm wenn man den "Rattenschawanz" betrachtet der durch solche Eingriffe in einem System mit mehreren Jahren Entwicklungszeit entsteht.
---
Thema geschlossen.
-
Die logischen Architektur der Replikation(http://msdn.microsoft.com/de-de/library/bb500355.aspx) geht unter anderemauf die verwendeten Begriffe ein:Das Replikationsveröffentlichungsmodell (Übersicht)<Zitat>Artikel ist die Bezeichnung für die Datenbankobjekte in einerVeröffentlichung. Eine Veröffentlichung kann unterschiedliche Arten vonArtikeln enthalten – von Tabellen über Sichten bis hin zu gespeichertenProzeduren und anderen Objekten. Wenn Tabellen als Artikel veröffentlichtwerden, kann mithilfe von Filtern festgelegt werden, welche Spalten undZeilen der Tabelle an die Abonnenten gesendet werden.</Zitat>Es sollte also möglich sein einen Artikel so zu definieren, dass maximal 246Spalten der Tabelle enthalten sind. Falls dies zur Anwendungslogik passt unddie Gegenstelle sich auf diese Anzahl Spalten begrenzen kann, sollte esfunktionieren.Im vorliegenden Szenario meine ich aber rausgehört zu haben, dass dieAnwendung zwingend alle Spalten der Tabelle benötigt. Dann wäre eineAnpassung der Anwendung erforderlich.Einen schönen Tag noch,Christoph--Microsoft SQL Server MVPwww.insidesql.org/blogs/cmu