Laporan Pemprograman Basis Data Transaks

Laporan Pemprograman Basis Data
“Transaksi”

Disusun oleh:
Meyla Yan Sari
IK – 3B
3.34.13.1.10

PROGAM STUDI TEKNIK INFORMATIKA
JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2015

I.

Tujuan Instruksional Khusus
Setelah melakukan praktek ini, mahasiswa diharapkan mampu :
1. Mengetahui dan memahami apa itu Transaksi
2. Dapat membuat transaksi dan mengoprasikan transaksi
3. Dapat mengakses transaksi melalui program yang dibuat melalui visual
studio melalui ado.net


II.

Dasar Teori
Pengenalan Transaksi
Transaksi merupakan sekumpulan operasi hanya dianggap berhasil jika seluruh
operasi berhasil. Jika salah satu operasi yang dilakukan gagal maka transaksi
dianggap gagal. Contoh umum dari transaksi adalah proses transfer uang.
Dalam proses transfer terjadi 2 sub proses yaitu pengurangan saldo pada akun
pengirim dan penambahan saldo di akun penerima. Jika salah satu proses tidak
berjalan semestinya maka proses yang sudah dilakukan akan di ulang atau di
gagalkan sehingga keadaan akun pengirim dan penerima tidak terdapat
perubahan.
Penggunaan transaksi terdapat pada proses berikut :
1. Dalam proses batch dimana proses CRUD harus terjadi dalam 1 kesatuan
proses.
2. Proses perubahan nilai pada tabel dimana perubahan harus konsisten
terhadap tabel lain.
3. Ketika terjadi perubahan data pada 2 database atau lebih secara bersamaan.
4. Perubahan data secara bersamaan pada server yang berbeda.

Skema Transaksi

Memahami ACID
Sebuah transaksi harus memenuhi standar ACID yaitu automicity, consistency,
isolation, dan durability.
Automicity: sebuah transaksi harus merupakan proses tunggal yang berjalan
bersamaan dalam sebuah proses, bukan proses yang berjalan secara terpisah.
Hal ini untuk menjamin bahwa semua proses yang dilakukan berhasil. Ketika
terdapat proses yang gagal maka proses tersebut akan dikembalikan ke keadaan
sebelumnya.
Consistency: proses transaksi harus memiliki kemampuan untuk menjaga
konsistensi database setelah transaksi dilakukan. Dimana ketika proses gagal,
transaksi dapat mengembalikan keadaan database.
Isolation: transaksi lain harus terpisah dari proses transaksi lain. Ketika sebuah
transaksi berjalan, maka transaksi tersebut tidak boleh mempengaruhi transaksi
lain. Pengolahan data yang dilakukan pada sebuah transaksi harus terisolasi
dari modifikasi transaksi lain.
Durability: perubahan data yang berhasil dilakukan bersifat permanen. Pada log
transaksi harus terjaga, sehingga ketika terjadi kegagalan transaksi database
dapat dikembalikan pada keadaan awal. Setiap transaksi yang dilakukan

berhasil, sebuah baris dimasikkan ke log transaksi.
Tipe Transaksi
Terdapat tiga tipe utama transaksi, tiga tipe itu adalah
Retrieval transaction: mengambil data yang ditampilkan
Update transaction: memasukkan record baru, menghapus, dan mengubah
record yang ada.
Mixed tansaction: menggabungkan antara transaksi retrieval dan update.
Transaksi lokal SQL
Semua DBMS mendukung proses transaksi. Transaksi yang hanya berjalan
pada sebuah resource dinamakan transaksi lokal. Berikut adalah 4 model
transaksi lokal.

Autocommit transactions: model transaksi dasar pada SQL server. Transaksi ini
memliki tipe standar yaitu berhasil jika proses yang dilakukan berhasil
seluruhnya, jika tidak maka transaksi digagalkan.
Explicit transactions: model transaksi yang waktu berjalan dan berheti diatur
seluruhnya oleh pengguna. Ketika transaksi berjalan, transaksi lain yang
berjalan dihentikan digantikan transaksi ini, ketika berhenti maka transaksi
sebelunya akan berjalan kembali.
Implicit transactions: model transaksi ini akan mengubah database ketika

transaksi dilakukan. Setelah mengubah database transaksi akan menguci
perubahan sampai perintah commit atau rollback dijalankan. Jika perintah
commit atau rollback belum diterima hingga pengguna memutus koneksi. Data
akan otomatis dikembalikan.
Batch-scoped transactions: sebuah koneksi dapat dikategorikan pada mode
batch-scoped ketika transaksi yang berjalan dengan disertai fitur MARS yang
aktif. Fitur ini memungkinkan pada sebuah koneksi database menjalankan
beberapa perintah bersamaan.
Transaksi terdistribusi SQL
Transaksi tipe ini adalah transaksi dengan melibatkan beberapa resource yang
bekerja bersamaan. Resource-resource ini dikendalikan dengan transaction
manager. Transaksi yang dijalankan oleh resource manager memiliki 2 fase
proses, yaitu :
Prepare phase: ketika transaction manager menerima permintaan, manager
mengirimkan perintah persiapan kepada semua resource manager. Lalu
resource manager melakukan berbagai persiapan. Setelah selesai, resource
manager mengirim informasi berhasil atau gagal proses persiapan.
Commit phase: setelah transaction manager menerima informasi bahwa
persiapan berhasil. Transaction manager mengirim perintah pelaksanaan ke
resource manager. Jika setelah itu resource manager mengirim informasi

keberhasilan maka transaction manager memberikan notifikasi transaksi
berhasil. Jika tidak maka transaction manager mengirim perintah rollback dan
menampilkan notifikasi transaksi gagal.

III.

Alat dan Bahan
1. PC Processor minimal Pentium IV, RAM minimal 512 MB
2. Ms Sql Server
3. Ms Visual Studio

IV.

Langkah Kerja/Percobaan
1. Langkah pertama adalah membuka / menjalankan MS Sql Server
management studio
2. lalu koneksikanMS Sql Server management studio dengan database server
3. Setelah itu klik new query dan masukkan kode dibawah ini simpan dengan
nama SQLQuery1.sql dan ambil gambar
create procedure sp_Trans_Test

@newcustid nchar(5),
@newcompname nvarchar(40),
@oldcustid nchar(5)
as
declare @inserr int
declare @delerr int
declare @maxerr int
set @maxerr = 0

begin transaction
-- Add a customer
insert into customers (customerid, companyname)
values(@newcustid, @newcompname)

-- Save error number returned from Insert statement
set @inserr = @@error
if @inserr > @maxerr
set @maxerr = @inserr

-- Delete a customer

delete from customers
where customerid = @oldcustid

-- Save error number returned from Delete statement
set @delerr = @@error
if @delerr > @maxerr
set @maxerr = @delerr

-- If an error occurred, roll back
if @maxerr 0
begin
rollback
print 'Transaction rolled back'
end
else
begin
commit
print 'Transaction committed'
end


print 'INSERT error number:' + cast(@inserr as nvarchar(8))
print 'DELETE error number:' + cast(@delerr as nvarchar(8))
return @maxerr

4. klik new query dan masukkan kode dibawah ini simpan dengan nama
SQLQuery2.sql dan ambil gambar
exec sp_Trans_Test 'a ', 'a ', 'z '

5. klik new query dan masukkan kode dibawah ini simpan dengan nama
SQLQuery3.sql dan ambil gambar

select * from customers

6. klik new query dan masukkan kode dibawah ini simpan dengan nama
SQLQuery4.sql dan ambil gambar
exec sp_Trans_Test 'aa ', 'aa ', 'z '
select * from customers

7. klik new query dan masukkan kode dibawah ini simpan dengan nama
SQLQuery5.sql dan ambil gambar

exec sp_Trans_Test 'a', 'a ', 'aa '
select * from Customers

8. klik new query dan masukkan kode dibawah ini simpan dengan nama
SQLQuery6.sql dan ambil gambar
exec sp_Trans_Test 'aaa', 'aaa ', 'ALFKI'

9. klik new query dan masukkan kode dibawah ini simpan dengan nama
SQLQuery7.sql dan ambil gambar
exec sp_Trans_Test 'a ', 'a ', 'ALFKI'

10. Untuk proses percobaan pengaksesan transaksi melalui ado.net dari
program yang dibuat melalui ms visual studio adalah sebagai berikut:
a. Buka visual studio dan buat project dengan jenis windows forms
application dengan nama project transaction dan Solution name
Chapter8

b. Lalu rename form1.vb menjadi transaction.vb dan tambahkan
komponen seperti berikut ini


Item
Button1
Label1
Label2
Label3
Textbox1
Textbox2
Textbox3

properties
Text : execute
Text : New Customer ID
Text : New Company ID
Text : Old Customer ID
Text :
Text :
Text :

c. Kemudian tambahkan kode pada action event button click
Imports System.Data.SqlClient

Public Class Form1
Private Sub Button1_Click(sender As Object, e As
EventArgs) Handles Button1.Click
Dim conn As New SqlConnection
conn.ConnectionString = "data source=MEYLA;

initial catalog=Northwind; integrated security=True"
Dim sqlins As String = "insert into customers
(customerid, companyname) values(@newcustid,@newconame)"
Dim sqldel As String = "delete from customers
where customerid = @oldcustid"
conn.Open()
Dim sqltrans As SqlTransaction =
conn.BeginTransaction()
Try
Dim cmdins As SqlCommand =
conn.CreateCommand()
cmdins.CommandText = sqlins
cmdins.Transaction = sqltrans
cmdins.Parameters.Add("@newcustid",
System.Data.SqlDbType.NVarChar, 5)
cmdins.Parameters.Add("@newconame",
System.Data.SqlDbType.NVarChar, 30)
Dim cmddel As SqlCommand =
conn.CreateCommand()
cmddel.CommandText = sqldel
cmddel.Transaction = sqltrans
cmddel.Parameters.Add("@oldcustid",
System.Data.SqlDbType.NVarChar, 5)
cmdins.Parameters("@newcustid").Value =
TextBox1.Text
cmdins.Parameters("@newconame").Value =
TextBox2.Text
cmdins.ExecuteNonQuery()
cmddel.Parameters("@oldcustid").Value =
TextBox3.Text
cmddel.ExecuteNonQuery()
sqltrans.Commit()
MessageBox.Show("transaction commited")
Catch ex As System.Data.SqlClient.SqlException
sqltrans.Rollback()
MessageBox.Show("transaction rolledback" +

ControlChars.Lf + ex.Message, "rollback transaction")
Catch ex As Exception
MessageBox.Show("System Error" +
ControlChars.Lf + ex.Message, "Error")
Finally
conn.Close()
End Try
End Sub
End Class

11. Berikut ini adalah percobaan pengaksesan transaksi pada database
akademik melalui program berbasis .net, dengan ketentuan sebagai berikut :
a. Terdapat 3 tabel utama pada database yaitu :
1. Tabel mahasiswa dengan 3 entitas yaitu nim, nama, email dengan 5
data.
Membuat tabel mahasiswa :
create table makul(
kode_mk varchar(5) primary key,
nama varchar(30),
sks varchar(1)
)

Memasukkan data ke tabel mahasiswa :
insert into mahasiswa (nim, nama, email)
values ('3.34.12.0.01','ajeng
yonafalah','ajengyona@gmail.com'),
('3.34.12.0.03','ayin nabhan
ulinnuha','ayinnabhan@gmail.com'),
('3.34.12.0.08','dhimas yudangga
adinugraha','dhimas.pedas@gmail.com')

2. Tabel nilai dengan 3 entitas yaitu nim, kode_mk, nilai dengan 9
data. Antara tabel nilai dengan tabel mahasiswa dan matakuliah
memiliki kostrait.
Membuat tabel nilai :

create table nilai(
nim varchar(12) references mahasiswa(nim),
kode_mk varchar(5) references makul(kode_mk),
nilai varchar(1)
)

Memasukkan data ke tabel nilai :
insert into nilai (nim, kode_mk, nilai)
values ('3.34.12.0.01','mk001','A'),
('3.34.12.0.01','mk002','B'),
('3.34.12.0.01','mk003','B'),
('3.34.12.0.03','mk001','B'),
('3.34.12.0.03','mk002','A'),
('3.34.12.0.03','mk003','B'),
('3.34.12.0.08','mk001','A'),
('3.34.12.0.08','mk002','A'),
('3.34.12.0.08','mk003','A')

3. Tabel makul dengan 3 entitas yaitu kode_mk, nama, sks dengan 3
data.
Membuat tabel makul :
create table mahasiswa(
nim varchar(12) primary key,
nama varchar(50),
email varchar(30)
)

Memasukkan data ke tabel makul :
insert into makul (kode_mk, nama, sks)
values ('mk001','pdb','3'),
('mk002','keamanan jaringan','3'),
('mk003','sistem terbenam','3')

b. Buat prosedur tersimpan untuk menjalankan transaksi secara langsung
melalui mysql server.
create procedure sp_trans_mhs
@newnim nchar(12),
@newnama nchar(50),
@newemail nchar(30),
@delnim nchar(12)
as
declare @ins int
declare @del int
declare @err int
set @err = 0
begin transaction
insert into mahasiswa (nim, nama, email)
values (@newnim, @newnama, @newemail)
set @ins = @@error
if @ins > @err
set @err = @ins
delete from mahasiswa
where nim = @delnim
set @del = @@error
if @del > @err
set @err = @del
if @err 0
begin
rollback
print 'gagal'
end
else
begin

commit
print 'berhasil'
end
print 'kesalahan insert:' + cast(@ins as nvarchar(8))
print 'kesalahan delete:' + cast(@del as nvarchar(8))
return @err

c. Lakukan testing transaksi:
1. SQLQuery8.sql
exec sp_trans_mhs '3.34.12.0.06','desyana sholikhah',
'desy@gmail.com','3.34.12.0.02'

2. SQLQuery9.sql
exec sp_trans_mhs '3.34.12.0.06','desyana sholikhah',
'desy@gmail.com','3.34.12.0.02'

3. SQLQuery10.sql
exec sp_trans_mhs '3.34.12.0.06','desyana sholikhah',
'desy@gmail.com','3.34.12.0.01'

d. Buat aplikasi berbasis vb.net dengan rancangan gui sebagai berikut :
1. Rancangan gui sebagai berikut :

2. Tambahkan komponen sebagai berikut :
Item
Button1
Groupbox 1
Groupbox 2
Label1
Label2

properties
Text : execute
Text : insert
Text : delete
Text : nama
Text : nim

Label3
Label4
Textbox1
Textbox2
Textbox3
Textbox4
Datagridview1

Text : email
Text : nim
nama : Textbox1
nama : Textbox2
nama : Textbox3
nama : Textbox4
nama : Datagridview1

3. Kemudian masukkan kode sebagai berikut :
Imports System.Data.SqlClient
Public Class Form1
Dim conn As New SqlConnection
Dim adp As SqlDataAdapter
Dim ds As New DataSet
Private Sub Form1_Load(sender As Object, e As
EventArgs) Handles MyBase.Load
conn.ConnectionString = "data source=ANGGA;
initial catalog=akademik; integrated security=True"
conn.Open()
tampildata()
End Sub
Sub tampildata()
adp = New SqlDataAdapter("select * from
mahasiswa", conn)
ds = New DataSet
adp.Fill(ds, "tabel1")
DataGridView1.DataSource = ds.Tables("tabel1")
End Sub
Private Sub Button1_Click(sender As Object, e As
EventArgs) Handles Button1.Click
Dim sqlins As String = "insert into mahasiswa
(nim, nama, email) values(@nim, @nama, @email)"
Dim sqldel As String = "delete from mahasiswa
where nim = @oldnim"
Dim sqltrans As SqlTransaction =
conn.BeginTransaction()

Try
Dim cmdins As SqlCommand =
conn.CreateCommand()
cmdins.CommandText = sqlins
cmdins.Transaction = sqltrans
cmdins.Parameters.Add("@nim",
System.Data.SqlDbType.NVarChar, 12)
cmdins.Parameters.Add("@nama",
System.Data.SqlDbType.NVarChar, 50)
cmdins.Parameters.Add("@email",
System.Data.SqlDbType.NVarChar, 30)
cmdins.Parameters("@nim").Value =
TextBox1.Text
cmdins.Parameters("@nama").Value =
TextBox2.Text
cmdins.Parameters("@email").Value =
TextBox3.Text
cmdins.ExecuteNonQuery()

Dim cmddel As SqlCommand =
conn.CreateCommand()
cmddel.CommandText = sqldel
cmddel.Transaction = sqltrans
cmddel.Parameters.Add("@oldnim",
System.Data.SqlDbType.NVarChar, 12)
cmddel.Parameters("@oldnim").Value =
TextBox4.Text
cmddel.ExecuteNonQuery()
sqltrans.Commit()
MessageBox.Show("transaksi berhasil")
Catch ex As System.Data.SqlClient.SqlException
sqltrans.Rollback()
MessageBox.Show("transaksi gagal" +
ControlChars.Lf + ex.Message, "hapus transaksi")
Catch ex As Exception
MessageBox.Show("sistem error" +

ControlChars.Lf + ex.Message, "Error")
Finally
tampildata()
End Try
End Sub
End Class

V.

Lembar Kerja
No

Praktik

1

SQLQuery1.sql
Query untuk
membuat prosedur
tersimpan berisi
transaksi tambah
dan hapus data
tabel customer

2

SQLQuery2.sql
Query untuk
memasukkan data
dan menghapus
data melalui
sp_trans_test

3

SQLQuery3.sql
Query untuk
menampilkan data
tabel customers

4

SQLQuery4.sql

Hasil Program

Query untuk
menjalankan
traksaksi pada
prosedur
sp_trans_test

5

SQLQuery5.sql
Query untuk tes
transaksi ketika
proses
penambahan data
gagal

6

SQLQuery6.sql
Query untuk tes
transaksi ketika
proses hapus data
gagal

7

SQLQuery7.sql
Query untuk tes
transaksi ketika
proses tambah dan
hapus data gagal

8

transaction.vb

Gbr1:

Pada gbr1: proses
transaksi yang
dilakukan berhasil
Pada gbr2: proses
transaksi yang
dilakukan gagal
karena data yang
ditambahkan
sudah ada pada
database

Gbr2:

VI.

Kesimpulan
Pada praktikum ini membahas tentang transaksi yang merupakan sekumpulan
operasi yang hanya dianggap berhasil jika seluruh operasi berhasil. Jika salah satu
operasi yang dilakukan gagal maka transaksi dianggap gagal. Dipelajari juga
dasar-dasar dari transaksi, pemahaman ACID, transaksi lokal dan terdistribusi dan
pengetahuan dalam penulisan transaksi yang baik dan benar secara efisien. Serta
melakukan percobaan pengetesan transaksi melalui program berbasis .net dengan
bantuan komponen ado.net.