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:
- Memigrasikan pengguna Oracle ke Cloud SQL untuk MySQL: Terminologi dan fungsionalitas
- Memigrasikan pengguna Oracle ke Cloud SQL untuk MySQL: Jenis data, pengguna, dan tabel (dokumen ini)
- Memigrasikan pengguna Oracle ke Cloud SQL untuk MySQL: Kueri, serta prosedur, fungsi, dan pemicu tersimpan
- Memigrasikan pengguna Oracle ke Cloud SQL untuk MySQL: Keamanan, operasi, pemantauan, dan logging
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 USERdi 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
SUPERdanFILE). 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