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:
- Oracle-Nutzer zu Cloud SQL for MySQL migrieren: Terminologie und Funktionalität
- Oracle-Nutzer zu Cloud SQL for MySQL migrieren: Datentypen, Nutzer und Tabellen (dieses Dokument)
- Oracle-Nutzer zu Cloud SQL for MySQL migrieren: Abfragen, gespeicherte Verfahren, Funktionen und Trigger
- Oracle-Nutzer zu Cloud SQL for MySQL migrieren: Sicherheit, Vorgänge, Monitoring und Logging
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
undFILE
). 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