Memigrasikan pengguna Oracle ke Cloud SQL untuk PostgreSQL: Jenis data, pengguna, dan tabel

Dokumen ini adalah bagian dari rangkaian yang memberikan informasi dan panduan penting terkait perencanaan dan pelaksanaan migrasi database Oracle® 11g/12c ke Cloud SQL untuk PostgreSQL versi 12. Selain bagian penyiapan pendahuluan, rangkaian ini meliputi bagian berikut:

Jenis data

Cloud SQL untuk PostgreSQL menyediakan beberapa jenis data yang sepenuhnya setara atau mirip dengan jenis data yang disediakan Oracle. Tabel berikut mencantumkan jenis data PostgreSQL yang paling umum, diikuti dengan perbandingan antara jenis data primitif Oracle dan Cloud SQL yang sesuai untuk jenis data Cloud SQL for PostgreSQL; jika jenis data tidak didukung, tipe data alternatif akan dicantumkan.

Jenis data primitif Cloud SQL untuk PostgreSQL 12

Kelompok jenis data Cloud SQL untuk PostgreSQL Nama jenis data Cloud SQL untuk PostgreSQL Spesifikasi jenis data
String/karakter CHAR(n) Menyimpan tepat n karakter. Alias CHARACTER(n).
CHARACTER(n) Menyimpan tepat n karakter.
VARCHAR(n) Menyimpan variabel jumlah karakter, hingga maksimum n karakter. Alias dari CHARACTER VARYING(n).
CHARACTER VARYING(n) Menyimpan variabel jumlah karakter, hingga maksimum n karakter.
TEXT Varian spesifik VARCHAR yang tidak mengharuskan Anda menentukan batas maksimum jumlah karakter. String karakter terpanjang yang dapat disimpan adalah 1 GB (sama untuk semua jenis data karakter string).
Numerik SMALLINT Nilai min adalah -32.768 | Nilai maks adalah 32.767.
INTEGER Nilai min adalah -2147483648 | Nilai maks adalah 2147483647.
BIGINT Nilai min adalah -2^63 | Nilai maks adalah 2^63-1.
REAL Angka floating point presisi tunggal (4 byte).
DOUBLE PRECISION Angka floating point presisi ganda (8 byte).
DECIMAL (p,s) Dapat menyimpan nilai apa pun dengan p digit dan s desimal.
NUMERIC(p,s) Dapat menyimpan nilai apa pun dengan p digit dan s desimal.
SMALLSERIAL Bilangan Bulat Pertambahan Otomatis. Nilai min adalah 1 | Nilai maks adalah 32.767.
SERIAL Bilangan Bulat Pertambahan Otomatis. Nilai min adalah 1 | Nilai maks adalah 2147483647.
BIGSERIAL Bilangan Bulat Pertambahan Otomatis. Nilai min adalah 1 | Nilai maks adalah 2^63-1.
Moneter MONEY Jumlah mata uang dengan presisi pecahan tetap. Nilai min adalah -92233720368547758,08 | Nilai maks adalah +92233720368547758.07.
Tanggal & Waktu DATE - Nilai dengan bagian tanggal, tetapi tanpa bagian waktu.
- Rentang yang didukung adalah 4713 BC hingga 5874897 AD dengan resolusi 1 hari.
TIMESTAMP (p) - Nilai yang berisi bagian tanggal dan waktu.
- Rentang yang didukung adalah 4713 BC hingga 294276 AD.
- Resolusi adalah p digit pecahan dalam detik (atau 1 mikrodetik jika tidak ditentukan).
TIMESTAMP (p) with time zone - Nilai yang berisi tanggal, waktu, dan zona waktu.
- Rentang yang didukung adalah 4713 BC hingga 294276 AD.
- Resolusi adalah p digit pecahan dalam detik (atau 1 mikrodetik jika tidak ditentukan).
TIME (p) - Nilai dengan bagian waktu tetapi tanpa bagian tanggal.
- Rentang yang didukung adalah 00:00:00 hingga 24:00:00.
- Resolusi adalah p digit pecahan dalam detik (atau 1 mikrodetik jika tidak ditentukan).
TIME (p) with time zone - Nilai dengan waktu dan zona waktu, tetapi tanpa bagian tanggal.
- Rentang yang didukung adalah 00:00:00 hingga 24:00:00.
- Resolusi adalah p digit pecahan dalam detik (atau 1 mikrodetik jika tidak ditentukan).
INTERVAL (p) - Interval waktu
- Rentang yang didukung adalah -178000000 hingga 178000000 tahun.
- Resolusi adalah p digit pecahan dalam detik (atau 1 mikrodetik jika tidak ditentukan).
JSON JSON Data JSON tekstual.
JSONB Data JSON biner.
XML XML Data XML.

Geometrik
GEOMETRY Jenis kolom yang akan menentukan kapan Anda ingin menggunakan model data berikut.
POINT Nilai (x,y).
LINE Tuple (A, B, C) dengan Ax + By + C = 0 dan A serta B bukan keduanya 0.

ATAU

Titik 1 dan poin 2 dalam format berikut:

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

LSEG Segmen garis ((x1,y1),(x2,y2)).
BOX Kotak persegi panjang ((x1,y1),(x2,y2)).
PATH Urutan titik ((x1,y1),...).
POLYGON Urutan titik, efektif jalur tertutup.
CIRCLE (x,y),r) (titik tengah dan radius)
Logis BOOLEAN - Menyimpan nilai true, false, atau null.
- Menerima nilai seperti yes, true, t, on, dan 1 sebagai true.
Data bit/biner BIT (n) String bit dengan panjang tetap.
BYTEA Data biner/array byte.
Jenis alamat jaringan CIDER jaringan IPv4 dan IPv6.
INET Host dan jaringan IPv4 dan IPv6.
MACADDR Alamat MAC
MACADDR8 Alamat MAC (format EUI-64).
Lainnya PG_LSN Nomor urut log Cloud SQL untuk PostgreSQL.
TSQUERY Kueri penelusuran teks
TSVECTOR Dokumen penelusuran teks.
TXID_SNAPSHOT Ringkasan ID transaksi tingkat pengguna.
UUID ID unik universal.

Konversi jenis data Oracle ke Cloud SQL untuk PostgreSQL

Kelompok jenis data Oracle Nama jenis data Oracle Spesifikasi jenis data Oracle Cloud SQL untuk PostgreSQL ke Oracle yang setara Korespondensi/alternatif Cloud SQL untuk PostgreSQL
String/karakter CHAR(n) Ukuran maksimum 2.000 byte. Ya CHAR(n)
CHARACTER(n) Ukuran maksimum 2.000 byte. Ya CHARACTER(n)
NCHAR(n) Ukuran maksimum 2.000 byte. Tidak CHAR(n)
VARCHAR(n) Ukuran maksimum 2.000 byte. Ya VARCHAR(n)
NCHAR VARYING(n) Ukuran maksimum string UTF-8 dengan panjang bervariasi
4.000 byte.
Tidak CHARACTER VARYING(n)
VARCHAR2(n) 11g Ukuran maksimum 4000 byte, ukuran maksimum 32 KB dalam PL/SQL. Ya* VARCHAR(n)
VARCHAR2(n)
12g
Ukuran maksimum 32.767 byte MAX_STRING_SIZE= EXTENDED. Ya* VARCHAR(n)
NVARCHAR2(n) Ukuran maksimum 4.000 byte. Tidak VARCHAR(n)
LONG Ukuran maksimum 2 GB. Ya* TEXT
RAW(n) Ukuran maksimum 2.000 byte. Ya* BYTEA
LONG RAW Ukuran maksimum 2 GB. Ya* BYTEA
Numerik NUMBER Angka floating-point Ya* NUMERIC(p,s)
NUMBER(*) Angka floating-point Ya* DOUBLE PRECISION
NUMERIC(p,s) Presisi dapat berkisar dari 1 hingga 38. Ya NUMERIC(p,s)
FLOAT(p,s) Angka floating-point Ya* DOUBLE PRECISION
DEC(p,s) Bilangan titik tetap. Ya DEC(p,s)
DECIMAL(p,s) Bilangan titik tetap. Ya DECIMAL(p,s)
INT Bilangan bulat 38 digit. Ya INT
INTEGER Bilangan bulat 38 digit. Ya INTEGER
SMALLINT Bilangan bulat 38 digit. Ya SMALLINT
REAL Angka floating-point Ya* DOUBLE PRECISION
DOUBLE PRECISION Angka floating-point Ya DOUBLE PRECISION
Tanggal & Waktu DATE Menyimpan data tanggal dan waktu (tahun, bulan, hari, jam, menit, dan detik). Ya* TIMESTAMP(0)
TIMESTAMP(p) Tanggal dan waktu dengan pecahan. Ya TIMESTAMP(p)
TIMESTAMP(p) WITH TIME ZONE Tanggal dan waktu dengan pecahan dan zona waktu. Ya TIMESTAMP (p) WITH TIME ZONE
INTERVAL YEAR(p) TO MONTH Interval tanggal. Ya* INTERVAL YEAR TO MONTH
INTERVAL DAY(p) TO SECOND(s) Interval hari dan waktu. Ya* INTERVAL DAY TO SECOND(s)
Logis BOOLEAN Nilai TRUE, FALSE, dan NULL. Tidak dapat ditetapkan ke kolom tabel database. Ya BOOLEAN
XML XMLTYPE Data XML. Tidak XML
LOB BFILE Pointer file biner, dengan ukuran maksimum 4 GB. Tidak VARCHAR(255)
CLOB Objek besar karakter dengan ukuran file maksimum 4 GB. Tidak TEXT
BLOB Objek besar biner dengan ukuran maksimum 4 GB. Tidak BYTEA
NCLOB String Unicode dengan panjang variabel dengan ukuran file maksimum 4 GB. Tidak TEXT
ROWID ROWID Alamat baris fisik. Tidak CTID
UROWID(n) ID baris universal dari alamat baris logis. Tidak CTID
Spasial SDO_ GEOMETRY Deskripsi geometris objek spasial. Ya Postgres memiliki berbagai jenis geometri termasuk point, line, path, polygon, circle, ....
SDO_TOPO_ GEOMETRY Menjelaskan geometri topologi. Ya PostGIS, ekstensi Postgres yang banyak digunakan, menyediakan beberapa jenis topologi.
SDO_GEORASTER Petak raster atau objek gambar disimpan dalam satu baris. Ya PostGIS, ekstensi Postgres yang banyak digunakan, menyediakan alat untuk memuat file raster ke dalam database.
Jenis media ORDDicom Mendukung penyimpanan dan pengelolaan file Gambar dan Komunikasi Digital dalam Kedokteran (DICOM). Ya, dengan solusi Postgres menyediakan jenis biner, bytea, untuk menyimpan objek besar.
ORDDoc Mendukung penyimpanan dan pengelolaan semua jenis data media. Ya, dengan solusi Postgres menyediakan jenis biner, bytea, untuk menyimpan objek besar.
ORDImage Mendukung penyimpanan dan pengelolaan data gambar. Ya, dengan solusi Postgres menyediakan jenis biner, bytea, untuk menyimpan objek besar.
ORDVideo Mendukung penyimpanan dan pengelolaan data video. Solusi Postgres menyediakan jenis biner, bytea, untuk menyimpan objek besar.

* Jenis data terkait di Cloud SQL untuk PostgreSQL sebagian besar kompatibel dengan Oracle, tetapi menggunakan nama yang berbeda.

Jenis yang ditentukan pengguna

Oracle merujuk pada jenis yang ditentukan pengguna (UDT) sebagai OBJECT TYPES, yang dikelola menggunakan PL/SQL. Jenis yang ditentukan pengguna memungkinkan pengguna membuat jenis data kompleks khusus aplikasi yang didasarkan pada dan diperluas dari daftar jenis data Oracle bawaan.

Jenis Oracle yang ditentukan pengguna Ringkasan atau implementasi Oracle Dukungan Cloud SQL untuk PostgreSQL Solusi alternatif atau solusi alternatif Cloud SQL untuk PostgreSQL
Jenis data abstrak (ADT) CREATE TYPE ADT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
);
Sebagian dengan sintaksis yang berbeda Jenis komposit Cloud SQL untuk PostgreSQL ditentukan oleh daftar nama atribut dan jenis data:

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

Jenis VARRAY CREATE TYPE VARRAY_DEMO AS VARRAY (5) OF VARCHAR2(25); Tidak Sebagai solusinya, Cloud SQL untuk PostgreSQL memungkinkan kolom ditentukan sebagai array:

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

Jenis tabel bertingkat CREATE TYPE NTT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
) ;
CREATE TYPE NTT_TABLE AS TABLE OF NTT_DEMO;
Tidak Sebagai solusinya, gunakan kombinasi jenis komposit dan definisi kolom array di Cloud SQL untuk PostgreSQL guna mencapai fungsi yang serupa dengan jenis tabel Bertingkat Oracle.

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

Jenis tidak lengkap Jenis yang tidak lengkap adalah jenis tanpa atribut dan metode. LLM dapat dirujuk oleh jenis lain. Namun, Anda harus memberikan definisi jenis sebelum menggunakannya.

CREATE TYPE INCOMPLETE_DEMO;

Tidak N/A

Pengguna

Bagian ini membahas cara membuat pengguna dan menetapkan izin, serta perlunya mengonversi tabel Oracle menjadi tabel Cloud SQL untuk PostgreSQL.

Pembuatan dan izin pengguna

Akun pengguna database Oracle (Oracle "pengguna" dan "skema" identik) dapat digunakan untuk mengautentikasi dan terhubung ke sesi database, sedangkan akses otorisasi ditetapkan di tingkat individual pengguna untuk objek database tertentu/permissions.

Secara umum, ada dua jenis pengguna database:

  • Administrator: mengelola instance, pengguna, dan resource database.
  • Akun Pengguna: yang melayani operasi logika seperti aplikasi.

Administrator memberikan hak istimewa ke akun pengguna aplikasi dan pengguna untuk mengakses objek database. Izin database Oracle diberikan kepada pengguna untuk operasi tertentu (misalnya, membuat sesi/connect) atau objek database tertentu (misalnya, SELECT pada tabel tertentu atauEXECUTE pada prosedur tersimpan tertentu).

Di Oracle, ada konsep pengguna dan peran. Pengguna digunakan untuk melakukan autentikasi dengan database dan peran memberikan pengelompokan izin yang dapat diberikan secara keseluruhan.

Di Cloud SQL untuk PostgreSQL, pengguna dan peran identik. Pengguna di Cloud SQL untuk PostgreSQL adalah peran dengan izin connect. Anda dapat menggunakan pernyataan CREATE USER atau CREATE ROLE untuk membuat pengguna database. Tidak seperti Oracle, di Cloud SQL untuk PostgreSQL, skema dan pengguna dibuat secara terpisah. Skema adalah kumpulan objek (misalnya, tabel, jenis data, fungsi, dll.) dan dimiliki oleh pengguna.

Buat User Oracle
CREATE USER user_name IDENTIFIED BY password;
Pengguna Create Cloud SQL untuk PostgreSQL
CREATE USER user WITH PASSWORD 'password';

ATAU

CREATE ROLE user WITH LOGIN PASSWORD 'password';

Pertimbangan konversi

  • Pengguna ditetapkan di level root dan berlaku untuk semua database yang ada dalam cluster Cloud SQL untuk PostgreSQL yang sama. Ini serupa dengan "pengguna umum" di Oracle 12c.
  • Sintaksis CREATE USER Cloud SQL untuk PostgreSQL berbeda dengan Oracle dan tidak dapat dimigrasikan apa adanya. CREATE USER di Cloud SQL untuk PostgreSQL adalah alias untuk CREATE ROLE, kecuali bahwa opsi LOGIN diaktifkan secara default.

Tabel

Tabel Oracle dibuat dari banyak elemen seperti jenis data kolom, batasan tabel, indeks, partisi, fitur eksklusif tabel Oracle, dan banyak lagi. Agar berhasil bermigrasi ke tabel database Cloud SQL untuk PostgreSQL, semua elemen tabel Oracle harus dikonversi menjadi tabel Cloud SQL untuk PostgreSQL. Beberapa elemen didukung tanpa atau tanpa modifikasi kecil, sementara beberapa elemen harus diubah sepenuhnya.

Dari perspektif migrasi, mengonversi PL/SQL menjadi Cloud SQL untuk PostgreSQL mungkin memerlukan lebih banyak upaya karena mengonversi tabel Oracle menjadi tabel Cloud SQL untuk PostgreSQL adalah tahap krusial yang memiliki arti penting dan berimplikasi lebih lanjut terhadap performa dan ukuran data.

Berikut adalah perbedaan utama antara tabel Oracle dan Cloud SQL untuk PostgreSQL serta fitur terkait. Perbedaan ini akan dibahas di bagian lainnya dalam seri.

  • Membuat sintaksis tabel
  • Metadata tabel dan indeks
  • Dukungan batasan
  • Dukungan dan batasan jenis data
  • Indeks
  • Pengelolaan partisi dan partisi
  • Pemeliharaan tabel dan indeks
  • Tabel sementara
  • Tabel Virtual
  • Kolom yang terlihat dan tidak terlihat (Oracle 12c)
  • Himpunan karakter tabel dan kolom

Langkah selanjutnya