

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# DDL und verteilte Transaktionen in Aurora DSQL
<a name="working-with-ddl"></a>

Data Definition Language (DDL) verhält sich in Aurora DSQL anders als in PostgreSQL. Aurora DSQL verfügt über eine verteilte Multi-AZ-Datenbankschicht und Shared-Nothing-Datenbankebene, die auf Mehrmandanten-Rechen- und Speicherflotten aufbaut. Da es keinen einzelnen primären Datenbankknoten oder Leader gibt, wird der Datenbankkatalog verteilt. Somit verwaltet Aurora DSQL DDL-Schemaänderungen als verteilte Transaktionen.

Insbesondere verhält sich DDL in Aurora DSQL wie folgt anders:

**Antworten zur Steuerung der Parallelität**  
Da der Datenbankkatalog verteilt ist, verwaltet Aurora DSQL DDL-Schemaänderungen als verteilte Transaktionen, die die Katalogversion aktualisieren. Sitzungen, bei denen eine Kopie des Katalogs in einer früheren Version zwischengespeichert wurde, können bei der nächsten Interaktion mit dem Speicher eine Antwort zur Parallelitätssteuerung mit SQLSTATE-Code `40001` und OCC-Code `OC001` erhalten.  
Betrachten Sie beispielsweise die folgende Abfolge von Aktionen:  

1. In Sitzung 1 fügt ein Benutzer eine Spalte zur Tabelle `mytable` hinzu. Dadurch wird die Katalogversion aktualisiert.

1. In Sitzung 2 versucht ein Benutzer, eine Zeile in`mytable` einzufügen. In dieser Sitzung ist die vorherige Katalogversion immer noch zwischengespeichert.

   Aurora DSQL kehrt zurück`SQL Error [40001]: ERROR: schema has been updated by another transaction (OC001)`.
Eine OC001 Antwort kann auch erfolgen, wenn die Schemaänderung bereits abgeschlossen ist, bevor die betroffene Transaktion gestartet wird. Aurora DSQL-Abfrageprozessoren erkennen Katalogänderungen reaktiv während der Abfrageausführung, sodass eine Sitzung, die sich im Leerlauf befand, möglicherweise immer noch mit einer veralteten Katalogversion betrieben wird. Bei einem erneuten Versuch aktualisiert die Sitzung ihren Katalog-Cache und die Transaktion ist in der Regel erfolgreich.

**DDL und DML in derselben Transaktion**  
Transaktionen in Aurora DSQL können lediglich eine DDL-Anweisung und nicht gleichzeitig DDL- und DML-Anweisungen enthalten. Diese Einschränkung bedeutet, dass Sie nicht innerhalb einer und derselben Transaktion eine Tabelle erstellen und Daten in die Tabelle einfügen können. Aurora DSQL unterstützt beispielsweise die folgenden sequentiellen Transaktionen.  

```
BEGIN;
  CREATE TABLE mytable (ID_col integer);
COMMIT;

BEGIN;
  INSERT into FOO VALUES (1);
COMMIT;
```
Aurora DSQL unterstützt die folgende Transaktion nicht, die sowohl `CREATE`- als auch `INSERT`-Anweisungen enthält.  

```
BEGIN;
  CREATE TABLE FOO (ID_col integer);
  INSERT into FOO VALUES (1);
COMMIT;
```

**Asynchrone DDL**  
Im Standard-PostgreSQL sperren DDL-Operationen wie die `CREATE INDEX`-Sperre die betroffene Tabelle, sodass sie für Lese- und Schreibzugriffe aus anderen Sitzungen nicht verfügbar ist. In Aurora DSQL werden diese DDL-Anweisungen asynchron mithilfe eines Hintergrundmanagers ausgeführt. Der Zugriff auf die betroffene Tabelle ist nicht blockiert. Somit kann DDL auf großen Tabellen ohne Ausfallzeiten oder Leistungseinbußen ausgeführt werden. Weitere Informationen über den asynchronen Job Manager in Aurora DSQL finden Sie unter [Asynchrone Indizes in Aurora DSQL](working-with-create-index-async.md).