Master Data SQL Server Crash!, Kiamat ??

Disalah satu forum ada yang bertanya mengenai apakah yang akan terjadi jika Master Data di database SQL Server anda ada yang rusak, apakah ini menjadi ancaman ?

Karena pernah menulis tentang ini namun mengerti solusi yang harus diambil, jadi saya coba untuk menumpahkan step-step penyelesaiannya dalam tulisan ini.

Agar lebih jelas penjelasannya saya akan coba lakukan dengan membuat demonya, harapannya adalah agar penyelesaian ini menjadi lebih jelas.

Pertama kita akan siapkan sebuah Database bernama BillingDB.

create database [BillingDB] ON Primary
 (name = 'BillingDB_Data', filename = 'D:\tesdb\BillingDB_Data.MDF',
 size = 10MB, filegrowth = 10MB)
 LOG ON
 (name = 'BillingDB_Log', filename = 'D:\tesdb\BillingDB_Log.MDF',
 size = 10MB, filegrowth = 10MB);
 go

Kemudian kita akan set Recovery Mode nya menjadi FULL

use [master]
 alter database [BillingDB] set recovery full;
 go

Kemudian kita coba buat sebuah tabell yaitu TPaymentLog

Use [BillingDB]
go

create table dbo.TPaymentLog (
 Id int identity(1,1),
 LogDesc nvarchar(50) null,
 Logdate smalldatetime default getdate()
 );
 go

Manajemen database yang baik pastilah ada perencanaan/strategi backup yang baik. misal dilakukan backup full tiap jam 01.00 malam dan backup log tiap 30 menit.

jadi pada jam 01.00 terjadi aktivitas backup full, kemudian jam 01.30, 02.00, dst dilakukan backup log. namun ternyata pada jam 01.55 database anda mengalami masalah yaitu master data dari databasenya corrupt. lalu apa yang harus dilakukan.

Mari kita coba simulasikan kejadiannya :

Transaksi data jam 00.40

DECLARE @smalldatetime smalldatetime = '2014-07-26 00:40:10';
 insert into TPaymentLog (LogDesc, Logdate)
 Values('Pembayaran pelanggan ID 001', @smalldatetime)
 go

Backup Full jam 01.00

use [master]
 Backup database [BillingDB] to disk = 'D:\tesdb\BillingDBBackup.bak'
 go

Transaksi jam 01.15

 use [BillingDB]
  go

 DECLARE @smalldatetime smalldatetime = '2014-07-27 01:15:00';
 insert into TPaymentLog (LogDesc, Logdate)
 Values('Pembayaran pelanggan ID 001', @smalldatetime)
 go

Backup Log jam 01.30

use [master]
 go

 backup log [BillingDB] to disk = 'D:\tesdb\BillingDBlog_Backuplog1.trn';
 go

Transaksi jam 01.50

  use [BillingDB]
  go

 DECLARE @smalldatetime smalldatetime = '2014-07-27 01:50:00';
 insert into TPaymentLog (LogDesc, Logdate)
 Values('Pembayaran pelanggan ID 005', @smalldatetime)
 go

Dan ternyata pada jam 01.55 databasenya corrupt, kita buat kondisinya sedemikian rupa dengan cara kita coba matikan service dari SQL Servernya kemudian kita delete file BillingDB_Data.MDF nya.

mdf

Selanjutnya kita jalankan kembali Service dari SQL Server Engine nya. dan kita lihat penampakkannya di SSMS

mdf2

terlihat ada status dengan tulisan Recovery Pending, dan saya coba mengakses table TPaymentLog nya juga tidak bias.

mdf3

Nah jika hal ini terjadi, hal pertama yang kita coba lakukan adalah dengan melakukan backup Tail Log dari database BillingDB nya.

 use [master]
 go

 BACKUP log [BillingDB] to disk = 'D:\tesdb\BillingDB_Tail_Log.trn'
 with No_Truncate, Norecovery;
 go

Tail log ini adalah mencoba menangkap dan kemudian membackup transaksi-transaksi yang terjadi setelah full backup terakhir dilakukan atau Backup log terakhir dilakukan.

Langkah selanjutnya adalah kita coba akan melakukan restore dari hasil aktivitas-aktivitas backup yang telah kita lakukan. kita akan restore sekaligus semuanya mulai dari Backup full pertama, backup log pertama dan backup tail lognya.

use [master]
go

 Restore database [BillingDB]
 from disk = 'D:\tesdb\BillingDBBackup.bak'
 with replace, norecovery;
 go

 Restore Log [BillingDB]
 from disk = 'D:\tesdb\BillingDBlog_Backuplog1.trn'
 with replace, norecovery;
 go

 Restore Log [BillingDB]
 from disk = 'D:\tesdb\BillingDB_Tail_Log.trn'
 with recovery;
 go

mari kita cek apakah kita dapat mengakses kembali table TPaymentLog

mdf4

dan yes! kita berhasil mengembalikan database yang file master data yang hilang tadi. Selanjutnya database dapat bekerja seperti sedia kala.

Demikian semoga bermanfaat.

 

 

 

 

Leave a Reply