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

Dieses Dokument ist Teil einer Reihe, die wichtige Informationen und Anleitungen zur Planung und Durchführung von Oracle® 11g/12c-Datenbankmigrationen zu Cloud SQL for PostgreSQL Version 12 enthält. Zusätzlich zum Teil der anfänglichen Einrichtung umfasst die Reihe die folgenden Teile:

Datentypen

Cloud SQL for PostgreSQL bietet mehrere Datentypen, die vollständig oder teilweise den von Oracle bereitgestellten Datentypen entsprechen. In der folgenden Tabelle sind die häufigsten PostgreSQL-Datentypen aufgeführt. Darauf folgt ein Vergleich der einfachen Oracle-Datentypen mit den entsprechenden Cloud SQL for PostgreSQL-Datentypen. Wenn ein Datentyp nicht unterstützt wird, wird ein alternativer Datentyp aufgeführt.

Einfache Datentypen von Cloud SQL for PostgreSQL 12

Cloud SQL for PostgreSQL-Datentypfamilie Name des Cloud SQL for PostgreSQL-Datentyps Datentypspezifikation
String/Zeichen CHAR(n) Speichert genau n Zeichen. Alias von CHARACTER(n).
CHARACTER(n) Speichert genau n Zeichen.
VARCHAR(n) Speichert eine variable Anzahl von Zeichen, bis maximal n Zeichen. Alias von CHARACTER VARYING(n).
CHARACTER VARYING(n) Speichert eine variable Anzahl von Zeichen, bis maximal n Zeichen.
TEXT Bestimmte Variante von VARCHAR, für die keine Obergrenze für die Anzahl von Zeichen festgelegt werden muss. Der längste Zeichenstring, der gespeichert werden kann, beträgt 1 GB (für alle Datentypen von Stringzeichen identisch).
Numerisch SMALLINT Mindestwert: -32768 | Maximalwert: 32767.
INTEGER Mindestwert: -2147483648 | Maximalwert: 2147483647.
BIGINT Mindestwert: -2^63 | Maximalwert: 2^63-1.
REAL Gleitkommazahl mit einfacher Precision (4 Byte).
DOUBLE PRECISION Gleitkommazahl mit doppelter Precision (8 Byte).
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.
SMALLSERIAL Ganzzahl für automatische Inkrementierung. Mindestwert: 1 | Maximalwert: 32767.
SERIAL Ganzzahl für automatische Inkrementierung. Mindestwert: 1 | Maximalwert: 2147483647.
BIGSERIAL Ganzzahl für automatische Inkrementierung. Mindestwert: 1 | Maximalwert: 2^63-1.
Währung MONEY Der Währungsbetrag mit einer festen Bruchgenauigkeit. Mindestwert: -92233720368547758.08 | Maximalwert: +92233720368547758.07.
Datum & Uhrzeit DATE - Werte mit Datum, aber ohne Uhrzeit.
: Der unterstützte Bereich ist 4713 v. Chr. bis 5874897 n. Chr. mit einer Auflösung von 1 Tag.
TIMESTAMP (p) - Werte, die sowohl Datums- als auch Uhrzeitangaben enthalten.
– Der unterstützte Bereich ist 4713 v. Chr. bis 294276 n. Chr.
: Die Auflösung beträgt p Nachkommastellen in Sekunden (oder 1 Mikrosekunde, falls nicht angegeben).
TIMESTAMP (p) with time zone – Werte, die sowohl Datum, Uhrzeit als auch Zeitzone enthalten.
– Der unterstützte Bereich ist 4713 v. Chr. bis 294276 n. Chr.
: Die Auflösung beträgt p Nachkommastellen in Sekunden (oder 1 Mikrosekunde, falls nicht angegeben).
TIME (p) – Werte mit einem Uhrzeitteil, aber ohne Datumsangabe.
- Der unterstützte Bereich geht von 00:00:00 bis 24:00:00.
: Die Auflösung beträgt p Nachkommastellen in Sekunden (oder 1 Mikrosekunde, falls nicht angegeben).
TIME (p) with time zone – Werte mit Uhrzeit und Zeitzone, aber ohne Datumsangabe.
- Der unterstützte Bereich geht von 00:00:00 bis 24:00:00.
: Die Auflösung beträgt p Nachkommastellen in Sekunden (oder 1 Mikrosekunde, falls nicht angegeben).
INTERVAL (p) – Zeitintervall
– Der unterstützte Zeitraum liegt zwischen -178000000 und 178000000 Jahren.
: Die Auflösung beträgt p Nachkommastellen in Sekunden (oder 1 Mikrosekunde, falls nicht angegeben).
JSON JSON JSON-Textdaten
JSONB JSON-Binärdaten.
XML XML XML-Daten.

Geometrisch
GEOMETRY Der Spaltentyp, der angibt, wann Sie die folgenden Datenmodelle verwenden möchten.
POINT Ein (x,y)-Wert.
LINE Ein (A, B, C)-Tupel, wobei Ax + By + C = 0 und A und B nicht beide 0 sind.

ODER

Punkt 1 und Punkt 2 in den folgenden Formaten:

[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1 , x2 , y2

LSEG Ein Liniensegment ((x1,y1),(x2,y2)).
BOX Rechteckiges Feld ((x1,y1),(x2,y2)).
PATH Eine Folge von Punkten ((x1,y1),...).
POLYGON Eine Folge von Punkten, praktisch ein geschlossener Pfad.
CIRCLE (x,y),r) (Mittelpunkt und Radius)
Logisch BOOLEAN - Enthält den Wert "true", "false" oder "null".
: - Akzeptiert Werte wie yes, true, t, on und 1 als "true".
Bit-/Binärdaten BIT (n) Bitfolge mit fester Länge
BYTEA Binärdaten/Bytearray.
Netzwerkadresstypen CIDER IPv4- und IPv6-Netzwerke.
INET IPv4- und IPv6-Hosts und -Netzwerke.
MACADDR MAC-Adressen.
MACADDR8 MAC-Adressen (EUI-64-Format).
Others PG_LSN Log-Sequenznummer von Cloud SQL for PostgreSQL.
TSQUERY Textsuchabfrage
TSVECTOR Textsuchdokument
TXID_SNAPSHOT Snapshot der Transaktions-ID auf Nutzerebene
UUID Universell eindeutige Kennzeichnung

Datentyp-Konvertierung von Oracle zu Cloud SQL for PostgreSQL

Oracle-Datentypfamilie Oracle-Datentypname Oracle-Datentypspezifikation Entsprechung von Cloud SQL for PostgreSQL zu Oracle Entsprechung/Alternative von Cloud SQL for PostgreSQL
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. Nein CHAR(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.
Nein CHARACTER VARYING(n)
VARCHAR2(n) 11g Maximale Größe: 4.000 Byte. Maximale Größe: 32 KB in PL/SQL. Ja* VARCHAR(n)
VARCHAR2(n)
12g
Maximale Größe: 32.767 Byte MAX_STRING_SIZE= EXTENDED. Ja* VARCHAR(n)
NVARCHAR2(n) Maximale Größe: 4.000 Byte. Nein VARCHAR(n)
LONG Maximale Größe: 2 GB. Ja* TEXT
RAW(n) Maximale Größe: 2.000 Byte. Ja* BYTEA
LONG RAW Maximale Größe: 2 GB. Ja* BYTEA
Numerisch NUMBER Gleitkommazahl. Ja* NUMERIC(p,s)
NUMBER(*) Gleitkommazahl. Ja* DOUBLE PRECISION
NUMERIC(p,s) Die Precision kann zwischen 1 und 38 liegen. Ja NUMERIC(p,s)
FLOAT(p,s) Gleitkommazahl. Ja* DOUBLE PRECISION
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* DOUBLE PRECISION
DOUBLE PRECISION Gleitkommazahl. Ja DOUBLE PRECISION
Datum & Uhrzeit DATE Speichert Datums- und Uhrzeitdaten (Jahr, Monat, Tag, Stunde, Minute und Sekunde). Ja* TIMESTAMP(0)
TIMESTAMP(p) Datum und Uhrzeit mit Anteil. Ja TIMESTAMP(p)
TIMESTAMP(p) WITH TIME ZONE Datum und Uhrzeit mit Anteil und Zeitzone. Ja TIMESTAMP (p) WITH TIME ZONE
INTERVAL YEAR(p) TO MONTH Datumsintervall Ja* INTERVAL YEAR TO MONTH
INTERVAL DAY(p) TO SECOND(s) Tages- und Zeitintervall. Ja* INTERVAL DAY TO SECOND(s)
Logisch BOOLEAN Werte TRUE, FALSE und NULL. Kann keiner Datenbanktabellenspalte zugewiesen werden. Ja BOOLEAN
XML XMLTYPE XML-Daten. Nein XML
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 TEXT
BLOB Binary Large Object mit einer maximalen Größe von 4 GB. Nein BYTEA
NCLOB Unicode-String mit variabler Länge und einer maximalen Dateigröße von 4 GB. Nein TEXT
ROWID ROWID Physische Zeilenadresse. Nein CTID
UROWID(n) Universelle Zeilen-ID der logischen Zeilenadressen. Nein CTID
Räumlich SDO_ GEOMETRY Die geometrische Beschreibung eines räumlichen Objekts. Ja Postgres bietet verschiedene Geometrietypen, darunter point, line, path, polygon, circle...
SDO_TOPO_ GEOMETRY Beschreibt eine Topologie-Geometrie. Ja PostGIS ist eine weitverbreitete Postgres-Erweiterung und bietet verschiedene Topologietypen.
SDO_GEORASTER Ein Raster-Grid oder Bildobjekt wird in einer einzelnen Zeile gespeichert. Ja PostGIS ist eine weitverbreitete Postgres-Erweiterung und bietet ein Tool zum Laden von Rasterdateien in die Datenbank.
Medientypen ORDDicom Unterstützt die Speicherung und Verwaltung von DICOM-Dateien (Digital Imaging and Communications in Medicine). Ja, mit Problemumgehung Postgres bietet den Binärtyp bytea zum Speichern großer Objekte an.
ORDDoc Unterstützt die Speicherung und Verwaltung aller Arten von Mediendaten. Ja, mit Problemumgehung Postgres bietet den Binärtyp bytea zum Speichern großer Objekte an.
ORDImage Unterstützt die Speicherung und Verwaltung von Bilddaten. Ja, mit Problemumgehung Postgres bietet den Binärtyp bytea zum Speichern großer Objekte an.
ORDVideo Unterstützt die Speicherung und Verwaltung von Videodaten. Problemumgehung Postgres bietet den Binärtyp bytea zum Speichern großer Objekte an.

* Der entsprechende Datentyp in Cloud SQL for PostgreSQL ist weitgehend mit Oracle kompatibel, verwendet jedoch einen anderen Namen.

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.

Benutzerdefinierte Oracle-Typen Überblick oder Implementierung von Oracle Unterstützung für Cloud SQL for PostgreSQL Entsprechung oder alternative Lösung für Cloud SQL for PostgreSQL
Abstrakter Datentyp (ADT) CREATE TYPE ADT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
);
Teilweise mit anderer Syntax Zusammengesetzte Typen von Cloud SQL for PostgreSQL werden in einer Liste mit Attributnamen und Datentypen angegeben:

CREATE TYPE ADT_DEMO AS
(
ID NUMERIC(6),
NAME VARCHAR(20)
);

VARRAY-Typ CREATE TYPE VARRAY_DEMO AS VARRAY (5) OF VARCHAR2(25); Nein Als Problemumgehung können Sie in Cloud SQL for PostgreSQL Spalten als Array definieren:

CREATE TABLE VARRAY_TABLE (
NAME VARCHAR(25)[]
);

Verschachtelter Tabellentyp CREATE TYPE NTT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
) ;
CREATE TYPE NTT_TABLE AS TABLE OF NTT_DEMO;
Nein Als Problemumgehung verwenden Sie eine Kombination aus zusammengesetzten Typen und einer Array-Spaltendefinition in Cloud SQL for PostgreSQL, um eine ähnliche Funktionalität wie beim verschachtelten Tabellentyp von Oracle zu erzielen.

CREATE TYPE NTT_DEMO AS
(
ID NUMERIC(6),
NAME VARCHAR(20)
);
CREATE TABLE NTT_TABLE (
RECORD NTT_DEMO[]
);

Unvollständiger Typ Unvollständige Typen sind Typen ohne Attribute und Methoden. Sie können durch andere Typen referenziert werden. Sie müssen jedoch vor der Verwendung die Typdefinition angeben.

CREATE TYPE INCOMPLETE_DEMO;

Nein N/A

Nutzer

In diesem Abschnitt wird erläutert, wie Sie Nutzer erstellen und ihnen Berechtigungen zuweisen und weshalb Sie Oracle-Tabellen in Cloud SQL for PostgreSQL-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/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.

In Oracle gibt es das Konzept von Nutzern und Rollen. Nutzer werden verwendet, um sich bei der Datenbank zu authentifizieren. Mit Rollen werden Berechtigungen gruppiert, die als Ganzes gewährt werden können.

In Cloud SQL for PostgreSQL sind Nutzer und Rollen synonym. Ein Nutzer in Cloud SQL for PostgreSQL ist eine Rolle mit der Berechtigung connect. Sie können entweder die Anweisung CREATE USER oder CREATE ROLE verwenden, um einen Datenbanknutzer zu erstellen. Im Gegensatz zu Oracle werden in Cloud SQL for PostgreSQL Schemas und Nutzer separat erstellt. Ein Schema ist eine Sammlung von Objekten (z. B. Tabellen, Datentypen, Funktionen usw.) und gehört einem Nutzer.

"Create User" in Oracle
CREATE USER user_name IDENTIFIED BY password;
"Create User" in Cloud SQL for PostgreSQL
CREATE USER user WITH PASSWORD 'password';

ODER

CREATE ROLE user WITH LOGIN PASSWORD 'password';

Überlegungen zu Konvertierungen

  • Nutzer werden auf Stammebene definiert und sind für alle Datenbanken gültig, die im selben Cloud SQL for PostgreSQL-Cluster enthalten sind. Dies ist vergleichbar mit "gängigen Nutzern" in Oracle 12c.
  • Die Cloud SQL for PostgreSQL-CREATE USER-Syntax unterscheidet sich von Oracle und kann nicht unverändert migriert werden. CREATE USER in Cloud SQL for PostgreSQL ist ein Alias für CREATE ROLE, mit der Ausnahme, dass die Option LOGIN standardmäßig aktiviert ist.

Tabellen

Oracle-Tabellen bestehen aus vielen Elementen wie Spaltendatentypen, Tabelleneinschränkungen, Indexen, Partitionen, proprietären Oracle-Tabellenfunktionen usw. Für eine erfolgreiche Migration zu Cloud SQL for PostgreSQL-Datenbanktabellen müssen alle Oracle-Tabellenelemente in Cloud SQL for PostgreSQL-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 Cloud SQL for PostgreSQL wahrscheinlich mehr Aufwand, da die Konvertierung von Oracle-Tabellen in Cloud SQL for PostgreSQL-Tabellen eine entscheidende Phase mit erheblicher Bedeutung und weiteren Auswirkungen auf Leistung und Datengröße darstellt.

Im Folgenden sind die Hauptunterschiede zwischen Oracle- und Cloud SQL for PostgreSQL-Tabellen und den zugehörigen Features aufgeführt. Diese Unterschiede werden in den verbleibenden Teilen der Reihe erläutert.

  • 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

Nächste Schritte