| 

.NET C# Java Javascript Exception

2
Eine MSSQL-Serverdatenbank wurde mit alten Daten gefüttert. Der neu aufzusetzenden Replikation haben die alten rowguids nicht in den Kram gepasst, und der Replikationsagent (wenn der es war) hat eine Spalte rowguid5, rowguid6 oder rowguid7 daneben geworfen. Die alte "rowguid" hat keinen COLUMN_DEFAULT mehr, die neuen Spalten rowguid# haben jetzt als COLUMN_DEFAULT newsequentialid(), was für sich genommen schon mal dafür spricht, dass die neue rowguid# die rowguid-Rolle im Replikationstheater übernommen hat. Nun spricht Verschiedenes dafür, dass die rowguid-Spalten doch wieder rowguid heißen.

In sys.columns gibt es eine Spalte is_rowguidcol mit boolean-Werten. Die scheint mir die rowguid-Rolle zu steuern. Die Beziehung zur sys.tables ist mir aber nicht klar. In sys.columns gibt es eine object_id, die käme für derartige Beziehungen in Frage, findet sich aber in sys.tables nicht wieder. Über die Beziehung könnte eine 3. view Auskunft geben, welche? In information_schema.columns gibt es die Spalte table_name, aber nicht is_rowguidcol, darüber komme ich auch nicht weiter.

Also, welche Schrauben kann und sollte ich drehen, um den "alten" Zustand wiederherzustellen? Oder läuft es darauf raus, die alten rowguid-Spalten zu löschen, die rowguid#-Spalten jeweils in rowguid umzubenennen, oder beide? Und dann, reicht es, die snapshots zu reinitialisieren? Wahrscheinlich nicht, wahrscheinlich muss ich dann die Replikation neu aufsetzen.

Vielleicht gibt's ja auch eine oder mehrere System-Stored Procedures, die mir in dieser Situation helfen? Oder es gibt einen Weg, die SELECTs hinter den sys.- und information_schema.-Views und damit die Tabellenbeziehungen dahinter rauszukriegen?

Danke im Voraus für's Mitdenken.
07.11.2012
mupan 575 1 8
mupan 575 1 8
1 Antwort
0
Es ist doch die object_id. Ich hab gedacht, sys.tables hat eine eineindeutige object_id-Spalte, und sys.columns hat eine. Es ist aber genau das Verbindungsfeld. Dann kann ich das ja in einer Testumgebung mal ausprobieren, ob nach einem manuellen Umwidmen der rowguid-Spalte die Replikation noch tut.

Edit 12:50 Uhr: Wenig überraschend, lässt sys.columns (eine Systemsicht) keine "ad-hoc-Bearbeitung" zu. Die Spur funktioniert also nicht. Hinter den Views stecken aber Tabellen z.B. in der msdb, als Admin komm ich da vermutlich ran. Eine stored procedure etwa wäre mir aber 10-mal lieber, als ein Gefummel an System-Tabellen. Das ist immer last resort.

Edit 20121109 1100h: Ich hab's gefunden, ich hab zu kompliziert gedacht, T-SQL bietet das theoretisch an: http://msdn.microsoft.com/en-us/library/ms190273%28v=sql.105%29.aspx, auf der sehr langen Seite nach [ {ADD | DROP} ROWGUIDCOL ] suchen. Jetzt muss es nur auch noch funktionieren ;-)

Edit 20121109 1545h: Geht schon, aber nur, wenn die Tabelle vorher aus der Publikation rausgenommen wird. Also in einem Wartungszeitfenster.
08.11.2012
mupan 575 1 8
mupan 575 1 8

Stelle deine Sql-server-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH