Backup & Restore MS SQL baze podataka u C#, koristeći SMO


Na nekoliko foruma pisao sam oko manipulacije bazom podataka u MS SQL. Tematika je bila kako iz klijent aplikacije manipulisati sa bazom podataka, prvenstveno prilikom arhiviranja i restauracije. Tehnologiju koji Microsoft preporuča, a tiče se manipulacije bazom podataka u .NET programskim jezicima je SMO (SQL Management Objects). Ova tehnologija je nova, jer je uvedena pojavom MS SQL Servera 2005. Prijašnje tehnologije koje su bile zastupljenje u SQL Serveru 2000 ticala se alata koji su bili razvijani na COM tehnologiji.

Jedan od najčešće postavljanih pitanja je kako iz klijent aplikacije izvršiti backup baze podataka. A poslije tog pitanja slijed a kako stvoreni backup vratiti na SQL server.

U daljenjm tekstu prikazane su dvije metode koje vrše backup i restore baze podataka. Prije korištenja ovih metoda dobro je malo se upoznati sa SMO tehnologijom.

Implementacija

using System.Data.SqlClient;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using System.Collections.Specialized;</code>

// Backup baze podataka.
public static void BackupDatabase(string strConnString, string backUpName, string backUpPath, DateTime datumIsteka)
{
try
{
string dbName;
using (SqlConnection cnn = new SqlConnection(strConnString))
{
  cnn.Open();
  dbName = cnn.Database.ToString();
  //Konekcija na server
  ServerConnection sc = new
  ServerConnection(cnn);
  Server sv = new
  Server(sc);
  // Formiranje uredjaja
  BackupDeviceItem bdi = new
  BackupDeviceItem(backUpPath+"\\" + backUpName+".bak", DeviceType.File);

  // Forimiranje informacija o backupu
  Backup bk = new
  Backup();
  bk.Devices.Add(bdi);
  bk.Action = BackupActionType.Database;
  bk.BackupSetDescription = "SQL Express backuping..!";
  bk.BackupSetName = backUpName;
  bk.Database = dbName;
  bk.ExpirationDate = datumIsteka;
  bk.LogTruncation = BackupTruncateLogType.Truncate;
  // Pokreni backup
  bk.SqlBackup(sv);
  System.Windows.Forms.MessageBox.Show("BackUp je uspješno izveden!");
}
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}

// Restauracija backupa
public static void RestoreBackup(string strConnString,string restorePathWithFileName)
{
try
{
string dbName;
using (SqlConnection cnn = new SqlConnection(strConnString))
{
cnn.Open();
dbName = cnn.Database.ToString();
cnn.ChangeDatabase("master");

ServerConnection sc = new
ServerConnection(cnn);
Server sv = new
Server(sc);
BackupDeviceItem bdi = new
BackupDeviceItem(restorePathWithFileName, DeviceType.File);

// formiranje restor objekta
Restore resDB = new
Restore();

resDB.Devices.Add(bdi);
resDB.NoRecovery = false;
resDB.ReplaceDatabase = true;
resDB.Database = dbName;

// restauracija baze
resDB.SqlRestore(sv);
System.Windows.Forms.MessageBox.Show("Restauracija je uspješno izvedena!");
}
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s