MSSQL Express Sunucu üzerindeki Veritabanlarının otomatik yedeklenmesi

MSSQL veritabanı üzerinde sürekli yedeklenmesi gereken veritabanlarınız var ve bu veritabanlarınızın sayısı ve isimleri zaman içinde sürekli olarak değişirken sizin bunları günde birkaç sefer yedeklemeniz gerekiyor ama MSSQL Express kullanıyorsunuz.

Peki ama pratik olarak nasıl yapabiliriz?


DECLARE @name NVARCHAR(256) 
DECLARE @path NVARCHAR(512) 
DECLARE @fileName NVARCHAR(512)
DECLARE @fileDate NVARCHAR(40) 


SET @path = 'D:\Database\'


SELECT @fileDate = CONVERT(NVARCHAR(20),GETDATE(),112)

DECLARE db_cursor CURSOR READ_ONLY FOR
SELECT name
FROM master.sys.databases
WHERE name NOT IN ('master','model','msdb','tempdb') 
AND state = 0 -- aktif olan veritabanlarını alıyoruz
AND is_in_standby = 0

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name

WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @fileDate+'_'+ @name + '.BAK'
DBCC SHRINKFILE (@name)

BACKUP DATABASE @name TO DISK = @fileName

FETCH NEXT FROM db_cursor INTO @name
END

CLOSE db_cursor
DEALLOCATE db_cursor

hazırlamış olduğunuz yukarıdaki script dosyasını bilgisayarınıza kaydedin ve

sqlcmd -S . -i "C:\scriptler\dbyedekle.sql" -U dbkulaniciniz -P şifreniz

şeklindeki bir batch dosyası ile çalıştırılabilir hale getiriniz.

daha sonra bu batch dosyanızı ister manuel olarak ya da zamanlanmış görevlere ekleyerek belirli zamanlarda çalışmasını sağlayabilirsiniz.