Backup and Restore Using SMO

Posted at : Jul/13/2007
12075 Views | 17 Comments

SMO merupakan object yang memang digunakan untuk memudahkan management Sql Server via aplikasi. Dibandingkan dengan SQL-DMO, SMO ini relatif lebih mudah digunakan dan sudah merupakan managed code tidak seperti SQL-DMO yang masih menggunakan COM. Sehingga ada issue performance kalau kita akses via .Net managed code.

Pada artikel kali ini saya akan menjelaskan mengenai penggunaan SMO untuk keperluan Backup dan Restore yang dilakukan di sisi aplikasi client. Backup dan Restore class merupakan object yang digunakan untuk keperluan backup dan restore. Class tersebut berada di dalam namespace Microsoft.SqlServer.Smo, sehingga kita perlu untuk melakukan reference ke assembly tsb.

Untuk melakukan backup dan restore dibutuhkan suatu device yang digunakan sebagai media penyimpanan file backup. Device tersebut dapat berupa file, logical device, atau media tape. Dalam contoh ini saya menggunakan file sebagai media penyimpanan file backup yang berekstensi .bak. Class BackupDeviceItem sudah disediakan oleh SMO.

Setelah backupdeviceitem nya dibuat, tambahkan backupdeviceitem tsb ke object Backup. Ketika backup berlangsung kita dapat membuat suatu notifikasi yang memperlihatkan progress backup atau restore tersebut. Dengan memanfaatkan event PercentComplete dari object backup atau restore maka server akan memberikan notifikasi persentase proses yang sedang berlangsung, dari sini kita dapat membuat sebuah progress bar atau label yang akan memperlihatkan prosentase proses backup dan restore. Info tersebut didapatkan dari class PercentCompleteEventArgs.

Event Complete dari object Backup dan Restore akan terjadi apabila proses sudah selesai. Dari event ini kita dapat menampilkan informasi pages, dan waktu yang dibutuhkan untuk proses backup atau restore. Info ini didapatkan dari class ServerMessageeventArgs yang terdapat didalam namespace Microsoft.SqlServer.Management.Common. Agar bisa menggunakan namespace tersebut terlebih dahulu harus ditambahkan referensi ke assembly Microsoft.SqlServer.ConnectionInfo.

Kita lihat screen shot dari masing-masing proses backup dan restore yang dilakukan :

Info persentase progress yang ditampilkan di label dan progressbar control didapatkan dari event PercentComplete.

Info hasil backup database didapatkan dari event Complete.

Berikut adalah code nya. Anda dapat download source code ini dari link yang ada di atas...

   1:  Imports SMOObject = Microsoft.SqlServer.Management.Smo
   2:  Imports Microsoft.SqlServer.Management.Common
   3:   
   4:  Public Class frmBackupRestore
   5:   
   6:  #Region "Variables Declaration"
   7:      Dim backup As SMOObject.Backup
   8:      Dim restore As SMOObject.Restore
   9:  #End Region
  10:   
  11:  #Region "Form's Events"
  12:      Private Sub frmBackupRestore_Load(ByVal sender As _
  13:      System.Object, ByVal e As System.EventArgs) _
  14:      Handles MyBase.Load
  15:          ToolStripProgressBar1.Visible = False
  16:   
  17:          lblBackUpServerName.Text = My.Settings.DataSource
  18:          lblBackUpDbName.Text = My.Settings.Database
  19:   
  20:          lblRestoreServerName.Text = My.Settings.DataSource
  21:          lblRestoreDbName.Text = My.Settings.Database
  22:      End Sub
  23:  #End Region
  24:   
  25:  #Region "Button's Events"
  26:      Private Sub btnBackup_Click(ByVal sender As System.Object, _
  27:      ByVal e As System.EventArgs) Handles btnBackup.Click
  28:          If txtFileBackupName.Text = String.Empty Then
  29:              MsgBox("Nama file belum diisi")
  30:              Exit Sub
  31:          End If
  32:   
  33:          If MessageBox.Show("Backup database?", _
  34:          "Konfirmasi", MessageBoxButtons.YesNo) = _
  35:          Windows.Forms.DialogResult.No Then Exit Sub
  36:   
  37:          Cursor = Cursors.WaitCursor
  38:          ToolStripProgressBar1.Visible = True
  39:   
  40:          Try
  41:              '//buat backup device nya
  42:              Dim bdi As New SMOObject.BackupDeviceItem
  43:              bdi.Name = txtFileBackupName.Text
  44:              bdi.DeviceType = SMOObject.DeviceType.File
  45:   
  46:              '//buat object backup
  47:              backup = New SMOObject.Backup
  48:              backup.Database = My.Settings.Database
  49:   
  50:              '//notifikasi untuk progress bar tiap 10%
  51:              backup.PercentCompleteNotification = 10
  52:              backup.Devices.Add(bdi)
  53:              backup.Initialize = True
  54:   
  55:              '//associate event percent complete
  56:              '//dengan add handler nya untuk
  57:              '//refresh progress bar value
  58:              AddHandler backup.PercentComplete, _
  59:              AddressOf BackupPercentComplete
  60:   
  61:              '//associate event backup complete
  62:              '//with its event handler
  63:              AddHandler backup.Complete, _
  64:              AddressOf BackupComplete
  65:   
  66:              '//create object server
  67:              Dim server As New SMOObject.Server( _
  68:              My.Settings.DataSource)
  69:   
  70:              '//do the backup process here...
  71:              backup.SqlBackup(server)
  72:   
  73:          Catch ex As Exception
  74:              ToolStripProgressBar1.Visible = False
  75:              MsgBox(ex.Message)
  76:          Finally
  77:              Cursor = Cursors.Default
  78:          End Try
  79:      End Sub
  80:   
  81:      Private Sub btnBackupLocation_Click(ByVal sender As _
  82:      System.Object, ByVal e As System.EventArgs) _
  83:      Handles btnBackupLocation.Click
  84:          If SaveFileDialog1.ShowDialog = _
  85:          Windows.Forms.DialogResult.OK Then
  86:              txtFileBackupName.Text = SaveFileDialog1.FileName
  87:          End If
  88:      End Sub
  89:   
  90:      Private Sub btnRestore_Click(ByVal sender As System.Object, _
  91:      ByVal e As System.EventArgs) Handles btnRestore.Click
  92:          If txtRestoreFileName.Text = String.Empty Then
  93:              MsgBox("Nama file belum diisi")
  94:              Exit Sub
  95:          End If
  96:   
  97:          If MessageBox.Show("Apakah backup akan di restore?", _
  98:          "Konfirmasi", MessageBoxButtons.YesNo) = _
  99:          Windows.Forms.DialogResult.No Then Exit Sub
 100:   
 101:          Cursor = Cursors.WaitCursor
 102:          ToolStripProgressBar1.Visible = True
 103:   
 104:          Try
 105:              '//buat backup device nya
 106:              '//tentukan nama file .bak
 107:              '//set ke file device type, karena tipe device
 108:              '//yang digunakan disini yaitu file
 109:              Dim bdi As New SMOObject.BackupDeviceItem
 110:              bdi.Name = txtRestoreFileName.Text
 111:              bdi.DeviceType = SMOObject.DeviceType.File
 112:   
 113:              '//create restore object
 114:              restore = New SMOObject.Restore
 115:              restore.Database = My.Settings.Database
 116:              restore.Action = SMOObject.RestoreActionType.Database
 117:              restore.PercentCompleteNotification = 10
 118:              restore.UnloadTapeAfter = True
 119:   
 120:              '//replace the existing database
 121:              restore.ReplaceDatabase = True
 122:              restore.Devices.Add(bdi)
 123:   
 124:              '//associate event percent complete
 125:              '//dengan add handler nya untuk
 126:              '//refresh progress bar value
 127:              AddHandler restore.PercentComplete, _
 128:              AddressOf RestorePercentComplete
 129:   
 130:              '//associate event restore complete
 131:              '//with its event handler
 132:              AddHandler restore.Complete, _
 133:              AddressOf RestoreComplete
 134:   
 135:              '//create object server
 136:              Dim server As New SMOObject.Server( _
 137:              My.Settings.DataSource)
 138:   
 139:              '//do the restore process here...
 140:              restore.SqlRestore(server)
 141:   
 142:          Catch ex As Exception
 143:              ToolStripProgressBar1.Visible = False
 144:              MsgBox(ex.Message)
 145:          Finally
 146:              Cursor = Cursors.Default
 147:          End Try
 148:      End Sub
 149:   
 150:      Private Sub btnRestoreLocation_Click(ByVal sender As _
 151:      System.Object, ByVal e As System.EventArgs) _
 152:      Handles btnRestoreLocation.Click
 153:          If OpenFileDialog1.ShowDialog = _
 154:          Windows.Forms.DialogResult.OK Then
 155:              txtRestoreFileName.Text = OpenFileDialog1.FileName
 156:          End If
 157:      End Sub
 158:  #End Region
 159:   
 160:  #Region "Event Handler Backup / Restore"
 161:      Private Sub BackupPercentComplete(ByVal sender As _
 162:      System.Object, ByVal e As SMOObject.PercentCompleteEventArgs)
 163:          '//update progress bar value
 164:          '//dan text label info
 165:          ToolStripProgressBar1.Value = e.Percent
 166:          lblInfo.Text = "Backup Progress " & e.Percent & " %"
 167:          lblInfo.Refresh()
 168:      End Sub
 169:   
 170:      Private Sub BackupComplete(ByVal sender As System.Object, _
 171:      ByVal e As ServerMessageEventArgs)
 172:          '//hapus handler dari event nya
 173:          RemoveHandler backup.PercentComplete, _
 174:          AddressOf BackupPercentComplete
 175:   
 176:          RemoveHandler backup.Complete, _
 177:          AddressOf BackupComplete
 178:   
 179:          '//get the info from server
 180:          '//if success or failed
 181:          lblInfo.Text = e.Error.Message
 182:   
 183:          ToolStripProgressBar1.Value = 0
 184:          ToolStripProgressBar1.Visible = False
 185:          Cursor = Cursors.Default
 186:      End Sub
 187:   
 188:      Private Sub RestorePercentComplete(ByVal sender As _
 189:      System.Object, ByVal e As SMOObject.PercentCompleteEventArgs)
 190:          '//update progress bar value
 191:          '//dan text label info
 192:          ToolStripProgressBar1.Value = e.Percent
 193:          lblInfo.Text = "Restore Progress " & e.Percent & " %"
 194:          lblInfo.Refresh()
 195:      End Sub
 196:   
 197:      Private Sub RestoreComplete(ByVal sender As System.Object, _
 198:      ByVal e As ServerMessageEventArgs)
 199:          '//hapus handler dari event nya
 200:          RemoveHandler restore.PercentComplete, _
 201:          AddressOf RestorePercentComplete
 202:   
 203:          RemoveHandler restore.Complete, _
 204:          AddressOf RestoreComplete
 205:   
 206:          '//get the info from server
 207:          '//if success or failed
 208:          lblInfo.Text = e.Error.Message
 209:          ToolStripProgressBar1.Value = 0
 210:          ToolStripProgressBar1.Visible = False
 211:          Cursor = Cursors.Default
 212:      End Sub
 213:  #End Region
 214:   
 215:  End Class

 


[Comments]

saskia (Apr/03/2008 01:32:57)
mas aq baru coba vb 2005, trus coba listing code di button backup, tp ini tdk dikenali (garis biru ): AddHandler backup.PercentComplete, AddressOf BackupPercentComplete kira2x knapa ya? trus itu label status prosentase kok bs gitu , pake properties apa? aq kira itu groupbox. thanks.
Rully (Apr/04/2008 02:26:31)
Mbak udah harus add reference ke dll yang tertera di namespace yang di Imports...prosentase itu ditampilkan di control label dengan hanya update Text propertinya...source code nya bisa di download kok di link yang ada di atas, atau yang ada di menu Download
saskia (Apr/05/2008 01:04:59)
mas kl nambah add reference aq ngerti dan itu udah, kl blm kan yng biru pasti bukan listing addHandler backup.PercentComplete, AddressOf BackupPercentComplete aja. aneh khan? sayang aq gak bw listing code q yg kucontoh dr mas, jd g bs aq ketik dsni btw thanks udah mau bales.
saskia (Apr/17/2008 06:25:14)
mas, aq dah download. backupnya bs tp sayang backup to location gak bs. sql server '05 q ada 2 instance: ./sqlexpress dan xxxxx. apa ini ngaruh ya. aq buat database baru pakai object smo berhasil tapi method instance dari connection harus disebut dulu, kl tdk lngsung ke instance xxxxx meski login diset ke true. help me mas tlng give some comments. thanks
Rully (Apr/17/2008 07:35:04)
Backup to location itu hanya digunakan untuk lokasi penyimpanan file backupnya, jadi proses sebenarnya ada di button backup. Klo ada 2 instance harus diset terlebih dahulu koneksi stringnya ditujukan ke instance yang mana. Coba anda rubah dulu instance name nya itu di Settings yang ada di project properties.
qiux (May/03/2008 03:57:17)
Mas, kok file ny gk ada ekstensi '.sln' ya? gmn cara bukanya di VS2005?? thanks.. urgent mas...
Rully (May/03/2008 05:06:13)
Mas qiux...buka saja file Visual Basic Project File nya (Open Project...)
Rusli (May/05/2008 01:44:09)
Mas, saya backup di server A ( ext.bak ), trus saya mo restore di komputer B......gmana caranya yah?? sori bener2 pemula masalah sql nih mas.....
qiux (Aug/16/2008 09:15:23)
Mas.. sy da implementasi cara mas di atas ke aplikasi saya, tetapi aplikasi saya beraksitektur client server. Yang herannya, database hanya bisa di backup di sisi dimana Database diletakkan (dalam hal ini server side), kalau saya backup dari client side menuju ke data source server, failed trus. kira2 apa yang harus disetting ya, atau ini gk bisa mendukung backup database server dari client side? Thanks..
Rully (Aug/16/2008 03:01:28)
Mas qiux...coba mungkin cek lagi connection string yang digunakan mulai dari instance server name dengan jenis authentikasi nya harus menggunakan sql server login authentication...
qiux (Aug/19/2008 07:32:25)
Sudah mas,, semua transaksi / query bisa dilakukan dengan baik, tp yg sy herannya wktu backup dan restorenya fail. semuanya sudah pake sql server login authentication. ada ide gak ya, sudah mau deadline soalnya --" hehe
Pras (Feb/24/2011 04:14:12)

mas dah aku coba buat ulang di project aq, tapi kok aneh ya suka ada warning asemble diferent version. and cuma bisa backup , tuk restore selalu failed. tp klo dibuat di project tersendiri, tuh bisa jalan backup and restorenya. mohon petunjuk please!!!! lagi butuh bangat. thanks

Rully (Feb/24/2011 09:31:57)

Pras > Pastikan database yang digunakan itu minimal SQL Server 2005 dan Visual Studio yang digunakan itu minimal versi 2005. Semoga membantu.

Pras (Feb/25/2011 06:36:28)

Ow tuk itu saya sudah pakai SQL Server 2008 dan Visual Studio 2008. o iya tuk sekarang dah berubah lagi jadi di project apapun gak bisa restorenya. padahal dulu sempet bisa jalan backup and restorenya. Thanks!!

Pras (Feb/25/2011 05:50:12)

o iya mas saya tahu penyebabnya!!! jadi klo setting startup aplication formnya langsung ke form backup restore tersebut, backup dan restore berfungsi dengan baik, tapi klo setting startup aplication formnya masih setting form yang lain, jadi "restore failed to server". bagaimana ini biar setting startup aplication form  tetep pada form yang lain cuma backup and restore tetep berfungsi. mohon bantuannya!!! Terima Kasih!!!!

Abdul (Jul/17/2011 06:47:53)

Bos Gimana caraya Kalo failed to server, tapi saya Koneksinya Udah Di setting Tapi tetep saja Failed to server,Gimana Caranya???

WakhidWh (May/15/2017 12:55:09)

 mas,bagaimana SMO dipake di vb6? masih kompatibel ga?


[Write your comment]

Name (required)

Email (required-will not published)

Comment
5184
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6982 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4893 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4045 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3460 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2881 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2024   Rully Yulian MF   All rights reserved.