Makale Özeti

C# kullanarak SQL datalarını nasıl yedekleriz? Bu makalemizde SQL Server üzerinde bulunan hazır fonksiyonlardan faydalanarak bir yedekleme aracı nasıl yapabiliriz onu göreceğiz.    

Makale

C# ile SQL Backup - 1
C# kullanarak SQL datalarını nasıl yedekleriz?

 

SQL BackUp:

 

SQL üzerinde tuttuğumuz dataları periyodik olarak yedekleme ihtiyacı duyarız.

Bu işlemi SQL yönetim araçlarıyla yapabileceğimiz gibi, kendi yazdığımız bir program yardımı ile de yapabiliriz. Bu makalemizde SQL Server üzerinde bulunan hazır fonksiyonlardan faydalanarak bir yedekleme aracı nasıl yapabiliriz onu göreceğiz.  

 

 

Bu projemizde  VisualStudio 2003 ve dil olarak C# kullanacağız.

 

 

File / New / Project ‘den yeni bir proje oluşturuyoruz ve adını sqlBackUp veriyoruz.

 

Formumuzun üzerine
iki label, bir combobox ve birde button koyuyoruz.

 

1. ComboBox1

(ComboBox içerisinde Sunucu uzerindeki database listesini göstereceğiz.)

 

2. Button1
(yedekleme işlemini başlatack butonumuz.)

 

3. Label2

(işlemin sonucunu göstereceğimiz label.)

 

Bağlantı cümlemizi taşıyacak bir string tanımlıyorum.

 

private string connectionstring = "Provider=sqloledb;data source=server_name;uid=sa;password=pass;database=master";

 

Bu değişkeni formumda connection string gereken yerlerde kullanacağım.

 

Formumuzda boş bir yere çift tıklayarak formumuzun load olayında comboboxun içerisini

Sunucumuzdaki databaseleri listeleyecek kodu yazacağız.

Formumuzda boş bir alana çift tıklıyoruz ve aşağıdaki kodu yazıyoruz.

 

 

private void Form1_Load(object sender, System.EventArgs e)

{

//MSSql içerisindeki databaselerin listesini alacak olan sql komutumuz.

      string command = "SELECT Name FROM sysdatabases";

 

      //yeni bir dataset

      DataSet ds = new DataSet();

           

      //yeni bir data adapter tanımlayalım

      //ve komutumuzu işletelim.

      OleDbConnection oleConn = new OleDbConnection(connectionstring);

      OleDbDataAdapter oleAdap = new OleDbDataAdapter(command, oleConn);

      //dataseti dolduralim.

      oleAdap.Fill(ds);

//Combo Boxun içini MSSql deki databasleri gösterecek şekilde dolduralim.

      comboBox1.DataSource = ds.Tables[0].DefaultView;

      comboBox1.DisplayMember = "DataBase";

      comboBox1.ValueMember = ds.Tables[0].Columns[0].ToString();

      oleConn.Close();

}

 

 

Yedekleme esnasında SQL serverin kullanacağı DUMP DEVICE oluşturacak bir procedure yazıyoruz.

 

//SQL Server Makinamız uzerinde bir DumpDevice Olusturuyor.

//Yedekleme sirasında bunu kullanacak.

private void CreateDumpDevice()

{    

      //yedek alinacak dizini tanımlıyoruz.

      string path = "C:\\";

 

      //dump device icin siz istediginiz isimi verebilirsiniz.

      //ben isim olarak sqlBackUp ismini verdim.

string command = "EXEC sp_addumpdevice 'disk', 'sqlBackUP', '"+path+"yedek.bak'";

 

      // bu komut sqlBackUp diye bir device oluşturacak ve

      // yedekleme işlemi için  C:/yedek.bak diye bir dosya oluşturulacak.

 

// şimdi komutumuzu işletelim.

      OleDbConnection oleConn = new OleDbConnection(connectionstring);

      OleDbCommand myCommand = new OleDbCommand(command, oleConn);

      oleConn.Open();

            try

            {

                  myCommand.ExecuteNonQuery();

            }

            catch(Exception err)

            {

                  if(err.ToString().IndexOf("already exist")>0)

                  {

                        //eger bu device zaten mevcut ise birşey yapmıyoruz. 
                           
MessageBox.Show("Dump Device Zeten Mevcuttu.");

                        return;

                  }

                  else

                  {

                        MessageBox.Show(err.Message,"Hata");

                  }

}

      oleConn.Close();

}

 

 

Ve son olarak yedekleme işlemini başlatacak butonumuza çift tıklıyarak,

Yedekleme işlemini başlatacak kodumuzu yazıyoruz.

 

 

//BackUp islemini baslatacak Butonumuz

private void button1_Click(object sender, System.EventArgs e)

{

//DumpDevice oluşturacak procedure çalıştıralım.

      CreateDumpDevice();

 

//Hangi database yedeklemek istiyorsak onu combobox dan seciyoruz.

      string databasename = comboBox1.SelectedValue.ToString();

//yedekleme işlemini yapacak SQL komutumuz.

//bu komut sectigimiz databasei daha once olusturdugumuz device’e yazıyor.

//Bir device uzerinde farklı databaseleri yedekleyebiliriz.

      string command = "BACKUP DATABASE "+databasename+" TO sqlBackUp";

      OleDbConnection oleConn = new OleDbConnection(connectionstring);

      OleDbCommand myCommand = new OleDbCommand(command, oleConn);

      myCommand.Connection.Open();

      try

      {

            myCommand.ExecuteNonQuery();

            label2.Text = "Yedekleme işlemi tamamlandı.";

      }

      catch(Exception err)

      {

            MessageBox.Show(err.Message,"Hata");

      }

      oleConn.Close();

}

 

 

Boylece yedekleme işlemini tamamlamış bulunuyoruz.

 

Yedekleme işlemini tamamladığımıza göre bu yedeği Enterprise Manager kullanarak nasıl geri yukleriz ona bir bakalım...

 

 

Enterprise Manageri açıyoruz ve soldaki database listemeden geri yüklemek istediğimdatabase üzerinde sağ tuş yapıyorum ve Restore Database seçeneğini tıklıyorum.

 

Daha sonra geri yuklemek istedigim database seciyorum ve

Geri yuklemek istedigim zamanın olduğu hizadaki  Restore seçeneğini işaretledikten sonra

Tamam deyip işlemi başlatıyorum.

 



Geri yükleme işlemi başlatılıyor.
 

 

Boylece database imizi daha önce yedeklediğimiz bir zamana geri yüklemiş olduk.

Bu makalemizin devamında geri yükleme işlemini yapan programı nasıl yapabileceğimizden bahsedeceğim.

 

Görüşmek üzere.

 

 

 

 

Sorularınız ile ilgili mail yazabilirsiniz.

 

Serkan İÇER

serkan@serkan.biz

 

SQLBackUp Makalesi Uygulama Örneği