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.