Oracle-Nutzer zu Cloud SQL for MySQL migrieren: Datentypen, Nutzer und Tabellen

Dieses Dokument ist Teil einer Reihe, die wichtige Informationen und Anleitungen im Zusammenhang mit der Planung und Durchführung von Oracle® 11g/12c-Datenbankmigrationen zu Cloud SQL for MySQL Version 5.7 (Instanzen der zweiten Generation) enthält. Die Reihe besteht aus folgenden Teilen:

Datentypen

MySQL bietet mehrere Datentypen, die den von Oracle bereitgestellten Datentypen vollständig entsprechen oder ihnen ähneln. In der folgenden Tabelle sind die häufigsten MySQL-Datentypen aufgeführt. Daraufhin folgt ein Vergleich der einfachen Oracle-Datentypen mit den entsprechenden MySQL-Datentypen. Wenn ein Datentyp nicht unterstützt wird, wird ein alternativer Datentyp aufgeführt. Beachten Sie, dass eine MySQL 5.7-Datenbank ein Limit von 65.535 Byte für die gesamte Zeile hat (abhängig vom verwendeten Zeichensatz).

Einfache MySQL 5.7-Datentypen

MySQL-Datentypfamilie MySQL-Datentypname Datentypspezifikation
String/
Zeichen

CHAR(n)
Speichert genau n Zeichen.

VARCHAR(n)
Speichert eine variable Anzahl von Zeichen, bis maximal n Zeichen.

BINARY
Speichert genau n Byte.

VARBINARY(n)
Speichert eine variable Anzahl von Zeichen, bis maximal n Byte.

BLOB
Binary Large Object, das eine variable Datenmenge enthalten kann.

TEXT
Bestimmte Variante von VARCHAR, für die keine Obergrenze für die Anzahl von Zeichen festgelegt werden muss.

ENUM
Stringobjekt mit einem Wert aus einer Liste zulässiger Werte, die beim Erstellen der Tabelle explizit in der Spaltenspezifikation aufgelistet werden.

SET
Stringobjekt, das null oder mehr Werte enthalten kann. Jeder dieser Werte muss aus einer Liste zulässiger Werte ausgewählt werden, die beim Erstellen der Tabelle angegeben werden.
Numerisch

INT
Mindestwert: -2147483648 | Maximalwert: 2147483647.

INTEGER
Mindestwert: -2147483648 | Maximalwert: 2147483647.

TINYINT
Mindestwert: -128 | Maximalwert: 127.

SMALLINT
Mindestwert: -32768 | Maximalwert: 32767.

MEDIUMINT
Mindestwert: -8388608 | Maximalwert: 8388607.

BIGINT
Mindestwert: -2^63 | Maximalwert: 2^63-1.

DECIMAL(p,s)
Kann beliebige Werte mit p Ziffern und s Dezimalzahlen speichern.

NUMERIC(p,s)
Kann beliebige Werte mit p Ziffern und s Dezimalzahlen speichern.

FLOAT(m,d)
Werte können mit bis zu m Ziffern insgesamt gespeichert werden, wobei d Ziffern nach dem Dezimalzeichen stehen können.

DOUBLE(m,d)
Werte können mit bis zu m Ziffern insgesamt gespeichert werden, wobei d Ziffern nach dem Dezimalzeichen stehen können.

BIT(m)
Speichert m-Bit-Werte. m kann zwischen 1 und 64 liegen.
Datum & Uhrzeit

DATE
- Werte mit Datum, aber ohne Uhrzeit.
- Ruft DATE-Werte im Format 'YYYY-MM-DD' ab und zeigt sie an.
- Der unterstützte Bereich liegt zwischen '1000-01-01' und '9999-12-31'.

DATETIME
- Werte, die sowohl Datums- als auch Uhrzeitangaben enthalten.
- Ruft DATETIME-Werte im Format 'YYYY-MM-DD HH:MM:SS' ab und zeigt sie an.
- Der unterstützte Bereich liegt zwischen '1000-01-01 00:00:00' und '9999-
12-31 23:59:59'.

TIMESTAMP
- Werte, die sowohl Datums- als auch Uhrzeitangaben enthalten.
- TIMESTAMP hat einen Bereich von '1970-01-01 00:00:01' UTC bis '2038-01-19 03:14:07' UTC.

TIME
- Die Werte können zwischen '-838:59:59' und '838:59:59' liegen.
: - Der Stundenanteil kann so groß sein, weil der Typ TIME nicht nur zur Darstellung einer Tageszeit (die kleiner als 24 Stunden sein muss), sondern auch der verstrichenen Zeit oder eines Zeitintervalls zwischen zwei Ereignissen (die viel länger als 24 Stunden oder sogar negativ sein können) verwendet werden kann.

YEAR
- YEAR 1-Byte-Typ zur Darstellung von Jahreswerten.
- Kann als YEAR oder YEAR(n) angegeben werden und hat eine Anzeigebreite von n Zeichen.
JSON

JSON
JSON-Textdaten als Datentyp.

Räumlich (Geometrie)

GEOMETRY
Der Spaltentyp, der angegeben wird, wenn Sie die Datenmodelle verwenden möchten, die im Rest dieser Tabelle verwendet werden.

POINT
Ein (x,y)-Wert.

LINESTRING
Eine Zeile (pt1, pt2).

POLYGON
Eine Folge von Punkten, praktisch ein geschlossener Pfad.

MULTIPOINT
Sammlung von POINT-Werten.

MULTI-LINESTRING
Sammlung von LINE-Werten.

MULTIPOLYGON
Sammlung von POLYGON-Werten.

GEOMETRY-COLLECTION
Sammlung von Geometriedatentypen.
Logisch

BOOLEAN
- Enthält den Wert "true" oder "false".
: - Akzeptiert Werte wie TRUE, '1' und 1 als "true".
- Verbraucht 1 Byte Speicherplatz und kann NULL speichern.

Oracle-zu-MySQL-Datentyp-Konvertierung

Oracle-Datentypfamilie Oracle-Datentypname Oracle-Datentypspezifikation Entsprechung MySQL zu Oracle MySQL entsprechend/alternativ
String/
Zeichen

CHAR(n)
Maximale Größe: 2.000 Byte. Ja

CHAR(n)

CHARACTER(n)
Maximale Größe: 2.000 Byte. Ja

CHARACTER(n)

NCHAR(n)
Maximale Größe: 2.000 Byte. Ja

NCHAR(n)

VARCHAR(n)
Maximale Größe: 2.000 Byte. Ja

VARCHAR(n)

NCHAR
VARYING(n)
Varying-Länge UTF-8-String Maximale Größe:
4.000 Byte.
Ja

NCHAR
VARYING(n)

VARCHAR2(n)
11g
Maximale Größe: 4.000 Byte Maximale Größe: 32 KB in PL/SQL. Nein

VARCHAR(n)

VARCHAR2(n)
12g
Maximale Größe: 32.767 Byte MAX_STRING_SIZE=EXTENDED. Nein

VARCHAR(n)

NVARCHAR2(n)
Maximale Größe: 4.000 Byte. Nein

VARCHAR(n)

LONG
Maximale Größe: 2 GB. Ja

LONG

RAW(n)
Maximale Größe: 2.000 Byte. Nein

VARBINARY(n)

LONG RAW
Maximale Größe: 2 GB. Nein

LONGTEXT
Numerisch

NUMBER
Gleitkommazahl. Nein

NUMERIC/DECIMAL(p,s)
Numerisch

NUMBER
Gleitkommazahl. Nein

NUMERIC/DECIMAL(p,s)

NUMBER(*)
Gleitkommazahl. Nein

DOUBLE

NUMERIC(p,s)
Die Precision kann zwischen 1 und 38 liegen. Ja

NUMERIC(p,s)

FLOAT(p)
Gleitkommazahl. Ja

FLOAT(p)

DEC(p,s)
Festkommazahl. Ja

DEC(p,s)

DECIMAL(p,s)
Festkommazahl. Ja

DECIMAL(p,s)

INT
38-stellige Ganzzahl. Ja

INT

INTEGER
38-stellige Ganzzahl. Ja

INTEGER

SMALLINT
38-stellige Ganzzahl. Ja

SMALLINT

REAL
Gleitkommazahl. Ja

REAL

DOUBLE PRECISION
Gleitkommazahl. Ja

DOUBLE PRECISION
Datum & Uhrzeit

DATE
Speichert Datums- und Uhrzeitdaten (Jahr, Monat, Tag, Stunde, Minute und Sekunde). Ja

DATE

TIMESTAMP(p)
Datum und Uhrzeit mit Anteil. Ja

TIMESTAMP

TIMESTAMP(p)
WITH TIME ZONE
Datum und Uhrzeit mit Anteil und Zeitzone. Nein

DATETIME(n)

INTERVAL
YEAR(p)
TO MONTH
Datumsintervall Nein

VARCHAR(n)

INTERVAL
DAY(p)
TO SECOND(s)
Tages- und Zeitintervall. Nein

VARCHAR(n)
Logisch

BOOLEAN
Werte TRUE, FALSE und NULL. Kann keiner Datenbanktabellenspalte zugewiesen werden. Ja

BOOLEAN
XML

XMLTYPE
XML-Daten. Nein

LONGTEXT
LOB

BFILE
Zeiger auf Binärdatei mit einer maximalen Größe von 4 GB. Nein

VARCHAR(255)

CLOB
Großes Zeichenobjekt mit einer maximalen Dateigröße von 4 GB. Nein

LONGTEXT

BLOB
Binary Large Object mit einer maximalen Größe von 4 GB. Ja

BLOB

NCLOB
Unicode-String mit variabler Länge und einer maximalen Dateigröße von 4 GB. Nein

LONGTEXT
ROWID

ROWID
Physische Zeilenadresse. Nein

CHAR(n)

UROWID(n)
Universelle Zeilen-ID der logischen Zeilenadressen. Nein

VARCHAR(n)
Räumlich

SDO_GEOMETRY
Die geometrische Beschreibung eines räumlichen Objekts. Nein

N/A

SDO_TOPO_GEOMETRY
Beschreibt eine Topologie-Geometrie. Nein

N/A

SDO_GEORASTER
Ein Raster-Grid oder Bildobjekt wird in einer einzelnen Zeile gespeichert. Nein

N/A
Medientypen

ORDDicom
Unterstützt die Speicherung und Verwaltung von Audiodaten. Nein

N/A

ORDDicom
Unterstützt die Speicherung und Verwaltung von DICOM (Digital Imaging and Communications in Medicine). Nein

N/A

ORDDoc
Unterstützt die Speicherung und Verwaltung aller Arten von Mediendaten. Nein

N/A

ORDImage
Unterstützt die Speicherung und Verwaltung von Bilddaten. Nein

N/A

ORDVideo
Unterstützt die Speicherung und Verwaltung von Videodaten. Nein

N/A

Benutzerdefinierte Typen

Oracle bezeichnet benutzerdefinierte Typen (User-Defined Types, UDTs) als OBJECT TYPES, die mit PL/SQL verwaltet werden. Mit benutzerdefinierten Typen kann der Nutzer anwendungsspezifische, komplexe Datentypen erstellen, die auf der integrierten Oracle-Datentypenliste beruhen und diese erweitern.

Ein Oracle-Beispiel für UDT:

SQL> CREATE OR REPLACE TYPE EMP_PHONE_NUM AS OBJECT (
     PHONE_NUM VARCHAR2(11));

Konvertierungshinweise

Bei MySQL können Nutzer keine eigenen, definierten Typen erstellen.

Nutzer und Tabellen

In diesem Abschnitt wird erläutert, wie Sie Nutzer erstellen und ihnen Berechtigungen zuweisen und weshalb Sie Oracle-Tabellen in Cloud SQL for MySQL-Tabellen umwandeln müssen.

Nutzererstellung und -berechtigungen

Oracle-Datenbanknutzerkonten ("Nutzer" und "Schema" sind bei Oracle identisch) können zum Authentifizieren und Herstellen von Verbindungen zu Datenbanksitzungen verwendet werden. Dabei wird der Autorisierungszugriff für bestimmte Datenbankobjekte und Berechtigungen auf der jeweiligen Ebene des Nutzers festgelegt.

Im Allgemeinen gibt es zwei Arten von Datenbanknutzern:

  • Administratoren verwalten die Datenbankinstanz, Nutzer und Ressourcen.
  • Nutzerkonten werden für logische Vorgänge, z. B. Anwendungen, bereitgestellt.

Administratoren gewähren Nutzern und Anwendungsnutzerkonten Berechtigungen für den Zugriff auf die Datenbankobjekte. Oracle-Datenbankberechtigungen werden einem Nutzer für bestimmte Vorgänge (z. B. zum Erstellen einer Sitzung/Verbindung) oder für bestimmte Datenbankobjekte (z. B. SELECT für eine bestimmte Tabelle oder EXECUTE für ein bestimmtes gespeichertes Verfahren) gewährt.

Überlegungen zu Konvertierungen

  • Die MySQL-CREATE USER-Syntax unterscheidet sich von der von Oracle und kann nicht unverändert migriert werden. Außerdem haben beide Datenbanken eine unterschiedliche Nutzerarchitektur.
  • Wenn ein Administrator einen Nutzer in MySQL erstellt, muss er den Server angeben, zu dem der Nutzer für den Datenbankzugriff eine Verbindung herstellen muss. Der Server kann entweder eine bestimmte IP-Adresse oder ein DNS sein. Es kann auch aus allen Quellen eine Verbindung hergestellt werden, wenn das Platzhalterzeichen (%) verwendet wird.
  • Da der MySQL-Nutzername ein zweiteiliger Anhang zwischen dem Nutzernamen und dem Server ist, von dem der Nutzer eine Verbindung herstellen kann, kann ein Nutzer mit demselben Namen, aber von einem anderen Server als der Clientadresse (IP/DNS) erstellt werden.
  • Nachdem der Nutzer erstellt wurde, kann ihm die Berechtigung für Datenbankobjekte gewährt werden, die Teil einer bestimmten Datenbank oder eines bestimmten Schemas sind.
  • Nutzer können auch zusätzliche Berechtigungen wie unter Zulässige Berechtigungen für Cloud SQL for MySQL beschrieben erhalten (z. B. erhält der Root-Nutzer alle Berechtigungen mit Ausnahme von SUPER und FILE). Oracle-Nutzer können in MySQL an einen dedizierten Tablespace angehängt werden, sodass diese Funktionalität nicht relevant ist.

Tabellen

Oracle-Tabellen bestehen aus vielen Elementen wie Spaltendatentypen, Tabelleneinschränkungen, Indexen, Partitionen, proprietären Oracle-Tabellenfunktionen usw. Für eine erfolgreiche Migration in Cloud SQL for MySQL-Datenbanktabellen müssen alle Oracle-Tabellenelemente in MySQL-Tabellen konvertiert werden. Einige Elemente werden ohne oder mit geringfügigen Änderungen unterstützt, während andere Elemente vollständig geändert werden müssen.

Aus Sicht der Migration erfordert die Konvertierung von PL/SQL in MySQL wahrscheinlich mehr Aufwand, da die Konvertierung von Oracle-Tabellen in MySQL-Tabellen eine entscheidende Phase mit erheblicher Bedeutung und weiteren Auswirkungen auf Leistung und Datengröße darstellt.

Im Folgenden werden die Hauptunterschiede zwischen Oracle- und MySQL-Tabellen sowie die zugehörigen Funktionen aufgeführt. Diese Unterschiede werden in den verbleibenden Teilen der Reihe erläutert.

  • Berücksichtigung der Groß-/Kleinschreibung (Tabellen- und Spaltennamen)
  • Tabellensyntax erstellen
  • Tabellen- und Indexmetadaten
  • Unterstützung bei Einschränkungen
  • Unterstützung und Einschränkung von Datentypen
  • Indexe
  • Partitionen und Partitionsverwaltung
  • Tabellen- und Indexwartung
  • Temporäre Tabellen
  • Aufrufe
  • Sichtbare und unsichtbare Spalten (Oracle 12c)
  • Tabellen- und Spaltenzeichensätze