Backup and Restore Using SMO

Posted at : Jul/13/2007
12249 Views

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

 


ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Co-Founder & IT Trainer at Native Enterprise | IBM RAG & Agentic AI | IBM Data Science & Data Analyst | Python Certified (PCEP, PCAP) | Microsoft Certified (MCAD, MCPD, MOS, MTA, Xamarin, former MCT) | ex MVP

[Read More...]

CERTIFICATIONS

IBM RAG and Agentic AI Professional
IBM Data Science Professional IBM Data Analyst Professional
PCAP Associate Python Programmer Certified PCEP Entry Level Python Programmer Certified
Xamarin Certified
MOS 2007
MCT
MCPD MCTS
MCAD.NET

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

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