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

Dokumen ini adalah bagian dari rangkaian yang menyajikan informasi dan panduan penting terkait perencanaan dan 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 beberapa jenis data yang sepenuhnya setara atau mirip dengan jenis data yang disediakan Oracle. Tabel berikut mencantumkan jenis data MySQL yang paling umum, diikuti dengan perbandingan antara jenis data primitif Oracle dan jenis data MySQL yang sesuai; 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 jumlah karakter yang bersifat variabel, hingga maksimum n karakter.
BINARY
Menyimpan tepat n byte.
VARBINARY(n)
Menyimpan jumlah karakter yang bersifat variabel, hingga maksimum n karakter.
BLOB
Objek besar biner yang dapat menyimpan 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 di 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.
Angka
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 -32.768 | Nilai maks adalah 32.767.
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 mungkin muncul setelah koma desimal.
DOUBLE(m,d)
Nilai dapat disimpan hingga total m digit, dengan d digit di antaranya mungkin muncul setelah koma 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 dari '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 dari '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 mungkin sangat besar karena jenis TIME dapat digunakan tidak hanya untuk mewakili waktu (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 mewakili nilai tahun.
- Dapat dideklarasikan sebagai YEAR atau YEAR(n) dan memiliki lebar tampilan karakter sebanyak n.
JSON
JSON
Data JSON tekstual sebagai jenis data.

Spasial (Geometri)
GEOMETRY
Jenis kolom untuk menentukan kapan Anda ingin menggunakan model data yang mengikuti bagian lain dari tabel ini.
POINT
Nilai (x,y).
LINESTRING
Baris (pt1, pt2).
POLYGON
Urutan titik, efektif jalur tertutup.
MULTIPOINT
Kumpulan nilai POINT.
MULTI-LINESTRING
Kumpulan nilai LINE.
MULTIPOLYGON
Kumpulan nilai POLYGON.
GEOMETRY-COLLECTION
Kumpulan jenis data geometri.
Logis
BOOLEAN
- Menyimpan nilai true (benar) atau false (salah).
- Menerima nilai seperti TRUE, '1', dan 1 sebagai true.
- Menggunakan penyimpanan 1 byte, dan dapat menyimpan NULL.

Konversi jenis data Oracle ke MySQL

Kelompok jenis data Oracle Nama jenis data Oracle Spesifikasi jenis data Oracle MySQL ke Oracle yang setara alternatif/yang sesuai dengan MySQL
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. Ya
NCHAR(n)
VARCHAR(n)
Ukuran maksimum 2.000 byte. Ya
VARCHAR(n)
NCHAR
VARYING(n)
Ukuran maksimum dari string UTF-8 dengan panjang bervariasi
sebesar 4.000 byte.
Ya
NCHAR
VARYING(n)
VARCHAR2(n)
11g
Ukuran maksimum 4000 byte, ukuran maksimum 32 KB dalam PL/SQL. Tidak
VARCHAR(n)
VARCHAR2(n)
12g
Ukuran maksimum 32.767 byte MAX_STRING_SIZE=EXTENDED. Tidak
VARCHAR(n)
NVARCHAR2(n)
Ukuran maksimum 4.000 byte. Tidak
VARCHAR(n)
LONG
Ukuran maksimum 2 GB. Ya
LONG
RAW(n)
Ukuran maksimum 2.000 byte. Tidak
VARBINARY(n)
LONG RAW
Ukuran maksimum 2 GB. Tidak
LONGTEXT
Angka
NUMBER
Angka floating-point Tidak
NUMERIC/DECIMAL(p,s)
Angka
NUMBER
Angka floating-point Tidak
NUMERIC/DECIMAL(p,s)
NUMBER(*)
Angka floating-point Tidak
DOUBLE
NUMERIC(p,s)
Presisi dapat berkisar dari 1 hingga 38. Ya
NUMERIC(p,s)
FLOAT(p)
Angka 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
Angka floating-point Ya
REAL
DOUBLE PRECISION
Angka 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)
Logis
BOOLEAN
Nilai TRUE, FALSE, dan NULL. Tidak dapat ditetapkan ke kolom tabel database. Ya
BOOLEAN
XML
XMLTYPE
Data XML. Tidak
LONGTEXT
LOB
BFILE
Pointer 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 dengan panjang variabel dengan ukuran file maksimum 4 GB. Tidak
LONGTEXT
ROWID
ROWID
Alamat baris fisik. Tidak
CHAR(n)
UROWID(n)
ID baris universal dari alamat baris logis. 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 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 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.

Berikut adalah contoh UDT dari Oracle:

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

Catatan mengenai konversi

MySQL tidak memungkinkan pengguna membuat jenis khusus dan yang telah ditentukan.

Pengguna dan tabel

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

Pembuatan dan izin pengguna

Akun pengguna database Oracle ("pengguna" dan "skema" Oracle bersifat identik) dapat digunakan untuk mengautentikasi dan terhubung ke sesi database, sedangkan akses otorisasi ditetapkan di tingkat masing-masing pengguna untuk objek database dan izin akses tertentu.

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

Pertimbangan konversi

  • Sintaksis CREATE USER MySQL berbeda dengan Oracle dan tidak dapat dimigrasikan langsung. Selain itu, kedua database memiliki arsitektur pengguna yang berbeda.
  • Ketika admin membuat pengguna di MySQL, admin harus menentukan server yang diperlukan pengguna untuk terhubung untuk mengakses database. Server tersebut dapat berupa alamat IP atau DNS tertentu, atau diizinkan untuk terhubung dari semua sumber menggunakan tanda karakter pengganti %).
  • Karena nama pengguna MySQL adalah lampiran dua bagian antara nama pengguna dan server tempat pengguna diizinkan untuk terhubung, pengguna dapat dibuat dengan nama yang sama tetapi dari server yang berbeda sesuai 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 diizinkan Cloud SQL untuk MySQL (misalnya, pengguna root akan memiliki semua hak istimewa kecuali untuk hak istimewa SUPER dan FILE). Pengguna Oracle dapat dikaitkan ke tablespace khusus saat berada di MySQL, sehingga fungsi ini tidak relevan.

Tables

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 MySQL, semua elemen tabel Oracle harus dikonversi menjadi tabel MySQL. Beberapa elemen didukung tanpa atau sedikit modifikasi, sementara beberapa elemen harus dimodifikasi sepenuhnya.

Dari perspektif migrasi, mengonversi PL/SQL menjadi MySQL mungkin memerlukan lebih banyak upaya karena mengonversi tabel Oracle menjadi tabel MySQL adalah tahap penting yang memiliki tingkat kepentingan yang signifikan serta implikasi lebih lanjut terhadap performa dan ukuran data.

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

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