• Tidak ada hasil yang ditemukan

IMPLEMENTASI CONCURRENCY CONTROL DALAM DATABASE ORACLE 10G UNTUK MULTIUSER MENGGUNAKAN ORACLE PLSQL (Contoh Kasus : Aplikasi Berupa Simulasi Untuk Teller Bank dalam Mengakses Rekening Nasabah Bank)

N/A
N/A
Protected

Academic year: 2019

Membagikan "IMPLEMENTASI CONCURRENCY CONTROL DALAM DATABASE ORACLE 10G UNTUK MULTIUSER MENGGUNAKAN ORACLE PLSQL (Contoh Kasus : Aplikasi Berupa Simulasi Untuk Teller Bank dalam Mengakses Rekening Nasabah Bank)"

Copied!
152
0
0

Teks penuh

(1)

(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

(2)

(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

(3)
(4)
(5)

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

(6)

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

(7)

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 ”

(8)

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.

(9)

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.

(10)

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.

(11)

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.

(12)

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,

(13)

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……….

(14)

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………...

(15)
(16)
(17)

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

(18)

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

(19)

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

(20)

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.

(21)

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:

(22)

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.

(23)

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.

(24)

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.

(25)

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

(26)

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

(27)

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.

(28)

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

(29)

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.

(30)

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

(31)

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

(32)

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

(33)

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.

(34)

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

(35)

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;

(36)

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.

(37)

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).

(38)

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;

(39)

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

(40)

/ 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

(41)

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:

(42)

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;

(43)

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

(44)

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.

(45)

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

(46)

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

(47)

BAB III

ANALISA PERMASALAHAN

DAN PERANCANGAN SISTEM

3.1 Analisa Permasalahan

3.1.1 Permasalahan-permasalahan yang Timbul jika Tidak Terdapat Penanganan Concurrency control

(48)

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.

(49)

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:

(50)

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.

(51)

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.

(52)

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

(53)

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

(54)

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

(55)

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

(56)

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

(57)

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:

(58)

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.

(59)

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

(60)

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 :

(61)

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 :

(62)

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

(63)

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.

(64)

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

(65)

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) {

(66)

4.4.3 User interface Menu Utama

Gambar 4.4 merupakan gambar user interface Menu Utama untuk aplikasi tanpa concurrency control.

(67)

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

(68)

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; }

(69)

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 =

(70)

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();

} }

(71)

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.

(72)

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

(73)

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();

(74)

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);

(75)

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

(76)

-- 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.

(77)

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.

(78)

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

Gambar

Tabel 2.3 berikut ini merupakan operator-operator dalam PL/SQL:
Tabel 2.3 Berbagai Operator PL/SQL
Tabel 3.2 merupakan tabel ilustrasi masalah Analisa Yang Tidak Konsisten
Gambar 3.1 merupakan gambar use case diagram.
+7

Referensi

Dokumen terkait