Merhaba;
Şirketimizin “BI” ekibi periyodik olarak cube databaseinin (.abf) yedeğinin alınmasını ve geriye dönük olarak saklanmasını istedi.
Normal bir db yedeği gibi bir job schedule yada maintenance plan tanımlayamıyoruz.
Bende bu ihtiyaç için şöyle bir yol izledim.
Analysis Servera bağlanıp yedeğini almak istediğimiz db’ye sağ tıklayıp backup’a tıklıyoruz. OK’e tıklamadan yukarıda solda Script butınuna basıyoruz.
Bu bize bir XMLA scripti oluşturacak. Bu scripti job tanımımızda kullanacağız.
<Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine"> <Object> <DatabaseID>test</DatabaseID> </Object> <File>C:\Backups\test.abf</File> <AllowOverwrite>true</AllowOverwrite> </Backup>
Bu aşamadan sonra Analysis Serverdan çıkıp Database Engine bağlanabiliriz.
SSAS_Backup adında yeni bir job oluşturuyorum, yeni bir Step ekleme ekranında;
Type olarak SQL Server Analysis Services Command seçiyoruz. Localdeki servera bağlanacağımdan Server kısmına .(nokta) koyuyorum. Ve biraz önce aldığımız scripti buraya yapıştırıyorum.
Eğer isterseniz bu job üstünde bir schedule oluşturarak yedek alabilirsiniz. Fakat geriye dönük bir yedekleme olmamış olur çünkü hergün aynı isimde yedek almış oluyoruz bu şekilde. Daha komplike yapmak için yeni bir Maintenance Plan oluşturuyorum.
Kullanacağımız taskler:
– Execute SQL Server Agent Job Task
– Execute T-SQL Statement Task
Execute SQL Server Agent Job Task’a çift tıklayıp oluşturduğumuz SSAS_Backup isimli jobu seçiyoruz.
.ABF yedeğimizi alan task hazır. Şimdi de yedeklenen dosyanın ismini değiştirip 10 günden eski dosyaları sildirelim.
Bunun için diğer taskimiz Execute T-SQL Statement’ı da ekleyip içine şu t-sql komutunu yapıştırıyoruz.
Bu komutların amacı:
Waitfor Delay: Dosyanın compress işlemi, yedek alındıktan sonra uygulanıyor ve bu sırada dosya kilitli oluyor. SQL server ise compress işlemi yaparken diğer işlemleri yapmaya çalıştığından isim değiştirilemiyor. Bu yüzden isim değiştirmeden 2 dklık bir bekleme için WAITFOR DELAY ’00:02:00′ komutunu kullanıyoruz.
İsim değiştirme ve eski dosyaları silmek için windows cmd komutlarını kullanacağız.
WAITFOR DELAY '00:02:00' --2 DK Bekliyor. GO EXEC master.dbo.xp_cmdshell 'REN C:\Backups\Test.abf Test_%date%.abf' --Dosya isminin sonuna tarih ekleniyor. GO EXEC master.dbo.xp_cmdshell 'FORFILES /p "C:\Backups" /s /m *.abf /d -10 /c "CMD /C del /Q @FILE"' --10 günden eski dosyalar siliniyor.
Windows 2008 ve üstü serverlar için şu scripti kullanın. xp_cmdshell, % operatöründe syntax hatası veriyor.
WAITFOR DELAY '00:02:00' --2 DK Bekliyor. GO Declare @date nvarchar(12) set @date =CONVERT(nvarchar(12),GETDATE(), 104) Declare @cmd nvarchar(500) set @cmd = 'ren C:\Backups\test.abf test_' + @date + '.abf' exec master.dbo.xp_cmdshell @cmd --Dosya isminin sonuna tarih ekleniyor. GO EXEC master.dbo.xp_cmdshell 'FORFILES /p "C:\Backups" /s /m *.abf /d -10 /c "CMD /C del /Q @FILE"' --10 günden eski dosyalar siliniyor.
Eğer daha önceden database mail ayarları yapılı ve bir operatör ekli ise işlem sonucunu mail olarakta alabiliriz. Bunun için yukarıda Manage Connections butonunun sağında bulunan Reporting and Loggin ekranından Agent operatörü seçilebilir.
Maintenance planımızın son görüntüsü şu şekilde olmalı;
Kaydettikten sonra oluşturduğumuz planı test etmek için. Maintenance planımıza sağ tıklayıp Execute diyoruz.
Görüldüğü gibi ilk önce test.abf adında yedek alındı ve daha sonrasında sonuna tarih eklendi.
Umarım faydalı olabilmişimdir.
Hoşkalın.