Bu makalede sql server da bir veritabanının yedeği farklı klasör veya disk altına alma işlemini ele alacağız. Veritabanı yöneticileri genellikle robocopy gibi araçları veya xcopy gibi yerel DOS komutlarını kullanarak veritabanını kopyalarlar. Bunlara gerek kalmadan aşağıdaki komutlarla bu işlemler yapılabilir. SSMS arayüzünden yapılmayan bir işlemdir. Aşağıdaki kod parçasında Mirror.bak uzantısını 3 farklı path’e almaktadır.
BACKUP DATABASE AdventureWorks2012
TO DISK = N'C:\MIRROR1\Mirror.bak'
MIRROR TO DISK = N'C:\MIRROR2\Mirror.bak'
MIRROR TO DISK = N'C:\MIRROR3\Mirror.bak'
WITH FORMAT
Bu komut satırında WITH FORMAT yedeklemeyi yeniden başlatır. Eğer aynı backup’ın üzerine yedek alacaksanız önceki yedeği siler. Normal backup işlemlerinde içerisinde dosya olarak görülmektedir. Ama mirror backup ile aynı isimli klasöre 100 tanede backup alsak ilgili backup klasörünün içerisinde sadece 1 backup klasörü vardır. Normal backup işlemlerinde aynı isimde aldığımız backuplar restore sırasında hangi with file olarak belirtip istediğimiz backup’dan dönüş yapabiliyoruz.

Kod bloğunu aşağıdaki gibi kullandığımızda hata mesajıyla karşılaşırız. Bunun için Mirror to kod parçacığından sonra eklenen tüm disklerin başına MIRROR TO ibaresi koyulmalıdır. Bu hata mesajını yapım aşamasında almıştım paylaşmak istedim.
BACKUP DATABASE AdventureWorks2012
TO DISK = N'C:\MIRROR1\Mirror.bak'
MIRROR TO DISK = N'C:\MIRROR2\Mirror.bak',
DISK = N'C:\MIRROR3\Mirror.bak'
WITH FORMAT
Hata mesajı:
Invalid backup mirror specification. All mirrors must have the same number of members.
Always On yapısında Mirror Backup kullanılması teknik olarak mümkündür ancak önerilmez. Backup Preference ayarlarıyla çakışabilir, gereksiz I/O yükü oluşturabilir ve log zincirinin bozulmasına neden olmaz ama olabilme ihtimali vardır. Eğer yedeklerin yedeklenmesi gerekiyorsa, Mirror Backup yerine yedekleme sonrası dosya kopyalama (robocopy, rsync, PowerShell vb.) gibi yöntemler tercih edilmelidir.
Alwayson yapısı olan bir ortamda veritabanlarını iki node atmak isteyebiliriz. Bu yöntem Ola hallengreen scriptleri ilede yapılmaktadır. DatabaseBackup procedure içerisine girildikten sonra ilgili parametreler görülebilir.

Yukarıdaki resimde görülen @MirrorDirectory komutu ile alınan backup’ın aynısını yukarıda belirttiğimiz gibi başka bir sunucu üzerinde de alabiliriz. Aşağıdaki komut belirtilen dizinlere Full backupları almaktadır.
EXECUTE [dbo].[DatabaseBackup] @Databases = 'DB_NAME',
@Directory = N'\\S24\yedek1',
@MirrorDirectory='\\S23\yedek1',
@BackupType = 'FULL',
@CleanupTime = 144,
@CleanupMode = 'AFTER_BACKUP',
@Verify = 'Y',
@Checksum = 'Y',
@LogToTable = 'Y',
@Compress= 'Y',
@BlockSize= 4096,
@NumberOfFiles = 8,
@BufferCount=50,
@MaxTransferSize = 4194304
Başka bir makalede görüşmek dileğiyle.
“Güneşi parlak bir ışık kaynağı, ayı ise bir nûr yapan, yılların sayısını ve vakitlerin hesâbını bilmeniz için aya menziller takdir eden O’dur. Allah, bütün bunları boş yere değil gerçek bir gaye, sebep ve hikmete dayalı olarak yaratmıştır. O, bilip anlayacak kimseler için âyetlerini bu şekilde detaylarıyla açıklamaktadır.” Yunus-5