C# Sql Yedekleme Kodları

bazinga

Konu Sahibi
Admin
Katılım
1 Şubat 2007
Mesajlar
93,043
Reaksiyon puanı
49,711
Puanı
1,060
Konum
İstanbul
Web Sitesi
izleryazar.com
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.
sqlbackup1.gif


sqlbackup2.gif
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.

[FONT=&quot]private[/FONT][FONT=&quot] string connectionstring = "Provider=sqloledb;data source=server_name;uid=sa;password=pass;database=m aster";[/FONT]

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.


[FONT=&quot] private[/FONT][FONT=&quot] void Form1_Load(object sender, System.EventArgs e)[/FONT]
[FONT=&quot]{[/FONT]
[FONT=&quot]//MSSql içerisindeki databaselerin listesini alacak olan sql komutumuz.[/FONT]
[FONT=&quot] string command = "SELECT Name FROM sysdatabases";[/FONT]

[FONT=&quot] //yeni bir dataset[/FONT]
[FONT=&quot] DataSet ds = new DataSet();[/FONT]

[FONT=&quot] //yeni bir data adapter tanımlayalım[/FONT]
[FONT=&quot] //ve komutumuzu işletelim. [/FONT]
[FONT=&quot] OleDbConnection oleConn = new OleDbConnection(connectionstring);[/FONT]
[FONT=&quot] OleDbDataAdapter oleAdap = new OleDbDataAdapter(command, oleConn);[/FONT]
[FONT=&quot] //dataseti dolduralim.[/FONT]
[FONT=&quot] oleAdap.Fill(ds);[/FONT]
[FONT=&quot]//Combo Boxun içini MSSql deki databasleri gösterecek şekilde dolduralim.[/FONT]
[FONT=&quot] comboBox1.DataSource = ds.Tables[0].DefaultView;[/FONT]
[FONT=&quot] comboBox1.DisplayMember = "DataBase";[/FONT]
[FONT=&quot] comboBox1.ValueMember = ds.Tables[0].Columns[0].ToString();[/FONT]
[FONT=&quot] oleConn.Close();[/FONT]
[FONT=&quot]}[/FONT]


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

[FONT=&quot] //SQL Server Makinamız uzerinde bir DumpDevice Olusturuyor.[/FONT]
[FONT=&quot] //Yedekleme sirasında bunu kullanacak.[/FONT]
[FONT=&quot] private[/FONT][FONT=&quot] void CreateDumpDevice()[/FONT]
[FONT=&quot]{ [/FONT]
[FONT=&quot] //yedek alinacak dizini tanımlıyoruz.[/FONT]
[FONT=&quot] string path = "C:\";[/FONT]

[FONT=&quot] //dump device icin siz istediginiz isimi verebilirsiniz.[/FONT]
[FONT=&quot] //ben isim olarak sqlBackUp ismini verdim. [/FONT]
[FONT=&quot]string[/FONT][FONT=&quot] command = "EXEC sp_addumpdevice 'disk', 'sqlBackUP', '"+path+"yedek.bak'";[/FONT]

[FONT=&quot] // bu komut sqlBackUp diye bir device oluşturacak ve[/FONT]
[FONT=&quot] // yedekleme işlemi için C:/yedek.bak diye bir dosya oluşturulacak.

[/FONT]

[FONT=&quot]// şimdi komutumuzu işletelim. [/FONT]
[FONT=&quot] OleDbConnection oleConn = new OleDbConnection(connectionstring);[/FONT]
[FONT=&quot] OleDbCommand myCommand = new OleDbCommand(command, oleConn);[/FONT]
[FONT=&quot] oleConn.Open();[/FONT]
[FONT=&quot] try[/FONT]
[FONT=&quot] {[/FONT]
[FONT=&quot] myCommand.ExecuteNonQuery();[/FONT]
[FONT=&quot] }[/FONT]
[FONT=&quot] catch(Exception err)[/FONT]
[FONT=&quot] {[/FONT]
[FONT=&quot] if(err.ToString().IndexOf("already exist")>0)[/FONT]
[FONT=&quot] {[/FONT]
[FONT=&quot] //eger bu device zaten mevcut ise birşey yapmıyoruz.[/FONT][FONT=&quot]
[/FONT][FONT=&quot] MessageBox.Show("Dump Device Zeten Mevcuttu.");[/FONT]
[FONT=&quot] return;[/FONT]
[FONT=&quot] }[/FONT]
[FONT=&quot] else[/FONT]
[FONT=&quot] {[/FONT]
[FONT=&quot] MessageBox.Show(err.Message,"Hata");[/FONT]
[FONT=&quot] }[/FONT]
[FONT=&quot]}[/FONT]
[FONT=&quot] oleConn.Close(); [/FONT]
[FONT=&quot]}[/FONT]


Ve son olarak yedekleme işlemini başlatacak butonumuza çift tıklıyarak,
Yedekleme işlemini başlatacak kodumuzu yazıyoruz.


[FONT=&quot] //BackUp islemini baslatacak Butonumuz[/FONT]
[FONT=&quot] private[/FONT][FONT=&quot] void button1_Click(object sender, System.EventArgs e)[/FONT]
[FONT=&quot]{[/FONT]
[FONT=&quot]//DumpDevice oluşturacak procedure çalıştıralım.[/FONT]
[FONT=&quot] CreateDumpDevice();[/FONT]

[FONT=&quot]//Hangi database yedeklemek istiyorsak onu combobox dan seciyoruz.[/FONT]
[FONT=&quot] string databasename = comboBox1.SelectedValue.ToString();[/FONT]
[FONT=&quot]//yedekleme işlemini yapacak SQL komutumuz.[/FONT]
[FONT=&quot]//bu komut sectigimiz databasei daha once olusturdugumuz device’e yazıyor.[/FONT]
[FONT=&quot]//Bir device uzerinde farklı databaseleri yedekleyebiliriz. [/FONT]
[FONT=&quot] string command = "BACKUP DATABASE "+databasename+" TO sqlBackUp";[/FONT]
[FONT=&quot] OleDbConnection oleConn = new OleDbConnection(connectionstring);[/FONT]
[FONT=&quot] OleDbCommand myCommand = new OleDbCommand(command, oleConn);[/FONT]
[FONT=&quot] myCommand.Connection.Open();[/FONT]
[FONT=&quot] try[/FONT]
[FONT=&quot] {[/FONT]
[FONT=&quot] myCommand.ExecuteNonQuery();[/FONT]
[FONT=&quot] label2.Text = "Yedekleme işlemi tamamlandı.";[/FONT]
[FONT=&quot] }[/FONT]
[FONT=&quot] catch(Exception err)[/FONT]
[FONT=&quot] {[/FONT]
[FONT=&quot] MessageBox.Show(err.Message,"Hata");[/FONT]
[FONT=&quot] }[/FONT]
[FONT=&quot] oleConn.Close(); [/FONT]
[FONT=&quot]}[/FONT]

sqlbackup3.gif


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...

restore1.gif

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.


restore2.gif
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.

restore3.gif


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

C# ile SQL Backup - 2
C# kullanarak SQL yedeklerini geri yükleme!
SQL Restore:

Bu makalede ise yedek dosyalarından nasıl geri yükleme işlemi yapabiliriz ondan bahsedeceğim.

Öncelikli olarak projemizi VisualStudio 2003 kullanarak yaptığımızı belirteyim.

Yeni bir proje oluşturuyoruz.

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

sqlbackup1.gif


sqlbackup_1.jpg
Formumuzun üzerine
1 Adet ListBox ve
1 Adet Buton koyuyoruz.
[FONT=&quot] //baglantı cümlemizi tanımlıyoruz.[/FONT]
[FONT=&quot] private[/FONT][FONT=&quot] string connectionstring = "Provider=sqloledb;data Source=server_name;uid=sa;password=pass;database=m aster";[/FONT]
[FONT=&quot] //yedek dosyalarımzın oldugu dizin.[/FONT]
[FONT=&quot]private[/FONT][FONT=&quot] string path = "C:\";[/FONT]


Formumuzda boş biryerde çift tıklayarak, formumuzun yüklenmesi sırasında listbox nesnesine yedeklerimizin oldugu klasordeki yedek dosyarlımızı gösterecek kodu yazacağız.


[FONT=&quot] private[/FONT][FONT=&quot] void Form1_Load(object sender, System.EventArgs e)[/FONT]
[FONT=&quot]{[/FONT]
[FONT=&quot] listBox1.Items.Clear();[/FONT]
[FONT=&quot] listBox1.Items.Add(" -- Yedek Dosyaları -- ");[/FONT]
[FONT=&quot] DirectoryInfo dir = new DirectoryInfo(path);[/FONT]
[FONT=&quot] FileInfo[] backupfiles = dir.GetFiles("*.bak");[/FONT]

[FONT=&quot] foreach(FileInfo f in backupfiles)[/FONT]
[FONT=&quot] {[/FONT]
[FONT=&quot] listBox1.Items.Add(f.Name.ToString());[/FONT]
[FONT=&quot] }[/FONT]
[FONT=&quot]}[/FONT]


Daha sonra Butonumuza çift tıklayarak. Yedeğimizi geri yükleyecek kodu yazıyoruz.

[FONT=&quot] private[/FONT][FONT=&quot] void button1_Click(object sender, System.EventArgs e)[/FONT]
[FONT=&quot]{[/FONT]
[FONT=&quot] string backupfile; [/FONT]
[FONT=&quot] string dbname = "DATABASE_ADI"; // geri yuklenecek database ismi.[/FONT]

[FONT=&quot] if(listBox1.SelectedIndex < 1)[/FONT]
[FONT=&quot] {[/FONT]
[FONT=&quot] MessageBox.Show("Yedek seciniz","Hata");[/FONT]
[FONT=&quot] return;[/FONT]
[FONT=&quot] }[/FONT]
[FONT=&quot] backupfile = listBox1.SelectedItem.ToString();[/FONT]
[FONT=&quot] // geri yükleme işlemini yapacak olan kodumuz.[/FONT]
[FONT=&quot] string[/FONT][FONT=&quot] command = "RESTORE DATABASE "+dbname+" FROM DISK = '"+path+backupfile+"'";[/FONT]
[FONT=&quot] // Komutumuzu işletelim.[/FONT]
[FONT=&quot] OleDbConnection oleConn = new OleDbConnection(connectionstring);[/FONT]
[FONT=&quot] OleDbCommand myCommand = new OleDbCommand(command, oleConn);[/FONT]
[FONT=&quot] oleConn.Open();[/FONT]
[FONT=&quot] try[/FONT]
[FONT=&quot] {[/FONT]
[FONT=&quot] myCommand.ExecuteNonQuery();[/FONT]
[FONT=&quot] MessageBox.Show("Geri yükleme başarılı","Mesaj");[/FONT]
[FONT=&quot] }[/FONT]
[FONT=&quot] catch(Exception err)[/FONT]
[FONT=&quot] {[/FONT]
[FONT=&quot] MessageBox.Show(err.Message,"Hata");[/FONT]
[FONT=&quot] }[/FONT]

[FONT=&quot] oleConn.Close(); [/FONT]
[FONT=&quot]}[/FONT]

Eğer işlem hiç hata oluşmadan tamamlanırsa geri yüklemenin bittiğine dair bir mesaj alacağız.