Zuverlässigkeit der Migration

Wenn Sie Schema, Daten und Metadaten von einer Quelldatenbank zu einer Zieldatenbank migrieren, möchten Sie sicherstellen, dass alle Informationen korrekt migriert werden. Database Migration Service bietet einen zuverlässigen Mechanismus zum Migrieren von Datenbankobjekten (einschließlich Schema, Daten und Metadaten) von PostgreSQL zu AlloyDB for PostgreSQL.

Während des Migrationsprozesses werden Daten und Einschränkungen in strukturierten Phasen migriert. Die Daten werden zuerst während des ersten Snapshot-Ladevorgangs migriert. Einschränkungen wie Primärschlüssel, Fremdschlüssel und Indexe werden nach Abschluss des ersten Ladevorgangs im Zielcluster neu erstellt.

Die folgenden Daten-, Schema- und Metadatenkomponenten werden im Rahmen der Datenbankmigration migriert:

Daten

  • Alle Tabellen und Schemas aus Datenbanken, die für die Migration ausgewählt wurden, mit Ausnahme der folgenden Systemschemas:

    • Das Informationsschema (information_schema)
    • Alle Schemas, die mit pg_ beginnen (z. B. pg_catalog, pg_toast)

    Weitere Informationen zu diesen Systemschemas finden Sie unter Bekannte Einschränkungen.

    Sie können während einer laufenden Migration Datenbanken zu einem Migrationsjob hinzufügen oder daraus entfernen. Wenn Sie eine Datenbank entfernen, wird die Replikation für diese Datenbank beendet, ohne dass die bereits migrierte Datenbank im Zielcluster gelöscht wird. Weitere Informationen finden Sie unter Migrationsjob bearbeiten.

Schema

  • Objektbenennung

  • Primärschlüssel

  • Datentypen

  • Ordinale Spaltenpositionen

  • Standardwerte

  • Null-Zulässigkeit

  • Identitäts- und Serienattribute

  • Sekundäre Indexe

Metadaten

  • Gespeicherte Prozeduren

  • Funktionen

  • Trigger

  • Aufrufe

  • Fremdschlüsselbeschränkungen

Kontinuierliche Migration

DML-Änderungen (Datenbearbeitungssprache) wie INSERT-, UPDATE- und DELETE-Vorgänge für Tabellen mit einem Primärschlüssel oder einer Replikatidentität werden bei kontinuierlichen Migrationen automatisch repliziert.

Wenn während des Migrationsprozesses Änderungen an der Datendefinitionssprache (DDL) in Ihrer Quelldatenbank vorgenommen werden, müssen Sie Ihren Zielcluster aktualisieren, damit Ihre Datenbanken kompatibel bleiben. Sie können die DDL-Änderungen auf folgende Weise vornehmen:

  1. Manuelle DDL-Ausführung: Beenden Sie Schreibvorgänge in der Quelldatenbank, führen Sie die DDL-Befehle in der Quelldatenbank aus und führen Sie die entsprechenden DDL-Befehle in der Zieldatenbank aus. Bevor Sie DDL-Befehle auf dem Ziel ausführen, weisen Sie dem AlloyDB for PostgreSQL-Nutzer, der die Änderungen anwendet, die Rolle alloydbexternalsync zu.

  2. Replizierte DDL-Befehle mit pglogical: Sie können pglogical.replicate_ddl_command verwenden, um DDL sowohl auf der Quell- als auch auf der Zieldatenbank an einem konsistenten Punkt im Replikationsstream auszuführen. Das Konto, das diesen Befehl ausführt, muss sowohl auf der Quell- als auch auf der Zielinstanz übereinstimmende Anmeldedaten haben und ein Superuser oder der Inhaber des geänderten Objekts sein.

Die folgenden Tabs enthalten SQL-Beispielbefehle für gängige DDL-Vorgänge mit pglogical.replicate_ddl_command:

Tabellen mit Primärschlüsseln

Spalte zu einer Tabelle mit einem Primärschlüssel hinzufügen

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)',
  '{default}'
);

Name einer Tabelle mit einem Primärschlüssel ändern

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]',
  '{default}'
);

Tabelle mit einem Primärschlüssel erstellen

Führen Sie die folgenden Befehle in der Quelldatenbank aus:

SELECT pglogical.replicate_ddl_command(
  command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);',
  replication_sets := ARRAY['default']
);
SELECT pglogical.replication_set_add_table('default', '[SCHEMA].[TABLE_NAME]');

Tabellen ohne Primärschlüssel

Spalte zu einer Tabelle ohne Primärschlüssel hinzufügen

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)',
  '{default_insert_only}'
);

Name einer Tabelle ohne Primärschlüssel ändern

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]',
  '{default_insert_only}'
);

Tabelle ohne Primärschlüssel erstellen

Führen Sie die folgenden Befehle in der Quelldatenbank aus:

SELECT pglogical.replicate_ddl_command(
  command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER, name VARCHAR);',
  replication_sets := ARRAY['default_insert_only']
);
SELECT pglogical.replication_set_add_table('default_insert_only', '[SCHEMA].[TABLE_NAME]');

Was wird nicht migriert?

  • Nutzer und Berechtigungen: Anmeldedaten und Rollen von Nutzern werden nicht migriert. Wenn Sie zum ersten Mal eine Verbindung zu einem neuen Zielcluster herstellen, verwenden Sie das postgres-Konto. Da es sich um einen verwalteten Dienst handelt, können PostgreSQL-Nutzer in AlloyDB for PostgreSQL keine SUPERUSER-Berechtigungen haben. Weitere Informationen finden Sie in der AlloyDB for PostgreSQL-Dokumentation unter Datenbanknutzer verwalten.

  • Nicht unterstützte Erweiterungen: Database Migration Service migriert keine Erweiterungen, die von AlloyDB for PostgreSQL nicht unterstützt werden. Das Vorhandensein dieser Erweiterungen blockiert den Migrationsjob nicht, aber bei Anwendungen, die auf nicht unterstützte Erweiterungen verweisen, können Fehler auftreten. Eine Liste der unterstützten Erweiterungen finden Sie in der AlloyDB for PostgreSQL-Dokumentation unter Unterstützte Datenbankerweiterungen.

  • Große Objekte: Große PostgreSQL-Objekte (Datentyp oid, der auf pg_largeobject verweist) werden nicht durch logische Decodierung repliziert.

  • Tabellen ohne Primärschlüssel: Database Migration Service migriert den ersten Snapshot und repliziert INSERT-Anweisungen während der CDC-Phase. Für UPDATE- und DELETE-Anweisungen:

    • Standardmigrationen: Bei Standardmigrationen müssen Ihre Tabellen Primärschlüssel haben, um UPDATE- und DELETE-Anweisungen zu replizieren.

    • Schnellstart-Migrationen: Bei Schnellstart-Migrationen sind keine Primärschlüssel erforderlich, um UPDATE- und DELETE-Vorgänge zu replizieren, wenn Sie die Replikatidentität auf INDEX oder FULL festlegen. Durch die Konfiguration von REPLICA IDENTITY FULL erhöht sich das WAL-Volumen (Write-Ahead Log) und der Ressourcenaufwand. Es wird empfohlen, nach Möglichkeit einen Primärschlüssel hinzuzufügen. Weitere Informationen finden Sie in der PostgreSQL-Dokumentation zur Replikatidentität und im Schnellstart-Migrationsleitfaden.

  • Materialisierte Ansichten: Database Migration Service migriert Definitionen materialisierter Ansichten, aber nicht die zugrunde liegenden im Cache gespeicherten Daten. Führen Sie nach der Migration REFRESH MATERIALIZED VIEW view_name aus, um materialisierte Ansichten am Ziel zu füllen.

  • Sequenzstatus: Die aktuellen Werte von Sequenzen (z. B. last_value) im Zielcluster können sich während des laufenden CDC von der Quelle unterscheiden. Sequenzwerte werden während des letzten Hochstufungsschritts synchronisiert.

  • Benutzerdefinierte Tablespaces: AlloyDB for PostgreSQL unterstützt keine benutzerdefinierten Tablespaces. In benutzerdefinierten Tablespaces definierte Objekte werden in AlloyDB for PostgreSQL automatisch dem Standard-Tablespace pg_default zugeordnet.

Nächste Schritte