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 (dokumen ini)
- Memigrasikan pengguna Oracle ke Cloud SQL untuk MySQL: Jenis data, pengguna, dan tabel
- 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
Terminologi
Bagian ini menjelaskan persamaan dan perbedaan terminologi database antara Oracle dan Cloud SQL untuk MySQL. Bagian ini meninjau dan membandingkan aspek inti dari setiap platform database tersebut. Perbandingan ini membedakan antara Oracle versi 11g dan 12c karena adanya perbedaan arsitektur (misalnya, Oracle 12c memperkenalkan fitur multi-tenant). Versi Cloud SQL untuk MySQL yang dirujuk di sini adalah 5.7.x.
Perbedaan terminologi antara Oracle 11g dan Cloud SQL untuk MySQL
| Oracle 11g | Deskripsi | Cloud SQL untuk MySQL | Perbedaan utama |
|---|---|---|---|
| Instance | Satu instance Oracle 11g hanya dapat menampung satu database. | Instance | Satu instance MySQL dapat menampung beberapa database. |
| Database | Sebuah database memenuhi syarat sebagai instance tunggal (nama database sama dengan nama instance). | Database | Satu atau beberapa database melayani sejumlah aplikasi. |
| Skema | Skema sama dengan pengguna karena keduanya dianggap sebagai pemilik objek database (pengguna dapat dibuat tanpa menentukan atau dialokasikan ke skema). | Skema | Skema disebut sebagai database, sedangkan objek database dibuat berdasarkan skema/database tertentu. |
| Pengguna | Sama dengan skema karena keduanya merupakan pemilik objek database—misalnya instance → database → skema/pengguna → objek database. | Pengguna | Pengguna database dengan izin spesifik untuk menghubungkan atau mengubah objek database di skema/database tertentu—misalnya instance → database/skema → objek database. |
| Peran | Kumpulan izin database yang ditentukan yang dapat dirangkai sebagai sebuah grup dan dapat ditetapkan ke pengguna database. | Hak istimewa MySQL | MySQL 5.7 tidak mendukung pengelolaan peran. Izin dapat dikonfigurasi menggunakan klausa GRANT agar pengguna memiliki hak istimewa atas objek database di berbagai tingkat (BACA/TULIS, dll.). |
| Pengguna Admin/SISTEM | Pengguna administrator Oracle dengan tingkat akses tertinggi:SYS SYSTEM |
Super user | Setelah di-deploy, Cloud SQL untuk MySQL memiliki pengguna root@'%' (dapat terhubung dari host mana pun) dan pengguna tambahan bernama mysql.sys, yang hanya dapat terhubung dari host lokal. |
| Kamus/metadata | Oracle menggunakan tabel metadata berikut:USER_TableName ALL_TableName DBA_TableName |
Kamus/metadata | MySQL menggunakan beberapa database/skema untuk kamus/metadata:MYSQL INFORMATION_SCHEMA PERFORMANCE_SCHEMA SYS |
| Tabel virtual dinamis sistem | Tabel virtual dinamis Oracle:V$ViewName |
Tabel virtual dinamis sistem | Tabel virtual dinamis MySQL dapat ditemukan di sejumlah database sistem:INFORMATION_SCHEMA PERFORMANCE_SCHEMA SYS |
| Tablespace | Struktur penyimpanan logis primer database Oracle; setiap tablespace dapat menampung satu atau beberapa file data. | Tablespace | Serupa dengan di Oracle, tablespace MySQL adalah unit logis, tetapi hanya mewakili satu tabel, tidak seperti tablespace Oracle yang dapat memiliki banyak file data (menampung data untuk banyak tabel). MySQL mendukung pembuatan tablespace baru dengan file data yang dialokasikan, lalu membuat tabel baru yang dikaitkan ke tablespace yang baru dibuat. Perhatikan bahwa setelan konfigurasi tablespace seperti ukuran dan batas ditetapkan menggunakan parameter database, bukan selama pembuatan tablespace. |
| File data | Elemen fisik database Oracle yang menampung data dan ditentukan dalam tablespace tertentu. Sebuah file data ditentukan berdasarkan ukuran awal dan ukuran maksimumnya, serta dapat menampung data untuk beberapa tabel. File data Oracle menggunakan akhiran .dbf (tidak wajib). |
File data | Cloud SQL untuk MySQL menggunakan parameter innodb_file_per_table dengan nilai "ON" (default); konfigurasi ini menghasilkan file data baru untuk setiap tabel dan tablespace khusus.File data MySQL menggunakan file .ibd (data) dan .frm (metadata). |
| Tablespace sistem | Berisi objek tabel dan tabel virtual kamus data untuk seluruh database Oracle. | Tablespace sistem | Sama seperti di Oracle, berisi tabel kamus/metadata. Disimpan di tablespace innodb_system yang disertakan dengan file data ibdata1. |
| Tablespace sementara | Berisi objek skema yang valid selama durasi sesi, serta mendukung operasi yang sedang berjalan yang tidak dapat dimuat dalam memori server. | Tablespace sementara | Kegunaannya sama dengan di Oracle, disimpan di tablespace innodb_temporary MySQL yang disertakan dengan file data ibtmp1. |
| Tablespace Undo |
Jenis khusus tablespace permanen sistem yang digunakan Oracle untuk mengelola operasi rollback saat menjalankan database dalam mode automatic undo management (default). | Tablespace Undo | Mirip dengan di Oracle, tablespace Undo MySQL berisi log undo untuk tujuan rollback. Secara default, opsi ini ditetapkan ke OFF dan disebut sebagai tidak digunakan lagi untuk rilis MySQL mendatang. |
| ASM | Pengelolaan Penyimpanan Otomatis Oracle adalah pengelola disk dan sistem file database terintegrasi berperforma tinggi yang semuanya dijalankan secara otomatis oleh database Oracle yang dikonfigurasi dengan ASM. | Tidak didukung | MySQL menggunakan istilah mesin penyimpanan untuk menjelaskan berbagai implementasi penanganan data, tetapi tidak mendukung ASM Oracle. Cloud SQL untuk MySQL mendukung banyak fitur yang menyediakan otomatisasi penyimpanan, seperti peningkatan, performa, dan skalabilitas penyimpanan otomatis. |
| Tabel/tabel virtual | Objek database dasar buatan pengguna. | Tabel/tabel virtual | Sama dengan di Oracle. |
| Tampilan terwujud | Ditetapkan dengan pernyataan SQL tertentu dan dapat diperbarui secara manual atau otomatis berdasarkan konfigurasi tertentu. | Tidak didukung oleh MySQL | Sebagai solusinya, pemicu/tabel virtual dapat digunakan sebagai pengganti tampilan terwujud Oracle. |
| Urutan | Generator nilai unik Oracle. | Penambahan otomatis | MySQL tidak mendukung fungsi urutan Oracle; gunakan AUTO_INCREMENT sebagai solusi alternatif dari fungsionalitas pembuatan urutan otomatis. |
| Sinonim | Objek database Oracle yang berfungsi sebagai ID alternatif untuk objek database lainnya. | Tidak didukung | MySQL tidak mendukung fungsi Sinonim Oracle; sebagai solusinya, tabel virtual dapat digunakan selagi menetapkan izin yang sesuai. |
| Partisi | Oracle menyediakan banyak solusi pembuatan partisi untuk membagi tabel berukuran besar menjadi beberapa bagian lebih kecil yang mudah dikelola. | Partisi | MySQL memiliki dukungan pembuatan partisi yang lebih terbatas untuk meningkatkan performa, sekaligus mempertahankan operasi pemeliharaan dan pengelolaan data, seperti partisi Oracle. |
| Database Flashback | Fitur eksklusif Oracle yang dapat digunakan untuk menginisialisasi database Oracle ke waktu yang ditetapkan sebelumnya, sehingga Anda dapat mengkueri atau memulihkan data yang telah dimodifikasi atau rusak secara tidak sengaja. | Tidak didukung | Sebagai solusi alternatif, Anda dapat menggunakan cadangan dan pemulihan point-in-time Cloud SQL untuk memulihkan database ke status sebelumnya (misalnya, memulihkan ke status sebelum sebuah tabel dihapus). |
| sqlplus | Antarmuka command line Oracle yang dapat Anda gunakan untuk mengkueri dan mengelola instance database. | mysql | Antarmuka command line yang setara di MySQL untuk mengkueri dan mengelola instance database. Dapat dihubungkan ke Cloud SQL dari klien mana pun dengan izin yang sesuai. |
| PL/SQL | Bahasa prosedural tambahan Oracle untuk ANSI SQL. | MySQL | MySQL memiliki bahasa prosedural tambahan sendiri dengan sintaksis dan implementasi yang berbeda, dan tidak memiliki penamaan tambahan untuk bahasa tambahan ini. |
| Paket & isi paket | Fungsionalitas eksklusif Oracle untuk mengelompokkan prosedur dan fungsi tersimpan berdasarkan referensi logis yang sama. | Tidak didukung | MySQL mendukung prosedur dan fungsi tersimpan sebagai objek tunggal dengan alokasi grup. |
| Prosedur & fungsi tersimpan | Menggunakan PL/SQL untuk mengimplementasikan fungsionalitas kode. | Prosedur & fungsi tersimpan | Pembuatan prosedur dan fungsi tersimpan didukung oleh MySQL dengan implementasi bahasa prosedural eksklusifnya. |
| Pemicu: | Objek Oracle yang digunakan untuk mengontrol implementasi DML atas tabel. | Pemicu: | Sama dengan di Oracle. |
| PFILE/SPFILE | Parameter tingkat instance dan tingkat database di Oracle disimpan dalam file biner yang disebut SPFILE (dalam versi sebelumnya, disebut PFILE), yang dapat digunakan sebagai file teks untuk menetapkan parameter secara manual. |
Flag database Cloud SQL untuk MySQL | Anda dapat menetapkan atau mengubah parameter Cloud SQL untuk MySQL melalui utilitas flag database. Anda tidak dapat mengubah parameter database di Cloud SQL untuk MySQL menggunakan antarmuka command line klien MySQL (misalnya mysql>
SET GLOBAL ...). Anda hanya dapat mengubah parameter ini menggunakan utilitas flag database. |
| SGA/PGA/AMM | Parameter memori Oracle yang mengontrol alokasi memori ke instance database. |
INNODB_BUFFER_POOL_SIZE
|
MySQL memiliki parameter memorinya sendiri. Parameter yang setara dapat berupa INNODB_BUFFER_POOL_SIZE. Di Cloud SQL untuk MySQL, parameter ini ditetapkan sebelumnya berdasarkan jenis instance yang dipilih, dan nilainya berubah sesuai pilihan tersebut. |
| Cache Hasil | Mengurangi operasi I/O SQL dengan mengambil baris dari cache buffer, yang dapat dikelola menggunakan petunjuk dan parameter database di tingkat sesi. | Cache Kueri | Memiliki kegunaan dasar yang sama dengan Cache Hasil di Oracle serta dapat dikelola di tingkat database dan tingkat sesi. |
| Petunjuk database | Dampak terkontrol terhadap pernyataan SQL yang memengaruhi perilaku pengoptimal untuk mencapai performa yang lebih baik. Oracle memiliki lebih dari 50 petunjuk database berbeda. | Petunjuk database | Dibanding di Oracle, petunjuk database yang didukung MySQL lebih sedikit (optimizer hint dan index hint). Perhatikan bahwa MySQL menggunakan petunjuk, sintaksis, dan penamaan database yang berbeda. |
| RMAN | Utilitas Recovery Manager Oracle. Digunakan untuk mengambil cadangan database dengan fungsionalitas yang diperluas guna mendukung berbagai skenario disaster recovery dan banyak lagi (pembuatan clone, dll.). | Pencadangan Cloud SQL untuk MySQL | Cloud SQL untuk MySQL menawarkan dua metode untuk menerapkan pencadangan penuh: sesuai permintaan dan otomatis. |
| Data Pump (EXPDP/IMPDP) | Utilitas pembuatan dump di Oracle yang dapat digunakan untuk banyak fitur, seperti ekspor/impor, pencadangan database (di tingkat skema atau objek), metadata skema, pembuatan file SQL skema, dan lain-lain. | mysqldump/mysqlimport |
Utilitas dump (ekspor) di MySQL yang dapat dihubungkan sebagai klien (dari jarak jauh) dan menghasilkan file dump (SQL). Anda dapat mengompresi file dump tersebut nanti dan memindahkannya ke Cloud Storage. Utilitas mysqldump hanya untuk langkah ekspor. |
| SQL*Loader | Alat yang memberikan kemampuan untuk mengupload data dari file eksternal seperti file teks, file CSV, dan lain-lain. | mysqlimport/ |
Utilitas mysqlimport memberikan kemampuan untuk memuat file teks atau CSV (Oracle mendukung format file lainnya) ke tabel database dengan struktur yang sesuai. |
| Data Guard | Solusi disaster recovery Oracle yang menggunakan instance standby, sehingga pengguna dapat menjalankan operasi `READ` dari instance standby. | Ketersediaan tinggi dan replikasi Cloud SQL untuk MySQL | Untuk mencapai disaster recovery atau ketersediaan tinggi, Cloud SQL untuk MySQL menawarkan arsitektur replika failover dan untuk operasi hanya baca (pemisahan READ/WRITE) menggunakan Replika Baca. |
| Active Data Guard/Golden Gate | Solusi replikasi utama di Oracle yang dapat digunakan untuk berbagai keperluan seperti Standby (DR), instance Hanya Baca, replikasi Dua Arah (multi-sumber), data warehousing, dan banyak lagi. | Replika Baca Cloud SQL untuk MySQL | Replika Baca di Cloud SQL untuk MySQL untuk mengimplementasikan pengelompokan dengan pemisahan READ/WRITE. Saat ini, tidak ada dukungan untuk konfigurasi multi-sumber, seperti replikasi Dua Arah Golden Gate, atau replikasi heterogen. |
| RAC | Real Application Cluster Oracle. Solusi pengelompokan eksklusif Oracle untuk memberikan ketersediaan tinggi dengan men-deploy beberapa instance database menggunakan satu unit penyimpanan. | Tidak didukung | Arsitektur multi-sumber belum didukung di Google CloudCloud SQL. Untuk mencapai arsitektur pengelompokan dengan pemisahan READ/WRITE dan ketersediaan tinggi, gunakan replika baca dan ketersediaan tinggi Cloud SQL. |
| Grid/Cloud Control (OEM) | Software Oracle untuk mengelola dan memantau database serta layanan terkait lainnya dalam format aplikasi web. Alat ini berguna untuk analisis database real-time guna memahami workload yang tinggi. | Konsol Cloud SQL untuk MySQL, Cloud Monitoring | Gunakan Cloud SQL untuk MySQL untuk pemantauan, yang mencakup grafik berbasis waktu dan berbasis resource yang mendetail. Gunakan juga Cloud Monitoring untuk menampung metrik pemantauan dan analisis log MySQL spesifik guna memberikan kapabilitas pemantauan lanjutan. |
| REDO log | Log transaksi Oracle yang terdiri atas dua (atau lebih) file yang ditetapkan dan dialokasikan sebelumnya yang menyimpan semua modifikasi data saat hal itu terjadi. Kegunaan redo log adalah untuk melindungi database jika terjadi kegagalan instance. | REDO log | MySQL juga memiliki file redo log, yang digunakan selama pemulihan error untuk memperbaiki data yang ditulis oleh mekanisme redo log transaksi yang tidak lengkap. |
| Log arsip | Log arsip memberikan dukungan untuk operasi pencadangan dan replikasi, serta banyak lagi. Oracle menulis ke log arsip (jika diaktifkan) setelah setiap operasi pengalihan redo log. | binlogs | Implementasi retensi log transaksi di MySQL. Digunakan terutama untuk tujuan replikasi (diaktifkan secara default dengan Cloud SQL). |
| File kontrol | File kontrol Oracle menampung informasi tentang database, seperti file data, nama redo log, lokasi, nomor urut log saat ini, dan informasi tentang checkpoint instance. | MySQL | Arsitektur MySQL tidak menyertakan file kontrol yang mirip dengan implementasi Oracle. Mekanisme ini dikontrol melalui parameter MySQL dan dengan menggunakan perintah SHOW MASTER STATUS untuk melihat posisi log biner saat ini. |
| SCN | SCN (System Change Number) Oracle adalah metode utama dalam mempertahankan konsistensi data oleh semua komponen database Oracle untuk memenuhi model transaksi ACID. | Nomor Urut Log | Implementasi konsistensi database di MySQL menggunakan LSN (Nomor Urut Log). |
| AWR | AWR (Automatic Workload Repository) Oracle adalah laporan panjang yang memberikan informasi mendetail tentang performa instance database Oracle dan dianggap sebagai alat DBA untuk diagnostik performa. | performance_schema |
MySQL tidak memiliki laporan yang setara dengan AWR Oracle, tetapi MySQL menghimpun data performa yang dikumpulkan oleh performance_schema. Solusi alternatifnya adalah menggunakan dasbor performa MySQL Workbench. |
DBMS_SCHEDULER |
Utilitas Oracle yang digunakan untuk menetapkan dan mengatur waktu operasi yang telah ditentukan. | EVENT_SCHEDULER |
Fungsionalitas scheduler internal database di MySQL. Secara default, fitur ini ditetapkan ke OFF. |
| Enkripsi data transparan | Mengenkripsi data yang disimpan di disk sebagai perlindungan data dalam penyimpanan. | Advanced Encryption Standard Cloud SQL | Cloud SQL untuk MySQL menggunakan Advanced Encryption Standard 256 bit (AES-256) untuk melindungi data dalam penyimpanan dan dalam transit. |
| Kompresi lanjutan | Untuk memperbaiki jejak penyimpanan, mengurangi biaya penyimpanan, dan meningkatkan performa database, Oracle menyediakan kapabilitas kompresi lanjutan data (tabel/indeks). | Kompresi tabel InnoDB | MySQL menawarkan kompresi tabel dengan membuat tabel menggunakan parameter ROW_FORMAT yang ditetapkan ke COMPRESSED. Baca selengkapnya tentang kompresi indeks. |
| SQL Developer | GUI SQL gratis di Oracle untuk mengelola dan menjalankan pernyataan SQL dan PL/SQL (juga dapat digunakan dengan MySQL). | MySQL Workbench | GUI SQL gratis di MySQL untuk mengelola dan menjalankan pernyataan kode SQL dan MySQL. |
| Log Pemberitahuan | Log utama Oracle untuk operasi dan error database umum. | Log Error MySQL | Menggunakan Logs Viewer Cloud Logging untuk memantau log error MySQL. |
Tabel DUAL |
Tabel khusus Oracle untuk mengambil nilai kolom pseudo seperti SYSDATE atau USER. |
Tabel DUAL | MySQL memungkinkan DUAL ditentukan sebagai tabel dalam pernyataan SQL yang tidak bergantung pada data dari tabel mana pun. |
| Tabel eksternal | Oracle memungkinkan pengguna membuat tabel eksternal yang data sumbernya adalah file di luar database. | Tidak didukung. | Tidak ada padanan langsung. |
| Pemroses | Proses jaringan Oracle yang bertugas memproses koneksi database yang masuk. | Jaringan yang Diizinkan Cloud SQL | MySQL menerima koneksi dari sumber jarak jauh setelah diizinkan di halaman konfigurasi Jaringan yang Diizinkan Cloud SQL. |
| TNSNAMES | File konfigurasi jaringan Oracle yang menetapkan alamat database untuk membuat koneksi menggunakan alias koneksi. | Tidak ada | MySQL menerima koneksi eksternal yang menggunakan nama koneksi Instance Cloud SQL atau alamat IP pribadi/publik. Proxy Cloud SQL adalah metode akses aman tambahan untuk terhubung ke Cloud SQL untuk MySQL (instance generasi kedua) tanpa harus mengizinkan alamat IP tertentu atau mengonfigurasi SSL. |
| Port default instance | 1521 | Port default instance | 3306 |
| Link database | Objek skema Oracle yang dapat digunakan untuk berinteraksi dengan objek database lokal/jarak jauh. | Tidak didukung | Sebagai solusi alternatif, gunakan kode aplikasi untuk terhubung ke dan mengambil data dari database jarak jauh. |
Perbedaan terminologi antara Oracle 12c dan Cloud SQL untuk MySQL
| Oracle 12c | Deskripsi | Cloud SQL untuk MySQL | Perbedaan utama |
|---|---|---|---|
| Instance | Kemampuan multi-tenant yang diperkenalkan di instance Oracle 12c yang dapat menampung beberapa database sebagai pluggable database (PDB). Di Oracle 11g, sebuah instance Oracle hanya dapat menghosting satu database. | Instance | Cloud SQL untuk MySQL dapat menampung sejumlah database dengan penamaan berbeda yang melayani bermacam layanan dan aplikasi. |
| CDB | Database container (CDB) multi-tenant dapat mendukung satu atau beberapa PDB, sedangkan objek global CDB (memengaruhi semua PDB) dapat dibuat, contohnya peran. | Instance MySQL | Instance MySQL mirip dengan CDB Oracle. Keduanya menyediakan lapisan sistem untuk PDB. |
| PDB | PDB (pluggable database) dapat digunakan untuk mengisolasi layanan dan aplikasi dari satu sama lain, serta dapat digunakan sebagai kumpulan skema portabel. | Database/skema MySQL | Database MySQL dapat melayani bermacam layanan dan aplikasi, serta banyak pengguna database. |
| Urutan sesi | Mulai dari Oracle 12c, urutan dapat dibuat di tingkat sesi (menampilkan nilai unik hanya dalam sesi) atau di tingkat global (misalnya, saat menggunakan tabel sementara). | Penambahan otomatis |
Urutan tidak didukung oleh MySQL, tetapi pengguna dapat menggunakan properti kolom AUTO_INCREMENT sebagai solusi alternatif. |
| Kolom identitas | Jenis IDENTITY di Oracle 12c menghasilkan urutan dan mengaitkannya dengan kolom tabel tanpa perlu membuat objek urutan terpisah secara manual. |
Penambahan otomatis | Menggunakan properti kolom AUTO_INCREMENT untuk menyimulasikan fungsionalitas yang sama dengan kolom identitas Oracle 12c (solusi alternatif dari fungsionalitas pembuatan urutan otomatis). |
| Sharding | Sharding Oracle adalah solusi yang mempartisi satu database Oracle menjadi beberapa database lebih kecil (shard) untuk memberikan skalabilitas, ketersediaan, dan distribusi geografis bagi lingkungan OLTP. | Tidak didukung (sebagai fitur) | MySQL tidak memiliki fitur sharding yang setara. Sharding dapat diimplementasikan menggunakan MySQL (sebagai platform data) dengan lapisan aplikasi pendukung. |
| Database dalam memori | Oracle menyediakan serangkaian fitur yang dapat meningkatkan performa database untuk OLTP dan juga untuk workload campuran. | Tidak didukung | MySQL tidak memiliki fitur yang setara. Anda dapat menggunakan Memorystore sebagai alternatif. |
| Penyamaran | Sebagai bagian dari fitur keamanan lanjutan di Oracle, penyamaran dapat menyamarkan kolom agar pengguna dan aplikasi tidak menampilkan data sensitif. | Tidak didukung | MySQL tidak memiliki fitur yang setara. |
Fungsionalitas
Meskipun database Oracle 11g/12c dan Cloud SQL untuk MySQL berjalan di arsitektur (infrastruktur dan bahasa prosedural tambahan) yang berbeda, keduanya memiliki aspek dasar yang sama sebagai database relasional. Keduanya mendukung objek database, workload konkurensi multi-pengguna, dan transaksi (kompatibilitas ACID). Keduanya juga mengelola pertentangan penguncian yang mendukung isolasi multi-tingkat (sesuai kebutuhan aplikasi) dan melayani persyaratan aplikasi yang berkelanjutan sebagai penyimpanan data relasional baik untuk operasi Pemrosesan Transaksi Online (OLTP) maupun Pemrosesan Analitik Online (OLAP).
Bagian berikut meringkas beberapa perbedaan fungsional utama antara Oracle dan Cloud SQL untuk MySQL. Dalam beberapa kasus, jika dianggap perlu, perbandingan teknis yang mendetail akan disertakan.
Membuat dan melihat database yang ada
| Oracle 11g/12c | Cloud SQL untuk MySQL 5.7 |
|---|---|
Biasanya, Anda membuat database, dan melihat database yang sudah ada, menggunakan utilitas Database Creation Assistant (DBCA) Oracle. Database atau instance yang dibuat secara manual mengharuskan Anda menentukan parameter tambahan:
SQL> CREATE DATABASE ORADB
USER SYS IDENTIFIED BY password
USER SYSTEM IDENTIFIED BY password
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;
|
Menggunakan pernyataan dengan format CREATE DATABASE Name;, seperti dalam contoh ini:
mysql> CREATE DATABASE MYSQLDB; |
| Oracle 12c | Cloud SQL untuk MySQL 5.7 |
Di Oracle 12c, Anda dapat membuat PDB dari seed, entah itu dari template database container (CDB) atau dengan meng-clone PDB dari PDB yang sudah ada. Anda menggunakan beberapa parameter:
SQL> CREATE PLUGGABLE DATABASE PDB
ADMIN USER usr IDENTIFIED BY passwd
ROLES = (dba)
DEFAULT TABLESPACE sales
DATAFILE '/disk1/ora/dbs/db/db.dbf'
SIZE 250M AUTOEXTEND ON
FILE_NAME_CONVERT =
('/disk1/oracle/dbs/pdbseed/',
'/disk1/oracle/dbs/salespdb/')
STORAGE (MAXSIZE 2G)
PATH_PREFIX =
'/disk1/oracle/dbs/salespdb/';
|
Menggunakan pernyataan dengan format CREATE DATABASE Name;, seperti dalam contoh ini:mysql> CREATE DATABASE MYSQLDB; |
Menampilkan daftar semua PDB:SQL> SHOW is PDBS; |
Menampilkan daftar semua database yang ada:mysql> SHOW DATABASES; |
Membuat koneksi ke PDB berbeda:SQL> ALTER SESSION SET CONTAINER=pdb; |
Membuat koneksi ke database berbeda:mysql> use databaseName; mysql> \u databaseName; |
Membuka atau menutup PDB tertentu (buka/hanya baca):SQL> ALTER PLUGGABLE DATABASE pdb CLOSE; |
Tidak didukung untuk database tunggal. Semua database berada di instance Cloud SQL untuk MySQL yang sama, sehingga semua database selalu dalam status aktif semua atau nonaktif semua. |
Mengelola database melalui konsol Cloud SQL
Di Konsol Google Cloud , buka Storage > SQL > Instance > Databases > View/Create.
Database dan skema sistem
Instance database Oracle memperoleh skema sistem tertentu—misalnya SYS/SYSTEM—dengan peran pemilik objek metadata database.
Sebaliknya, MySQL menampung beberapa database sistem (bukan skema seperti di Oracle), yang melayani lapisan metadata (perhatikan bahwa nama database peka huruf besar/kecil):
-
Database sistem
mysqlberisi tabel yang menyimpan informasi yang diperlukan oleh server MySQL saat server tersebut dijalankan, seperti berikut:- Tabel hak istimewa sistem
- Tabel informasi objek
- Tabel sistem log
- Tabel sistem replikasi
- Tabel sistem pengoptimal
- Tabel sistem zona waktu
-
INFORMATION_SCHEMAberfungsi sebagai kamus data dan katalog sistem database utama. Skema ini memberikan akses ke metadata database, yakni informasi database internal tentang server MySQL, seperti nama database atau tabel, jenis data kolom, dan hak istimewa akses. -
Database sistem yang mengumpulkan informasi statistik tentang instance MySQL. Database sistem
performance_schemaberisi metrik untuk pemantauan eksekusi server di tingkat yang sangat terperinci. Skema ini menjalankan pemeriksaan eksekusi internal server saat runtime, dan dapat berfungsi sebagai sumber utama untuk menganalisis masalah performa database.performance_schematidak diaktifkan secara default menggunakan Cloud SQL untuk MySQL. Untuk mengaktifkan skema ini, gunakan alat command linegcloud:gcloud sql instances patch INSTANCE_NAME --database-flags performance_schema=on
Untuk menyelesaikan konfigurasi ini, Anda harus me-reboot instance. Anda tidak dapat mengubah parameter
--database-flagsmenggunakan halaman flag database Cloud SQL untuk MySQL di Konsol Google Cloud . -
Skema
systersedia mulai dari MySQL versi 5.5.7 dan sebagian besar berisi tabel virtual pada tabel sistemperformance_schema. Skema ini menyediakan kumpulan tabel virtual yang lebih mudah dibaca, yang merangkum dataperformance_schemake dalam bentuk yang lebih mudah dipahami. Skemasysjuga menampung sejumlah prosedur dan fungsi tersimpan untuk menjalankan operasi seperti mengonfigurasiperformance_schemadan menghasilkan laporan diagnostik.Skema
syshanya menampilkan informasi jikaperformance_schemadiaktifkan.
Melihat metadata dan tabel virtual dinamis sistem
Bagian ini meringkas beberapa tabel metadata dan tabel virtual dinamis sistem paling umum yang digunakan di Oracle dan objek database terkaitnya di Cloud SQL untuk MySQL versi 5.7.
Oracle menyediakan ratusan tabel dan tabel virtual metadata sistem, sedangkan MySQL hanya menyediakan beberapa puluh. Untuk setiap kasus, bisa ada lebih dari satu objek database, yang melayani tujuan tertentu.
Oracle menyediakan beberapa tingkat objek metadata, yang masing-masing memerlukan hak istimewa berbeda:
USER_TableName: Dapat dilihat oleh pengguna yang bersangkutan.ALL_TableName: Dapat dilihat oleh semua pengguna.DBA_TableName: Hanya dapat dilihat oleh pengguna yang memiliki hak istimewa DBA, sepertiSYSdanSYSTEM.
Untuk tabel virtual performa dinamis, Oracle menggunakan awalan V$ dan GV$. Agar dapat melihat tabel atau tabel virtual metadata sistem, pengguna MySQL harus memiliki izin spesifik atas objek sistem. Untuk informasi selengkapnya tentang keamanan, lihat bagian Keamanan.
| Jenis metadata | Tabel/tabel virtual di Oracle | Tabel/tabel virtual/tampilan di MySQL (MySQL CMD) |
|---|---|---|
| Sesi terbuka | V$SESSION |
SHOW PROCESSLIST INFORMATION_SCHEMA.PROCESSLIST performance_schema.threads |
| Transaksi berjalan | V$TRANSACTION |
INFORMATION_SCHEMA.INNODB_TRX |
| Objek database | DBA_OBJECTS |
Tidak didukung. Jalankan kueri pada setiap objek berdasarkan jenisnya. |
| Tabel | DBA_TABLES |
INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA.INNODB_SYS_TABLES |
| Kolom tabel | DBA_TAB_COLUMNS |
INFORMATION_SCHEMA.COLUMNS INFORMATION_SCHEMA.INNODB_SYS_COLUMNS |
| Hak istimewa tabel dan kolom | TABLE_PRIVILEGES DBA_COL_PRIVS ROLE_TAB_PRIVS |
INFORMATION_SCHEMA.COLUMN_PRIVILEGES |
| Partisi | DBA_TAB_PARTITIONS DBA_TAB_SUBPARTITIONS |
INFORMATION_SCHEMA.PARTITIONS SHOW CREATE TABLE TableName SHOW TABLE STATUS LIKE 'TableName' |
| Tabel virtual | DBA_VIEWS |
INFORMATION_SCHEMA.VIEWS |
| Batasan | DBA_CONSTRAINTS |
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS SHOW CREATE TABLE TableName |
| Indeks | DBA_INDEXES DBA_PART_INDEXES |
INFORMATION_SCHEMA.STATISTICS INFORMATION_SCHEMA.INNODB_SYS_INDEXES INFORMATION_SCHEMA.KEY_COLUMN_USAGE |
| Tampilan terwujud | DBA_MVIEWS |
Tidak didukung |
| Prosedur tersimpan | DBA_PROCEDURES |
INFORMATION_SCHEMA.ROUTINES |
| Fungsi tersimpan | DBA_PROCEDURES |
INFORMATION_SCHEMA.ROUTINES |
| Pemicu | DBA_TRIGGERS |
INFORMATION_SCHEMA.TRIGGERS |
| Pengguna | DBA_USERS |
mysql.user |
| Hak istimewa pengguna | DBA_SYS_PRIVS DBA_ROLE_PRIVS SESSION_PRIVS |
INFORMATION_SCHEMA.USER_PRIVILEGES |
| Tugas/ Scheduler |
DBA_JOBS DBA_JOBS_RUNNING DBA_SCHEDULER_JOBS DBA_SCHEDULER_JOB_LOG |
INFORMATION_SCHEMA.EVENTS |
| Tablespace | DBA_TABLESPACES |
INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES |
| File data | DBA_DATA_FILES |
INFORMATION_SCHEMA.FILES INFORMATION_SCHEMA.INNODB_SYS_DATAFILES |
| Sinonim | DBA_SYNONYMS |
Tidak didukung |
| Urutan | DBA_SEQUENCES |
Tidak didukung |
| Link database | DBA_DB_LINKS |
Tidak didukung |
| Statistik | DBA_TAB_STATISTICS DBA_TAB_COL_STATISTICS DBA_SQLTUNE_STATISTICS DBA_CPU_USAGE_STATISTICS |
INFORMATION_SCHEMA.STATISTICS INFORMATION_SCHEMA.KEY_COLUMN_USAGE SHOW INDEXES FROM TableName |
| Penguncian | DBA_LOCK DBA_DDL_LOCKS DBA_DML_LOCKS V$SESSION_BLOCKERS V$LOCKED_OBJECT |
INFORMATION_SCHEMA.INNODB_LOCKS INFORMATION_SCHEMA.INNODB_LOCK_WAITS INFORMATION_SCHEMA.INNODB_TRX performance_schema.metadata_locks performance_schema.rwlock_instances SHOW PROCESSLIST |
| Parameter database | V$PARAMETER V$NLS_PARAMETERS SHOW PARAMETER Param |
performance_schema.global_variables performance_schema.session_variables INFORMATION_SCHEMA.CHARACTER_SETS SHOW VARIABLES LIKE '%variable%'; |
| Segmen | DBA_SEGMENTS |
Tabel segmen tidak didukung. Jalankan kueri pada setiap objek berdasarkan jenisnya. |
| Peran | DBA_ROLES DBA_ROLE_PRIVS USER_ROLE_PRIVS |
Roles not supported use instead: information_schema.COLUMN_PRIVILEGES information_schema.SCHEMA_PRIVILEGES information_schema.TABLE_PRIVILEGES information_schema.USER_PRIVILEGES mysql.columns_priv mysql.procs_priv mysql.proxies_priv mysql.tables_priv |
| Histori sesi | V$ACTIVE_SESSION_HISTORY DBA_HIST_* |
sys.statement_analysis performance_schema.events_stages_history performance_schema.events_stages_history_long performance_schema.events_statements_history performance_schema.events_statements_history_long performance_schema.events_transactions_history performance_schema.events_transactions_history_long performance_schema.events_waits_history performance_schema.events_waits_history_long |
| Versi | V$VERSION |
sys.version SHOW VARIABLES LIKE '%version%'; |
| Peristiwa tunggu | V$WAITCLASSMETRIC V$WAITCLASSMETRIC_HISTORY V$WAITSTAT V$WAIT_CHAINS |
performance_schema.events_waits_current performance_schema.events_waits_history performance_schema.events_waits_history_long sys.innodb_lock_waits sys.io_global_by_wait_by_bytes sys.io_global_by_wait_by_latency sys.schema_table_lock_waits sys.wait_classes_global_by_avg_latency sys.wait_classes_global_by_latency sys.waits_by_host_by_latency sys.waits_by_user_by_latency sys.waits_global_by_latency |
| Tuning dan analisis SQL |
V$SQL V$SQLAREA V$SESS_IO V$SYSSTAT V$STATNAME V$OSSTAT V$ACTIVE_SESSION_HISTORY V$SESSION_WAIT V$SESSION_WAIT_CLASS V$SYSTEM_WAIT_CLASS V$LATCH V$SYS_OPTIMIZER_ENV V$SQL_PLAN V$SQL_PLAN_STATISTICS |
performance_schema.events_statements_current performance_schema.events_statements_history performance_schema.events_statements_history_long sys.statement_analysis sys.host_summary_by_statement_latency sys.host_summary_by_statement_type sys.statements_with_errors_or_warnings sys.statements_with_full_table_scans sys.statements_with_runtimes_in_95th_percentile sys.statements_with_sorting sys.statements_with_temp_tables sys.user_summary_by_statement_latency sys.user_summary_by_statement_type slow-query-log general-log SHOW STATUS LIKE '%StatusName%'; |
| Tuning memori instance |
V$SGA V$SGASTAT V$SGAINFO V$SGA_CURRENT_RESIZE_OPS V$SGA_RESIZE_OPS V$SGA_DYNAMIC_COMPONENTS V$SGA_DYNAMIC_FREE_MEMORY V$PGASTAT |
information_schema.INNODB_CMPMEM_RESET information_schema.INNODB_CMPMEM performance_schema.memory_summary_by_account_by_event_name performance_schema.memory_summary_by_host_by_event_name performance_schema.memory_summary_by_thread_by_event_name performance_schema.memory_summary_by_user_by_event_name performance_schema.memory_summary_global_by_event_name performance_schema.replication_group_member_stats performance_schema.replication_group_members sys.memory_by_host_by_current_bytes sys.memory_by_thread_by_current_bytes sys.memory_by_user_by_current_bytes sys.memory_global_by_current_bytes sys.memory_global_total |
Mesin penyimpanan MySQL
Tidak seperti banyak RDBMS lain (termasuk RDBMS Oracle), MySQL dapat berfungsi secara polimorf karena sistem penyimpanannya yang pluggable. Arsitektur mesin penyimpanan pluggable MySQL memungkinkan administrator database memilih mesin penyimpanan khusus untuk kebutuhan aplikasi tertentu.
Komponen mesin penyimpanan pluggable MySQL di server database MySQL bertugas menjalankan operasi I/O data, termasuk menyimpan data ke dalam disk atau buffer memori. Arsitektur mesin penyimpanan pluggable menyediakan serangkaian layanan dukungan dan pengelolaan standar yang umum di antara semua mesin penyimpanan dasar.
Mesin penyimpanan default yang digunakan mulai dari MySQL versi 5.5 adalah InnoDB, yang juga menangani tabel sementara. Anda dapat mengonfigurasi mesin penyimpanan saat membuat tabel CREATE atau ALTER, seperti dalam contoh berikut:
mysql> SHOW CREATE TABLE JOBS \G;
Outputnya adalah sebagai berikut:
*************************** 1. row ***************************
Table: JOBS
Create Table: CREATE TABLE `JOBS` (
`JOB_ID` varchar(10) NOT NULL,
`JOB_TITLE` varchar(35) NOT NULL,
`MIN_SALARY` decimal(6,0) DEFAULT NULL,
`MAX_SALARY` decimal(6,0) DEFAULT NULL,
PRIMARY KEY (`JOB_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Untuk mengetahui informasi lebih lanjut, lihat berbagai mesin penyimpanan MySQL.
Anda dapat melihat konfigurasi mesin penyimpanan menggunakan kueri berikut:
mysql> SHOW VARIABLES LIKE '%storage%';
Outputnya mirip dengan berikut:
+----------------------------------+--------+ | Variable_name | Value | +----------------------------------+--------+ | default_storage_engine | InnoDB | | default_tmp_storage_engine | InnoDB | | disabled_storage_engines | | | enforce_storage_engine | Innodb | | internal_tmp_disk_storage_engine | InnoDB | +----------------------------------+--------+
Anda dapat melihat semua mesin penyimpanan bawaan:
mysql> SHOW STORAGE ENGINES;
Outputnya mirip dengan berikut:
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | CSV | YES | CSV storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
Perlu diperhatikan bahwa InnoDB adalah mesin penyimpanan default, dan satu-satunya mesin penyimpanan yang mendukung transaksi (sesuai dengan ACID). Karena InnoDB adalah satu-satunya mesin penyimpanan yang mendekati fungsionalitas Oracle, sebaiknya Anda menggunakan InnoDB setiap saat. Cloud SQL untuk MySQL Generasi Kedua hanya mendukung mesin penyimpanan InnoDB.
Parameter sistem
Baik database Oracle maupun Cloud SQL untuk MySQL dapat dikonfigurasi secara spesifik untuk mencapai fungsionalitas tertentu di luar konfigurasi defaultnya. Untuk mengubah parameter konfigurasi di Oracle, diperlukan izin administrasi tertentu (terutama izin pengguna SYS/SYSTEM).
Berikut adalah contoh pengubahan konfigurasi Oracle menggunakan pernyataan ALTER SYSTEM. Dalam contoh ini, pengguna hanya mengubah parameter "Maximum attempts for failed logins" di tingkat konfigurasi spfile (dengan perubahan yang hanya valid setelah reboot):
SQL> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 SCOPE=spfile;
Pada contoh berikutnya, pengguna meminta untuk melihat parameter value Oracle saja:
SQL> SHOW PARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;
Outputnya mirip dengan berikut:
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sec_max_failed_login_attempts integer 2
Modifikasi parameter Oracle bekerja dalam tiga cakupan:
- SPFILE: Modifikasi parameter ditulis ke
spfileOracle; reboot instance diperlukan untuk menerapkan parameter. - MEMORY: Modifikasi parameter diterapkan di lapisan memori saja; perubahan parameter statis tidak diizinkan.
- BOTH: Modifikasi parameter diterapkan di file parameter server dan juga memori instance; perubahan parameter statis tidak diizinkan.
Flag konfigurasi Cloud SQL untuk MySQL
Anda dapat mengubah parameter sistem Cloud SQL untuk MySQL menggunakan flag konfigurasi di Konsol Google Cloud , gcloud CLI, atau CURL. Lihat daftar lengkap semua parameter yang didukung Cloud SQL untuk MySQL yang dapat Anda ubah.
Parameter MySQL dapat dibagi menjadi beberapa cakupan:
- Parameter dinamis: Dapat diubah saat runtime.
- Parameter statis: Memerlukan reboot instance agar dapat diterapkan.
- Parameter global: Akan memiliki efek global terhadap semua sesi saat ini dan yang akan datang.
- Parameter sesi: Dapat diubah di tingkat sesi untuk masa aktif sesi saat ini saja, dan diisolasi dari sesi lain.
Parameter memori Cloud SQL untuk MySQL innodb_buffer_pool_size (salah satu parameter penting yang perlu dipertimbangkan saat merencanakan dan menyesuaikan ukuran lingkungan MySQL) ditentukan oleh jenis instance dan tidak dapat diubah menggunakan flag konfigurasi atau metode lain apa pun—misalnya:
- Jenis instance
db-n1-standard-1memiliki alokasi memori 1,4 GB. - Jenis instance
db-n1-highmem-8memiliki alokasi memori 38 GB.
Contoh pengubahan parameter Cloud SQL untuk MySQL
Konsol
Gunakan Konsol Google Cloud untuk mengaktifkan parameter event_scheduler.
Buka halaman Edit instance di Cloud Storage.
Di bagian Flags, klik Add item dan telusuri
event_schedulerseperti pada screenshot berikut.
gcloud
Gunakan gcloud CLI untuk mengaktifkan parameter
event_scheduler:gcloud sql instances patch INSTANCE_NAME \ --database-flags event_scheduler=onOutputnya adalah sebagai berikut:
WARNING: This patch modifies database flag values, which may require your instance to be restarted. Check the list of supported flags - /sql/docs/mysql/flags - to see if your instance will be restarted when this patch is submitted. Do you want to continue (Y/n)?
Sesi MySQL
Nonaktifkan mode AUTOCOMMIT di tingkat sesi. Perubahan ini tetap berlaku untuk sesi saat ini dan bertahan hanya selama masa aktif sesi.
Tampilkan variabel seperti
autocommit:mysql> SHOW VARIABLES LIKE '%autoc%';Anda akan melihat output berikut, dengan
autocommitberstatusON:+---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+
Nonaktifkan
autocommit:mysql> SET autocommit=off;Tampilkan variabel seperti
autocommit:mysql> SHOW VARIABLES LIKE '%autoc%';Anda akan melihat output berikut, dengan
autocommitberstatusOFF:+---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | OFF | +---------------+-------+
Tingkat transaksi dan isolasi
Bagian ini menjelaskan perbedaan utama antara Oracle dan Cloud SQL untuk MySQL dalam hal migrasi tingkat transaksi dan tingkat isolasi.
Mode commit
Secara default, Oracle bekerja dalam mode non-autocommit, yang berarti setiap transaksi DML harus ditentukan dengan pernyataan COMMIT/ROLLBACK. Salah satu perbedaan mendasar antara Oracle dan MySQL adalah bahwa MySQL secara default bekerja dalam mode autocommit, dan setiap transaksi DML di-autocommit dengan menentukan pernyataan COMMIT/ROLLBACK secara eksplisit.
Untuk memaksa MySQL bekerja dalam mode non-autocommit, ada beberapa opsi:
- Saat mengelola transaksi dalam cakupan prosedur tersimpan, gunakan klausa
START TRANSACTIONuntuk memasuki mode transaksi yang sama seperti halnya di Oracle. Gunakan pernyataan berikut untuk menetapkan parameter sistem
autocommitkeOFFdi tingkat sesi dan menggunakan pernyataanCOMMIT/ROLLBACKsecara eksplisit dalam transaksi DML:mysql> SET autocommit=off;
Tingkat isolasi
Standar ANSI/ISO SQL (SQL92) menetapkan empat tingkat isolasi. Setiap tingkat memiliki pendekatan berbeda dalam menangani eksekusi serentak transaksi database:
- Read Uncommitted: Transaksi yang sedang diproses dapat melihat data belum di-commit yang dibuat oleh transaksi lain. Jika rollback dilakukan, semua data akan dipulihkan ke status sebelumnya.
- Read Committed: Transaksi hanya melihat perubahan data yang telah di-commit; perubahan yang belum di-commit ("pembacaan kotor") tidak dimungkinkan.
- Repeatable Read: Transaksi dapat melihat perubahan yang dilakukan oleh transaksi lain hanya setelah kedua transaksi memberikan perintah
COMMITatau keduanya di-roll back. - Serializable: Tingkat isolasi yang paling ketat/terkuat. Tingkat ini mengunci semua kumpulan data yang diakses, dan mengunci resource sehingga kumpulan data tidak dapat ditambahkan ke tabel.
Tingkat transaction isolation mengelola visibilitas data yang telah diubah sebagaimana yang terlihat oleh transaksi lain yang sedang berjalan. Selain itu, jika data yang sama diakses oleh beberapa transaksi serentak, tingkat transaction isolation yang dipilih akan memengaruhi cara transaksi yang berbeda berinteraksi.
Oracle mendukung tingkat isolasi berikut:
- Read Committed (default)
- Serializable
- Read-Only (bukan bagian dari standar ANSI/ISO SQL (SQL92)
MVCC (Kontrol Konkurensi Multiversi) Oracle:
- Oracle menggunakan mekanisme MVCC untuk memberikan konsistensi baca otomatis di seluruh database dan semua sesi.
- Oracle mengandalkan System Change Number (SCN) transaksi saat ini untuk mendapatkan tampilan database yang konsisten. Oleh karena itu, semua kueri database hanya menampilkan data yang telah di-commit dalam kaitannya dengan SCN pada saat eksekusi kueri.
- Tingkat isolasi dapat diubah di tingkat transaksi dan sesi.
Berikut adalah contoh penetapan tingkat isolasi:
-- Transaction Level
SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SQL> SET TRANSACTION READ ONLY;
-- Session Level
SQL> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
SQL> ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;
Seperti Oracle, Cloud SQL untuk MySQL mendukung empat tingkat transaction isolation berikut yang ditentukan dalam standar ANSI SQL:92:
READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READ (default)SERIALIZABLE
Tingkat isolasi default Cloud SQL untuk MySQL adalah REPEATABLE READ. Data baru akan tersedia untuk kedua transaksi hanya setelah keduanya memberikan perintah COMMIT. Tingkat isolasi ini dapat diubah di level SESSION dan GLOBAL (modifikasi level global saat ini dalam tahap beta menggunakan flag konfigurasi).
Untuk memverifikasi tingkat isolasi saat ini di level SESSION dan juga GLOBAL, gunakan pernyataan berikut:
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
Outputnya adalah sebagai berikut:
+-----------------------+-----------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+-----------------+ | REPEATABLE-READ | REPEATABLE-READ | +-----------------------+-----------------+
Anda dapat mengubah sintaksis tingkat isolasi sebagai berikut:
SET [SESSION] TRANSACTION ISOLATION LEVEL [READ WRITE | READ ONLY]
| REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE]
Anda juga dapat mengubah tingkat isolasi di level SESSION:
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- Verify
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
Outputnya adalah sebagai berikut:
+-----------------------+------------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+------------------+ | REPEATABLE-READ | READ-UNCOMMITTED | +-----------------------+------------------+
Struktur transaksi Cloud SQL untuk MySQL
Sintaksis transaksi:
START TRANSACTION
[transaction_characteristic [, transaction_characteristic] ...]
|
|---|
Transaksi dapat diimplementasikan dengan START TRANSACTION atau BEGIN.
Opsi WITH CONSISTENT SNAPSHOT memulai transaksi READ yang konsisten, yang pada dasarnya sama dengan memberikan perintah START TRANSACTION, diikuti dengan SELECT dari tabel mana pun. Klausa WITH CONSISTENT SNAPSHOT yang memulai transaksi READ yang konsisten (operasi READ yang menggunakan informasi snapshot untuk menyajikan hasil kueri berdasarkan titik waktu tertentu) tidak mengubah tingkat transaction isolation dan hanya didukung oleh tingkat isolasi REPEATABLE READ.
Transaksi READ yang konsisten menggunakan informasi snapshot untuk menyediakan hasil kueri berdasarkan titik waktu tertentu, terlepas dari perubahan yang dilakukan oleh transaksi serentak. Jika data yang dikueri telah diubah oleh transaksi lain, data aslinya akan direkonstruksi menggunakan log undo. Tindakan ini akan membantu menghindari masalah penguncian yang dapat mengurangi konkurensi.
Di tingkat isolasi REPEATABLE READ, snapshot didasarkan pada waktu dilakukannya operasi READ pertama. Di tingkat isolasi READ COMMITTED, snapshot direset ke waktu dilakukannya setiap operasi READ yang konsisten.
Berikut adalah contoh penetapan tingkat transaksi dan isolasi:
mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
mysql> START TRANSACTION;
mysql> INSERT INTO tbl1 VALUES (1, 'A');
mysql> UPDATE tbl2 SET col1 = 'Done' WHERE KeyColumn = 1;
mysql> COMMIT;