2011-01-13 14 views
1

Wir haben eine große Datenmigration von einem DB-Schema zum anderen entwickelt. Wir hatten es basierend auf der Idee aufgebaut, dass die Ziel-Datenbank leer sein würde, aber vor Monaten haben wir angefangen, Clients auf die neue Anwendung zu setzen, was bedeutet, dass ihre Daten in dem neuen Schema (der Ziel-DB) untergebracht sind.SSIS-Datenmigration Primäre Schlüsselidentitätskonflikte

Jetzt befinden wir uns in einer Situation, in der sich die Primärschlüssel von der Quell- zur Ziel-DB überschneiden könnten und wir kämpfen darum, eine Lösung zu finden. Die einzige Lösung, die ich mir vorstellen kann, besteht darin, zu überprüfen, ob die ID im Ziel existiert, die ID in der Quelle auf 1 mehr als die größte ID im Ziel zu aktualisieren und dann den Datensatz zu migrieren. Dies scheint für Hunderte von Tabellen wirklich mühsam zu sein. Irgendwelche Ideen?

+0

Ist es möglich, nur die Tabellen zwei Sätze haben, die Sie mit Blick beitreten? Es ist normalerweise keine gute Idee, mit dem Bearbeiten von PKs zu beginnen, wenn Sie Datensätze einfügen - Sie werden die Datenintegritätsprobleme für eine lange Zeit kaskadieren. – JNK

Antwort

2

Entschuldigung, ich weiß nichts über SSIS, aber die folgenden sind einige Möglichkeiten, das Problem mit SQL zu lösen.

Fügen Sie beim Einfügen in die Zieltabellen keine Identitäten ein. Wenn Zeilen eingefügt werden, erfassen Sie die neu eingefügten Identitäten und die alten Identitäten in einer Zuordnungstabelle, siehe MERGE + OUTPUT INTO. Verwenden Sie die Zuordnungstabelle, um die Tabellen zu aktualisieren, die nicht eingefügt wurden, und ersetzen Sie die alten Identitäten durch die neuen Identitäten.

Damit dies funktioniert, muss das Einfügen in Tabellen in einer Reihenfolge erfolgen, die keine Verletzung von Fremdschlüsseln oder Einschränkungen verursacht.

Wenn Sie nicht in all das zu tun, und Sie können Benutzer sperren aus Tabellen für kurze Zeiträume, DBCC CHECK SPIEGELSTRICH könnte ‚Reserve‘ Identitäten verwendet werden. Diese neuen Identitäten können dann verwendet werden, um die alten Daten zu aktualisieren und dann mit SET IDENTITY_INSERT ON einzufügen.

Verwandte Themen