(Contoh Kasus : Aplikasi Berupa Simulasi Untuk Teller Bank
dalam Mengakses Rekening Nasabah Bank)
SKRIPSI
Ditujukan Untuk Memenuhi Salah Satu Syarat
Memperoleh Gelar Sarjana Teknik Jurusan Teknik Informatika
Disusun Oleh : Shinta Grace Octovia
015314090
JURUSAN TEKNIK INFORMATIKA
FAKULTAS SAINS & TEKNOLOGI
UNIVERSITAS SANATA DHARMA
(Case Study : Aplication in Simulation Form Used By Bank Teller
In Order To Access The Customer Bank Account)
SKRIPSI
Proposed To Fulfil One Of The Requirements To Obtain Bachelor Degree In Information Technology
By :
Shinta Grace Octovia 015314090
INFORMATION TECHNOLOGY
FACULTY OF SCIENCE & TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2007
PERNYATAAN
Dengan ini saya sebagai penulis tugas akhir menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini tidak memuat karya atau bagian karya orang lain, kecuali pemikiran, metode atau hasil penelitian orang lain yang diambil disebutkan dengan jelas sebagai acuan.
Yogyakarta, September 2007 Penulis
HALAMAN PERSEMBAHAN
Karya ini kupersembahkan untuk :
“The King Of Majesty”, Tuhanku Yesus Kristus, karena atas
anugerahNyalah karya ini dapat dimulai serta diakhiri dengan indah.
Segala hal yang terbaik hanya pantas diberikan untukNya…
,
Bapak dan Mama, atas kuatnya dukungan cinta lewat doa, semangat dan
harapan yang tidak pernah pudar, untukku...
,
Babang, Tinus, Uda, InangUda, Bou, Amangboru, serta semua sepupu &
seluruh keluarga besar, yang senantiasa memberikan dorongan semangat
serta dukungan doa, untukku…
,
“My BIG family in Christ”, yang telah mendukungku dalam meraih segala
hal yang terbaik yang telah DIA tentukan sejak semula…
,
Seluruh sahabat & teman, yang telah menemaniku dan turut memberikan
HALAMAN MOTTO
“ Trust in the LORD with all your heart
and lean not on your own understanding;
in all your ways acknowledge Him,
and He will make your paths straight”
Proverbs 3 : 5-6
Ia membuat segala sesuatu indah pada waktunya..
( Pengkhotbah 3 :11a)
“Aku melayangkan mataku ke gunung-gunung;
dari manakah akan datang pertolonganku?
Pertolonganku ialah dari TUHAN,
yang menjadikan langit dan bumi ”
ABSTRAKSI
Transaksi dalam sebuah aplikasi yang digunakan oleh single user menjamin keakuratan data dalam database yang diupdate pada suatu waktu. Namun lain halnya pada transaksi yang terjadi pada aplikasi yang digunakan oleh beberapa user/multiuser. Harus ada managemen transaksi berupa concurrency control untuk mengelola transaksi-transaksi yang terjadi. Hal ini menjadi penting mengingat transaksi yang terjadi pada aplikasi yang digunakan oleh multiuser tersebut dapat saja terjadi secara bersama-sama dalam suatu waktu dan dapat melakukan intervensi secara simultan pada suatu item data. Jika transaksi-transaksi tersebut tidak dikelola dengan baik oleh database, maka akan dapat mengakibatkan data yang tidak valid serta tidak konsisten.
ABSTRACT
The transaction of an application using for single user guarantee the accuracy data on database when updated on a same periodic time. However, in the same case, it could be different with the transaction which used by multiusers. Management transaction such as concurrency control is needed to manage the transactions occured. Concurrency control is an important matter because the transactions occured on the application which used by the multiusers could be happen concurrently at the same time and could be execute as simultant intervension on a data item. When the transactions are not manage in a good management transaction such as concurrency control on the database, it caused the data result not valid and not consistent.
KATA PENGANTAR
Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Kuasa yang telah melimpahkan berkat-Nya sehingga penulis dapat menyelesaikan Laporan Tugas Akhir ini. Penulisan tugas akhir ini ditujukan untuk memenuhi salah satu syarat memperoleh gelar Sarjana Teknik Jurusan Teknik Informatika.
Terselesaikannya penulisan tugas akhir ini tidak lepas dari peran serta beberapa pihak, baik secara langsung maupun secara tidak langsung. Oleh karena itu, penulis ingin menyampaikan terima kasih kepada pihak-pihak yang telah ikut membantu dalam penulisan tugas akhir ini, baik dalam memberikan bimbingan, petunjuk, kerjasama, kritikan, maupun saran antara lain kepada:
1. Bapak JB. Budi Darmawan, S.T., M.Sc., selaku Dosen Pembimbing, yang telah banyak membantu terutama dalam memberikan bimbingan, dukungan, dan perhatian, sehingga penulis dapat menyelesaikan laporan tugas akhir ini. Terima kasih banyak atas semuanya, Pak.
2. Ibu Agnes Maria Polina, S.Kom., M.Sc., selaku Ketua Jurusan Teknik Informatika Universitas Sanata Dharma.
3. Bapak Alb. Agung Hadhiatma, S.T., M.T dan Bapak H. Agung Hernawan, S.T, selaku Dosen Penguji TA.
5. Bapak dan Mama yang telah mendukungku sepenuhnya. Trimakasih untuk segenap keberadaan diri kalian untukku... I’m so blessed to have you as my parents.
6. My lovely Bro’: Babang & Tinus. Trimakasih untuk dorongan semangat terus menerus lewat sms, hehe! ☺ Always prays, that God give you all the best in your life...
7. Uda&Inanguda, Bou&Amangboru, Ica dan segenap keluarga besar Hutasoit. Mauliate...
8. My BIG.. BIG.. family in Christ : TQ for all the joy & happiness!!
- Buat AKTBku : Herma, Yuli, Geo, Fani. TQ tuk dukungan dalam bentuk sms, doa, dll... I praise God to have u all as my lovely sista...
- Kak Fona & Bang Be, TQ a lot 4 da everything..
- Fanya, Ardi, Pras, Reni, Fani Hohoho!! Always “FACING OUR GIANT!!!” ☺ SEMANGAT!!!
- Adik-adik TPSY semuanya! TQ dah jadi “pasukan doa”ku ☺ - Rekan-rekan P’tas, semuanya!! TQ!!
9. Vrysca & Lia, TQ untuk segenap bentuk pertolongan yang tepat pada waktunya... Hehe ☺
10.Teman-teman kost 99999 : Diana, Maria, July, Welly, Jean, Vivi, Olive. Makasih banget dah nemenin hari-hariku dengan banyak tawa.
Narko & Teman-teman kelompok proyek RPL : Yoseph, Manu, Vini (yang dah jauh dimato).
12.Untuk Rina, Gini, Lia, Mahendra, Ani, Fani, Mindy, yang terus menerus memberikan semangat kepada penulis untuk menyelesaikan TA ini.
13.Matakuliah : KALKULUS... TQ dah ngajarin arti “Perjuangan tak henti” menghadapi setiap keterbatasan diri di “sekolah kehidupan” ini.
14.Dan seluruh pihak yang telah ikut ambil bagian dalam penyelesaian laporan tugas akhir ini yang tidak dapat penulis sebutkan satu-persatu.
Seperti kata pepatah, “Tak ada gading yang tak retak”, maka penulis menyadari segala keterbatasan dalam menyelesaikan laporan tugas akhir ini. Oleh karena itu, penulis ingin menyampaikan mohon maaf apabila terdapat kesalahan dan kekurangan. Untuk itu, penulis mengharapkan kritik dan saran yang membangun dari seluruh pihak yang membutuhkan laporan tugas akhir ini.
Semoga laporan tugas akhir ini dapat memberikan manfaat bagi siapa saja yang membutuhkannya. Atas segala perhatiannya dan kerjasamanya, penulis ucapkan terima kasih.
Yogyakarta, September 2007 Penulis,
DAFTAR ISI BAB I Pendahuluan ………..
1.1Latar Belakang Masalah………...
1.2Rumusan Masalah..……….
1.3Batasan Masalah.……….……….
1.4Tujuan Penelitian..………... 1.5Metodologi Penelitian .………... 1.6Sistematika Penelitian………... BAB II Landasan Teori……….
2.2 Pembahasan tentang Concurrency Control………. 2.2.1 Kebutuhan Concurrency Control……… 2.2.2 Masalah yang Muncul dalam Akses Bersama dan Hasil yang Diharapkan………. 2.3 Concurrency Control dalam Oracle... 2.3.1 Multiversion Read Consistency……….. 2.3.2 Macam-macam Level Isolasi Oracle... 2.3.3 Deteksi Deadlock………...
DAFTAR GAMBAR
Tabel Keterangan Halaman
Gambar 2.1 Diagram Transsisi Transaksi 6
Gambar 3.1 Use Case Diagaram 33
Gambar 3.2 ER-Diagram 34
Gambar 3.3 Context Diagram 35
Gambar 3.4 Diagram Berjenjang 35
Gambar 3.5 Data Flow Diagram 36
Gambar 3.6 Tabel Relasi Transaksi Pada Teller Bank 37
Gambar 4.1 User Interface Form Utama 43
Gambar 4.2 Form Login Teller Bank Untuk Aplikasi Tanpa Concurrency Control
44 Gambar 4.3 Form Login Teller Bank Untuk Aplikasi
Dengan Concurrency Control
45 Gambar 4.4 Form Menu Utama Untuk Aplikasi Tanpa
Concurrency Control
47 Gambar 4.5 Form Menu Utama Untuk Aplikasi Dengan
Concurrency Control
48 Gambar 4.6 Form Transaksi Penarikan Tunai Untuk
Aplikasi Tanpa Concurrency Control
52 Gambar 4.7 Form Transaksi Penarikan Tunai Untuk
Aplikasi Dengan Concurrency Control
53 Gambar 4.8 Form Transaksi Penyetoran Tunai Untuk
Aplikasi Tanpa Concurrency Control
58 Gambar 4.9 Form Transaksi Penyetoran Tunai Untuk
Aplikasi Dengan Concurrency Control
59 Gambar 4.10 Form Transaksi Transfer Saldo Untuk Aplikasi
Tanpa Concurrency Control
64 Gambar 4.11 Form Transaksi Transfer Saldo Untuk Aplikasi
Dengan Concurrency Control
65 Gambar 4.12 Form Transaksi Total Saldo Untuk Aplikasi
Tanpa Concurrency Control
71 Gambar 4.13 Form Transaksi Total Saldo Untuk Aplikasi
Dengan Concurrency Control
71 Gambar 4.14 Form Hasil Transaksi Penarikan Tunai Untuk
Aplikasi Tanpa Concurrency Control
74 Gambar 4.15 Form Hasil Transaksi Penarikan Tunai Untuk
Aplikasi Dengan Concurrency Control
75 Gambar 4.16 Form Hasil Transaksi Penyetoran Tunai Untuk
Aplikasi Tanpa Concurrency Control
76 Gambar 4.17 Form Hasil Transaksi Penyetoran Tunai Untuk
Aplikasi Dengan Concurrency Control
Gambar 4.18 Form Hasil Transaksi Transfer Saldo Tanpa Concurrency Control
78 Gambar 4.19 Form Hasil Transaksi Transfer Saldo Dengan
Concurrency Control
79 Gambar 4.20 Form Hasil Transaksi Total Saldo Tanpa
Concurrency Control
81 Gambar 4.21 Form Hasil Transaksi Total Saldo Dengan
Concurrency Control
81 Gambar 5.1 Simulasi 2 Transaksi Berjalan Bersamaan untuk
Aplikasi Tanpa Concurrency Control – Hilangnya Data Yang Diubah
85
Gambar 5.2 Simulasi Hasil Transaksi 2 Transaksi Berjalan Bersamaan untuk Aplikasi Tanpa Concurrency Control – Hilangnya Data yang Diubah
85
Gambar 5.3 Simulasi 2 Transaksi Berjalan Bersamaan untuk Aplikasi Tanpa Concurrency Control – Masalah Analisa yang Tidak Konsistent
90
Gambar 5.4 Simulasi Hasil Transaksi 2 Transaksi Berjalan Bersamaan untuk Aplikasi Tanpa Concurrency Control – Masalah Analisa yang Tidak
Konsisten
91
Gambar 5.5 Simulasi 2 Transaksi Berjalan Bersamaan untuk Aplikasi Dengan Concurrency Control –
Terhadap Masalah Hilangnya Data Yang Diubah
96
Gambar 5.6 Simulasi Hasil Transaksi 2 Transaksi Berjalan Bersamaan untuk Aplikasi Dengan
Concurrency Control – Terhadap Masalah Hilangnya Data yang Diubah
97
Gambar 5.7 Simulasi 2 Transaksi Berjalan Bersamaan untuk Aplikasi Dengan Concurrency Control –
Masalah Analisa yang Tidak Konsistent
102
Gambar 5.8 Simulasi Hasil Transaksi 2 Transaksi Berjalan Bersamaan untuk Aplikasi Dengan
Concurrency Control – Masalah Analisa yang Tidak Konsisten
DAFTAR TABEL
Tabel
Keterangan Halaman Tabel 2.1 Level Isolasi Transaksi Menurut SQL92 10
Tabel 2.2 Berbagai Tipe Data PL/SQL 19
Tabel 2.3 Berbagai Operator PL/SQL 20
Tabel 2.4 Namespace Pada ADO.NET 25
Tabel 3.1 Ilustrasi Masalah Hilangnya Data Yang Diubah 29 Tabel 3.2 Ilustrasi Masalah Analisa Yang Tidak Konsisten 30
Tabel 3.3 Struktur Tabel Nasabah 38
Tabel 3.4 Struktur Tabel Jenis Transaksi 38
Tabel 3.5 Struktur Tabel Transaksi 38
Tabel 3.6 Struktur Tabel Teller Bank 38
Tabel 5.1 Proses Yang Terjadi Pada Pengujian Aplikasi Tanpa Menggunakan Concurrency Control – Terhadap Masalah Hilangnya Data Yang Diubah
88
Tabel 5.2 Proses Yang Terjadi Pada Pengujian Aplikasi Tanpa Menggunakan Concurrency Control – Terhadap Masalah Analisa Yang Tidak Konsisten
94
Tabel 5.3 Proses Yang Terjadi Pada Pengujian Aplikasi Dengan Menggunakan Concurrency Control – Terhadap Hilangnya Data Yang Diubah
100
Tabel 5.4 Proses Yang Terjadi Pada Pengujian Aplikasi Dengan Menggunakan Concurrency Control – Terhadap Masalah Analisa Yang Tidak Konsisten
107
BAB I
PENDAHULUAN
1.1 Latar Belakang Masalah
Masalah yang timbul dalam sebuah aplikasi database untuk multiuser yaitu bagaimana database tersebut dapat menjamin data yang dipresentasikan kepada user merupakan data yang konsisten, walaupun terdapat beberapa transaksi yang mengeksekusi data tersebut dalam waktu yang hampir bersamaan. Akses bersama pada suatu aplikasi database untuk multiuser relatif lebih mudah jika semua user hanya membaca data, sehingga tidak ada yang saling melakukan interfensi satu dengan yang lainnya terhadap suatu data. Namun lain halnya jika pada suatu saat yang hampir bersamaan terdapat dua atau lebih user yang mengeksekusi suatu data dalam database secara simultan atau paling sedikit terdapat satu user yang melakukan update, padahal user lain yang mengeksekusi data tersebut belum selesai dengan eksekusinya, hal ini mengakibatkan data yang diberikan kepada user dalam keadaan tidak konsisten dan tidak valid. Diperlukan sebuah penanganan berupa concurrency control untuk melindungi data dari akses secara simultan oleh multiuser.
suatu data dari database rekening nasabah milik seorang Nasabah Bank. Permasalahan yang timbul yaitu bagaimana data dalam database yang diberikan kepada user tetap konsisten dan merupakan hasil yang sebenarnya, walaupun terdapat beberapa interfensi/perubahan yang dilakukan oleh beberapa Teller Bank terhadap suatu data rekening milik seorang Nasabah dalam waktu yang hampir bersamaan dan secara simultan.
1.2 Rumusan Masalah
Dari latar belakang masalah diatas terdapat beberapa rumusan masalah yaitu:
1. Bagaimana mengimplementasikan concurrency control dalam database Oracle 10g untuk multiuser dengan menggunakan Oracle PL/SQL?
2. Bagaimana mengintegrasikan implementasi concurrency control dalam database Oracle 10g tersebut dalam sebuah aplikasi untuk Teller Bank dalam mengakses rekening Nasabah Bank?
1.3 Batasan Masalah
Dalam mengimplementasikan concurrency control dalam database Oracle 10g untuk multiuser dengan menggunakan Oracle PL/SQL, contoh kasus aplikasi berupa simulasi untuk Teller Bank dalam mengakses rekening Nasabah Bank, dilakukan batasan sebagai berikut:
2. Aplikasi hanya berupa simulasi, bukan program utuh yang dapat dipakai oleh Teller Bank.
3. Tidak membahas jaringan komputer dan keamanannya.
1.4 Tujuan Penelitian
Mengimplementasikan concurrency control dalam database Oracle 10g untuk multiuser dalam suatu aplikasi untuk end user berupa aplikasi simulasi untuk Teller Bank dalam mengakses rekening Nasabah Bank.
1.5 Metodologi Penelitian
1. Studi pustaka tentang concurrency control dalam Oracle
2. Menganalisa permasalahan-permasalahan yang dapat terjadi dalam aplikasi untuk multiuser dan merumuskan sistem yang akan dibangun untuk dapat mengatasi permasalahan-permasalahan yang ada.
3. Merancang sistem yang akan dibangun meliputi perancangan database, perancangan user interface secara terinci guna memberikan gambaran umum mengenai sistem yang akan dibangun.
1.6 Sistematika Penelitian
Sistematika penelitian skripsi secara garis besar meliputi: BAB I. PENDAHULUAN
Bab ini berisi tentang Latar Belakang Masalah, Rumusan Masalah, Batasan Masalah, Tujuan Penelitian, Metodologi Penelitian, Sistematika Penulisan.
BAB II. LANDASAN TEORI
Bab ini membahas landasan teori yang menjelaskan tentang Transaction Management, Concurrency control, Concurrency control dalam Oracle, Database Oracle 10g, Pemrograman Database dengan Oracle PL/SQL, dan Aplikasi untuk User menggunakan C#.NET.
BAB III. ANALISA PERMASALAHAN DAN PERANCANGAN SISTEM Bab ini membahas tentang analisa permasalahan, system yang dikembangkan, perancangan database, dan perancangan user interface.
BAB IV. IMPLEMENTASI SISTEM
Bab ini membahas mengenai cara mengimplementasikan sistem yang dibuat kedalam suatu program.
BAB V. ANALISA HASIL
Bab ini berisi analisa hasil dari imlementasi yang telah dibuat pada bab sebelumnya.
BAB II
LANDASAN TEORI
2.1 Pembahasan tentang Management Transaksi
Transaksi adalah sebuah tindakan atau serangkaian tindakan, dilakukan oleh single user atau program aplikasi, yang membaca atau mengubah isi dari database.
Terdapat 4 hal dasar yang harus dimiliki semua transaksi, yaitu:
1. Atomicity. Sebuah transaksi adalah sebuah unit yang tidak dapat dibagi lagi sehingga dapat melakukan seluruhnya atau tidak melakukan apapun. Ini merupakan tanggung jawab dari subsystem recovery dari DBMS untuk memastikan ke’atom’annya.
2. Consistency. Sebuah transaksi harus mentransformasikan satu keadaan konsisten ke keadaan konsisten lainnya. Ini merupakan tanggung jawab dari DBMS dan pengembang aplikasi untuk memastikan kekonsistenannya.
3. Isolation. Transaksi secara bebas mengeksekusi yang lainnya. Dengan kata lain, sebagian transaksi yang tidak lengkap akan mengakibatkan transaksi yang lain menjadi tidak visible.Ini merupakan tanggung jawab dari subsistem concurrency control untuk memastikan isolasi.
Ini merupakan tanggung jawab dari recovery subsystem untuk memastikan durability.
Berikut Gambar2.1 merupakan digram transisi sebuah transaksi:
ACTIVE
PARTIALLY
COMMITED
FAILED
COMMITTED
ABORTED
Begin transaction
abort
abort End
transaction
commit
Gambar 2.1 Diagram Transisi Transaksi Dalam diagram transisi terdapat 5 keadaan yaitu:
1. ACTIVE (aktif)
2. PARTIALLY COMMITTED (sebagian dilaksanakan) • terjadi setelah perintah terakhir dieksekusi
• pada saat ini, mungkin ditemukan transaksi melanggar
serializability atau melanggar integrity constraint, maka transaksi harus dibatalkan. Transaksi demikian akan menuju FAILED (keadaan gagal) dan harus dibatalkan
3. COMMITTED (dilaksanakan) 4. FAILED (gagal)
• Terjadi jika transakasi tidak dapat dilaksanakan atau transaksi dibatalkan pada saat ACTIVE (keadan aktif).
• Kondisi ini terjadi jika user membatalkan transaksi atau protocol concurrency control membatalkan transaksi untuk memastikan serialibility.
5. ABORTED (dibatalkan)
2.2 Pembahasan tentang Concurrency control
Concurrency control adalah proses pengelolaan operasi-operasi yang berjalan bersamaan dalam database dengan tidak saling mengganggu satu sama lain.
2.2.1. Kebutuhan Concurrency control
2.2.2. Masalah yang Muncul dalam Akses Bersama dan Hasil yang Diharapkan
Terdapat beberapa masalah yang dapat terjadi yang disebabkan oleh akses bersama oleh multiuser, yaitu:
1. Lost update problem (Masalah hilangnya data yang diupdate) : Sebuah transakasi yang melakukan update, namun pada waktu interfal yang bersamaan proses update tersebut ditimpa oleh transaksi lain.
2. Uncommitted dependency problem / dirty read (masalah kebergantungan terhadap transaksi yang belum commit) : Sebuah transaksi dibiarkan untuk melihat hasil transaksi intermediate (menengah) dari transaksi lain sebelum dilakukan commit.
3. Inconsistent analysis problem (masalah analisa yang tidak konsisten) : Sebuah transaksi membaca beberapa nilai dari database tetapi transaksi kedua melakukan update terhadap sebagian dari beberapa nilai tersebut selama proses eksekusi yang pertama.
4. Nonrepeatabel (atau fuzzy) read : Sebuah transaksi T membaca ulang data item yang sebelumnya telah dibaca, sementara itu transaksi lain melakukan modifikasi. Sehingga T akan menerima 2 buah nilai yang berbeda untuk data item yang sama.
pada waktu tertentu. Untuk menangani masalah-masalah tersebut di atas, diperlukan kontrol yang baik untuk menjamin konkurensi data dan konsistensi data.
• Konkurensi data berarti bahwa banyak user yang dapat mengakses data pada waktu yang bersamaan
• Konsistensi data berarti bahwa masing-masing user dapat melihat tampilan data yang konsisten, termasuk jika terdapat perubahan yang dilakukan oleh transaksi oleh user lain.
Kontrol yang baik dalam database terhadap eksekusi dari transaksi yang dijalankan bersamaan yaitu jika transaksi yang dieksekusi bersama tersebut menghasilkan hasil yang sama seperti jika transakasi-transaksi yang ada dieksekusi secara serial (transaksi dijalankan sendiri-sendiri, tanpa ada sela, menjamin konsistensi data). Hal ini dinamakan serializability.
Serializability, yang merupakan parameter keberhasilan dalam concurrency control ini dapat dicapai dengan menggunakan macam-macam level isolasi pada transaksi (transaction isolation levels), mekanisme locking pada data, dan timestamp.
• Level Isolasi. Level isolasi mengontrol tingkat dimana transaksi tertentu
Plilihan level isolasi adalah READ UNCOMITTED, READ COMMITTED,
REPEATABEL READ dan SERIALIZABLE. Berikut merupakan tabel level isolasi
transaksi menurut ANSI/ISO SQL standard (SQL92) terhadap penanganan 3 masalah yang ditemukan dalam akses bersama.
Isolation level
Dirty Read Nonrepeatabel
Read
Phantom Read
Read
uncommitted
Mungkin Mungkin Mungkin Read
committed
Tidak Mungkin Mungkin Repeatabel
read
Tidak Tidak Mungkin Serializable Tidak Tidak Tidak
Tabel 2.1 Level Isolasi Transaksi menurut SQL92
Level isolasi SERIALIZABLE secara umum merupakan yang paling aman dan direkomendasikan untuk kebanyakan transaksi. Akan tetapi, beberapa transaksi dapat bekerja dengan level isolasi lebih rendah, dan sejumlah kecil lock yang diminta dapat memberikan konstribusi untuk meningkatkan performa sistem.
tidak dapat melakukan update. Sedangkan jika sebuah transaksi yang memiliki executive lock pada sebuah data item dapat melakukan pembacaan maupun update item tersebut.
Namun dalam mekanisme locking, deadlock bisa terjadi. Deadlock adalah sebuah jalan buntu yang merupakan hasil dari dua atau lebih transaksi yang saling menuggu lock yang akan dilepaskan yang dipegang oleh transaksi yang lainnya.
• Metode Timestamp. Timestamp adalah sebuah identitas yang unik yang dibuat oleh DBMS yang menunjukkan adanya waktu starting yang relativ dari sebuah transaksi. Metode ini agak berbeda dengan metode locking. Tidak ada locking, dan tidak ada deadlock. Metode locking pada umunya mencegah konflik dengan cara membuat transaksi yang lain menunggu. Dalam metode timestamp, tidak ada menunggu, transaksi yang mengalami konflik secara sederhana dirollback dan re-start.
2.3 Concurrency control dalam Oracle
untuk operasi baca, yang artinya bahwa sebuah operasi baca tidak pernah memblok sebuah operasi tulis.
2.3.1. Multiversion Read Consistency
Implementasi dari protocol Multiversion Read Consistency yang akan dibahas meliputi Rollback segment, Serial Change Number (SCN) dan Lock.
• Rollback Segment, merupakan struktur dalam dalam database Oracle digunakan untuk menyimpan informasi undo, ketika transaksi sedang mengubah data dalam blok, Oracle pertama-tama menulis tampilan data sebelumnya ke Rollback segment. Sebagai tambahan untuk mendukung Multiversion Read Consistency, Rollback segment juga digunakan untuk meng-undo sebuah transaksi. Oracle juga memelihara satu atau lebih Redo-Logs, yang merekam semua transaksi yang terjadi dan digunakan untuk me-recover database pada saat terjadi kesalahan dalam system. • System Change Number (SCN), digunakan untuk memelihara order
• Lock. Locking terjadi untuk semua statement SQL jadi seorang user tidak pernah membutuhkan untuk me-lock resource-resource yang ada secara tegas, meskipun Oracle menyediakan sebuah mekanisme untuk memperbolehkan seorang user untuk mendapat lock secara manual atau untuk mengubah default locking. Default mekanisme locking, men-lock data pada level terendah dari yang dibatasi untuk menjamin integritas ketika memperbolehkan tingkat tertinggi dari concurrency. Oracle menyimpan informasi row-locking selama blok data actual dimana baris tersebut disimpan. Sebagimana Oracle menyimpan lock pada baris selama blok data, Oracle tidak pernah meningkatkan lock.
Oracle support tipe-tipe dari lock, meliputi:
• DDL locks- digunakan untuk memproteksi objek skema, seperti definisi dari tabel dan view.
• DML locks – digunakan untuk memproteksi pokok data, sebagai contoh lock pada tabel memprotek seluruh tabel dan baris lock pada baris.
• Internal locks- digunakan untuk memproteksi struktur data yang dishare. • Internal latches- digunakan untuk memproteksi kamus data entri, file- file
data, tabelspace dan rollback segment.
• Distributed lock- digunakan untuk memprotek data dalam sebuah lingkungan distribusi dan atau parallel server
Oracle mengenal 2 level konsistensi baca, yaitu statement-level read consistency (konsistensi baca level statement) dan transaction-level read consistency (konsistensi baca level transaksi).
1. Konsistensi Baca Level-Statement (Statement-Level Read Consistency) Oracle secara otomatis senantiasa menyelanggarakan konsistensi baca pada level statemen. Hal ini menjamin setiap data yang dikembalikan oleh sebuah query berasal dari sebuah titik tunggal (single point) dalam waktu dimana query tersebut dimulai. Oleh karena itu, sebuah query tidak pernah melihat data kotor/dirty read maupun setiap perubahan yang dilakukan oleh transaksi lain yang commit selama query tersebut dieksekusi. Hasilnya yaitu hanya data yang commit sebelum query mulai yang dapat dilihat oleh query. Query tersebut tidak melihat perubahan commit setelah eksekusi statement mulai. Sebuah hasil yang konsisten dibangun untuk setiap query, menjamin kekonsistenan data, dan dalam hal ini tidak memerlukan aksi apapun dari user. Statement-statement SQL seperti SELECT, INSERT, UPDATE, dan DELETE menggunakan sebuah query untuk menetapkan data mana yang akan dipengaruhi. SELECT statement merupakan sebuah query explicit dan dapat mempunyai query bersarang atau operasi join. Sebuah statement INSERT dapat menggunakan beberapa query bersarang. UPDATE dan DELETE statement dapat mengggunakan klausa WHERE atau subquery-subquery untuk menghasilkan hanya beberapa baris dalam sebuah tabel lebih daripada semua baris.
operasi-operasi hanya melihat data yang telah ada sebelum operasi-operasi mulai untuk membuat perubahan.
2. Konsistensi Baca Level-Transaksi (Transaction-Level Read Consistency)
Konsistensi baca Level-Transaksi ini berjalan di sebuah transaksi yang berjalan menggunakan jenis isolation level serializable. Semua data mengakses gambaran suatu keadaan dari database seperti pada saat sebuah transaksi mulai. Hal ini berarti data yang dilihat oleh semua query pada transaksi yang sama merupakan konsisten dengan pasti pada sebuah titik tunggal (single point) dalam waktu, kecuali jika beberapa query dibuat oleh sebuah transaksi serializable melihat perubahan yang dibuat transaksi tersebut. Konsistensi baca level-transaksi menghasilkan pembacaan yang repeatabel dan tidak membuka sebuah query untuk masalah phantom.
2.3.2. Macam-macam Level Isolasi Oracle
Oracle menyediakan 3 level isolasi yaitu READ COMMITTED,
SERIALIZABLE dan READ ONLY. Oracle hanya mengimplementasikan 2 dari 4
level isolasi yang didefenisikan dalam ISO SQL Standar.
• READ COMMMITTED. Serialisasi didukung pada level isolasi ini
yang sama didalam transaksi yang sama, mengijinkan non-repeatabel dan phantom.
• SERIALIZABLE. Serialisasi didukung pada transaksi level jadi, setiap
statement didalam sebuah transaksi melihat hanya data yang telah di-committed sebelum transaksi dimulai.
• READ ONLY. Transaksi READ ONLY melihat hanya data yang committed
sebelum transaksi dimulai.
READ COMMMITTED dan SERIALIZABLE menggunakan row-level locking dan
keduanya menunggu jika sebuah transaksi mencoba untuk mengubah sebuah baris yang diupdate oleh sebuah transaksi yang uncommitted. Jika transaksi yang dibloking commit, dan melepaskan setiap lock, kemudian dengan mode READ
COMMITTED, transaksi menunggu berproses dengan updatenya. Bagaimanapun juga, dengan mode SERIALIZABLE sebuah error bisa mengindikasikan operasi tersebut tidak bisa diserialisasikan.
Level isolasi dapat diset di Oracle, dengan memilih salah satu dari level isolasi yang akan dipakai pada awal transaksi dimulai. Seperti:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION READ ONLY;
Dapat juga menggunakan perintah ALTER SESSION untuk mengeset level isolasi pada transaksi untuk semua subsequent transaksi, seperti:
ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE;
2.3.3. Deteksi Deadlock
Oracle secara otomatis mendeteksi dan menangani deadlock dengan cara me-rollback satu dari perintah yang terdapat dalam deadlock. Sebuah pesan dikembalikan pada sebuah transaksi yang memiliki perintah yang di-rollback.
2.4 Database Oracle 10g
Oracle 10g adalah software databse terbaru dari perusahaan database terkenal didunia Oracle Corp. Oracle merupakan salah satu software database ORDBMS (Object Relational Database Management System). Beberapa kelebihan utama dari Oracle 10g:
1. Mendukung penuh RDBMS
2. Mempunyai fasilitas administrasi database yang memudahkan user mengatur database dengan tampilan GUI yang memuaskan
3. Mendukung penuh aplikasi Internet dan Windows.
Selain itu, Oracle 10g mempunyai fitur baru dibandingkan pendahulunya, antara lain:
1. Automatic Storage Management. Automatic Storage Management memungkinkan pembuatan pembuatan sebuah kelompok disk dari sekumpulan peranti disk.
3. Enkripsi password database. Password setiap user yang mencoba remote login ke Oracle Database 10g release 1 (10.1) otomatis dienkripsi sebelum dikirim ke remote.
4. Data Pump Import dan Export. Oracle menggunakan fasilitas impor dan ekspor yang lebih cepat untuk transfer file.
5. Large Page Support. Large page support menyediakan peningkatan kecepatan kinerja untuk penggunaan memori yang berjalan di Windows Server 2003.
6. Oracle Data Provide for .NET. Fasilitas Oracle Data Provider for .NET (ODP.NET) 10g release 1 (10.1) termasuk berikut:
Mendukung Oracle grids (teknologi Grid Computing).
Mendukung tipe data baru di database, yaitu BINARY_FLOAT dan BINARY_DOUBLE.
Mendukung Oracle homes yang banyak.
Mendukung schemea-based XML Type di database.
7. Oracle Enterprise Manager Database Control. Oracle Enterprise Manager Database Control diinstal pada home yang sama sebagai database dan mendukung instance standalone Oracle Containers for Java (OC4J).
2. 5 Pemrograman Database dengan Oracle PL/SQL
Procedural Language/SQL (PL/SQL) dibutuhkan untuk mengekstrak informasi atau mengaksiplasikan perubahan ke database secara pemrograman. Hal ini karena PL/SQL mendukung manipulasi data dan kontrol transaksi yang tidak dapat dilakukan oleh SQL. Perbedaan SQL dengan PL/SQL ialah PL/SQL bukan unit transaksi. Fungsi commit, savepoint, dan roolback independent terhadap blok, tapi perintah tersebut dapat diaktifkan di dalam blok. PL/SQL tidak mendukung Data Definition Language (DDL) dan Data Control Language(DCL).
Blok dari PL/SQL yang umum ialah:
Berikut ini tipe data pada PL/SQL:
Tabel 2.2 berikut merupakan tipe-tipe data dalam Oracle PL/SQL :
Tipe Variabel Penjelasan Contoh
VARCHAR2 Variable-length Character string
Name VARCHAR2(35);
CHAR Fixed-lebgth character
string
Middle_init VARCHAR2(1);
DATE Tanggal Middle_init
VARCHAR2(1);
declare
-- optional begin
-- mandatory
-- statement PL/SQL exception
-- optional
-- pernyataan error handling end;
NUMBER Floating, fixed, atau bilangan bulat
Birth_date DATE;
LONG Long text hingga 32760
bytes
Price NUMBER(4);
BINARY_INTEGER Bilangan bulat Comment LONG;
INTEGER Bilangan bulat Counter
BINARY_INTEGER;
INT Bilangan bulat Counter INTEGER;
SMALLINT Bilangan bulat Counter INT;
DEC Floating point Counter SMALLINT;
DECIMAL Floating point Price DEC;
DOUBLE Floating point Price DOUBLE;
PRECISION Floating point Price PRECISION;
NUMERIC Floating point Price NUMERIC;
REAL Floating point Price REAL;
BOOLEAN True atau false is_customer BOOLEAN;
LOB Large object Product_image LOB;
Tabel 2.2 Berbagai Tipe Data PL/SQL
Tabel 2.3 berikut ini merupakan operator-operator dalam PL/SQL: Simbol Arti
+ Addition operator
- Subtraction/negation operator
/ Division operator
= Relational operator
@ Remote access indicator
; Statement terminator
<> Relational operator
!= Relational operator
|| Concatenation operator
-- Single line comment indicator /* Beginning comment delimiter */ Ending comment delimiter
:= Assignment operator
Tabel 2.3 Berbagai Operator PL/SQL
2.5.1 Mengambil Data di PL/SQL
Untuk mengakses data di PL/SQL, digunakan variable sebagai penampung data sementara. Contoh:
declare
emp_rec emp%rowtype; begin
select * into emp_rec
from emp
where empno = &employee_number;
dbms_output.put_line (‘nama pegawai’ || emp_rec.ename); end;
2.5.2 Memasukkan Data Menggunakan PL/SQL
begin
insert into emp (emp, ename, job, deptno) values (777, ‘Saftian’,’DBA’, 10);
end;
2.5.3 Meng-update dan Menghapus Data
Untuk meng-update data, digunakan fungsi update nama_tabel set nama_kolom sebagai berikut:
declare
v_sal_increase emp.sal%type:=200; begin
update emp set sal = sal+v_sal_increase where job = ‘ANALYST’
end;
2.5.4 Konvensi Nama
Nama fungi yang ada di Oracle tidak dapat digunakan sebagai variable. Nama variable diusahakan tidak berbenturan dengan nama kolom. Contoh berikut menampilkan kesalahan penggunaan nama variable dan kolom.
2.5.5 Mengontrol Transaksi
DECLARE
orderdate ord.orderdate%TYPE; shipdate ord.shipdate%TYPE;
ordid ord.ordid%TYPE := 601; BEGIN
SELECT orderdate, shipdate INTO orderdate, shipdate
FROM ord
WHERE ordid = ordid; END;
SQL> / DECLARE *
ERROR at line 1:
Fungsi commit digunakan untuk menyukseskan transaksi, sedangkan fungsi rollback digunakan untuk menggagalkan transaksi. Secara default commit sudah aktif, jadi tidak perlu menggunakan fungsi commit jika ingin menyukseskan transaksi. Perintah rollback hanya dapat mengembalikan isi tabel ke kondisi saat perintah commit terakhir kecuali jika perintah savepoint digunakan sehingga perintah rollback dapat mengembalikan isi tabel ke kondisi savepoint yang telah ditentukan. Savepoint berfungsi untuk memberikan rentang update pada data sehingga kita dapat me-rollback perubahan data ke titik tertentu.
Contoh:
SQL> update kategori set penjelasan=’PL/SQL ; where no_kategori=1’;
Lalu berikan perintah:
SQL> commit;
Data di atas akan benar-benar berubah, tetapi jika perintah rollback dijalankan sebelum commit seperti berikut:
SQL> rollback;
Maka data akan dibalikkan ke data awal. Untuk membuat perantara perubahan data digunakan savepoint, seperti:
SQL> savepoint kategori_update;
2.6 Aplikasi Database C#.NET 2.6.1 Mengenal C#.NET
Microsoft Visual Studio .NET ialah perangkat pengembangan multibahasa yang menyeluruh untuk membangun secara cepat dan memadukan XML Web service dan aplikasi yang secara dramatis meningkatkan produktifitas. Visual Studio. NET didesain dengan integrasi yang menggunakan standar Internet dan protocol seperti XML dan SOAP (Simple Object Access Protocol).
2.6.2 Teknologi ADO.NET
Tabel 2.4 merupakan namespace pada ADO.NET ialah sebagai berikut:
Namespace Penjelasan
System.Data Menangani objek utama seperti
DataTabel, DataView, dan constraint System.Data.Common Mendefinisikan objek generic yang
di-sharing/dibagi oleh penyedia data yang berbeda seperti DataAdapter,
DataColumnMapping, dan DataTabelMapping. Namespace ini
digunakan oleh penyedia data (data provider) dan berisi sekumpulan fungsi-fungsi penting untuk mengakses data.
Oracle.DataAccess.Client dan Oracle.DataAccess.Types
Namespace minimal untuk penyedia data yang dibuat khusus untuk Oracle 10g agar program .NET bisa terkoneksi ke Oracle
Tabel 2.4 Namespace pada ADO.NET
Ada 3 komponen akses utama yang harus digunakan untuk mengakses dan menyimpan data dari database, yaitu OracleConnection, OracleDataAdapter, dan DataSet.
terletak pada toolbox di bawah tab Data. Selain itu agar dapat menggunakan namespace Oracle, dapat ditambahkan juga references Oracle yang sesuai seperti Oracle.DataAccess.dll.
2.6.2.1 OracleConnection
OleDbConnection merupakan komponen yang bertugas menangani koneksi ke database dan menyediakan informasi-informasi data seperti nama
database, lokasi, dan driver database yang digunakan untuk berhubungan dengan database menggunakan driver berekstensi .dll yang menyediakan kode penting yang mengijinkan OracleConeetion untuk dapat berkomunikasi ke database dengan caranya sendiri. Ada dua cara menghubungkan OleDbConnection ke dalam aplikasi, pertama yatiu dengan langsung meletakkan OracleConnection ke form kita dan mengtur propertinya atau dengan meletakkan OracleDataAdapter di dalam form aplikasi dan secara otomatis akan menambahkan OracleConnection dan meminta pembuat aplikasi untuk engatur propertinya.
2.6.2.2 OracleDataAdapter dan DataSet
DataSet tersebut. Komponen DataSet berfungsi sebagai cache data yang disimpan di memori. DataSet tdak hanya menyimpan data yang diambil di OracleDataAdapter tetapi menyimpan informasi tabel seperti data yang diambil seperti nama kolom dan tipe datanya yang dikenal dengan nama metadata. Metadata disimpan di dokumen XML.
2.6.2.3 OracleCommand
OracleCommand digunakan untuk mengeksekusi pernyataan SQL pada database.
2.6.3 Membuat Koneksi Database
BAB III
ANALISA PERMASALAHAN
DAN PERANCANGAN SISTEM
3.1 Analisa Permasalahan
3.1.1 Permasalahan-permasalahan yang Timbul jika Tidak Terdapat Penanganan Concurrency control
1. Masalah Hilangnya Data (Lost of update).
Tabel 3.1 merupakan tabel ilustrasi masalah hilangnya data yang diupdate
Wak tu
Teller A Teller B
Total saldo Nasabah A (saldo A)
Total saldo Nasabah B (saldo B)
t1 Begin transaction 10.000.000 1.000.000
t2 Read (saldo A) 10.000.000 1.000.000
t3 Saldo A=saldo A – 1.000.000 10.000.000 1.000.000
t4 Write (saldo A) 9.000.000 1.000.000
t5 read (saldo B) begin transaction 9.000.000 1.000.000
t6 saldo B=saldo B+1.000.000 read (saldo B) 9.000.000 1.000.000 t7 write (saldo B) saldo B=saldo B-500.000 9.000.000 2.000.000
t8 Commit write (saldo B) 9.000.000 500.000
t9 Commit 500.000
Tabel 3.1 Tabel Ilustrasi Masalah Hilangnya Data Yang Diubah
Contoh kasus diatas:
Nasabah B merupakan seorang mahasiswa di kota Yogya, sedangkan Nasabah A merupakan orangtua Nasabah B yang berada dilain kota. Nasabah A bermaksud mengirimkan uang bulanan kepada anaknya, Nasabah B, melalui kantor cabang terdekat dikotanya, yang dilakukan oleh seorang Teller A. Teller A melakukan transaksi transfer saldo dari no rekening nasabah A menuju no rekening nasabah B dengan nominal Rp. 1.000.000. Namun ternyata, nasabah B, sedang melakukan transaksi penarikan tunai yang dilayani oleh Teller B dengan nominal Rp. 500.000 dalam waktu interfal yang sama.
Dapat diperhatikan, bahwa dengan tidak adanya concurrency control dalam database untuk akses bersama dapat mengakibatkan kerugian pada nasabah B sebesar Rp. 1.000.000
2. Masalah Analisa Yang Tidak Konsisten (The inconsistent analysis problem).
Tabel 3.2 merupakan tabel ilustrasi masalah Analisa Yang Tidak Konsisten
Wak
T1 Begin Transaction 1.000.000 2.000.000 0
T2 Begin transaction Jumlah=0 1.000.000 2.000.000 0
T3 Read (saldo A) Read (saldo A) 1.000.000 2.000.000 0
T4 Saldo A=saldo A-200.000 Jumlah=jumlah+saldo A 1.000.000 2.000.000 1.000.000 T5 Write (saldo A) Read (saldo B) 800.000 2.000.000 1.000.000 T6 Read (saldo D) Jumlah=jumlah+saldo B 800.000 2.000.000 1.500.000 T7 Saldo D=saldo D+200.000 Read (saldo C) 800.000 2.000.000 1.500.000 T8 Write (saldo D) Jumlah=jumlah +saldo C 800.000 2.200.000 2.000.000
T9 Read(saldo D) 800.000 2.200.000 2.000.000
T10 Jumlah=jumlah+saldo D 800.000 2.200.000 4.200.000
T11 … … …
Tabel 3.2 Tabel Ilustrasi Masalah Analisa Yang Tidak Konsisten
Misal: Saldo B sebesar Rp. 500.000 Saldo C sebesar Rp. 500.000
Contoh kasus:
pada saat yang bersamaan ada rang nasabah, yakni nasabah A melakukan transaksi transfer saldo dari rekeningnya menuju rekening nasabah D sebesar Rp. 200.000. Padahal Transaksi yang dilakukan Teller 1 telah terlebih dahulu merekam nilai saldo Nasabah A pada awalnya yaitu sebesar Rp. 1.000.000.
Hal ini dapat terjadi karena disebabkan transaksi yang dijalankan oleh Teller 1 dapat membaca nilai saldo Nasabah A sebelum transaksi oleh Teller A selesai melakukan update.
Dapat diperhatikan, bahwa dengan tidak adanya concurrency control dalam database untuk akses bersama dapat mengakibatkan kesalahan data dalam menjumlahkan seluruh saldo nasabah bank sebesar Rp. 200.000
3.1.2. Sistem yang Dikembangkan
Sistem yang dibangun merupakan system yang didalamnya terdapat management transaksi berupa concurrency control untuk menjamin konsistensi data yang diakses secara bersama-sama oleh lebih dari satu user pada saat yang bersamaan. Oracle menggunakan sebuah protokol multiversion read consistency untuk menjamin kekonsistenan data untuk setiap user. Untuk itu, system yang dibangun akan mempresentasikan beberapa kemungkinan penanganan terhadap 2 masalah yang terjadi dengan beberapa pendekatan, yaitu :
1. Menggunakan jenis Oracle Isolation level yaitu SERIALIZABLE level pada pada awal transaksi.
i. Statement UPDATE pada diri sendiri sebelum melakukan statement SELECT jika sebuah transaksi berupaya untuk mengubah sebuah baris, merupakan sebuah cara untuk tetap menjaga kekonsistenan data pada baris yang dibaca.
Exclusive row-locks diberlakukan pada baris yang diakses, sedangkan row exclusive mode lock pada tabel yang diakses.
3.1.3. Requirement Analysis
Gambar 3.1 merupakan gambar use case diagram.
Login Teller
Logout Teller Mengakses Data Nasabah dengan Transaksi Penarikan
Tunai
Mengakses Data Nasabah dengan Transaksi Penyetoran
Tunai
Mengakses Data Nasabah dengan Transaksi Transfer
Saldo
Menghitung Total Saldo seluruh Nasabah
3.1.4. Data Modelling
Gambar 3.2 merupakan gambar ER Diagram
Jenis_transaksi
Nama_teller Nominal_kredit
Nasabah Jenis_transaksi
Teller
Nasabah Jenis_transaksi
Teller
3.1.5 Proses Modelling 3.1.5.1 Context Diagram
NIK, Password, No_rek, No_rek tujuan, Jenis_transaksi, Nominal_debet, Nominal_kredit
O Teller
Bank Sistem Aplikasi
untuk Teller Bank
Informasi status transaksi, informasi data nasabah, informasi data nasabah tujuan, informasi NIK tidak valid, informasi total saldo seluruh nasabah
Gambar 3.3 Context Diagram
3.1.5.2 Diagram Berjenjang
O
3.1.5.3 Data Flow Diagram
nformasi data nasabah, informasu status transaksi
I
Status Login, NIK tidak valid
Read No rek
Gambar 3.5 Data Flow Diagram
Teller
formasi data bah formasi Status Transaksi
Informasi data Nasabah, data Nasabah formasi data Nasabah
ata Transaksi
Write data Transaksi
k
formasi data nasabah, informasu status transaksi
Transaksi
formasi Status Transaksi
formasi data nasabah, informasu status transaksi
ead No_rek, No_rek_tujuan
ata Transaksi
formasi Status Transaksi
formasi data Nasabah ata Transaksi
3.2. Perancangan Sistem 3.2.1. Perancangan Database
Terdapat 4 tabel dalam database server, yaitu tabel Nasabah, Tabel Jenis_transaksi, Tabel Transaksi, dan Tabel Teller. Tabel Transaksi mencatat transaksi yang terjadiyang dilakukan oleh Teller Bank dalam melayani permintaan Nasabah. Gambar 3.6 merupakan relasi antar tabel-tabel yang ada dalam database:
Tabel Nasabah Tabel Jenis_transaksi
Tabel Transaksi
Tabel Teller * No_rekening
Nama_nasabah Alamat
No_telp
Tanda_pengenal No_buku_rek Kantor_cabang Total_saldo Id_nasabah
* Id_jenis transaksi jenis_transaksi
* Id_transaksi **Id_jenis_transaksi **No_rekening **NIK
Waktu
Nominal_debet Nominal_kredit Saldo
* NIK Nama Alamat
Kantor_cabang
Dari tabel-tabel yang terbentuk, berikut merupakan struktur datanya:
Tabel Nasabah:
Nama Field Tipe
PK. No_rekening Number(15)
Nama_nasabah Varchar2(50)
Tabel 3.3 Struktur Tabel Nasabah
Tabel Jenis_transaksi:
Nama Field Tipe
PK. Id_jenis_transaksi Number(2)
Nama_jenis_transaksi Varchar2(30)
Tabel 3. 4 Struktur Tabel Jenis Transaksi
Tabel Transaksi:
Nama Field Tipe
PK. Id_transaksi Int
FK. Id_jenis_transaksi Number(2) FK. No_rekening Number(15)
FK. NIK Number(5)
Waktu Date Nominal_debet Number(15) Nominal_kredit Number(15)
Saldo Number(15)
Tabel 3.5 Struktur Tabel Transaksi
Tabel Teller Bank:
BAB IV
IMPLEMENTASI SISTEM
4.1 Karakteristik Sistem
Setelah selesai merancang dan menganalisa sistem yang akan dibuat, dalam tahap ini akan dicoba bagaimana mengimplementasikan sistem kedalam aplikasi berupa simulasi untuk Teller Bank dalam mengakses rekening nasabah Bank.
Sistem yang dibangun dapat digunakan lebih dari 1 Teller Bank, atau secara multiuser, dalam suatu waktu. Implementasi Concurrency control dalam Oracle dibangun dengan menggunakan isolation level jenis SERIALIZABLE, dan juga memanfaatkan statemet-statement pada SQL seperti statement SELECT... FOR UPDATE dan statement UPDATE sebelum membaca data yang hendak diubah, sehingga dapat melindungi data, dan menghasilkan hasil yang sesungguhnya (valid) dan konsisten.
4.2 Kebutuhan Sistem Server
• Sistem operasi windows 2000 server atau windows 2003 server • Oracle 10g XE
Client
• Sistem operasi windows 98 atau windows 2000 atau windows XP • Net. Framework
4.3 Setting Koneksi Oracle 10g XE ke C#.Net
1. Untuk mengkoneksikan C#.net dengan database Oracle, diperlukan tambahan reference dari Oracle.DataAccess.dll, yang berisi penyedia data (sebagai data provider). Oracle.DataAccess.dll ini dapat ditemukan di tambahan reference pada Solution Explorer.
2. Dibutuhkan C# using statement untuk mengijinkan program c#.net untuk
menghubungi objek-objek database, seperti : using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
3. Objek OracleConnection menspesifikasikan database Oracle digunakan pada
aplikasi C#. Kemudian dibuat kelas Koneksi.cs yang mengatur
OracleConnection, sehingga dapat dipanggil setiap saat dalam setiap form
using Oracle.DataAccess.Client; using Oracle.DataAccess.Types;
public class Koneksi {
private static string con_str; public Koneksi()
{ }
static Koneksi() {
con_str = @"user id=grace;data source=;password=grace"; // Untuk koneksi ke database
}
public static string CON_STR
{
public static OracleConnection CON {
get {
return new OracleConnection(con_str); }
} }
4. Pada setiap form aplikasi yang membutuhkan koneksi terhadap database Oracle, dibutuhkan perintah berikut :
private OracleConnection conn = Koneksi.CON;
Perintah tersebut untuk memanggil kelas Koneksi.CON pada kelas
Oracle.DataAccess.Client.OracleConnection dengan menggunakan variable
conn.
5. Koneksi dengan Oracle database dapat dibuka ketika memanggil perintah berikut :
conn.Open();
6. Koneksi dengan Oracle database dapat ditutup dengan memanggil perintah berikut :
Berikut merupakan cara-cara membangun sebuah Oracle Data Provider untuk aplikasi C#.NET :
1. Kelas OracleCommand menspesifikasikan perintah SQL, stored procedure,
atau nama tabel. OracleCommand menciptakan sebuah permintaan terhadap
database, mengirimkannya dan mengembalikan hasilnya. Seperti pada perintah berikut :
string sql = "select * from Nasabah where No_rekening= '" +noRekText.Text+"'";
Perintah diatas berarti mespesifikasikan perintah SQL dalam sebuah variable sql bertipe data string. No_rekening diambil dari masukan pada TextBox noRekText oleh user.
2. Perintah berikut diperlukan untuk meng-query database :
cmd = new OracleCommand(sql, conn); cmd.CommandType = CommandType.Text;
3. DataSet diperlukan untuk mengisi hasil dari perintah query. Oleh karena itu,
diperlukan C# using statement berikut :
using System.Data;
4. Variable-variabel berikut dibawah ini digunakan untuk menggunakan kelas DataSet.
private OracleCommand cmd;
private OracleDataAdapter da;
private OracleCommandBuilder cb;
private DataSet ds;
5. Untuk memanggil variable-variabel tersebut, diperlukan perintah berikut :
6. Berikut merupakan perintah untuk mengisi DataSet ds dengan hasil dari
perintah query sebelumnya.
da.Fill(ds);
7. Berikut merupakan perintah untuk mengikat dataset ke data grid Nasabah.
Nasabah.DataSource = ds.Tabels[0];
4.4 Pembuatan Antar Muka Pemakai (User interface) 4.4.1. User interface Form Utama
Gambar 4.1 merupakan gambar user interface dari Form Utama
Gambar 4.1 Form Utama
implementasi concurrency control. Masing-masing pilihan akan menuju Form Login Teller Bank.
4.4.2 User interface Form Login Teller Bank
Gambar 4.2 merupakan gambar user interface dari Form Login Teller Bank untuk aplikasi tanpa concurrency control.
Gambar 4.3 merupakan gambar user interface dari Form Login Teller Bank untuk aplikasi dengan concurrency control.
Gambar 4.3 Form Login Teller Bank untuk Aplikasi Dengan Concurrency control
private void okButton_Click(object sender, System.EventArgs e) {
try {
conn.Open();
string query = "Select * from Teller_bank Where nik = '" +nikText.Text.Trim()+"'"; OracleCommand comd = new OracleCommand(query,conn); OracleDataReader reader = comd.ExecuteReader();
if(reader.HasRows) {
reader.Read();
if(nikText.Text.Trim()==reader.GetString(0)&& namaTellerText.Text.ToUpper()==reader.GetString(1))
// GetString(0) berdasarkan field di Tabel Teller, 0 untuk NIK, 1 untuk Nama_Teller, 2 untuk Alamat, 3 untuk
Kantor_cabang
namaTellerText.Clear();
MessageBox.Show("Nama Teller atau NIK Salah"); nikText.Focus();
MessageBox.Show("Nama Teller dan NIK Salah"); namaTellerText.Focus();
} }
catch (OracleException ex) {
MessageBox.Show(ex.ToString()); }
catch(Exception e1) {
4.4.3 User interface Menu Utama
Gambar 4.4 merupakan gambar user interface Menu Utama untuk aplikasi tanpa concurrency control.
Gambar 4.5 merupakan gambar user interface Menu Utama untuk aplikasi dengan concurrency control.
Gambar 4.5 Form Menu Utama untuk Aplikasi Dengan Concurrenc Control
private void lanjutButton_Click(object sender, System.EventArgs e) {
try
{
conn.Open();
string query = "Select * from Nasabah Where No_Rekening = '" +noRekText.Text.Trim()+"'";
OracleCommand cmd = new OracleCommand(query,conn); OracleDataReader reader = cmd.ExecuteReader(); if(reader.HasRows)
{
if (penarikanRB.Checked) {
string sql = " select * from jenis_transaksi where id_jenis_transaksi = 1";
OracleCommand comd2 = new OracleCommand(sql, conn);
OracleDataReader reader2 = comd2.ExecuteReader();
da = new OracleDataAdapter(comd2); cb = new OracleCommandBuilder(da);
ds = new DataSet();
da.Fill(ds);
Jenis_transaksi.DataSource = ds.Tabels[0];
DataGridCell dgcJenis_transaksi =
Jenis_transaksi.CurrentCell;
idJenisTransaksiText.Text =
Jenis_transaksi[dgcJenis_transaksi.RowNumber,0].ToString();
form1.idJenisTransaksiText.Text =
idJenisTransaksiText.Text;
form1.noRekText = noRekText;
form1.nikText = nikText2;
//berikut perintah untuk menampilkan FormPenarikan
DialogResult result = form1.ShowDialog();
penarikanRB.Checked=false; }
}
else if(penyetoranRB.Checked) {
string sql = " select id_jenis_transaksi from jenis_transaksi where id_jenis_transaksi = 2";
OracleCommand comd2 = new OracleCommand(sql, conn); OracleDataReader reader2 = comd2.ExecuteReader(); da = new OracleDataAdapter(comd2);
cb = new OracleCommandBuilder(da);
ds = new DataSet();
da.Fill(ds);
Jenis_transaksi.DataSource = ds.Tabels[0];
DataGridCell dgcJenis_transaksi =
Jenis_transaksi.CurrentCell;
idJenisTransaksiText.Text =
Jenis_transaksi[dgcJenis_transaksi.RowNumber,0].ToString(); if (reader.HasRows)
{
this.Hide();
//memanggil FormPenyetoran()
FormPenyetoran form2 = new FormPenyetoran();
form2.idJenisTransaksiText = idJenisTransaksiText;
form2.noRekText = noRekText;
form2.nikText = nikText2;
//berikut perintah untuk menampilkan FormPenyetoran
DialogResult result = form2.ShowDialog();
penyetoranRB.Checked=false; }
else if (transferSaldoRB.Checked) {
string sql = " select id_jenis_transaksi from jenis_transaksi where id_jenis_transaksi = 3";
OracleCommand comd2 = new OracleCommand(sql, conn); OracleDataReader reader3 = comd2.ExecuteReader();
da = new OracleDataAdapter(comd2); cb = new OracleCommandBuilder(da);
ds = new DataSet();
da.Fill(ds);
Jenis_transaksi.DataSource = ds.Tabels[0];
DataGridCell dgcJenis_transaksi =
Jenis_transaksi.CurrentCell;
idJenisTransaksiText.Text =
Jenis_transaksi[dgcJenis_transaksi.RowNumber,0].ToString();
if (reader.HasRows) {
this.Hide();
//memanggil FormTransferSaldo1()
FormTransferSaldo1 form3 = new FormTransferSaldo1();
form3.idJenisTransaksiText = idJenisTransaksiText;
form3.noRekText = noRekText;
form3.nikText = nikText2;
//berikut perintah untuk menampilkan FormTransferSaldo1
DialogResult result = form3.ShowDialog();
transferSaldoRB.Checked=false; }
}
else if (totalSaldoRB.Checked) {
string sql = " select id_jenis_transaksi from jenis_transaksi where id_jenis_transaksi = 4";
OracleCommand comd2 = new OracleCommand(sql, conn); OracleDataReader reader4 = comd2.ExecuteReader();
da = new OracleDataAdapter(comd2); cb = new OracleCommandBuilder(da);
ds = new DataSet();
da.Fill(ds);
Jenis_transaksi.DataSource = ds.Tabels[0];
DataGridCell dgcJenis_transaksi =
Jenis_transaksi.CurrentCell;
idJenisTransaksiText.Text =
if (reader.HasRows) {
this.Hide();
//memanggil FormTotalSaldo()
FormTotalSaldo form4 = new FormTotalSaldo();
form4.idJenisTransaksiText = idJenisTransaksiText;
DialogResult result = form4.ShowDialog();
totalSaldoRB.Checked=false; }
}
else {
MessageBox.Show(" Silakan memilih Jenis Transaksi", "Jenis Transaksi diperlukan", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
} else {
noRekText.Clear();
MessageBox.Show("No Rekening tidak ada, masukan salah"); noRekText.Focus();
} }
4.4.4. User interface Form Transaksi Penarikan Tunai
Gambar 4.6 merupakan gambar user interface Form Transaksi Penarikan Tunai untuk aplikasi tanpa concurrency control.
Gambar 4.7 merupakan gambar user interface Form Transaksi Penarikan Tunai untuk aplikasi dengan concurrency control
Gambar 4.7 Form Transaksi Penarikan Tunai untuk Aplikasi Dengan Concurrency Control
private void FormPenarikan_Load(object sender, System.EventArgs e) {
// Untuk data nasabah ybs
conn.Open();
string sql = "select * from Nasabah where No_rekening= '" +noRekText.Text+"'";
cmd = new OracleCommand(sql, conn);
cmd.CommandType = CommandType.Text;
da = new OracleDataAdapter(cmd); cb = new OracleCommandBuilder(da);
ds = new DataSet();
da.Fill(ds);
Nasabah.DataSource = ds.Tabels[0];
DataGridCell dgcNasabah = Nasabah.CurrentCell;
noRekText2.Text = Nasabah[dgcNasabah.RowNumber,0].ToString(); noRekText2.ReadOnly = true;
namaText.Text = Nasabah[dgcNasabah.RowNumber,1].ToString(); namaText.ReadOnly = true;
alamatText.Text = Nasabah[dgcNasabah.RowNumber,2].ToString(); alamatText.ReadOnly = true;
noTelpText.Text = Nasabah[dgcNasabah.RowNumber,3].ToString(); noTelpText.ReadOnly = true;
tandaPengenalText.Text =
Nasabah[dgcNasabah.RowNumber,4].ToString(); tandaPengenalText.ReadOnly = true;
noBukuRekText.Text = Nasabah[dgcNasabah.RowNumber,5].ToString(); noBukuRekText.ReadOnly = true;
kantorCabangText.Text =
Nasabah[dgcNasabah.RowNumber,6].ToString(); kantorCabangText.ReadOnly = true;
saldoSebelumText.Text =
Nasabah[dgcNasabah.RowNumber,7].ToString(); saldoSebelumText.ReadOnly = true;
conn.Close();
//untuk data Teller
conn.Open();
string sql1 = "select * from Teller_bank where nik= '" +nikText.Text+"'";
cmd1 = new OracleCommand(sql1, conn);
cmd1.CommandType = CommandType.Text;
da1 = new OracleDataAdapter(cmd1); cb1 = new OracleCommandBuilder(da1);
ds1 = new DataSet();
da1.Fill(ds1);
teller_bank.DataSource = ds1.Tabels[0];
DataGridCell dgcteller_bank = teller_bank.CurrentCell;
nikText2.Text =
teller_bank[dgcteller_bank.RowNumber,0].ToString();
conn.Close();
Form Penarikan Tunai ini memerlukan data masukan berupa Jumlah Nominal Penarikan Tunai. Transaksi Penarikan Tunai akan diproses begitu user menekan tombol Lanjut. Berikut merupakan perintah yang digunakan ketika user menekan tombol Lanjut/OK :
private void okButton_Click(object sender, System.EventArgs e) {
string PesanError = "Masukan nominal transaksi >= total saldo. Transaksi ditolak. Silahkan isi nominal transaksi kembali...";
try {
conn.Open();
// UNTUK PANGGIL PROSEDUR
OracleCommand cmd2 = new OracleCommand();
cmd2.Connection = conn;
//Panggil prosedur transaksi_penarikan_tunai
cmd2.CommandText = "CC3a_transaksi_penarikan";
cmd2.CommandType = CommandType.StoredProcedure;
cmd2.Parameters.Add("p_no_rekening", OracleDbType.Int32).Value = ""+noRekText.Text;
cmd2.Parameters.Add("p_nik", OracleDbType.Varchar2).Value = ""+nikText.Text;
cmd2.Parameters.Add("p_nominal_debet", OracleDbType.Int64). Value = ""+nominalDebetText.Text;
OracleParameter error =
cmd2.Parameters.Add("pesan_error",OracleDbType.Varchar2);
error.Direction = ParameterDirection.Output;
cmd2.ExecuteReader(); this.Hide();
//memanggil FormPenarikan()
FormHasilTransaksi_penarikan form1 = new FormHasilTransaksi_penarikan();
form1.noRekText = noRekText;
//berikut perintah untuk menampilkan FormHasilTransaksi
DialogResult result = form1.ShowDialog();
}
catch (OracleException) {
MessageBox.Show(PesanError, "Transaksi dibatalkan", MessageBoxButtons.OK, MessageBoxIcon.Information);
nominalDebetText.Clear(); }
catch {
MessageBox.Show(" Silakan memasukkan jumlah nominal penarikan tunai", "Nominal penarikan tunai diperlukan", MessageBoxButtons.OK, MessageBoxIcon.Information);
Ketika tombol Lanjut/OK ditekan, terdapat 3 parameter variable yang dipassingkan kedalam sebuah procedure bernama cc3a_transaksi_penarikan, yaitu p_no_rekening, p_nik, dan p_nominal_debet. Terdapat 1 parameter keluaran berupa pesan_error jika didapati jumlah masukan nilai nominal transaksi penarikan lebih besar dari total saldo nasabah. Masing-masing parameter diambil berdasarkan nilai yang direkam/ nilai yang terdapat pada masing-masing textbox berdasarkan data masukan terdahulu yang dimasukkan oleh user. ExecuteNonQuery() diperlukan untuk menjalankan procedure jika result setnya lebih besar dari 1. Ketika procedure dipanggil dan dijalankan, form ini kemudian ditutup dan menuju form berikutnya yaitu Form Hasil Transaksi Penarikan.
Berikut merupakan procedure penarikan tunai menggunakan PL/SQL:
create or replace procedure CC3a_transaksi_penarikan (
p_no_rekening in nasabah.no_rekening%type, p_nik in teller_bank.nik%type,
p_nominal_debet in transaksi.nominal_debet%type, pesan_error out varchar2
)
-- procedure CC3a_transaksi_penarikan untuk mempresentasikan concurrency control menggunakan select for update
as
p_total_saldo nasabah.total_saldo%type; begin
-- untuk melihat total_saldo, dengan maksud mengunci total_saldo nasabah untuk menjamin konsistensi data
select total_saldo into p_total_saldo from nasabah where no_rekening = p_no_rekening for update; if p_nominal_debet >= p_total_saldo then
pesan_error := 'transaksi gagal'; rollback;
end if;
user_lock.sleep(1000);
p_total_saldo := p_total_saldo - p_nominal_debet; -- untuk meng-update total_saldo dalam tabel nasabah
-- untuk meng-insert transaksi yang berlangsung
insert into transaksi (id_transaksi, no_rekening, nik, id_jenis_transaksi, waktu, nominal_debet, nominal_kredit)
values (id_transaksi_seq.nextval, p_no_rekening, p_nik, 1, sysdate, p_nominal_debet, 0); commit;
end CC3a_transaksi_penarikan;
Procedure bernama cc3a_transaksi_penarikan ini memiliki 3 parameter masukan, yaitu p_no_rekening, p_nik dan p_nominal_debet, dan 1 parameter keluaran berupa pesan_error. Untuk menjalankan konsistensi baca dalam level baca, maka teknik penanganan concurrency control dalam transaksi ini dengan menggunakan statement SELECT … FROM tabel … FOR UPDATE. Statement ini dapat menjaga data yang dibaca agar tidak diubah selama proses pembacaan. Hal ini digunakan untuk menjamin bahwa data tidak diubah selama proses pembacaan karena sebuah Exclusive row-locks diberlakukan pada baris yang dimaksud. Perintah ini juga mengandung row share lock mode pada tabel Nasabah.
4.4.5. User interface Form Transaksi Penyetoran Tunai
Gambar 4.8 merupakan gambar user interface Form Transaksi Penyetoran Tunai untuk aplikasi tanpa concurrency control.
Gambar 4.9 merupakan gambar user interface Form Transaksi Penyetoran Tunai untuk aplikasi dengan concurrency control.
Gambar 4.9 Form Transaksi Penyetoran Tunai untuk Aplikasi Dengan Concurrency control