Konfigurace převodu

Poznámka:

Toto rozšíření bude vyřazeno 15. prosince 2024. Tento nástroj přestaneme podporovat pro všechny problémy, které nastanou, a nebudeme vydávat žádné opravy chyb ani další aktualizace.

Cílem Sada nástrojů pro převod schématu databáze (Oracle do Microsoft SQL) je poskytnout řešení pro migrace schémat databáze. I když je výchozí převod poměrně rozumný, existují případy, kdy uživatelé mohou chtít upravit některá nastavení převodu tak, aby lépe vyhovovala jejich potřebám.

Uživatelské rozhraní konfigurace

Při převodu schématu databáze prostřednictvím uživatelského rozhraní průvodce převodem Sada nástrojů pro převod schématu databáze umožní krok nastavení převodu upravit základní nastavení převodu.

V složitějších scénářích je možné zadat vlastní konfigurační soubor JSON s rozšířenými možnostmi, jak je vysvětleno v další části.

Pokročilá konfigurace převodu

Existuje několik nastavení převodu, která nejsou aktuálně zpřístupněna prostřednictvím uživatelského rozhraní. Tato nastavení je možné upravit prostřednictvím konfiguračního souboru JSON.

Základní struktura konfiguračního souboru vypadá takto:

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

V následujících částech najdete další podrobnosti o jednotlivých oblastech konfigurace.

Jednoduché možnosti převodu

Oblast options konfigurace má následující schéma:

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

Následující tabulka popisuje všechny možné možnosti konfigurace v této oblasti:

Název možnosti Popis
msSqlDialect Určuje, který dialekt platformy Microsoft SQL se má použít při převodu definic zdrojového objektu. Tato možnost bude odvozena z cílového projektu služby SQL Database a neměli byste ji explicitně nastavovat.
quoteIdentifiers Určuje, zda mají být všechny identifikátory citovány v převedených skriptech SQL. Výchozí hodnota je true. Doporučujeme ho nastavit na truehodnotu , protože při použití speciálních znaků v názvech identifikátorů může být vyžadována uvozovka.
isMsSqlCaseSensitive Určuje, zda se během převodu provede kontrola citlivosti písmen u názvů objektů a bude vytvořena zpráva o převodu DSCT01000 . Tato možnost bude odvozena z výchozí kolace cílového projektu služby SQL Database a neměli byste ji explicitně nastavovat.
AddRowIdColumnWhenNeededByTrigger Určuje, zda dsCT má přidat sloupec ROWID typu uniqueidentifier do tabulky, na které je aktivační událost definována. Tento sloupec pomáhá emulaci operace dml při převodu triggerů Oracle Před na místo triggerů v SQL Serveru. Výchozí hodnota je Ano, která přidá sloupec ROWID.
ConvertSubstringFunctionToCustomFunction Určuje, zda DSCT převede funkci SUBSTR ORACLE na funkci SUBSTR SERVERU MSSQLSERVER nebo vlastní implementaci DSCT. Výchozí hodnota je Ne, která používá funkci SUBSTRING MSSQLSERVER.
EmulateNullOrderByBehavior Označuje, zda DSCT emuluje zpracování hodnot Oracle null v klauzulích ORDER BY nebo používá výchozí hodnoty Microsoft SQL. Výchozí hodnota je Ne, která používá výchozí hodnoty Microsoft SQL.

Mapování datového typu

Oblast dataTypeMappings konfigurace se skládá z více záznamů mapování datových typů. Každý záznam mapování datového typu má následující schéma:

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

Oddíl source definuje zdrojový datový typ, který se mapuje, a skládá se ze dvou částí:

  • type je název datového typu Oracle, který se má mapovat;
  • arguments je kolekce odpovídajících výrazů, které budou dále filtrovat datový typ na základě hodnot argumentů.

Zdrojová arguments kolekce definuje odpovídající výrazy pro argumenty datového typu na základě jejich pozice. Kolekce by měla obsahovat jeden řetězcový výraz pro každý argument datového typu. Podporované výrazy jsou:

Výraz Význam
"<number>" Odpovídá přesné hodnotě argumentu.
"*" Odpovídá hodnotě speciálního * argumentu. Například první argument v definici datového NUMBER(*, 5) typu.
"X..Y" Odpovídá hodnotě argumentu [X, Y] v oblasti, kde X může Y být buď <number> nebo *. Výraz * oblasti znamená nevázaný. Chcete-li se shodovat s libovolnou hodnotou argumentu, lze použít výraz rozsahu "*..*" .

Některé datové typy můžou mít zadané argumenty v názvu typu, například INTERVAL DAY (2) TO SECOND (6). V takových případech by název typu byl INTERVAL DAY TO SECOND, zatímco 2 a 6 jsou považovány za první a druhý argument v uvedeném pořadí.

Část target záznamu mapování datového typu definuje datový typ Microsoft SQL, který se má použít v cílové databázi a který se skládá ze dvou částí:

  • type je název datového typu Microsoft SQL, na který se má mapovat;
  • arguments je kolekce výrazů, které definují hodnoty pro argumenty cílového datového typu.

Kolekce arguments definuje výrazy hodnot argumentů datového typu na základě pozice argumentů. Kolekce by měla obsahovat jeden řetězcový výraz pro každý argument datového typu. Podporované výrazy jsou:

Výraz Význam
"<number>" Určuje přesnou hodnotu argumentu.
"$<number>" Určuje, že se má použít hodnota zdrojového argumentu <number> . Index je založený na 1. Například $2 se nahradí hodnotou druhého argumentu odpovídajícího zdrojového datového typu.

Následující příklad ukazuje, jak mapovat VARCHAR2 datový typ Oracle, který obsahuje 4000 znaků nebo méně, na NVARCHAR datový typ Microsoft SQL se stejnou délkou jako zdrojový datový typ:

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

Důležité

Mapování datových typů by mělo být definováno od nejmenšího konkrétního po konkrétnější, protože se použijí v obráceném pořadí. Jinými slovy, všechna následná přepsání mapování datových typů (zcela nebo zčásti) dříve definovaných mapování.

Poznámka:

Sada nástrojů pro převod schématu databáze se dodává s integrovanými mapováními datových typů, která pokrývají běžné scénáře, a proto se ve většině případů nevyžadují vlastní mapování datových typů.

Mapování názvů objektů

Oblast nameMappings konfigurace se skládá z více záznamů mapování názvů. Každý záznam mapování názvů má následující schéma:

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

Kolekce source definuje části názvu zdrojového identifikátoru, který se mapuje. Chcete-li například definovat cílový název zdrojového schématu, můžete použít následující zdrojovou kolekci:

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

Pokud chcete definovat cílový název pro zdrojovou tabulku, měli byste v kolekci zadat název identifikátoru source se dvěma částmi následujícím způsobem:

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

Bude se shodovat s tabulkou s názvem "MySchema"."MyTable"více částí . Většina databázových objektů bude vyžadovat zadání názvů více částí v kolekci source .

Následující tabulka popisuje podporované typy zdrojových objektů:

Typ Popis
constraint Název objektu omezení
index Název objektu indexu
materializedview Název materializovaného objektu zobrazení
sequence Název objektu sekvence
synonym Název objektu synonyma
table Název objektu tabulky
tablecolumn Název sloupce tabulky
tabletrigger Název objektu triggeru tabulky
user Název schématu databáze
view Název objektu zobrazení

Vlastnost target je vždy jednoduchý řetězec, který definuje nový název zdrojového objektu, který odpovídá source identifikátoru více částí.

Poznámka:

Schéma pro jeden objekt není možné změnit. Vlastnost target určuje pouze název jedné části pro odpovídající zdrojový objekt, nikoli název více částí.

Příklady

Následující příklad ukazuje celý konfigurační soubor, který mapuje VARCHAR2 datový typ Oracle, který obsahuje 4 000 znaků nebo méně, na NVARCHAR datový typ Microsoft SQL se stejnou délkou jako zdrojový datový typ a zároveň nahrazuje HR schéma dbo Oracle v cílové databázi:

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

Při použití této konfigurace budou všechny převedené objekty ze HR schématu definovány v rámci dbo schématu a všechny odpovídající odkazy na VARCHAR2 datový typ budou nahrazeny znakem NVARCHAR.