2010-12-08 9 views
0

Unser Unternehmen verwendet Sybase und wir planen die Einrichtung eines Mobilink-Systems (Datenreplikationssystem). Wir müssen daher von der Verwendung von Autoinkrement-Spalten zu globalen Autoincrememnt-Spalten wechseln.Autoincrement-Spalte in globale Autoinkrement-Spalte ändern

Meine Frage ist, welche Schritte ich tun muss, um dies richtig funktionieren zu lassen. Es gibt bereits Tausende von Datenzeilen, die den regulären Autoinkrement-Standardwert verwenden.

Ich denke, ich muss eine neue Spalte mit einem Standard der globalen Autoincrement erstellen, füllen Sie mit Daten (Anzahl (*)), schalten Sie die PK, die alten FK fallen lassen, die alte Spalte löschen, umbenennen die neue Spalte zu der alten, dann wenden Sie die FKs wieder an.

Gibt es einen einfacheren Weg, um das zu erreichen, was ich hier brauche?

danke!

Antwort

1

Das ist im Allgemeinen der Weg, um darüber zu gehen. Aber es gibt einige spezifische Aussagen, die Sie machen, die mir Sorge bereiten. Auch die Reihenfolge. Ich bin mir Ihrer Erfahrung nicht sicher, die von Ihnen verwendeten Begriffe können korrekt sein oder nicht.

Für jede Tabelle ...

... schalten Sie den PK es

Was ist mit den FK-Werte in den untergeordneten Tabellen? Oder meinst du, du wirst sie auch ändern?

... fallen die alte FK des

Ok, dass die Einschränkung ist.

... die alte Spalte löschen, die neue Spalte in die alte umbenennen und dann die FKs erneut anwenden.

Was genau meinst du damit? Fügen Sie die FK-Bedingung wieder hinzu? Das ändert nicht die bestehenden Daten, es wird auf alle neuen Zeilen hinzugefügt werden.

Ich hoffe, Sie sehen, was ich meine von die Reihenfolge Ihrer Aufgaben ist verdächtig. Bevor Sie die old_PK_column in der Eltern fallen, müssen Sie:

  1. die abgelegten FK Einschränkungen in jedem Kind Tabelle hinzufügen.

  2. Für jede untergeordnete Tabelle: AKTUALISIEREN Sie alle FK-Werte auf die Spalte new_PK_.

  3. Lassen Sie die alte_PK_Spalte fallen.

+0

Ihre Kommentare am Ende (die 1,2,3) sind, was ich in anderen Terminologie gesagt habe. Vielen Dank! wird Ihnen ein Häkchen geben :) – numone

+0

noch ein bisschen neu auf der Website, fertig. :) – numone

+0

@numone. Vielen Dank! Weitere Fragen, bitte posten. – PerformanceDBA

1

Sie ändern nur die Art und Weise PK Werte erzeugt werden, so ist es genug:

ALTER TABLE <table> 
    modify <column> default global autoincrement (1000000); 

eine Partitionsgröße von 1,000,0000

Auch zu verwenden stellen Sie sicher, die eingestellt globale Datenbank-Kennung in jedem db, zum Beispiel:

SET OPTION PUBLIC.global_database_id = 10; 

Also das nächste PK, die erzeugt werden, ist 10000001