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