Memigrasikan pengguna Oracle ke Cloud SQL untuk MySQL: 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 MySQL versi 5.7, instance generasi kedua. Seri ini mencakup bagian-bagian berikut:

Jenis data

MySQL menyediakan beragam jenis data yang sepenuhnya setara atau mirip dengan jenis data yang disediakan oleh Oracle. Tabel berikut mencantumkan jenis data MySQL yang paling umum, diikuti dengan perbandingan antara jenis data primitif Oracle dan jenis data padanannya di MySQL; jika jenis data tidak didukung, jenis data alternatif akan dicantumkan. Perhatikan bahwa database MySQL 5.7 memiliki batas 65.535 byte untuk seluruh baris (bergantung pada himpunan karakter yang digunakan).

Jenis data primitif MySQL 5.7

Kelompok jenis data MySQL Nama jenis data MySQL Spesifikasi jenis data
String/
karakter
CHAR(n)
Menyimpan tepat n karakter.
VARCHAR(n)
Menyimpan karakter dalam jumlah bervariasi, hingga maksimum n karakter.
BINARY
Menyimpan tepat n byte.
VARBINARY(n)
Menyimpan karakter dalam jumlah bervariasi, hingga maksimum n byte.
BLOB
Objek besar biner yang dapat menampung data dalam jumlah bervariasi.
TEXT
Varian spesifik VARCHAR yang tidak mengharuskan Anda menentukan batas maksimum jumlah karakter.
ENUM
Objek string dengan nilai yang dipilih dari daftar nilai yang diizinkan, yang disebutkan secara eksplisit dalam spesifikasi kolom saat tabel dibuat.
SET
Objek string yang dapat memiliki nilai nol atau lebih, yang masing-masing harus dipilih dari daftar nilai yang diizinkan yang ditentukan saat tabel dibuat.
Numerik
INT
Nilai min adalah -2147483648 | Nilai maks adalah 2147483647.
INTEGER
Nilai min adalah -2147483648 | Nilai maks adalah 2147483647.
TINYINT
Nilai min adalah -128 | Nilai maks adalah 127.
SMALLINT
Nilai min adalah -32768 | Nilai maks adalah 32767.
MEDIUMINT
Nilai min adalah -8388608 | Nilai maks adalah 8388607.
BIGINT
Nilai min adalah -2^63 | Nilai maks adalah 2^63-1.
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.
FLOAT(m,d)
Nilai dapat disimpan hingga total m digit, dengan d digit di antaranya dapat muncul setelah tanda desimal.
DOUBLE(m,d)
Nilai dapat disimpan hingga total m digit, dengan d digit di antaranya dapat muncul setelah tanda desimal.
BIT(m)
Penyimpanan nilai m-bit. m dapat berkisar dari 1 hingga 64.
Tanggal & waktu
DATE
- Nilai dengan bagian tanggal, tetapi tanpa bagian waktu.
- Mengambil dan menampilkan nilai DATE dalam format 'YYYY-MM-DD'.
- Rentang yang didukung adalah '1000-01-01' hingga '9999-12-31'.
DATETIME
- Nilai yang berisi bagian tanggal dan waktu.
- Mengambil dan menampilkan nilai DATETIME dalam format 'YYYY-MM-DD HH:MM:SS'.
- Rentang yang didukung adalah '1000-01-01 00:00:00' hingga '9999-
12-31 23:59:59'.
TIMESTAMP
- Nilai yang berisi bagian tanggal dan waktu.
- TIMESTAMP memiliki rentang dari '1970-01-01 00:00:01' UTC hingga '2038-01-19 03:14:07' UTC.
TIME
- Nilai dapat berkisar dari '-838:59:59' hingga '838:59:59'.
- Bagian jam bisa jadi sangat besar karena jenis TIME dapat digunakan tidak hanya untuk menunjukkan waktu dalam sehari (yang harus kurang dari 24 jam), tetapi juga waktu berlalu atau interval waktu antara dua peristiwa (yang mungkin jauh lebih besar dari 24 jam, atau bahkan bernilai negatif).
YEAR
- YEAR jenis 1 byte yang digunakan untuk menunjukkan nilai tahun.
- Dapat dideklarasikan sebagai YEAR atau YEAR(n) dan memiliki lebar tampilan n karakter.
JSON
JSON
Data JSON tekstual sebagai jenis data.

Spasial (Geometri)
GEOMETRY
Jenis kolom yang harus ditentukan jika Anda ingin menggunakan model data yang disajikan dalam sisa tabel ini.
POINT
Nilai (x,y).
LINESTRING
(pt1, pt2) baris.
POLYGON
Urutan titik, yang berarti jalur tertutup.
MULTIPOINT
Kumpulan nilai POINT.
MULTI-LINESTRING
Kumpulan nilai LINE.
MULTIPOLYGON
Kumpulan nilai POLYGON.
GEOMETRY-COLLECTION
Kumpulan jenis data geometri.
Logika
BOOLEAN
- Berisi nilai benar atau salah.
- Menerima nilai seperti TRUE, '1', dan 1 sebagai benar.
- Menggunakan 1 byte penyimpanan, dan dapat menyimpan NULL.

Konversi jenis data Oracle ke MySQL

Kelompok jenis data Oracle Nama jenis data Oracle Spesifikasi jenis data Oracle MySQL ke padanan di Oracle Alternatif/padanan di MySQL
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. Ya
NCHAR(n)
VARCHAR(n)
Ukuran maksimum 2000 byte. Ya
VARCHAR(n)
NCHAR
VARYING(n)
String UTF-8 panjang bervariasi dengan ukuran maksimum
4000 byte.
Ya
NCHAR
VARYING(n)
VARCHAR2(n)
11g
Ukuran maksimum 4000 byte, Ukuran maksimum 32 KB di PL/SQL. Tidak
VARCHAR(n)
VARCHAR2(n)
12g
Ukuran maksimum 32767 byte MAX_STRING_SIZE=EXTENDED. Tidak
VARCHAR(n)
NVARCHAR2(n)
Ukuran maksimum 4000 byte. Tidak
VARCHAR(n)
LONG
Ukuran maksimum 2 GB. Ya
LONG
RAW(n)
Ukuran maksimum 2000 byte. Tidak
VARBINARY(n)
LONG RAW
Ukuran maksimum 2 GB. Tidak
LONGTEXT
Numerik
NUMBER
Bilangan floating point. Tidak
NUMERIC/DECIMAL(p,s)
Numerik
NUMBER
Bilangan floating point. Tidak
NUMERIC/DECIMAL(p,s)
NUMBER(*)
Bilangan floating point. Tidak
DOUBLE
NUMERIC(p,s)
Presisi dapat berkisar mulai dari 1 hingga 38. Ya
NUMERIC(p,s)
FLOAT(p)
Bilangan floating point. Ya
FLOAT(p)
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
REAL
DOUBLE PRECISION
Bilangan floating point. Ya
DOUBLE PRECISION
Tanggal & Waktu
DATE
Menyimpan data tanggal dan waktu (tahun, bulan, hari, jam, menit, dan detik). Ya
DATE
TIMESTAMP(p)
Tanggal dan waktu dengan pecahan. Ya
TIMESTAMP
TIMESTAMP(p)
WITH TIME ZONE
Tanggal dan waktu dengan pecahan dan zona waktu. Tidak
DATETIME(n)
INTERVAL
YEAR(p)
TO MONTH
Interval tanggal. Tidak
VARCHAR(n)
INTERVAL
DAY(p)
TO SECOND(s)
Interval hari dan waktu. Tidak
VARCHAR(n)
Logika
BOOLEAN
Nilai TRUE, FALSE, dan NULL. Tidak dapat ditetapkan ke kolom tabel database. Ya
BOOLEAN
XML
XMLTYPE
Data XML. Tidak
LONGTEXT
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
LONGTEXT
BLOB
Objek besar biner dengan ukuran maksimum 4 GB. Ya
BLOB
NCLOB
String Unicode panjang bervariasi dengan ukuran file maksimum 4 GB. Tidak
LONGTEXT
ROWID
ROWID
Alamat baris fisik. Tidak
CHAR(n)
UROWID(n)
ID baris universal alamat baris logika. Tidak
VARCHAR(n)
Spasial
SDO_GEOMETRY
Deskripsi geometris objek spasial. Tidak
N/A
SDO_TOPO_GEOMETRY
Menjelaskan geometri topologi. Tidak
N/A
SDO_GEORASTER
Petak raster atau objek gambar disimpan dalam satu baris. Tidak
N/A
Jenis media
ORDDicom
Mendukung penyimpanan dan pengelolaan data audio. Tidak
N/A
ORDDicom
Mendukung penyimpanan dan pengelolaan file Digital Imaging and Communications in Medicine (DICOM). Tidak
N/A
ORDDoc
Mendukung penyimpanan dan pengelolaan semua jenis data media. Tidak
N/A
ORDImage
Mendukung penyimpanan dan pengelolaan data gambar. Tidak
N/A
ORDVideo
Mendukung penyimpanan dan pengelolaan data video. Tidak
N/A

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.

Berikut adalah contoh UDT di Oracle:

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

Catatan konversi

MySQL tidak memungkinkan pengguna membuat jenis data khusus dan ditentukan.

Pengguna dan tabel

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

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 dan 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).

Pertimbangan konversi

  • Sintaksis CREATE USER di MySQL berbeda dengan di Oracle dan tidak dapat dimigrasikan begitu saja. Selain itu, kedua database memiliki arsitektur pengguna yang berbeda.
  • Saat membuat pengguna di MySQL, admin harus menentukan server yang perlu dihubungi pengguna untuk mengakses database. Server tersebut dapat berupa alamat IP atau DNS spesifik. Pengguna juga dapat terhubung dari semua sumber menggunakan tanda karakter pengganti %.
  • Karena nama pengguna di MySQL adalah lampiran dua bagian yang terdiri atas nama pengguna dan server tempat pengguna diizinkan untuk terhubung, pengguna dapat dibuat dengan nama yang sama tetapi dari server berbeda sebagai alamat klien (IP/DNS).
  • Setelah dibuat, pengguna dapat diberi izin ke objek database yang merupakan bagian dari database atau skema tertentu.
  • Pengguna juga dapat diberi izin tambahan sesuai dengan izin yang diperbolehkan Cloud SQL untuk MySQL (misalnya pengguna root akan memiliki semua hak istimewa kecuali untuk SUPER dan FILE). Pengguna Oracle dapat dikaitkan ke tablespace khusus saat berada di MySQL, sehingga fungsionalitas ini tidak relevan.

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 MySQL berhasil, semua elemen tabel Oracle harus dikonversi menjadi tabel MySQL. 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 MySQL mungkin memerlukan lebih banyak upaya karena mengonversi tabel Oracle menjadi tabel MySQL merupakan tahap krusial yang memiliki arti penting dan dampak lanjutan terhadap performa dan ukuran data.

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

  • Kepekaan huruf besar/kecil (nama tabel dan kolom)
  • 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