UNIVERSITAS BRAWIJAYA
1. Langkah 1
1.1 Query
su - db2inst1
db2sampl -name SAMPLEDB
1.2 Screenshot
1.3 Penjelasan
Langkah pertama, buat database sample baru dalam linux CentOS dan berikan nama
SAMPLEDB.
2. Langkah 2
2.1 Query
-
2.2 Screenshot
2.3 Penjelasan
Kemudian, buka Data Studio dan akses database yang telah dibuat dengan membuat koneksi
baru pada database SAMPLEDB. Apabila berhasil akan muncul notifikasi connection success.
3. Langkah 3
3.1 Query
CREATE VIEW SUMMARY.REKAPITULASI_EMPLOYEE_DEPARTMENT
AS
SELECT D.DEPTNO, D.DEPTNAME, COUNT(E.EMPNO) TOTAL
FROM DB2INST1.EMPLOYEE E
RIGHT JOIN
DB2INST1.DEPARTMENT D
ON E.WORKDEPT = D.DEPTNO
GROUP BY D.DEPTNO, D.DEPTNAME;
3.2 Screenshot
3.3 Penjelasan
Selanjutnya, kita membuat view dengan nama SUMMARY.REKAPITULASI_EMPLOYEE-
DEPARTEMENT yang bertujuan untuk menunjukkan dan menyajikan data dari DEPTNO,
DEPTNAME, dan TOTAL.
4. Langkah 4
4.1 Query
SELECT *
FROM SUMMARY.REKAPITULASI_EMPLOYEE_DEPARTMENT;
4.2 Screenshot
4.3 Penjelasan
Pada Langkah ini, kita menampilkan Data dari View
SUMMARY.REKAPITULASI_EMPLOYEE_DEPARTMENT menggunakan SELECT yang
menunjukkan DEPTNO, DEPTNAME, dan TOTAL.
5. Langkah 5
5.1 Query
CREATE TABLE DB2INST1.MQT_REKAPITULASI_EMPLOYEE_DEPARTMENT
AS
(SELECT D.DEPTNO, D.DEPTNAME, COUNT(E.EMPNO) TOTAL
FROM DB2INST1.EMPLOYEE E
RIGHT JOIN
DB2INST1.DEPARTMENT D
ON E.WORKDEPT = D.DEPTNO
GROUP BY D.DEPTNO, D.DEPTNAME)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
MAINTAINED BY SYSTEM
IN REG_HOT1
INDEX IN IDX_HOT1
LONG IN LOB_HOT1;
5.2 Screenshot
5.3 Penjelasan
Langkah berikutnya, membuat MTQs atau Materialized query tables yang dibangun dari
DMLseperti pada View. Terdapat tanda warning setelah menjalankan query ini, akan tetapi
tabel tetap berhasil dibuat. Hal tersebut kemungkinan karena tidak digunakan untuk
mempercepat pemrosesan query.
6. Langkah 6
6.1 Query
REFRESH TABLE DB2INST1.MQT_REKAPITULASI_EMPLOYEE_DEPARTMENT;
SELECT *
FROM DB2INST1.MQT_REKAPITULASI_EMPLOYEE_DEPARTMENT;
6.2 Screenshot
History SQL Result Refresh Tabel pada MQTs dan Mengakses Data MQTs
6.3 Penjelasan
Setelah membuat MQTs, Langkah selanjutnya melakukan proses REFRESH Table. Karena
MQTs berbeda dengan View, diperlukannya query ini untuk mengakses MQTs yang telah
dibuat. Dari sini dapat disimpulkan bahwa MQTs tidak dapat langsung diakses setelah dibuat.
7. Langkah 7
7.1 Query
SELECT 'VIEW' SUMBER, DEPTNO, DEPTNAME, TOTAL
FROM SUMMARY.REKAPITULASI_EMPLOYEE_DEPARTMENT
UNION ALL
SELECT 'MQT', DEPTNO, DEPTNAME, TOTAL
FROM DB2INST1.MQT_REKAPITULASI_EMPLOYEE_DEPARTMENT
ORDER BY DEPTNO;
7.2 Screenshot
7.3 Penjelasan
Untuk membandingkan data yang ditampilkan antara view dan MQTs, terlihat bahwa hasil
data yang ditampilkan masih sama. Hal ini disebabkan bahwa view selalu mengikuti
perubahan data dari tabel asalnya, sedangkan MQTs perlu direfresh terlebih dahulu agar dapat
mengikuti perubahan tabel asalnya. Dalam percobaan ini, proses REFRESH telah dijalankan
sehingga data yang ditampilkan pada sama.
8. Langkah 8
8.1 Query
UPDATE DB2INST1.EMPLOYEE
SET WORKDEPT = 'A00'
WHERE EMPNO = '000020' ; --WORKDEPTASAL = B01
8.2 Screenshot
8.3 Penjelasan
Pada Langkah ini, kita menjalankan Update pada tabel EMPLOYEE dengan mengganti
WORKDEPT dari salah satu pegawai. Apabila sumber tabel yang ditampilkan berasal dari
sumber VIEW, tabel akan otomatis ter-update. Dapat dilihat dari data no. 4 dengan DEPTNO
B01 bahwa kolom TOTAL berkurang menjadi 0, dan pada data no. 2 dengan DEPTNO A00
kolom total bertambah menjadi 6. Sedangkan, pada data no. 1 dan no. 3 yang berasal dari
sumber MQT dengan DEPTNO B01 dan A00, kolom TOTAL belum ter-update karena
penggunaan MQTs memerlukan proses refresh terlebih dahulu.
9. Langkah 9
9.1 Query
REFRESH TABLE DB2INST1.MQT_REKAPITULASI_EMPLOYEE_DEPARTMENT;
9.2 Screenshot
History SQL Result Refresh Tabel pada MQTS dan Mengakses Data
Perbandingan View dan MQTs
9.3 Penjelasan
Pada Langkah ini, dapat dilihat bahwa proses REFRESH telah berhasil dilakukan, sehingga
data yang ditampilkan telah ter-update sesuai dengan tabel asalnya. Dalam gambar diatas,
data pada nomor 1 dan 3 bagian kolom TOTAL yang sebelumnya belum berubah telah ter-
update.
10. Langkah 10
10.1 Query
ALTER TABLE DB2INST1.EMPLOYEE
ADD COLUMN SYSTEM_START_TIME1 TIMESTAMP(12)
NOT NULL GENERATED ALWAYS AS ROW BEGIN
ADD COLUMN SYSTEM_END_TIME1 TIMESTAMP(12) NOT NULL
GENERATED ALWAYS AS ROW END
ADD COLUMN TRANS_ID1 TIMESTAMP(12)
GENERATED ALWAYS AS TRANSACTION START ID;
SALARY DECIMAL(9,2),
BONUS DECIMAL(9,2),
COMM DECIMAL(9,2),
SYSTEM_START_TIME1 TIMESTAMP(12) NOT NULL,
SYSTEM_END_TIME1 TIMESTAMP(12) NOT NULL,
TRANS_ID1 TIMESTAMP(12)
) IN USERSPACE1_HIST;
10.2 Screenshot
History SQL Result Perubahan Kolom pada Tabel EMPLOYEE dan Pembuatan
History Tabel
Status SQL Result Perubahan Kolom pada Tabel EMPLOYEE menambah 3 kolom
Status SQL Result Perubahan Kolom pada Tabel EMPLOYEE menjadi system period
temporal table
10.3 Penjelasan
Sebelum membuat sebuah history table, Langkah pertama yang dilakukan yakni
menambahkan kolom SYSTEM_START_TIME1,
SYSTEM_END_TIME1, TRANS_ID1 pada tabel EMPLOYEE untuk menampung data
historis. Selanjutnya, perubahan dilakukan pada tabel EMPLOYEE untuk mengubahnya
menjadi system-period temporal table. Setelah itu, perlu juga membuat sebuah tablespace
untuk menyimpan data historis. Kemudian, history table dapat dibuat dengan menggunakan
tablespace dan tabel utama yang hubungkan dengan history table.
11. Langkah 11
11.1 Query
INSERT INTO "DB2INST1".EMPLOYEE(
EMPNO, FIRSTNME , MIDINIT , LASTNAME, WORKDEPT ,
PHONENO , HIREDATE , JOB , EDLEVEL , SEX , BIRTHDATE ,
BONUS , COMM
)
VALUES (
'000099' , 'Adzinul' , 'A',
'Hakim' , 'A00' , '3978' ,
'1995-01-01', 'PRES', 18,
'M', '1963-08-24', 0, 4220.00);
SELECT *
FROM DB2INST1_HIST.EMPLOYEE_HIST1;
UPDATE "DB2INST1".EMPLOYEE
SET LASTNAME = 'M'
WHERE EMPNO = '000099';
DELETE
FROM "DB2INST1".EMPLOYEE
WHERE EMPNO = '000099';
SELECT *
FROM DB2INST1_HIST.EMPLOYEE_HIST1;
11.2 Screenshot
History SQL Result Memasukkan Data dan Mengakses Data Tabel History
11.3 Penjelasan
Pada Langkah ini, kita mencoba untuk memasukkan data ke dalam tabel EMPLOYEE.
Namun, ketika tabel tersebut ditampilkan, data yang telah dimasukkan tidak tercatat di tabel
history karena masih memerlukan proses update. Kemudian, lakukan proses update tabel
EMPLOYEE. Meski begitu, ketika diperiksa pada tabel history, data yang ditampilkan adalah
data sebelum proses update dilakukan. Selanjutnya, lakukan proses delete yang mana jika data
ditampilkan, terdapat data sebelum proses delete dilakukan. Hal ini disebabkan oleh proses
update tabel yang memiliki tabel history akan mencatat proses pembaruan yang terjadi dengan
menyimpan nilai sebelum proses pembaruan dilakukan ke dalam tabel history.
12. Langkah 12
12.1 Query
SELECT *
FROM "DB2INST1".EMPLOYEE
FOR SYSTEM_TIME AS OF '2017-03-27 09:20:10';
SELECT *
FROM "DB2INST1".EMPLOYEE
FOR SYSTEM_TIME AS OF CURRENT TIMESTAMP - 1 SECOND;
SELECT *
FROM "DB2INST1".EMPLOYEE
FOR SYSTEM_TIME AS OF CURRENT TIMESTAMP - 20 MINUTE;
SELECT *
FROM "DB2INST1".EMPLOYEE
FOR SYSTEM_TIME AS OF CURRENT TIMESTAMP - 1 HOUR;
SELECT *
FROM "DB2INST1".EMPLOYEE
FOR SYSTEM_TIME FROM CURRENT TIMESTAMP - 1 HOUR TO CURRENT
TIMESTAMP
12.2 Screenshot
History SQL Result Menampilkan kondisi Tabel dengan Time Travelling Query
Status SQL Result Menampilkan kondisi Tabel pada waktu ‘2017-03-27 09:20:10’
Status SQL Result Menampilkan Kondisi Tabel pada Waktu Sekarang Dikurangi 1 Detik
Result SQL Menampilkan Kondisi Tabel pada Waktu Sekarang Dikurangi 1 Detik
Status SQL Result Menampilkan Kondisi Tabel pada Waktu Sekarang Dikurangi 20 menit
Result SQL Menampilkan Kondisi Tabel pada Waktu Sekarang Dikurangi 20 menit
Status SQL Result Menampilkan Kondisi Tabel pada Waktu Sekarang Dikurangi 1 jam
Result SQL Menampilkan Kondisi Tabel pada Waktu Sekarang Dikurangi 1 jam
Status SQL Result Menampilkan Kondisi Tabel pada Waktu Sekarang Dikurangi 1 jam
sampai saat ini
Result SQL Menampilkan Kondisi Tabel pada Waktu Sekarang Dikurangi 1 jam sampai saat
ini
12.3 Penjelasan
Langkah terakhir adalah memasukkan Time Trabelling query yang merupakan query untuk
menampilkan kondisi tabel sesuai dengan waktu yang di inginkan. Dari percobaan diatas,
terdapat 5 query untuk menampilkan kondisi tabel yang berbeda. Query pertama
menampilkan kondisi tabel pada waktu 2017-03-27 09:20:10. Query kedua menampilkan
kondisi tabel pada waktu sekarang dikurangi 1 detik. Query ketiga menampilkan kondisi tabel
pada waktu sekarang dikurangi 20 menit. Query keempat menampilkan kondisi tabel pada
waktu sekarang dikurangi 1 jam. Query kelima menampilkan kondisi pada waktu sekarang
dikurangi 1 jam sampai saat ini.
KESIMPULAN
Dari praktikum modul 4 ini, dapat diambil kesimpulan untuk memahami dan
mengimplementasikan View, MTQs, dan History. View merupakan tabel turunan yang
dibagun dari tabel atau view-view yang lain, sedangkan MTQs (Materialized Query Tables)
merupakan sebuah tabel yang dibuat dari DML yang hampir sama dengan VIEW, yang salah
satu perbedaannya adalah MQTs dapat memiliki data sendiri sehingga dapat diasosiasikan
dengan tablespace yang ada seperti halnya regular table. MQTs dibuat dengan tujuan utama
untuk meningkatkan kinerja query. MQTs pada dasarnya tidak dapat langsung di akses
apabila belum dilakukan proses Refresh Table. Kemudian yang terakhir History yang
merupakan sebuah proses dalam tabel untuk mencatat proses update yang terjadi dengan
menyimpan nilai sebelum proses update dilakukan ke dalam tabel history. Tak lupa mengenai
Time Travelling Query yang digunakan untuk menampilkan kondisi tabel berdasarkan waktu
yang di tentukan.