IMPLEMENTASI CONCURENCY CONTROL UNTUK APLIKASI MULTIUSER MENGGUNAKAN DATABASE SQL SERVER. Wiwi Widayani STMIK AMIKOM Yogyakarta

dokumen-dokumen yang mirip
IMPLEMENTASI CONCURENCY CONTROL UNTUK APLIKASI MULTIUSER MENGGUNAKAN DATABASE SQL SERVER Wiwi Widayani

Administrasi Basis Data. Transaksi dan Lock. Yoannita

Concurrency Control Semester Ganjil 2014 Fak. Teknik Jurusan Teknik Informatika. Caca E. Supriana, S.Si.,MT. Si

Transaction & Conccurency

SISTEM BASIS DATA 2. WAHYU PRATAMA, S.Kom., MMSI.

Kusnawi, S.Kom, M.Eng

Gambar Layar pertama untuk pemecahan masalah Lost Update

Transaksi. by: Ahmad Syauqi Ahsan

Pertemuan IX MANAJEMEN TRANSAKSI

Manajemen Transaksi. Sistem Basis Data. Gentisya Tri Mardiani, S.Kom., M.Kom

Distributed System. 8 Management Transaksi. Genap 2011/2012. Dahlia Widhyaestoeti, S.Kom dahlia74march.wordpress.

Modul Praktikum Sistem Basis Data 2010

BAB V CURSOR AND RESULT SETS

SISTEM MONITORING PELANGGAN PASCABAYAR DAN PRABAYAR TBT MENERAPKAN MANAJEMEN TRANSAKSI MENGGUNAKAN METODE TWO PHASE LOCKING

Cursor. M. Saefudin SKom, MMSI

LAMPIRAN. 1) Membuat database baru untuk menampung data warehouse, yang bernama

Transaction dan Trigger. M. Saefudin SKom, MMSI

BAB 4 IMPLEMENTASI DAN EVALUASI

BAB 1 PENDAHULUAN. satu hal yang sangat dominan dan terjadi dengan sangat pesat. Informasi

STORE PROCEDURE. Pemrograman Client Server Sarji, S.Kom Studi kasus pada

Manajemen Transaksi. Praktikum Sistem Basis Data. Gentisya Tri Mardiani, S.Kom., M.Kom

Manajemen Transaksi (Penjadwalan & Kontrol konkurensi)

MENAMPILKAN DATA MENGGUNAKAN SQL SELECT

Distributed System. 9 Concurrency Control. Genap 2011/2012. Dahlia Widhyaestoeti, S.Kom dahlia74march.wordpress.

STRUCTURE QUERY LANGUAGE (SQL)

Transaksi Semester Ganjil 2014 Fak. Teknik Jurusan Teknik Informatika. Caca E. Supriana, S.Si.,MT. Si

Praktikum TRANSACT SQL. Tujuan : Praktikan mampu untuk mengerti dan memahami Transact-SQL

BAB V IMPLEMENTASI DAN PENGUJIAN

MUKADDIMAH TEORI ASUMSI TABEL. CREATE TABLE contoh ( kode CHAR(5), nama VARCHAR(50) )

MANAJEMEN TRANSAKSI. Alif Finandhita, S.Kom

TRIGGER TRIGGER 5/29/2017 HANI IRMAYANTI, S.KOM

Manajemen Transaksi. Sistem Basis Data. Gentisya Tri Mardiani, S.Kom

BAB IV IMPLEMENTASI DAN PENGUJIAN

Transaction & Conccurency

SQL (Structure Query Language) Gentisya Tri Mardiani, S.Kom

Pertemuan IV CONDITION & HANDLER CURSOR

MODUL 10 TRANSACTION

Administrasi Basis Data. Yoannita

Pemrograman Web. Koneksi dan Manipulasi Basis Data. 7 Adam Hendra Brata

Agenda SQL. Pemakai SQL. Kemampuan SQL 02/12/2010 STRUCTURED QUERY LANGUAGE (SQL) Structured Query Language (SQL) (Pert. 9)

Pertemuan V FLOW CONTROL

Stored Procedure. M. Saefudin SKom, MMSI

Mengenal MySQL Stored Procedure

BAB 3 ANALISIS DAN PERANCANGAN SISTEM

Pertemuan VI F U N C T I O N

LINGKUNGAN DATABASE Baca R Modifikasi R -

CONSTRAINT clients_client_num_pk PRIMARY KEY (client_number));

sistem basis data ti ti ukdw Transaksi Budi Susanto Teknik Informatika Universitas Kristen Duta Wacana Yogyakarta 11/14/11 budi susanto 1

SISTEM BASIS DATA 1. WAHYU PRATAMA, S.Kom., MMSI.

BAB 4 IMPLEMENTASI DAN EVALUASI. maka diperlukan suatu jaringan LAN yang terhubung antara komputer yang satu

Transact-SQL (Trigger- Event, Store Procedure)

MANAGEMEN TRANSAKSI. Ferdi Yusuf #1

PENGONTROLAN BERBASIS KOMPUTER

Untuk mencoba contoh-contoh perintah join, silahkan eksekusi query create+insert dibawah ini:

Manajemen Transaksi A. Konsep Transaksi 1. Membuat Tabel account dengan type Innodb

UNIVERSITAS BINA NUSANTARA. Jurusan Teknik Informatika Skripsi Sarjana Komputer Semester Ganjil tahun 2006/2007

PENGENALAN MICROSOFT QUERY ANALYZER

MySQL AL AZHAR COMPUTER CLUB

SISTEM BASIS DATA By Novareza Klifartha

Basis Data. Bagian IV SQL (3) Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan

Modul 6 Function dan Trigger

DATABASE CONTROL 1. SECURITY DATABASE. Suzan Agustri 81

Contoh 3.1: Membuat suatu store procedure supaya menghapus semua pertandingan pemain berdasarkan nomor pemain yang ditentukan.

Transaksi dan Data Integrity

Tambahkan kolom JKEL dengan panjang 1 char pada tabel MHS, maka Syntax SQL adalah...

Praktikum MONITORING AND RESOLVING LOCK CONFLICTS. Tujuan :

LINGKUNGAN BASIS DATA

TRIGGER. Tujuan Mata Kuliah. Tools yang digunakan. Sesi7 : TRIGGER. Praktikum Pemrograman Client Server Database Hadi Kusumah, S.T.

Mekanisme Penanganan Deadlock Dalam Pemrosesan Transaksi Oleh DBMS Menggunakan Algoritma Backtracking

DATA DEFINITION LANGUAGE (DDL)

Pemrograman Web. Koneksi dan Manipulasi Basis Data. Adam Hendra Brata

Introduction to SQL. Database Programming. 2 nd Chapter

Basis Data Relational

TUGAS 1 PRAKTIKUM SISTEM BASIS DATA

Pemrograman Web. Koneksi dan Manipulasi Basis Data. 7 Adam Hendra Brata

Oracle dengan Visual Basic. Arif Basofi Politeknik Elektronika Negeri Surabaya ITS 2012

INTERNET PROGRAMMING DATABASE

3.1 Form Wizard. 3. Pilihlah menu use data block wizard dan tekanlah button OK, maka akan tampil window di bawah ini.

Basis Data II. Pertemuan Ke-9 dan ke-10 (Stored Procedure dan Trigger) Noor Ifada S1 T. Informatika - UTM (2012) 1

BAB 6 PROGRAM UNITS DAN STRORED PROGRAMS UNITS

Stored Procedures, Function, Trigger, Dynamic SQL, Cursor. Introduction SMART DATABASE

DATABASE RUMAH SAKIT 1. Objek yang dipakai a. Pasien b. Dokter c. Ruang d. Petugas e. Rawat_inap f. Pembayaran

LAMPIRAN VARCHAR (6) NOT NULL, NUMERIC (10,2) NOT NULL, CONSTRAINT CK_harga CHECK (harga>= and harga<= ),

Praktikum Basis Data 2017 TE UM MODUL 8 TRIGGER A. TUJUAN

PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

PRAKTIKUM PL/SQL (Trigger) OLEH : WIRATMOKO YUWONO, ST

Perintah MySQL Lanjutan

MODUL 4 INTERNET PROGRAMMING DATABASE

1. Kompetensi Memahami Store Procedure dan Function yang tidak lain merupakan perintahperintah SQL yang diletakkan di dalam server database.

Penguncian pada Concurrency Control

Basis Data Spasial Modul 2

Persiapan Table Untuk Latihan Sebelum kita berkenalan lebih jauh dengan Trigger, mari kita buat terlebih dahulu, struktur table yang dibutuhkan.

5/6/2010 KONSTRUK PROGRAM PL/SQL PROSEDUR STRUKTUR BLOK PADA BLOK ANONIM PL/SQL OVERVIEW MENGENAI SUBPROGRAM STRUKTUR BLOK PADA SUBPROGRAM PL/SQL

P - 7 Pembahasan UTS PSIK V

BAB III METODE PENELITIAN. sistem yang digunakan untuk menggambarkan aliran data secara keseluruhan

BAB II LANDASAN TEORI

Program Studi: Manajemen Bisnis Telekomunikasi & Informatika Mata Kuliah: Data Management Oleh: Yudi Priyadi ( DATA MANAGEMENT OVERVIEW )

BAB I PENDAHULUAN. Perkembangan teknologi telah berkembang dengan sangat. pesat dan banyak terdapat layanan jasa informasi sampai penjualan

Contoh Aplika Aplik si a VB dengan Database Oracle 1

DESAIN DATABASE. Pertemuan 06 3 SKS

Transkripsi:

IMPLEMENTASI CONCURENCY CONTROL UNTUK APLIKASI MULTIUSER MENGGUNAKAN DATABASE SQL SERVER Wiwi Widayani STMIK AMIKOM Yogyakarta Abstraksi Permasalahan yang terjadi pada aplikasi untuk multiuser yaitu akses bersama yang dilakukan oleh beberapa user pada waktu yang bersamaan pada database dapat menyebabkan data yang tidak konsisten.diperlukan sebuah penanganan berupa Concurrency Control untuk melindungi data dari akses secara simultan oleh multiuser. Implementasi Concurrency Control akan dilakukan dalam database SQL Server untuk multiuser dalam suatu aplikasi untuk end user berupa aplikasi simulasi untuk Teller Bank dalam mengakses rekening Nasabah Bank. Kata Kunci :Concurrency Control, SQL Server,Multiuser,konsisten 1. Pendahuluan Permasalahan yang terjadi pada aplikasi untuk multiuser yaitu akses bersama yang dilakukan oleh beberapa user pada waktu yang bersamaan pada database dapat menyebabkan data yang tidak konsisten.diperlukan sebuah penanganan berupa Concurrency Control untuk melindungi data dari akses secara simultan oleh mutliuser. Implementasi Concurrency Control akan dilakukan dalam database SQL Server untuk multiuser dalama suatu aplikasi untuk end user berupa aplikasi untuk Teller Bank dalam mengakses rekening Nasabah Bank. Aplikasi yang dipakai hanya berupa simulasi bukan merupakan program utuh. 121

1.1 Concurrency control Concurrency Control adalah proses pengelolaan operasi-operasi yang berjalan bersamaan dalam database dengan tidak saling menggangu satu sama lain. Kebutuhan Concurrency Control dalam management transaksi untuk multiuser menjadi penting, mengingat sistem untuk multiuser memungkinkan terjadinya akses bersama terhadap sebuah database. Akses bersama relative mudah jika seluruh user hanya membaca data, sehingga tidak ada yang melakukan interfensi satu dengan lainnya. Akan tetapi, pada saat dua atau lebih user mengakses database secara simultan dan paling sedikit satu user melakukan update, maka akan terjadi interfensi yang dapat mengakibatkan ketidakkonsistenan data pada database. 1.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). 2) Uncommited dependency problem / dirty real (Masalah kebergantungan terhadap transaksi yang belum commit). 3) Inconsistent analiysisn problem (masalah analisa yang tidak konsisten). 4) Nonrepeteable (atau fuzzy) read. 5) Phantom read. 1.3 Level-Level Isolasi SQL Server memberikan empat level isolasi. Level isolasi adalah setting yang menentukan level sebuah transaksi menerima data yang tidak konsisten, yaitu tingkatan sebuah transaksi diisolasi dari transaksi lain. Semakin tinggi tingkat isolasi semakin tinggi keakuratan data. Level isolasi yang kita pakai menentukan perilaku lock untuk semua perintah SELECT yang dilakukan. Level-Level 122

isolasi dari terendah sampai tertinggi adalah : Read Uncommitted, Read Committed, Repeatable Read Dan Serializable. READ UNCOMMITTED. Level isolasi terendah, pada level ini transaksi diisolasi hanya untuk menjadi data yang rusak secara fisik tidak dapat dibaca (Read Only). READ COMMITTED. Level default dari SQL Server. Pada level ini pembacaan data diperbolehkan hanya pada data yang telah di-commit. Data yang telah di-commit adalah data yang merupakan bagian permanent dari database. Pada level ini data yang masih belum di-commit (masih dipakai oleh transaksi) tidak dapat dibaca. REPEATABLE READ. Pembacaan berulang pada data yang dipakai oleh sebuah transaksi akan menghasilkan data yang sama. SERIALIZABLE. Level tertinggi isolasi. Transaksi terisolasi dari transaksi lainnya. Hasil yang diperoleh dari transaksi konkuren pada sebuah database sama dengan jika transaksi dijalankan secara serial (satu per satu). Dirty Read Nonrepeateable read Phantom read Read Uncommitted Ya Ya Ya Read committed Tidak Ya Ya Repeatable Read Tidak Ya Tidak Serializable Tidak Tidak tidak Level Isolasi Transaksi 1.4 Batasan masalah Dalam mengimplementasikan concurrency control pada aplikasi simulasi teller bank, dilakukan batasan sebagai berikut: Database diasumsikan database terpusat (centralized database) Analisa pengujian masalah hanya mencakup Lost update problem (Masalah hilangnya data yang diupdate) dan 123

Inconsistent analiysis problem (masalah analisa yang tidak konsisten) 2. Pembahasan 2.1 Data Modelling Alamat Nama_Nasabah Id_Nasabah Id_Jenis_Transaksi No_Rekening Nominal_Kredit Id_Jenis_Transaksi No_Rekening Jenis_Transaksi No_Telepon Nasabah (, N) Transaksi (, N) Jenis_Transaksi Oleh Total_Saldo Id_Transaksi NIK Tanda Pengenal Kantor_Cabang No_buku_rekening Nominal_Debet (1, 1) Waktu Saldo NIK Kantor_Cabang Entity Relationship Diagram Alamat Teller Nama_Teller 2.2 Pengujian Aplikasi Pengujian dilakukan menggunakan 2 aplikasi tanpa concurrency control yaitu penarikan tunai dan penyetoran tunai yang dijalankan bersama-sama dan 2 aplikasi dengan concurrency yaitu penarikan tunai dan penyetoran tunai yang dijalankan bersama-sama, masingmasing memiliki delay waktu selama 1 detik. Dengan adanya delay maka aplikasi yang berjalan dapat dibuat bertabrakan. Delay ditentukan dalam setiap procedure yang dipakai. WAITFOR DELAY ::1 Pengujian terhadap 2 aplikasi yang dijalankan bersamaan (bertubrukkan) akan merepresentasikan 2 masalah utama yaitu : Masalah hilangnya data yang diubah (Lost of Update). Sebagai contoh digunakan, transaksi penarikan tunai dan penyetoran tunai. 124

Masalah analisa yang tidak konsisten (Inconsistent analiysis problem) Masalah hilangnya data yang diubah (Lost of Update) Transaksi Penarikan Tunai dilakukan terhadap nasabah dengan no rekening 11 sebesar Rp.2. Transaksi Penyetoran tunai juga dilakukan terhadap nasabah dengan no rekening 11 sebesar Rp.1. Jumlah saldo nasabah dengan no rekening 11 adalah Rp.15. Transaksi sama-sama dieksekusi, transaksi penyetoran dieksekusi terlebih dahulu, kemudian transaksi penarikan tunai berikutnya. Tanpa Concurrency Control Transaksi penyetoran tunai lebih dulu selesai dengan keluaran saldo Rp.17 untuk no rekening 11 dari saldo awal Rp.15 + penyetoran Rp.2, kemudian transaksi penarikan tunai selesai dengan keluaran saldo terakhir Rp.14 untuk rekening 1 dari saldo awal Rp 15- penarikan Rp.1. Dengan demikian, tampak hilangnya data yang diubah oleh transaksi penyetoran tunai sebesar Rp.2. Karena seharusnya data Saldo nasabah terakhir adalah Rp.15 + Rp.2 Rp.1 = Rp. 16 Tabel berikut menunjukkan proses yang terjadi pada pengujian aplikasi tanpa concurrency control terhadap masalah hilangnya data yang diubah. Wa ktu t 1 t 2 Transaksi penyetoran Transaksi penarikan Total Saldo SELECT @total_saldo 15 = total_saldo FROM nasabah WHERE no_rekening= 11 SELECT @total_saldo 15 Delay = total_saldo FROM nasabah WHERE 125

t 3 SET @total_saldo = @total_saldo + @nominal_kredit t 4 UPDATE Nasabah SET total_saldo=@total_sal do WHERE no_rek= 11 t 5 no_rekening= 11 Delay SET @total_saldo = @total_saldo - @nominal_debet UPDATE Nasabah SET total_saldo=@total_sal do WHERE no_rek= 11 15 17 14 Proses yang terjadi pada pengujian aplikasi tanpa concurrency control - terhadap masalah hilangnya data yang diubah Procedure Penarikan Tunai Tanpa Concurrency : CREATE PROCEDURE SP_PENARIKAN_TUNAI_TC ( @NO_REKENING CHAR(5), @NIK CHAR(5), @NOMINAL_DEBET INT) AS DECLARE @PESAN_SALAH VARCHAR(5), @TOTAL_SALDO INT TRAN SELECT @TOTAL_SALDO=TOTAL_SALDO FROM NASABAH WHERE NO_REKENING=@NO_REKENING IF @NOMINAL_DEBET>=@TOTAL_SALDO PRINT 'TRANSAKSI GAGAL' ROLLBACK TRAN END 126

ELSE WAITFOR DELAY '::1' SET @TOTAL_SALDO=@TOTAL_SALDO @NOMINAL_DEBET UPDATE NASABAH SET TOTAL_SALDO = @TOTAL_SALDO WHERE NO_REKENING = @NO_REKENING INSERT INTO TRANSAKSI(ID_JENIS_TRANSAKSI, NO_REKENING, NIK, WAKTU, NOMINAL_DEBET, NOMINAL_KREDIT)VALUES('2',@NO_REKENING,@NIK, GETDATE(),@NOMINAL_DEBET,) COMMIT TRAN END Procedure Penyetoran Tunai Tanpa Concurrency : CREATE PROCEDURE SP_PENYETORAN_TUNAI_TC( @NO_REKENING CHAR(5),@NIK CHAR(5), @NOMINAL_KREDIT INT) AS DECLARE @TOTAL_SALDO INT TRAN SELECT @TOTAL_SALDO=TOTAL_SALDO FROM NASABAH WHERE NO_REKENING=@NO_REKENING WAITFOR DELAY '::1' SET @TOTAL_SALDO = @TOTAL_SALDO + @NOMINAL_KREDIT UPDATE NASABAH SET TOTAL_SALDO=@TOTAL_SALDO WHERE NO_REKENING=@NO_REKENING INSERT INTO TRANSAKSI(ID_JENIS_TRANSAKSI,NO_REKENING,NIK,WA KTU, 127

NOMINAL_DEBET, NOMINAL_KREDIT) VALUES ('1', @NO_REKENING, @NIK, GETDATE(),, @NOMINAL_KREDIT) COMMIT TRAN Dengan Concurrency Control Transaksi penyetoran tunai lebih dulu selesai dengan keluaran saldo Rp.17 untuk no rekening 11 dari saldo awal Rp.15 + Rp.2, kemudian transaksi penarikan tunai selesai dengan keluaran saldo terakhir Rp.16 untuk rekening 11 dari Saldo Rp.17 Rp.1. Dengan demikian,tampak bahwa transaksi tidak mengalami masalah hilangnya data yang diubah. Tabel berikut menunjukkan proses yang terjadi pada pengujian aplikasi tanpa concurrency control terhadap masalah hilangnya data yang diubah. Wakt u t 1 t 2 t 3 Transaksi penyetoran Transaksi penarikan Total Saldo UPDATE nasabah SET 15 total_saldo= total_saldo WHERE no_rekening= 11 SELECT @total_saldo 15 = total_saldo FROM nasabah WHERE no_rekening= 11 t 4 SET @total_saldo = @total_saldo + SELECT @total_saldo = total_saldo FROM nasabah WHERE no_rekening= 11 (WAIT) (WAIT) 15 15 128

t 5 t 6 @nominal_kredit UPDATE Nasabah SETtotal_saldo=@total _saldo WHERE no_rek= 11 (WAIT) fetch cr_saldo_penarikan into @total_saldo 17 17 t 7 Delay 17 t 8 SET @total_saldo = @total_saldo - @nominal_debet 17 t 9 UPDATE Nasabah SETtotal_saldo=@tot al_saldo WHERE no_rek= 11 16 Proses yang terjadi pada pengujian aplikasi dengan concurrency control - terhadap masalah hilangnya data yang diubah Procedure Penarikan Tunai Dengan Concurrency : CREATE PROCEDURE SP_PENARIKAN_TUNAI_DC( @NO_REKENING CHAR(5),@NIK CHAR(5), @NOMINAL_DEBET INT) AS DECLARE @TOTAL_SALDO INT DECLARE CR_SALDO_PENARIKAN CURSOR FOR SELECT TOTAL_SALDO FROM NASABAH WHERE NO_REKENING= @NO_REKENING FOR UPDATE OF TOTAL_SALDO TRAN OPEN CR_SALDO_PENARIKAN FETCH CR_SALDO_PENARIKAN INTO @TOTAL_SALDO 129

IF @NOMINAL_DEBET >= @TOTAL_SALDO PRINT 'TRANSAKSI GAGAL' ROLLBACK TRAN END ELSE WAITFOR DELAY '::1' SET @TOTAL_SALDO = @TOTAL_SALDO @NOMINAL_DEBET UPDATE NASABAH SET TOTAL_SALDO = @TOTAL_SALDO WHERE NO_REKENING=@NO_REKENING INSERT INTO TRANSAKSI(ID_JENIS_TRANSAKSI, NO_REKENING, NIK, WAKTU, NOMINAL_DEBET, NOMINAL_KREDIT)VALUES('2',@NO_REKENING, @NIK, GETDATE(), @NOMINAL_DEBET,) COMMIT TRAN END CLOSE CR_SALDO_PENARIKAN DEALLOCATE CR_SALDO_PENARIKAN Procedure Penyetoran Tunai Dengan Concurrency : CREATE PROCEDURE SP_PENYETORAN_TUNAI_DC( @NO_REKENING CHAR(5),@NIK CHAR(5), @NOMINAL_KREDIT INT) AS DECLARE @TOTAL_SALDO INT TRAN UPDATE NASABAH SET TOTAL_SALDO=TOTAL_SALDO WHERE NO_REKENING=@NO_REKENING SELECT @TOTAL_SALDO=TOTAL_SALDO FROM NASABAH 13

WHERE NO_REKENING = @NO_REKENING WAITFOR DELAY '::1' SET @TOTAL_SALDO = @TOTAL_SALDO + @NOMINAL_KREDIT UPDATE NASABAH SET TOTAL_SALDO=@TOTAL_SALDO WHERE NO_REKENING=@NO_REKENING INSERT INTO TRANSAKSI(ID_JENIS_TRANSAKSI,NO_REKENING,NIK,WA KTU, NOMINAL_DEBET,NOMINAL_KREDIT)VALUES('1', @NO_REKENING, @NIK, GETDATE(),, @NOMINAL_KREDIT) COMMIT TRAN Masalah analisa yang tidak konsisten (Inconsistent analiysis problem) Penghitungan jumlah total saldo seluruh nasabah memiliki keluaran berupa parameter OUT yaitu nilai_sum yang memuat jumlah total_saldo seluruh nasabah dengan cara menjumlahkannya satu persatu. No rekening 11 memiliki saldo sebesar Rp.1 akan mentransfer saldonya sebesar Rp.2 ke nasabah dengan no rekening 12 yang memiliki saldo Rp.1, Kemudian transaksi sama-sama dieksekusi. Posisi saldo saat ini adalah sebagai berikut : Tanpa Concurrency Control Transaksi transfer saldo mengeluarkan hasil untuk total saldo no rekening 11= Rp.8 dan no rekening 12= Rp.12, transaksi total saldo seluruh nasabah selesai, tampil total saldo seluruh 131

nasabah dengan keluaran yang tidak sama antara jumlah total saldo seluruh nasabah yang sebenarnya Rp.3 dengan hasil jumlah total saldo dari prosedur Rp.32. Dengan demikian, tampak masalah analisa yang tidak konsisten pada transaksi total saldo seluruh nasabah, antara jumlah total saldo pada tabel nasabah dengan variabel yang menyimpan data jumlah total saldo dalam prosedur. Tabel berikut menunjukkan proses yang terjadi pada pengujian aplikasi tanpa concurrency control terhadap masalah analisa yang tidak konsisten. Wak tu t 1 Transaksi transfer saldo Select @total_saldo=total_sal do from nasabah Where no_rekening= 11 Transaksi total saldo Declare cursor_saldo cursor for select total_saldo from nasabah t 2 Delay Fetch next from cursor_saldo into @total_saldo t 3 t 4 Set @total_saldo=@total_ saldo - @nominal_debet Update nasabah set total_saldo=@total_sal do Where no_rekening= 11 t 5 Select @total_saldo = total_saldo from nasabah Delay Set Jum_tot_saldo= jum_tot_saldo + @tot_saldo Total saldo nasaba h 1 1 1 8 1 Var @total_ saldo 1 1 132

t 6 t 7 Where no_rekening = 12 Set @total_saldo=@total_ saldo + @nominal_kredit Update nasabah set total_saldo=@total_sal do Where no_rekening= 12 Fetch next from cursor_saldo into @total_saldo Set Jum_tot_saldo= jum_tot_saldo + @tot_saldo 1 12 12 1 1 12 Proses yang terjadi pada pengujian aplikasi tanpa concurrency control - terhadap masalah analisa yang tidak konsisten. Procedure Transfer saldo Tanpa Concurrency : CREATE PROCEDURE SP_TRANSFER_SALDO_TC( @NO_REKENING_ASAL CHAR(5),@NIK CHAR(5),@NOMINAL_DEBET INT, @NO_REKENING_TUJUAN CHAR(5) ) AS DECLARE @TOTAL_SALDO INT,@NOMINAL_KREDIT INT SET @NOMINAL_KREDIT=@NOMINAL_DEBET TRAN SELECT @TOTAL_SALDO=TOTAL_SALDO FROM NASABAH WHERE NO_REKENING=@NO_REKENING_ASAL IF @NOMINAL_DEBET>=@TOTAL_SALDO PRINT 'TRANSAKSI GAGAL' ROLLBACK TRAN 133

END ELSE WAITFOR DELAY '::1' SET @TOTAL_SALDO=@TOTAL_SALDO - @NOMINAL_DEBET UPDATE NASABAH SET TOTAL_SALDO=@TOTAL_SALDO WHERE NO_REKENING=@NO_REKENING_ASAL SELECT @TOTAL_SALDO=TOTAL_SALDO FROM NASABAH WHERE NO_REKENING=@NO_REKENING_TUJUAN SET @TOTAL_SALDO=@TOTAL_SALDO + @NOMINAL_KREDIT UPDATE NASABAH SET TOTAL_SALDO=@TOTAL_SALDO WHERE NO_REKENING=@NO_REKENING_TUJUAN INSERT INTO TRANSAKSI(ID_JENIS_TRANSAKSI,NO_REKENING,NIK,WA KTU, NOMINAL_DEBET,NOMINAL_KREDIT)VALUES('3',@NO_RE KENING_ASAL,@NIK,GETDATE(), @NOMINAL_DEBET,) INSERT INTO TRANSAKSI(ID_JENIS_TRANSAKSI,NO_REKENING,NIK,WA KTU, NOMINAL_DEBET,NOMINAL_KREDIT)VALUES('4',@NO_RE KENING_TUJUAN, @NIK,GETDATE(),,@NOMINAL_KREDIT) COMMIT TRAN END Procedure Mencari Jumlah Total Saldo Tanpa Concurrency : CREATE PROCEDURE SP_JUM_TOT_SALDO_TC 134

AS DECLARE CURSOR_SALDO CURSOR FOR SELECT TOTAL_SALDO FROM NASABAH DECLARE @JUMLAH_SEBENARNYA INT,@JUMLAH INT,@TOTAL_SALDO INT SET @JUMLAH= OPEN CURSOR_SALDO FETCH NEXT FROM CURSOR_SALDO INTO @TOTAL_SALDO WAITFOR DELAY '::1' WHILE @@FETCH_STATUS= FETCH NEXT FROM CURSOR_SALDO INTO @TOTAL_SALDO --PRINT @TOTAL_SALDO SET @JUMLAH=@JUMLAH +@TOTAL_SALDO --PRINT @JUMLAH END PRINT @JUMLAH SELECT @JUMLAH_SEBENARNYA=SUM(TOTAL_SALDO) FROM NASABAH PRINT @JUMLAH_SEBENARNYA CLOSE CURSOR_SALDO DEALLOCATE CURSOR_SALDO END Dengan Concurrency Control Transaksi transfer saldo mengeluarkan hasil untuk total saldo no rekening 11= Rp.8 dan no rekening 12= Rp.12, transaksi total saldo seluruh nasabah selesai, tampil total saldo seluruh nasabah dengan keluaran yang tidak sama antara jumlah total saldo 135

seluruh nasabah yang sebenarnya Rp.3 dengan hasil jumlah total saldo dari prosedur Rp.3. Tabel berikut menunjukkan proses yang terjadi pada pengujian aplikasi dengan concurrency control terhadap masalah analisa yang tidak konsisten. Wak tu t 1 t 2 t 3 t 4 t 5 Transaksi transfer saldo Set transaction isolation level serializable Select @total_saldo=total _saldo from nasabah Where no_rekening= 11 Delay Set @total_saldo=@tot al_saldo - @nominal_debet Update nasabah set total_saldo=@total _saldo Where no_rekening= 11 Select @total_saldo = total_saldo from Transaksi total saldo Declare cursor_saldo cursor for select total_saldo from nasabah Set transaction isolation level serializable Fetch next from cursor_saldo into @total_saldo (wait) Delay Total saldo nasabah 1 1 Var @total _ saldo (Wait ) 8 Set Jum_tot_saldo= jum_tot_saldo + 1 8 136

t 6 t 7 nasabah Where no_rekening = 12 Set @total_saldo=@tot al_saldo + @nominal_kredit Update nasabah set total_saldo=@total _saldo Where no_rekening= 1 2 @tot_saldo (wait) 1 Fetch next from cursor_saldo into @total_saldo 12 Set Jum_tot_saldo= jum_tot_saldo + @tot_saldo 8 8 12 Proses yang terjadi pada pengujian aplikasi dengan concurrency control - terhadap masalah analisa yang tidak konsisten. Procedure Transfer saldo Dengan Concurrency : CREATE PROCEDURE SP_TRANSFER_SALDO_DC( @NO_REKENING_ASAL CHAR(5),@NIK CHAR(5),@NOMINAL_DEBET INT, @NO_REKENING_TUJUAN CHAR(5) ) AS DECLARE @TOTAL_SALDO INT,@NOMINAL_KREDIT INT SET @NOMINAL_KREDIT=@NOMINAL_DEBET TRAN SET TRANSACTION ISOLATION LEVEL SERIALIZABLE SELECT @TOTAL_SALDO=TOTAL_SALDO FROM NASABAH WHERE NO_REKENING=@NO_REKENING_ASAL 137

IF @NOMINAL_DEBET>=@TOTAL_SALDO PRINT 'TRANSAKSI GAGAL' ROLLBACK TRAN END ELSE WAITFOR DELAY '::1' SET @TOTAL_SALDO=@TOTAL_SALDO - @NOMINAL_DEBET UPDATE NASABAH SET TOTAL_SALDO=@TOTAL_SALDO WHERE NO_REKENING=@NO_REKENING_ASAL SELECT @TOTAL_SALDO=TOTAL_SALDO FROM NASABAH WHERE NO_REKENING=@NO_REKENING_TUJUAN SET @TOTAL_SALDO=@TOTAL_SALDO + @NOMINAL_KREDIT UPDATE NASABAH SET TOTAL_SALDO=@TOTAL_SALDO WHERE NO_REKENING=@NO_REKENING_TUJUAN INSERT INTO TRANSAKSI(ID_JENIS_TRANSAKSI,NO_REKENING,NIK,WA KTU, NOMINAL_DEBET,NOMINAL_KREDIT)VALUES('3',@NO_RE KENING_ASAL,@NIK,GETDATE(), @NOMINAL_DEBET,) INSERT INTO TRANSAKSI(ID_JENIS_TRANSAKSI,NO_REKENING,NIK,WA KTU, NOMINAL_DEBET,NOMINAL_KREDIT)VALUES('4',@NO_RE KENING_TUJUAN,@NIK,GETDATE(),,@NOMINAL_KREDIT) COMMIT TRAN END 138

Procedure Mencari Jumlah Total Saldo Dengan Concurrency : CREATE PROCEDURE SP_JUM_TOT_SALDO_DC AS TRAN SET TRANSACTION ISOLATION LEVEL SERIALIZABLE DECLARE CURSOR_SALDO CURSOR FOR SELECT TOTAL_SALDO FROM NASABAH DECLARE @JUMLAH_SEBENARNYA INT,@JUMLAH INT,@TOTAL_SALDO INT SET @JUMLAH= OPEN CURSOR_SALDO FETCH NEXT FROM CURSOR_SALDO INTO @TOTAL_SALDO WAITFOR DELAY '::1' WHILE @@FETCH_STATUS= FETCH NEXT FROM CURSOR_SALDO INTO @TOTAL_SALDO --PRINT @TOTAL_SALDO if @@error<> rollback tran SET @JUMLAH= @JUMLAH + @TOTAL_SALDO --PRINT @JUMLAH END PRINT @JUMLAH SELECT @JUMLAH_SEBENARNYA=SUM(TOTAL_SALDO) FROM NASABAH PRINT @JUMLAH_SEBENARNYA CLOSE CURSOR_SALDO DEALLOCATE CURSOR_SALDO 139

3. Penutup Aplikasi dapat mencegah masalah hilangnya data yang diubah (Lost of Update) dan juga masalah analisa yang tidak konsisten (the inconsistent analysis problem) Concurrency control dalam SQL Server dapat dicapai dengan beberapa cara, seperti menggunakan : Statement SELECT.. FOR UPDATE Isolation level SERIALIZABLE Statement UPDATE pada diri sendiri sebelum melakukan proses baca dengan maksud mengubah data yang dibaca. Daftar Pustaka Connolly,T.,Begg, C.,DATABASE SYSTEM A Practical Approach To Design, Implementation And Management, Addison Wesley,22. Ir.Inge Martina, 36 Jam Belajar Komputer Microsoft SQL Server 2, Elexmedia Komputindo,23. Dusan Petkovic, SQL SERVER 7 A NER S GUIDE, Osborne/ Mcgraw-Hill,1999. 14