MSSQL Server 2008 de Tarih Bazlı Folder a Otomatik Backup Alma

Selamlar Arkadaşlar,

Bir backup alanı düşünün ki 5 GB dosya boyutundan daha büyük dosya boyutunu kabul etmiyor.

Bu durumda eğer DB niz in backup ı 5GB geçiyorsa bu backup dosyasını bölmeniz gerekecektir. Bunu aşağıdaki şekilde yapabilirsiniz;

 

SQLBACKUP

Lakin buradaki sorun dosya isimlerini el ile veriyor olmanız ve bunları tarihe göre arşivleyemiyor olmanızdır.

Bunu çözmek için aşağıdaki SQL scripti size yardımcı olacaktır. Bu script aşağıdaki dizin yapısında günlük çalıştırılarak tarih bazında dizin oluşturup, backup larınızı bu dizinlerde saklamanıza yardımcı olacaktır.

Backup Dizini
|
|_ DB1
|   |_YYYYAAGG
|   |_YYYYAAGG
|_DB2
|_YYYYAAGG
|_YYYYAAGG

Burada bulunan DB1 ve DB2 dizinlerinin el ile önceden DB adı olarak açılması gerekiyor. YYYYAAGG dizinleri ise script tarafından otomatikman açılacaktır.

Scripti çalıştırdığınızda backup dizini altına gidecek, ilgili DB nin klasörüne girecek, o günün tarihi ile bir dizin oluşturacak ve bu dizinin içerisine YYYYAAGG_1.bak, YYYYAAGG_2.bak şeklinde artan dosyalarla backup ınızı alacaktır.

Not: MSSQL 2008 10.50.4000 versiyonunda test edilmiştir.  MSSQL 2012 de çalıştırmak isterseniz 31. satırdaki
SET @result = @result+’, ‘+CHAR(13)+@disk
ifadesini
SET @result = CONCAT(@result,’, ‘,CHAR(13),@disk)
ifadesi ile değiştirmeniz gerekecektir.

 

DECLARE @delimitedArray VARCHAR(MAX) = ‘DB1;DB2;DB3;DB4;’ –Backup Alınacak DB İsimleri
DECLARE @delimiter CHAR = ‘;’
DECLARE @DataPath nvarchar(500) =”;
DECLARE @Date nvarchar(500)=”;
DECLARE @DirTree TABLE (subdirectory nvarchar(500), depth INT)
DECLARE @i int=”;
DECLARE @Path nvarchar(500)=”;
DECLARE @disk varchar(500)=”;
DECLARE @result varchar(4000)=”;
DECLARE @Path@i nvarchar(500)=”;
DECLARE @sonuc varchar(4000)=”;
DECLARE @DB nvarchar(20)=”;
DECLARE @query varchar(4000)=”;

WHILE LEN(@delimitedArray) > 0
BEGIN
SET @DB = LTRIM(SUBSTRING(@delimitedArray, 1, CHARINDEX(@delimiter, @delimitedArray) – 1));
SET @delimitedArray = SUBSTRING(@delimitedArray, CHARINDEX(@delimiter, @delimitedArray) + 1, LEN(@delimitedArray))
SET @Date = CONVERT (nvarchar(8),GETDATE(),112)
SET @DataPath = ‘\\yourserver\backuplocation\’ + @db + ‘\’ + @Date –Backup alınacak Dizin Tanımlaması
INSERT INTO @DirTree(subdirectory, depth)
EXEC master.sys.xp_dirtree @DataPath
IF NOT EXISTS (SELECT 1 FROM @DirTree WHERE subdirectory = @DataPath)
EXEC master.dbo.xp_create_subdir @DataPath
DELETE FROM @DirTree
SET @i=1
While @i<11 –Backup ı kaça bölmek istiyorsanız bir fazlasını buraya yazınız. Örnek te backup dosyası 10 bölünecektir.
begin
SET @Path@i =’DISK=N”’ + @DataPath +’\’ + Convert(varchar,@Date)+ ‘_’ +Convert(varchar,@i) + ‘.bak”’
SET @disk = CONVERT (varchar(500),@Path@i)
SET @result = @result+’, ‘+CHAR(13)+@disk
SET @i=@i+1
end
SET @sonuc = CONVERT (nvarchar(4000),SUBSTRING(@RESULT,2,LEN(@result)))
SET @query = ‘BACKUP DATABASE ‘ + @DB + ‘ TO ‘ + @sonuc + ‘ WITH NOFORMAT, COPY_ONLY, NOINIT, NAME = N”’+ @DB +’_backup_’+@Date+”’, SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10 ‘
EXECUTE (@query)
SET @sonuc = ”;
SET @query = ”;
SET @result= ”;
SET @Path@i = ”;
END

İyi günler dilerim…

About Tansu Ekinci

Tansu Ekinci Biyografi 1980 yılının 24 Haziran’ ında Kırklareli’nin Babaeski ilçesinde doğmuştur. İlk öğretimini Hamdihelvacıoğlu İlkokulu’nda Ortaokul ve Lise eğitimini Kırklareli Anadolu Lisesi’ nde tamamladıktan sonra Ege Üniversitesi Ege Meslek Yüksek Okulu İşletmeciliği tamamlamış ve ardından İstanbul Üniversitesi İşletme Fakültesi’ ne Dikey Geçiş Sınavı ile geçerek işletme bölümünü bitirmiştir. Eğitim hayatı boyunca bir hobi olarak orta okul son sınıfta başlayan bilgisayar merakı giderek profeyonelleşmiş ve bir yaşam biçimi haline gelmiştir. Bu sırada çeşitli tüzel kişilere hizmet sunmuş ve bunun sayesinde bilgi işlem sektörünü kendisine meslek olarak seçmiştir. Bu sırada aldığı işletme eğitiminin de kendisine ileride yöneticilik için her zaman faydalı olacağının farkında olmuş ve bu konuyada önem vermiştir. Askerliğini 2005 yılında Muğla İli Ula ilçesinde Kısa Dönem Jandarma Çavuş olarak başarı ile tamamladıktan sonra Profesyonel iş hayatına atılmış ve ilk olarak bir yazılım şirketinde Yazılım Destek Departmanında işe başlamış ve burada mevcut yazılımın kullanımı ile ilgili olarak kullanıcı desteği ve eğitimi vermiştir. Ardından Netron Corparate Solutions şirketine Sistem Mühendisi olarak girmiş buradan da Marm Assistance A.Ş.‘ne geçiş yapmıştır. Ardından bu görevinden ayrılmış ve Limango Ltd.Şti isimli şirkette aynı pozisyonda çalışmaktadır. ޞu anda halen Limango Ltd.Şti. ‘de Senior Microsoft Sistem Mühendisi olarak çalışmaktadır…
This entry was posted in MSSQL Server, Teknik and tagged , , , , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.