• Tidak ada hasil yang ditemukan

MANAGING DATA AND CONCURRENCY

N/A
N/A
4IA13@Alpan Nopebriyansyah

Academic year: 2024

Membagikan "MANAGING DATA AND CONCURRENCY"

Copied!
15
0
0

Teks penuh

(1)

8. MANAGING DATA AND CONCURRENCY

Objektif :

Setelah menyelesaikan materi ini, peserta dapat melakukan hal sebagai berikut : 1. Mengelola data melalui penggunaan SQL

2. Menidentifikasi dan melelola objek PL/SQL 3. Menjelaskan trigger dan melakukan trigger 4. Memantau dan menyelesaikan locking conflict

(2)

8.1. Data Manipulation Language

Pernyataan mendasar dari Data Manipulation Language (DML) adalah cara bagaimana data dimanipulasi didalam basis data. Dan didalam bab ini akan dijelaskan secara lebih terperinci.

Gambar 8.1. Manipulasi Data

8.1.1. The INSERT Command

Pernyataan INSERT menciptakan satu baris pada satu waktu. Menggunakan apa yang disebut subselect, Kita dapat menyebabkan perintah INSERT untuk menyalin baris dari satu tabel ke tabel yang lain. Metode ini juga disebut sebagai statement INSERT SELECT. Contoh perintah INSERT adalah berikut:

insert into dept_80 (select * from employees where department_id = 80);

Dalam kasus ini, tabel dept_80 memiliki struktur yang sama seperti tabel EMPLOYEES. Jika hal ini tidak terjadi, Kita dapat nama kolom dalam setiap tabel. Nilai-nilai yang dipilih dalam laporan SELECT berhubungan dengan kolom dari kisah tersebut yang dimasukkan ke dalam masing-masing. Nilai kolom pertandingan dalam urutan seperti yang disebutkan di INSERT dan statemnets SELECT. Semua yang diperlukan adalah bahwa tipe data sesuai. Sebagai contoh :

insert into just_names (first, last)

(select first_name, last_name from employees);

Di sini, tabel just_names hanya memiliki dua kolom yang memiliki tipe data yang sama dengan first_name dan kolom last_name dalam EMPLOYEES tabel ke tabel lain.

(3)

8.1.2. The UPDATE Command

Perintah update digunakan untuk mengubah baris yang ada pada tabel. Jumlah baris dimodifikasi oleh perintah update tergantung pada kondisi where. Jika klausa where dihilangkan, maka semua baris akan berubah. Jika tidak ada baris yang memenuhi kondisi where, maka tidak ada baris yang dimodifikasi.

8.1.3. The DELETE Command

Perintah delete digunakan untuk menghapus baris yang ada pada tabel. jumlah baris dimodifikasi oleh perintah DELETE tergantung pada kondisi WHERE. Jika klausa WHERE dihilangkan, maka semua baris akan dihapus. jika tidak ada baris yang memenuhi kondisi WHERE, maka tidak ada baris yang dihapus.

8.1.4. The MERGE Command

Perintah Merge akan melakukan perintah UPDATE dan INSERT di command yang sama. Data dapat digabungkan dari satu sumber ke sumber yang lain. opsional memasukkan baris baru sebuah memperbarui kolom tertentu jika berturut-turut sudah ada.

Beberapa data dalam tabel JOBS terlihat seperti ini :

Dan data yang berada didalam table JOBS_ACQUISITION adalah :

Menyisipkan perintah Merge ke dalam tabel JOB pada setiap baris dengan job_id baru, dan update JOBS baris dengan JOB_TITLE, jika job_id sudah ada. hasilnya adalah bahwa "presiden" jabatan diubah menjadi "VP" dan os pekerjaan baru "SA" dan "DBA" ditambahkan.

(4)

8.1.5. The COMMIT and ROLLBACK Commands

Commit merupakan perintah yang digunakan untuk membuat suatu data yang telah di manipulasi menjadi permanen. Sedangkan rollback merupakan perintah yang digunakan untuk mengembalikan perubahan.

Secara default, perintah DML yang dijalankan tidak berisfat commit namun dapat bersifat rollback karena masih dapat dikembalikan ke perintah awal sebelum terjadi commit. Namun apabila data yang telah diubah kemudian diberikan commit maka data tersebut tidak akan dapat di rollback.

Ketika data sedang dilakukan perubahan, maka pengguna lainnya tidak akan bisa mengubah atau melihat data terbaru yang sedang di ubah. Pengguna lain tersebut hanya dapat melihat data dalam keadaan sebelum diubah karena secara otomatis oracle melakukan mekanisme Lock yang berguna bagi editor untuk mengubah data tanpa diganggu oleh pengguna lainnya.

Pengguna yang melakukan perubahan data Data yang telah dilakukan commit atau rollback tidak akan bias dilihat oleh pengguna, kecuali pengguna yang membuat perubahan tersebut yang telah diberikan hak akses untuk melihat perubahan yang terjadi.

8.2. PL/SQL

PL/SQL (Procedure Language/Structure Query Language) merupakan bahasa pemrograman generasi keempat yang dimiliki oleh Oracle. PL/SQL merupakan bahasa yang berekstensi procedural untuk SQL, menyediakan pemrograman untuk database Oracle serta aplikasi yang terlepas dari sistem operasi atau platform perangkat keras.

PL/SQL dapat digunakan untuk memanipulasi data menggunakan perintah SQL dan melakukan control program untuk suatu kondisi maupun perulangan dengan konstruksi procedural seperti IF-THEN, CASE dan LOOP. Kemudian dapat pula mendeklarasikan suatu konstanta dan variable, mendefiniskan suatu procedure dan function, menggunakan collection dan tipe objek

(5)

yang tersedia serta menangkap suatu kesalahan ketika proses sedang berjalan. PL/SQL dapat pula digunakan untuk memanggil program yang dituliskan dengan bahasa lainnya, seperti C. C++ dan Java.

PL/SQL menyediakan perlindungan untuk data. Pengguna tidak perlu mengetahuin struktur data yang dibaca atau dimanipulasi untuk membuat suatu panggilan. Pengguna juga tidak perlu memiliki hak akses untuk mengakses objek tersebut. Jika pengguna memiliki hak akses untuk mengeksekusi PL/SQL, hal tersebut hanya berlaku untuk perintah yang diperlukan saja. Namun ada pilihan lain untuk hak akses dalam memanggil perintah PL/SQl, yaitu pengguna harus memiliki hak akses untuk menunjukan setiap statement yang akan di eksekusi selama program dipanggil.

Karena berjalan dalam database, kode PL / SQL sangat efisien untuk operasi data-intensif, dan meminimalkan lalu lintas jaringan dalam aplikasi.

8.2.1. Administering PL/SQL Objects

Sebagai seorang DBA, biasanya tidak akan bertanggung jawab untuk memuat kode PL/SQL ke dalam database dan untuk membantu developer dalam pemecahan masalah. Kemudian DBA juga tidak diharapkan untuk menulis aplikasi dengan menggunakan PL/SQL, tetapi sebagai gantinya harus akrab dengan berbagai objek dalam PL/SQL cukup untuk membuat rekomendasi untuk pengembang aplikasi dan mengidentifikasi objek masalah.

Dalam Database Control, objek PL/SQL dapat diakses dengan mengklik tab Administration di bawah Schema. Ketika klik jenis objek, maka dapat melihat (view), memodifikasi (modify), dan menciptakan (create) jenis objek PL/SQL yang telah dipilih.

8.2.2. PL/SQL Objects

Berikut adalah macam-macam tipe dari PL/SQL object :

Package : Package adalah kumpulan prosedur dan fungsi yang saling terkait. Bagian dari package disebut spesifikasi (atau spec) dan menggambarkan antarmuka untuk suatu aplikasi, seperti jenis, variabel, constants, exceptions, cursors, dan subprogram yang telah tersedia untuk digunakan.

(6)

Package Body : bagian inti sepenuhnya dari suatu package mendefinisikan cursor dan subprogram, dan juga mengimplementasikan spec. Package body berisi implementasi dari suatu deklarasi yang detail dan private, yang tersembunyi dari pemanggil.

Type Body : merupakan kumpulan dari metode (prosedur dan fungsi) yang terkait dengan tipe data yang ditetapkan pengguna.

Procedure : Procedure adalah blok PL/SQL yang melakukan tindakan tertentu.

Function : Function adalah blok PL/SQL yang mengembalikan nilai tunggal dengan menggunakan perintah RETURN. Function merupakan prosedur yang memiliki nilai kembali.

Trigger : Trigger adalah blok PL/SQL yang dijalankan ketika event tertentu terjadi dalam database. Event ini bisa berdasarkan dari tabel, seperti ketika tabel di insert ke dalam tabel.

Atau sebagai database event, seperti ketika pengguna log in ke database

8.3. Functions

PL/SQL function biasanya digunakan untuk menghitung nilai. Ada banyak fungsi built-in seperti SYSDATE, SUM, AVG, dan TO_DATE. Pengembang juga membuat fungsi sendiri saat menulis aplikasi. Kode untuk PL/SQL function harus berisi pernyataan RETURN. PL/SQL function dibuat dengan memasukkan nama, skema, dan kode sumber.

Dibawah ini merupakan contoh pembuatan function didalam PL/SQL :

Gambar 8.2.Functions

(7)

8.4. Procedures

PL/SQL Prosedur melakukan tindakan tertentu. Seperti function, prosedur dapat menerima nilai-nilai masukan dan melakukan pernyataan bersyarat seperti IF-THEN, CASE, dan LOOP.

Memanggil suatu prosedur dapat menggunakan perintah CALL jika menggunakan SQL statement, dan perintah EXECUTE jika menggunakan SQL *Plus.

Dibawah ini merupakan contoh pembuatan prosedur didalam PL/SQL :

Gambar 8.3. Create Procedure 8.5. Packages

Packages adalah pengelompokan functions and procedurs. kinerja dan perawatan dalam pengelompokan fungsi dan prosedur ke dalam satu paket. Setiap paket harus terdiri dari dua objek database secara terpisah lalu dikompilasi:

- Package specification : Objek ini (dikenal sebagai header paket) memiliki jenis objek dari PACKAGE dan hanya berisi definisi dari prosedur.

- Package Body : Objek ini memiliki jenis objek package body dan berisi kode aktual untuk mendefinisakan subprogram dalam spesifikasi paket.

Dibawah ini merupakan contoh pembuatan function didalam PL/SQL :

Gambar 8.4.Packages

Prosedur dan function dapat dipanggil dari suatu package dengan sinatks sebagai berikut : package_name.procedure or function name

(8)

berikut adalah contoh dalam pemanggilan suatu prosedur yang memiliki nama package adalah MONEY dan nama prosedur adalah give_raise_to_all :

8.5.1. Package Specification and Body

Gambar 8.5. Create Package Package bodies :

 Terpisah dari paket specifications. Karena hal tersebut, kode bagian inti dapat diubah dan dikompilasi ulang, dan objek lain yang bergantung pada spesifikasi tidak ditandai tidak valid.

 Mengandung kode untuk subprogram yang didefinisikan dalam Specification paket.

Merupakan tempat pekerjaan dilakukan. Spesifikasi menunjukkan bagaimana memanggil subprogram dalam paket.

 Tidak bisa dikompilasi kecuali spesifikasi paket telah dikompilasi. Specification dapat dibuat tanpa body, tetapi body tidak adapat dibuat tanpa Specification.

 Dapat dibungkus untuk menyembunyikan rincian kode. Wrap adalah program yang berdiri sendiri yang menyamarkan kode sumber PL/SQL sehingga kita dapat memberikan aplikasi PL/SQL tanpa menunjukan kode program.

8.5.2. Built-in Packages

Buit-in dalam package PL/SQL yang disediakan dengan oracle database menyediakan akses ke fungsionalitas database yang diperpanjang, seperti antrian advanced queuing, encryption, dan file input/output (I/O). Termasuk juga administration dan pemeliharaan utility.

(9)

Penggunaan Package administrator tergantung pada fungsi dari jenis aplikasi database. Berikut ini adalah beberapa administrasi yang lebih umum dan paket pemeliharaan:

- DBMS_STATS : Gather, view, and modify statistik optimizer - DBMS_OUTPUT : Menghasilkan output dari PL/SQL

- DBMS_SESSION : mengakse PL/SQL ke ALTER SESSION and SET ROLE statements - DBMS_RANDOM : Menghasilkan bilangan acak

- DBMS_UTILITY : Mendapatkan waktu, waktu CPU, dan informasi versi; menghitung nilai hash, dan melakukan banyak fungsi lainnya

- DBMS_SCHEDULER : Jadwal dari suatu function dan prosedur yang dapat dipanggil dari PL/SQL

- DBMS_CRYPTO : Encrypt dan decrypt data database

- UTL_FILE : Read dan Write ke file sistem operasi dari PL/SQL

8.6. Triggers

Trigger adalah object kode PL/SQL yang tersimpang didalam database dan secara otomatis akan run atau “fire” ketika terjadi sesuatu. Database oracle memungkinkan banyak tindakan untuk melayani suatu peristiwa sebagai trigger, termasuk menyisipkan ke dalam tabel, pengguna login ke database, dan seseorang berusaha menghapus tabel atau mengubahnya.

Trigger dapat memanggil prosedur atau functiom. Hal ini digunakan untuk membuat kode trigger menjadi lebih pendek dan menempatkan apapun yang memerlukan kode yang panjang dalam paket terpisah.

DBA menggunakan Trigger untuk membantu dalam audit berbasis nilai, untuk menegakkan kendala yang kompleks, dan untuk mengotomatisasi banyak tugas.

8.6.1 Triggering Events

Ada banyak event yang dapat digunakan untuk trigger, dibagi ke dalam kategori : - DML digunakan ketika memodifikasi data.

- DDL digunakan ketika membuat atau memodifikasi sebuah objek.

- Database event ketika hal-hal tertentu terjadi dalam database.

Kebanyakan trigger dapat ditentukan baik sebelum event dimulai atau setelah terjadi. Untuk DML, trigger dapat dirancang untuk sekali pernyataan atau dengan baris lain yang dimodifikasi.

(10)

8.7. Locks

Sebelum database mengizinkan sesi untuk memodifikasi data, maka hal pertama yang harus dilakukan adalah mengunci data yang akan dimodifikasi. Sebuah lock memberikan sesi kontrol eksklusif atas data sehingga tidak ada transaksi lain yang dapat memodifikasi data yang sedang di lock sampai lock tersebut dilepaskan.

Transaksi dapat mengunci baris individual dari suatu data, beberapa baris, atau bahkan seluruh tabel. Oracle Database 10g mendukung untuk kedua jenis locking, yaitu manual lock dan lock otomatis. Lock otomatis selalu memilih tingkat terendah untuk dikunci untuk meminimalkan potensi konflik dengan transaksi lainnya.

8.7.1. Locking Mechanism

Mekanisme locking dirancang untuk memberikan tingkat maksimum yang mungkin dari konkurensi data dalam database. Transaksi akan memodifikasi data row-level terlebih dahulu daripada blok-level atau lock table-level. Modifikasi objek (seperti table) object-level lebih duahulu daripada seluruh database atau skema lock.

Permintaan suatu data tidak memerlukan lock, dan query akan berhasil jika seseorang telah mengunci data (selalu menunjukkan aslinya, nilai prelock direkonstruksi dari informasi undo).

Ketika beberapa transaksi perlu untuk mengunci sumber daya yang sama, transaksi pertama untuk meminta lock memperoleh. transaksi lainnya dan menunggu sampai transaksi pertama selesai. Mekanisme antrian otomatis dan tidak memerlukan interaksi administrator.

Semua lock akan dirilis pada akhir transaksi. Dan transaksi dapat dikatakan telah lengkap ketika COMMIT atau ROLLBACK telah dilakukan. Dalam kesalahan suatu transaksi, background dengan proses yang sama secara otomatis akan dilakukan rollback dengan perubahan dari sebelum kesalahan transaksi terjadi.

8.8. Oracle Internal & Oracle Academy Use Only Data Concurrency

Data Concurrency

Mekanisme lock secara default untuk penguncian secara halus, untuk mode penguncian row- level. Transaksi yang berbeda dapat memperbarui baris yang berbeda dalam tabel yang sama tanpa mengganggu satu sama lain.

(11)

Meskipun model standar adalah untuk mengunci di tingkat baris, database Oracle mendukung penguncian manual di tingkat yang lebih tinggi, jika diperlukan seperti contoh berikut

Dengan pernyataan sebelumnya, setiap transaksi lain yang mencoba untuk memperbarui baris dalam tabel yang terkunci harus menunggu sampai transaksi tersebut selesai. EXCLUSIVE merupkan mode lock yang kuat. Berikut ini adalah mode kunci lainnya:

- ROW SHARE: memungkinkan akses bersamaan ke tabel lock, tapi melarang sesi dari seluruh tabel yang terkunci untuk akses eksklusif.

- ROW EXCLUSIVE: sama dengan ROW SHARE, tetapi ROW EXCLUSIVE melarang LOCK dalam modus SHARE. Baris lock EXCLUSIVE secara otomatis diperoleh saat memperbarui, memasukkan, atau menghapus data

- SHARE: memungkinkan permintaan bersamaan tetapi melarang update ke tabel terkunci.

Kunci SHARE diperlukan (dan secara otomatis diminta) untuk membuat indeks pada table - SHARE ROW EXCLUSIVE : digunakan untuk query seluruh tabel dan memungkinkan untuk

permintaan baris lain didalam tabel, tetapi tidak mengizinkan penguncian dari suatu table dalam mode SHARE atau update suatu baris lainnya.

- EXCLUSIVE : memungkinkan query pada tabel yang terkunci tetapi tidak mengizinkan aktifitas lainnya. Sebuah EXCLUSIVE lock digunakan untuk menghapus suatu tabel.

Seperti permintaan lock, perintah manual lock akan menunggu semua session yang sudah terkunci ataupun yang belum terkunci untuk melepaskan kunci mereka. Perintah LOCK yang merupakan suatu argument yang begitu special untuk mengontrol waktu tunggu adalah NOWAIT.

NOWAIT mengembalikan control secara segera jika tabel spesifik telah terkunci oleh session lainnya :

Hal tersebut biasanya tidak memerlukan manual lock. Mekanisme dari manual lock akan memberikan concurrency data yang diperlukan utnuk sebagian besar aplikasi.

(12)

8.9. DML Locks

Setiap transaksi DML mengandung 2 locks :

- EXCLUSIVE row lock untuk satu baris atua banyak baris yang diperbarui.

- ROW EXCLUSIVE table-level lock untuk tabel yang diperbarui. Hal ini untuk mencegah sesi lain mengunci seluruh tabel sementara perubahan sedang dibuat.

8.10. Enqueue Mechanism

Permintaan lock secara otomatis menggunakan sistem queue. Setelah transaksi yang sedang berjalan menggunakan lock selesai, sesi berikutnya akan menerima lock.

Mekanisme enqueue melacak urutan lock yang diminta dan mode lock yang diminta.

Sesi yang telah memegang lock dapat meminta untuk mengkonversi lock tanpa harus pergi ke akhir antrian. Misalnya, sesi memegang lock SHARE. sesi dapat meminta untuk mengubah lock SHARE menjadi lock EXCLUSIF. Selama tidak ada orang lain yang sudah memiliki lock EXCLUSIF atau SHARE pada tabel, sesi dengan lock SHARE akan diberikan lock EXCLUSIVE tanpa harus menunggu dalam antrian lagi.

8.11. Lock Conflicts

Gambar 8.6. Lock Conflicts

Konflik lock sering terjadi, tapi biasanya diselesaikan melalui waktu dan mekanisme enqueue.

Dalam kasus tertentu yang jarang terjadi, konflik lock mungkin memerlukan intervensi administrator. Dalam kasus pada gambar, transaksi 2 memperoleh lock pada satu baris di 9:00:00 dan mengabaikan untuk commit, meninggalkan lock pada semua baris, di 9:00:05. Transaksi 1 diblokir oleh transaksi 2 sampai transaksi 2 melakukan commit pada 16:30:01.

(13)

Pengguna yang mencoba untuk melakukan transaksi 1 mungkin akan menghubungi administrator untuk membantu penyelesaian dalam kasus ini, dan DBA harus mendeteksi dan menyelesaikan konflik tersebut.

8.11.1. Possible Causes of Lock Conflicts

Penyebab paling umum dari konflik lock adalah perubahan uncommitted, tetapi ada beberapa kemungkinan penyebab lainnya :

- Long-running transactions : banyak aplikasi menggunakan batch procesing untuk update perform massal. Pekerjaan batch ini biasanya dijadwalkan untuk aktivitas rendah atau tidak ada pengguna, namun dalam beberapa kasus, mereka mungkin tidak memiliki atau mungkin memakan waktu terlalu lama untuk berjalan selama periode aktivitas rendah. Konflik kunci yang umum pada saat transaksi dan pemrosesan batch sedang dilakukan secara bersamaan.

- Unnecessarily high locking levels : Tidak semua database mendukung penguncian pada row- level (Oracle menambahkan dukungan untuk row-level lock pada tahun 1988 dengan rilis 6).

Beberapa database masih mengunci di level halaman atau tabel. Pengembang menulis aplikasi yang dimaksudkan untuk menjalankan pada banyak database yang berbeda sehingga menulis aplikasi mereka dengan artifisial tingkat tinggi untuk proses Lock sehingga database Oracle mampu mengurangi kesamaan dalam menggunakan sistem database.. Pengembang yang baru untuk Oracle tidak perlu Kode di tingkat penguncian yang lebih tinggi dari yang dibutuhkan oleh database Oracle.

8.11.2. Detecting Lock Conflicts

Gunakan halaman Blocking Session pada Enterprise manager untuk mencari konflik lock.

permintaan lock yang bentrok akan ditampilkan dalam tata letak hirarkis dengan sesi memegang lock. Untuk setiap sesi yang terlibat dalam konflik, kita akan diberi nama pengguna, ID sesi, dan jumlah detik yang sesi telah menunggu. Menelusuri ke ID sesi untuk melihat pernyataan SQL yang sebenarnya yang saat ini sedang dijalankan atau diminta oleh sesi.

The Automatic Database Diagnostic Monitor (ADDM) juga secara otomatis mendeteksi konflik lock dan dapat memberikan saran tentang penguncian kita yang tidak efisien.

(14)

8.11.3. Resolving Lock Conflicts

Untuk mengatasi konflik lock, sesi yang memegang lock harus melepaskannya. Cara terbaik untuk memiliki rilis sesi lock adalah untuk menghubungkan ke pengguna dan meminta bahwa transaksi akan selesai.

Dalam keadaan darurat, bagi administrator untuk mengakhiri sesi memegang lock dengan mengklik tombol kill Session. Ingat bahwa ketika sesi di kill, semua pekerjaan dalam transaksi akan hilang (roll back). Seorang pengguna yang di killed harus login lagi dan mengulang semua pekerjaan sebelum kill session.

Pengguna yang sesi telah di kill, menerima kesalahan berikut pada saat mereka mencoba untuk mengeluarkan pernyataan SQL :

8.11.4. Resolving Lock Conflicts Using SQL

Gambar 8.7. Resolving Lock Conflicts Using SQL

Session manipulation, seperti kebanyakan tugas-tugas lain yang dilakukan di Enterprise Manager, bisa juga dilakukan dengan menggunakan statement SQL. v$session berisi rincian dari semua sesi yang terhubung. blocking_session adalah ID sesi yang menghalangi. Jadi, jika query untuk SID dan SERIAL#, di mana SID cocok dengan ID blocking session, maka kita memiliki informasi yang dibutuhkan untuk melakukan operasi kill session.

(15)

8.12. Deadlocks

Deadlock adalah contoh khusus dari konflik lock. Deadlock terjadi ketika dua atau lebih sesi berjalan (running) terhadap data lock yang sama. Karena masing-masing sesi saling menunggu sesi yang lain, maka sesi tersebut tidak dapat menyelesaikan transaksi.

Oracle database secara otomatis mendeteksi deadlock dan mengakhiri statement yang sedang berjalan dikarenakan terjadi error. Respon yang tepat untuk kondisi ini adalah commit atau rollback, yang merilis beberapa lock lainnya dalam sesi tersebut sehingga sesi lainnya dapat melanjutkan transaksi.

Pada contoh gambar, transaksi 1 harus melakukan commit atau rollback dalam menanggapi Deadlock deteksi kesalahan. Jika commit, maka perlu mengirim ulang kedua statement untuk mencapai transaksi.

Gambar 8.8. Deadlocks

Referensi

Dokumen terkait

Diperlukan suatu metode edukasi yang disesuaikan dengan tingkat usia mereka dalam merubah perilaku kearah yang mendukung kesehatan dalam hal ini perawatan diri

a) Data center pada RSIM Sumberrejo belum sesuai dengan standar yang ada. Kompenen yang ada pada TIER 2 belum dipenuhi karena data center belum memiliki alat pengukur

Untuk membuat fact table dilakukan query untuk menampilkan keseluruhan data penjualan lagu yang ada di dalam database chinook agar diperoleh seluruh dimensi yang diperlukan

● Untuk tuna matabesar, hasil tangkapan saat ini melebihi tingkat MSY, perkiraan potensi bertelur terkini cenderung pada atau di bawah tingkat yang akan mendukung MSY dan