Freigeben über


Konfigurieren der Konvertierung

Hinweis

Diese Erweiterung wird am 15. Dezember 2024 ausgemustert. Wir werden dieses Tool für alle auftretenden Probleme in Zukunft nicht mehr unterstützen und keine Programmfehlerbehebung oder weitere Updates herausgeben.

Das Konvertierungstoolkit für Datenbankschemas (Oracle in Microsoft SQL) dient zum Bereitstellen einer Lösung für Datenbankschemamigrationen. Die Standardkonvertierung ist zwar meistens sinnvoll, es gibt aber Fälle, in denen Benutzer einige der Konvertierungseinstellungen anpassen möchten, um ihre Anforderungen besser zu erfüllen.

Benutzeroberfläche zur Konfiguration

Beim Ausführen einer Datenbankschemakonvertierung über die Benutzeroberfläche des Assistenten für das Konvertierungstool für Datenbankschemas können Sie im Schritt Konvertierungseinstellungen die grundlegenden Konvertierungseinstellungen optimieren.

In komplexeren Szenarien kann eine benutzerdefinierte JSON-Konfigurationsdatei mit erweiterten Optionen bereitgestellt werden, wie im nächsten Abschnitt erläutert.

Erweiterte Konvertierungskonfiguration

Es gibt einige Konvertierungseinstellungen, die derzeit nicht über die Benutzeroberfläche verfügbar gemacht werden. Diese Einstellungen können mithilfe der JSON-Konfigurationsdatei angepasst werden.

Die grundlegende Struktur der Konfigurationsdatei sieht wie folgt aus:

{
  "options" : <simple-conversion-options>,
  "dataTypeMappings": [
    <data-type-mapping>,
    ...
  ],
  "nameMappings": [
    <object-name-mapping>,
    ...
  ]
}

In den folgenden Abschnitten werden die einzelnen Konfigurationsbereiche ausführlicher behandelt.

Einfache Konvertierungsoptionen

Der Konfigurationsbereich options weist das folgende Schema auf:

{
  "msSqlDialect":
    "AzureSqlDatabase"
    | "AzureSqlManagedInstance"
    | "SqlServer2017"
    | "SqlServer2019"
    | "SqlServer2022",
  "quoteIdentifiers": true | false,
  "isMsSqlCaseSensitive": true | false,
}

In der folgenden Tabelle sind alle möglichen Konfigurationsoptionen in diesem Bereich beschrieben:

Optionsname BESCHREIBUNG
msSqlDialect Bestimmt, welcher Microsoft SQL-Plattformdialekt beim Konvertieren der Quellobjektdefinitionen verwendet werden soll. Diese Option wird vom SQL-Datenbank-Zielprojekt abgeleitet, und eine explizite Festlegung sollte nicht erforderlich sein.
quoteIdentifiers Bestimmt, ob alle Bezeichner in konvertierten SQL-Skripts in Anführungszeichen geschrieben werden sollen. Der Standardwert ist true. Es wird empfohlen, die Option auf true festzulegen, da möglicherweise Anführungszeichen erforderlich sind, wenn Sonderzeichen in Bezeichnernamen verwendet werden.
isMsSqlCaseSensitive Steuert, ob die Groß-/Kleinschreibungsprüfung für Objektnamen während der Konvertierung ausgeführt und die DSCT01000-Konvertierungsnachricht angezeigt wird. Diese Option wird aus der Standardsortierung des SQL-Datenbank-Zielprojekts abgeleitet, und eine explizite Festlegung sollte nicht erforderlich sein.
AddRowIdColumnWhenNeededByTrigger Gibt an, ob DSCT einer Tabelle, für die ein Trigger definiert ist, eine ROWID-Spalte vom Typ „uniqueidentifier“ hinzufügen soll. Diese Spalte hilft bei der Emulation des dml-Vorgangs beim Konvertieren der Before-Trigger von Oracle in Instead of-Trigger in SQL Server. Der Standardwert ist „Ja“, wodurch eine ROWID-Spalte hinzugefügt wird.
ConvertSubstringFunctionToCustomFunction Gibt an, ob DSCT die SUBSTR-Funktion von ORACLE in die SUBSTRING-Funktion von MSSQLSERVER oder eine benutzerdefinierte DSCT-Implementierung konvertiert. Der Standardwert ist „Nein“, d. h. die SUBSTRING-Funktion von MSSQLSERVER wird verwendet.
EmulateNullOrderByBehavior Gibt an, ob DSCT die Behandlung der NULL-Werte von Oracle in ORDER BY-Klauseln emuliert oder Microsoft SQL-Standardwerte verwendet. Der Standardwert ist „Nein“, d. h. es werden Microsoft SQL-Standardwerte verwendet.

Datentypzuordnungen

Der Konfigurationsbereich dataTypeMappings besteht aus mehreren Datensätzen zur Datentypzuordnung. Jeder Datensatz zur Datentypzuordnung weist das folgende Schema auf:

{
  "source": {
    "type": "<oracle-data-type-name>",
    "arguments": [
      <argument-value-matching-expression>,
      ...
    ]
  },
  "target": {
    "type": "<ms-sql-data-type-name>",
    "arguments": [
      <argument-value-expression>,
      ...
    ]
  }
}

Der Abschnitt source definiert den zugeordneten Quelldatentyp und besteht aus zwei Teilen:

  • type ist der Name des zuzuordnenden Oracle-Datentyps.
  • arguments ist die Sammlung übereinstimmender Ausdrücken zur weiteren Filterung eines Datentyps basierend auf seinen Argumentwerten.

Die Quellsammlung arguments definiert übereinstimmende Ausdrücke für Datentypargumente basierend auf ihrer Position. Die Sammlung sollte einen Zeichenfolgenausdruck für jedes Datentypargument enthalten. Folgende Ausdrücke werden unterstützt:

Ausdruck (Expression) Bedeutung
"<number>" Entspricht dem genauen Wert eines Arguments.
"*" Entspricht einem speziellen *-Argumentwert. Beispiel: Das erste Argument in der Datentypdefinition NUMBER(*, 5).
"X..Y" Entspricht einem Argumentwert im Bereich [X, Y], wobei X und Y entweder <number> oder * lauten können. * im Bereichsausdruck bedeutet ungebunden. Zum Abgleich mit einem beliebigen Argumentwert kann der Bereichsausdruck "*..*" verwendet werden.

Bei einigen Datentypen können die Argumente innerhalb des Typnamens angegeben werden, z. B. INTERVAL DAY (2) TO SECOND (6). In solchen Fällen lautet der Typname INTERVAL DAY TO SECOND, während 2 und 6 als erstes und zweites Argument betrachtet werden.

Der Abschnitt target des Datensatzes für die Datentypzuordnung definiert den Microsoft SQL-Datentyp, der in der Zieldatenbank verwendet werden soll. Er besteht aus zwei Teilen:

  • type ist der Name des Microsoft SQL-Datentyps, mit dem die Zuordnung erfolgen soll.
  • arguments ist die Sammlung von Ausdrücken, die Werte für die Zieldatentypargumente definieren.

Die Sammlung arguments definiert Wertausdrücke für Datentypargumente basierend auf der Argumentposition. Die Sammlung sollte einen Zeichenfolgenausdruck für jedes Datentypargument enthalten. Folgende Ausdrücke werden unterstützt:

Ausdruck (Expression) Bedeutung
"<number>" Gibt einen genauen Wert eines Arguments an.
"$<number>" Gibt an, dass ein Wert des <number>-Quellarguments verwendet werden soll. Der Index ist 1-basiert. Beispielsweise wird $2 durch den Wert des zweiten Arguments des entsprechenden Quelldatentyps ersetzt.

Im folgenden Beispiel wird veranschaulicht, wie der Oracle-Datentyp VARCHAR2, der höchstens 4.000 Zeichen umfasst, dem Microsoft SQL-Datentyp NVARCHAR mit derselben Länge wie der Quelldatentyp zugeordnet wird:

{
  "source": {
    "type": "VARCHAR2",
    "arguments": [
      "*..4000"
    ]
  },
  "target": {
    "type": "NVARCHAR",
    "arguments": [
      "$1"
    ]
  }
}

Wichtig

Datentypzuordnungen sollten von der am wenigsten spezifischen zur spezifischeren definiert werden, weil sie in umgekehrter Reihenfolge angewendet werden. Anders ausgedrückt: Jede nachfolgende Datentypzuordnung überschreibt (vollständig oder teilweise) zuvor definierte Zuordnungen.

Hinweis

Das Toolkit für die Konvertierung von Datenbankschemas enthält vorgefertigte Datentypzuordnungen, die gängige Szenarien abdecken. Daher sind in den meisten Fällen keine benutzerdefinierten Datentypzuordnungen erforderlich.

Zuordnungen von Objektnamen

Der Konfigurationsbereich nameMappings besteht aus mehreren Datensätzen zur Namenszuordnung. Jeder Datensatz zur Namenszuordnung weist das folgende Schema auf:

{
  "source": [
    {
      "type":
         "constraint"
         | "index"
         | "materializedview"
         | "sequence"
         | "synonym"
         | "table"
         | "tablecolumn"
         | "tabletrigger"
         | "user"
         | "view",
      "name": "<source-object-name>"
    },
    ...
  ],
  "target": "<target-object-name>"
}

In der Sammlung source sind Namensteile des Quellbezeichners definiert, der zugeordnet wird. Wenn Sie beispielsweise den Zielnamen für ein Quellschema definieren möchten, können Sie die folgende Quellsammlung verwenden:

[
  { "type" : "user", "name": "MySchema" }
]

Wenn Sie den Zielnamen für die Quelltabelle definieren möchten, sollte der zweiteilige Bezeichnername in der source-Sammlung wie folgt angegeben werden:

[
  { "type" : "user", "name": "MySchema" },
  { "type" : "table", "name": "MyTable" }
]

Dies entspricht einer Tabelle mit dem mehrteiligen Namen "MySchema"."MyTable". Für die meisten Datenbankobjekte müssen mehrteilige Namen in der source-Sammlung angegeben werden.

In der folgenden Tabelle werden die unterstützten Quellobjekttypen beschrieben:

type BESCHREIBUNG
constraint Der Name des Einschränkungsobjekts
index Der Name des Indexobjekts
materializedview Der Name der materialisierten Sichtobjekts
sequence Der Name des Sequenzobjekts
synonym Der Name des Synonymobjekts
table Der Name des Tabellenobjekts
tablecolumn Der Name der Tabellenspalte
tabletrigger Der Name des Tabellentriggerobjekts
user Der Name des Datenbankschemas
view Der Name des Sichtobjekts

Die target-Eigenschaft ist immer eine einfache Zeichenfolge, die einen neuen Namen für das Quellobjekt definiert, das dem mehrteiligen Bezeichner source entspricht.

Hinweis

Es ist nicht möglich, das Schema nur für ein Objekt zu ändern. Die target-Eigenschaft gibt nur einen einteiligen Namen für das übereinstimmende Quellobjekt an, keinen mehrteiligen Namen.

Beispiele

Im folgenden Beispiel wird die gesamte Konfigurationsdatei veranschaulicht, die den Oracle-Datentyp VARCHAR2, der höchstens 4.000 Zeichen umfasst, dem Microsoft SQL-Datentyp NVARCHAR mit derselben Länge wie der Quelldatentyp zuordnet und gleichzeitig das Oracle-Schema HR durch dbo in der Zieldatenbank ersetzt:

{
  "dataTypeMappings": [
    {
      "source": {
        "type": "VARCHAR2",
        "arguments": [
          "*..4000"
        ]
      },
      "target": {
        "type": "NVARCHAR",
        "arguments": [
          "$1"
        ]
      }
    }
  ],
  "nameMappings": [
    {
      "source": [
        { "type": "user", "name": "HR" }
      ],
      "target": "dbo"
    }
  ]
}

Wenn diese Konfiguration verwendet wird, werden alle konvertierten Objekte aus dem HR-Schema unter dem dbo-Schema definiert, und alle übereinstimmenden Verweise auf den Datentyp VARCHAR2 werden durch NVARCHAR ersetzt.