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

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

Jenis data

Cloud SQL untuk PostgreSQL menyediakan beragam jenis data yang sepenuhnya setara atau mirip dengan jenis data yang disediakan oleh Oracle. Tabel berikut mencantumkan jenis data PostgreSQL yang paling umum, diikuti dengan perbandingan antara jenis data primitif Oracle dan jenis data padanannya di Cloud SQL untuk PostgreSQL; jika jenis data tidak didukung, jenis 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 karakter dalam jumlah bervariasi, hingga maksimum n karakter. Alias CHARACTER VARYING(n).
CHARACTER VARYING(n) Menyimpan karakter dalam jumlah bervariasi, 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 -32768 | Nilai maks adalah 32767.
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 bertambah otomatis. Nilai min adalah 1 | Nilai maks adalah 32.767.
SERIAL Bilangan bulat bertambah otomatis. Nilai min adalah 1 | Nilai maks adalah 2147483647.
BIGSERIAL Bilangan bulat bertambah 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 harus ditentukan jika Anda ingin menggunakan model data berikut.
POINT Nilai (x,y).
LINE Tuple (A, B, C) di mana Ax + By + C = 0 serta A dan B keduanya tidak bernilai 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, yang berarti jalur tertutup.
CIRCLE (x,y),r) (titik tengah dan radius)
Logika BOOLEAN - Berisi nilai benar, salah, atau null.
- Menerima nilai seperti yes, true, t, on, dan 1 sebagai benar.
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 Snapshot 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 padanan di Oracle Padanan/alternatif di Cloud SQL untuk PostgreSQL
String/karakter CHAR(n) Ukuran maksimum 2000 byte. Ya CHAR(n)
CHARACTER(n) Ukuran maksimum 2000 byte. Ya CHARACTER(n)
NCHAR(n) Ukuran maksimum 2000 byte. Tidak CHAR(n)
VARCHAR(n) Ukuran maksimum 2000 byte. Ya VARCHAR(n)
NCHAR VARYING(n) String UTF-8 panjang bervariasi dengan ukuran maksimum
4000 byte.
Tidak CHARACTER VARYING(n)
VARCHAR2(n) 11g Ukuran maksimum 4000 byte, ukuran maksimum 32 KB di PL/SQL. Ya* VARCHAR(n)
VARCHAR2(n)
12g
Ukuran maksimum 32767 byte MAX_STRING_SIZE= EXTENDED. Ya* VARCHAR(n)
NVARCHAR2(n) Ukuran maksimum 4000 byte. Tidak VARCHAR(n)
LONG Ukuran maksimum 2 GB. Ya* TEXT
RAW(n) Ukuran maksimum 2000 byte. Ya* BYTEA
LONG RAW Ukuran maksimum 2 GB. Ya* BYTEA
Numerik NUMBER Bilangan floating point. Ya* NUMERIC(p,s)
NUMBER(*) Bilangan floating point. Ya* DOUBLE PRECISION
NUMERIC(p,s) Presisi dapat berkisar mulai dari 1 hingga 38. Ya NUMERIC(p,s)
FLOAT(p,s) Bilangan 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 Bilangan floating point. Ya* DOUBLE PRECISION
DOUBLE PRECISION Bilangan 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)
Logika BOOLEAN Nilai TRUE, FALSE, dan NULL. Tidak dapat ditetapkan ke kolom tabel database. Ya BOOLEAN
XML XMLTYPE Data XML. Tidak XML
LOB BFILE Pointer ke 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 panjang bervariasi dengan ukuran file maksimum 4 GB. Tidak TEXT
ROWID ROWID Alamat baris fisik. Tidak CTID
UROWID(n) ID baris universal alamat baris logika. Tidak CTID
Spasial SDO_ GEOMETRY Deskripsi geometris objek spasial. Ya Postgres memiliki beragam 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 Digital Imaging and Communications in Medicine (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 yang terkait di Cloud SQL untuk PostgreSQL sebagian besar kompatibel dengan Oracle, tetapi memiliki nama yang berbeda.

Jenis yang ditentukan pengguna

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

Jenis yang ditentukan pengguna di Oracle Ringkasan atau implementasi di Oracle Dukungan di Cloud SQL untuk PostgreSQL Solusi padanan atau alternatif di 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 berdasarkan 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 solusi, 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 solusi, gunakan kombinasi antara jenis komposit dan definisi kolom array di Cloud SQL untuk PostgreSQL guna mencapai fungsionalitas yang serupa dengan Jenis tabel bertingkat di Oracle.

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

Jenis tidak lengkap Jenis tidak lengkap adalah jenis yang tidak memiliki atribut dan metode. Jenis ini dapat direferensikan 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 ("pengguna" dan "skema" Oracle itu sama) dapat digunakan untuk mengautentikasi dan terhubung ke sesi database, sedangkan akses otorisasi ditetapkan di tingkat masing-masing pengguna untuk objek/izin database tertentu.

Secara umum, ada dua jenis pengguna database:

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

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

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

Di Cloud SQL untuk PostgreSQL, pengguna dan peran itu sama. 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 di 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.

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

ATAU

CREATE ROLE user WITH LOGIN PASSWORD 'password';

Pertimbangan konversi

  • Pengguna ditetapkan di tingkat root dan berlaku untuk semua database yang ada dalam cluster Cloud SQL untuk PostgreSQL yang sama. Hal ini mirip dengan "common users" (pengguna global) di Oracle 12c.
  • Sintaksis CREATE USER di Cloud SQL untuk PostgreSQL berbeda dengan di Oracle dan tidak dapat dimigrasikan begitu saja. CREATE USER di Cloud SQL untuk PostgreSQL adalah alias untuk CREATE ROLE, kecuali bahwa opsi LOGIN diaktifkan secara default.

Tabel

Tabel Oracle tersusun atas banyak elemen seperti jenis data kolom, batasan tabel, indeks, partisi, fitur eksklusif tabel Oracle, dan banyak lagi. Agar proses migrasi ke tabel database Cloud SQL untuk PostgreSQL berhasil, semua elemen tabel Oracle harus dikonversi menjadi tabel Cloud SQL untuk PostgreSQL. Ada elemen yang didukung tanpa perlu modifikasi, ada yang perlu sedikit modifikasi, dan ada juga yang harus dimodifikasi 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 merupakan tahap krusial yang memiliki arti penting dan dampak lanjutan terhadap performa dan ukuran data.

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

  • Sintaksis create table
  • Metadata tabel dan indeks
  • Dukungan batasan
  • Dukungan dan keterbatasan jenis data
  • Indeks
  • Partisi dan pengelolaan partisi
  • Pemeliharaan tabel dan indeks
  • Tabel sementara
  • Tabel virtual
  • Kolom terlihat dan tidak terlihat (Oracle 12c)
  • Himpunan karakter tabel dan kolom

Langkah berikutnya