Auf dieser Seite wird erläutert, wie Sie Oracle-Tabellen migrieren, die keine Primärschlüssel haben.
Automatische Primärschlüsselgenerierung beschreibt, wie Database Migration Service mit Quelltabellen ohne Primärschlüssel umgeht.
Unter Fehlende Primärschlüssel manuell hinzufügen finden Sie Beispielabfragen, mit denen Sie fehlende Primärschlüssel in Ihrem konvertierten Schema hinzufügen können.
Übersicht über die automatische Primärschlüsselgenerierung
Bei Tabellen ohne Primärschlüssel kann keine konsistente Replikation garantiert werden. Database Migration Service migriert nur Tabellen mit Primärschlüsseln. Wenn Ihre Quelldatenbank Tabellen ohne Primärschlüssel enthält, kann Database Migration Service dies auf folgende Weise verarbeiten:
- Wenn Sie
Ihren Quellcode und Ihr Schema konvertieren, kann Database Migration Service
automatisch alle fehlenden
Primärschlüssel erstellen, indem er
ROWIDSpalten in den Zieltabellen hinzufügt. Für diesen automatisierten Prozess müssen Ihre Quelltabellen folgende Voraussetzungen erfüllen:- Sie dürfen keine Primärschlüssel haben.
- Sie dürfen keine
UNIQUE-Einschränkung ohne Spalten mit Nullwerten haben. - Sie dürfen keinen
UNIQUE-Index ohne Spalten mit Nullwerten haben.
- In Legacy-Konvertierungsarbeitsbereichen erstellt Database Migration Service keine Primärschlüssel. Wenn Sie einen Legacy-Konvertierungsarbeitsbereich verwenden, müssen Sie die fehlenden Primärschlüssel manuell zu den Tabellen im konvertierten PostgreSQL-Schema hinzufügen.
Fehlende Primärschlüssel manuell hinzufügen
So migrieren Sie Oracle-Tabellen ohne Primärschlüssel:
- Verwenden Sie einen Konvertierungsarbeitsbereich, um Ihren Quellcode und Ihr Schema zu konvertieren.
- Informationen zu Standard-Konvertierungsarbeitsbereichen finden Sie unter Quellcode und -schema konvertieren.
- Informationen zu Legacy-Konvertierungsarbeitsbereichen finden Sie unter Mit Legacy-Konvertierungsarbeitsbereichen arbeiten.
- Stellen Sie mit einem SQL-Client eine Verbindung zu Ihrer Cloud SQL-Zielinstanz her. Sie
haben folgende Möglichkeiten:
-
psqlClient. Mit dieser Methode können Sie eine Verbindung zu Ihrer Instanz über die private IP-Adresse herstellen. Dazu müssen Sie jedoch möglicherweise eine Compute Engine-VM erstellen. -
gcloud sql connect-Befehl. Dieser Befehl funktioniert nur für Cloud SQL-Instanzen, für die eine öffentliche IP-Adresse aktiviert ist.
-
- Erstellen Sie die fehlenden Primärschlüsseleinschränkungen für Ihre Tabellen. Weitere Informationen zu Primärschlüsseln finden Sie in der PostgreSQL-Dokumentation unter
Primärschlüssel.
Sie können auch die folgenden Abschnitte maximieren, um SQL-Beispielbefehle zu sehen:
Primärschlüssel mit vorhandenen Spalten erstellen
Ihre Tabelle hat möglicherweise bereits einen logischen Primärschlüssel, der auf einer Spalte oder einer Kombination von Spalten basiert. Beispielsweise können Spalten mit einer eindeutigen Einschränkung oder einem eindeutigen Index konfiguriert sein. Verwenden Sie diese Spalten, um einen neuen Primärschlüssel für Tabellen in Ihrer Quelldatenbank zu generieren. Beispiel:
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME);
Ersetzen Sie Folgendes:
- TABLE_NAME durch den Namen Ihrer Tabelle ohne Primärschlüssel.
- COLUMN_NAME durch den Namen einer Spalte mit einer eindeutigen Einschränkung oder einem eindeutigen Index, die Sie als Primärschlüssel verwenden können.
Primärschlüssel mit allen Spalten erstellen
Wenn Sie keine vorhandene Einschränkung haben, die als Primärschlüssel dienen könnte, erstellen Sie Primärschlüssel mit allen Spalten der Tabelle. Achten Sie darauf, dass Sie die maximale Länge des Primärschlüssels, die von Ihrer PostgreSQL-Instanz zulässig ist, nicht überschreiten.
Wenn Sie auf diese Weise einen zusammengesetzten Primärschlüssel erstellen, müssen Sie explizit alle Spaltennamen auflisten, die Sie verwenden möchten. Es ist nicht möglich, eine Anweisung zu verwenden, um alle Spaltennamen für diesen Zweck abzurufen. Beispiel:
ALTER TABLE TABLE_NAME ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);
Ersetzen Sie Folgendes:
- TABLE_NAME durch den Namen Ihrer Tabelle ohne Primärschlüssel.
- COLUMN_NAME_1, COLUMN_NAME_2 usw. durch die Namen der Spalten, die Sie zum Erstellen des Primärschlüssels verwenden möchten.
Eindeutige Einschränkung mit der Pseudospalte
ROWIDerstellenIn Oracle-Datenbanken wird die
ROWIDPseudospalte verwendet, um die Position jeder Zeile in einer Tabelle zu speichern. Wenn Sie Oracle-Tabellen ohne Primärschlüssel migrieren möchten, können Sie in der PostgreSQL-Zieldatenbank eineROWIDSpalte hinzufügen. Database Migration Service füllt die Spalte mit den entsprechenden numerischen Werten aus der Oracle-ROWIDPseudospalte der Quelle.Führen Sie Folgendes aus, um die Spalte hinzuzufügen und als Primärschlüssel festzulegen:
ALTER TABLE TABLE_NAME ADD COLUMN rowid numeric(33,0) NOT NULL; CREATE SEQUENCE TABLE_NAME_rowid_seq INCREMENT BY -1 START WITH -1 OWNED BY TABLE_NAME.rowid; ALTER TABLE TABLE_NAME ALTER COLUMN rowid SET DEFAULT nextval('TABLE_NAME_rowid_seq'); ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_DISPLAY_NAME PRIMARY KEY (rowid);
Ersetzen Sie Folgendes:
- TABLE_NAME durch den Namen der Tabelle, in der Sie die Spalte hinzufügen möchten.
- CONSTRAINT_DISPLAY_NAME durch die Kennung für die
PRIMARY KEY-Einschränkung.
Nächste Schritte
- Mit Konvertierungsarbeitsbereichen weiterarbeiten.
- Weitere Informationen zu den mit Gemini unterstützten Konvertierungsfunktionen.