none
Einrichtung Mergereplikation mit Datenbanktabellen die mehr als 246 Spalten besitzen. RRS feed

  • 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
    Donnerstag, 22. September 2011 13:29

Antworten

  • Hallo Zusammen,
    das ist leider eine Einschränkung, wenn auch dokumentiert:
    Spezifikationen der maximalen Kapazität für SQL Server
     
    Siehe 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üssen
    aber aus dem Artikel herausgefiltert werden, sodass maximal 246 Spalten
    veröffentlicht werden. Wenn Spaltennachverfolgung verwendet wird, kann die
    Basistabelle maximal 246 Spalten enthalten. Weitere Informationen zur
    Nachverfolgungsebene finden Sie im Abschnitt zur Nachverfolgungsebene unter
    und -lösung bei der Mergereplikation.
     Das bedeutet also auf jeden Fall eine Einschränkung auf 246 Spalten und
    damit eine Anpassung der Software, oder?
     Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu
     
     
    Freitag, 23. September 2011 08:19
    Beantworter
  • 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
    Falk Krahl
    Freitag, 23. September 2011 19:01

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
    Falk Krahl
    Donnerstag, 22. September 2011 14:14
  • Hallo Zusammen,
    das ist leider eine Einschränkung, wenn auch dokumentiert:
    Spezifikationen der maximalen Kapazität für SQL Server
     
    Siehe 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üssen
    aber aus dem Artikel herausgefiltert werden, sodass maximal 246 Spalten
    veröffentlicht werden. Wenn Spaltennachverfolgung verwendet wird, kann die
    Basistabelle maximal 246 Spalten enthalten. Weitere Informationen zur
    Nachverfolgungsebene finden Sie im Abschnitt zur Nachverfolgungsebene unter
    und -lösung bei der Mergereplikation.
     Das bedeutet also auf jeden Fall eine Einschränkung auf 246 Spalten und
    damit eine Anpassung der Software, oder?
     Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu
     
     
    Freitag, 23. September 2011 08:19
    Beantworter
  • 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


    Freitag, 23. September 2011 09:13
  • 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
    Falk Krahl
    Freitag, 23. September 2011 19:01
  • 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.

    Samstag, 24. September 2011 05:15
  • Die logischen Architektur der Replikation
    auf die verwendeten Begriffe ein:
    Das Replikationsveröffentlichungsmodell (Übersicht)
     
    <Zitat>
    Artikel ist die Bezeichnung für die Datenbankobjekte in einer
    Veröffentlichung. Eine Veröffentlichung kann unterschiedliche Arten von
    Artikeln enthalten – von Tabellen über Sichten bis hin zu gespeicherten
    Prozeduren und anderen Objekten. Wenn Tabellen als Artikel veröffentlicht
    werden, kann mithilfe von Filtern festgelegt werden, welche Spalten und
    Zeilen der Tabelle an die Abonnenten gesendet werden.
     
    </Zitat>
     
    Es sollte also möglich sein einen Artikel so zu definieren, dass maximal 246
    Spalten der Tabelle enthalten sind. Falls dies zur Anwendungslogik passt und
    die Gegenstelle sich auf diese Anzahl Spalten begrenzen kann, sollte es
    funktionieren.
     
    Im vorliegenden Szenario meine ich aber rausgehört zu haben, dass die
    Anwendung zwingend alle Spalten der Tabelle benötigt. Dann wäre eine
    Anpassung der Anwendung erforderlich.
     
    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu
     
     
    Montag, 26. September 2011 08:59
    Beantworter