SQL Server yüksek erişilebilirlik çözümlerinden olan Log Shipping modelinde öncelikle aktif (birinci) sunucunun full backup’ı alınıp ikinci sunucuya kopyalanır ardından belirli peryodlarda birinci sunucunun log backup’ı alınıp ikinci sunucuya kopyalanır. Böylece iki sunucununun veri tabanı düzeyinde aynı olması sağlanmış olur. SQL Server 2000 üzerinde log shipping işlemi için Enterprise Manager’ın Database Maintenance Plan Wizard aracı kullanılır. Bu aracı kullanmadan önce aşağıdaki notları dikkate almamız gerekir.
1 – İlk adım olarak Log shipping modeline dahil edilecek primary server ve secondary server sunucuları tanımlanır. Bu iki sunucu mutlaka iki ayrı fiziksel sunucu olacak diye bir durum yok. Aynı sunucu üzerindeki iki veritabanı arasında da log shipping işlemi yapılabilir. Ayrıca riski azaltmak amacıyla birden fazla secondary server kurulabilir. Primary database’in full veya bulk-logged recovery modelini kullanması gerekir.
2 – Seçmeli olarak bir monitor server kurulur. Monitor server, primary database üzerinde en son ne zaman transaction log alındığını, secondary server’in en son hangi backup dosyalarını kopyaladığını ve restore ettiğini ve bu süreçteki hataları izler. Monitor sunucunun, primary ve secondary sunucularından ayrı olması tavsiye edilir. Bir monitor sunucusu yapılandırıldıktan sonra log shipping kaldırılmadan bir daha yeniden yapılandırılamaz.
3 – Sunucuların güvenlik ayarının düzenlenmesi. Log shipping işlemini yaptığımız Windows kullanıcısının tüm sunucularda SQL Server systems administrator (sa) yetkilerine sahip olması gerekir.
4 – Paylaşım klasörlerinin oluşturulması. Primary ve secondary olmak üzere iki dosya paylaşımının yapılmış olması gerekir. Önce birinci sunucu tarafında kaynak veritabanının transaction loglarının tutulacağı bir klasör ardından ikinci sunucu tarafında bu logların taşınacağı ve restore edileceği bir klasör oluşturulur. Burada dikkat edilmesi gereken konu her ikisi sunucudaki SQL Agent’in kullandığı Windows kullanıcısının bu klasörler üzerinde yetkilerinin olmasıdır.
5 – Ardından bu üç sunucu (primary, secondary ve monitor) Enterprise Manager / Management Studio üzerine register edilir.
Aşağıdaki şekilde log shipping modeli çizilmiştir.
Şimdi bu işlemleri üzerinde adım adım uygulayalım. Kaynak ve hedef olmak üzere iki tane sunucumuz var.
Primary Server -> WXX\KAFKA
Secondary Server -> DW
Birinci sunucu (WXX\KAFKA) üzerinde log backuplarının alınacağı klasörü oluşturalım. Örneğin C:\LogShipOrnek\Logs\ olarak oluşturduğumuz klasör için \\WXX\Logs\ şeklinde erişebileceğimiz şekilde bir share folder oluşturalım. Bu klasöre hem birinci hem de ikinci sunucu erişecek şekilde yetkilendirme yapalım. Dışarıdan bu klasöre backup dosyaları kopyalanacağı için en iyi çözüm Everyone’a full hak vermektir.
Hem DW hem de WXX\KAFKA sunucusunu Enterprise Manager üzerinde register ettikten sonra “Management » “Database Maintenance Plan” aracığını sağ tıklayarak “New Maintenance Plan” menüsünü tıklayıp sihirbazı başlatalım. Bilgilendirme ekranını geçtikten sonraki ikinci ekranda hangi veritabanlarının bu modele dahil edilip edilmeyeceği seçilir. Log shipping işleminin kullanılması için bu ekrandaki “< ı>Ship the transaction logs to other SQL Servers (log shipping).” seçeneğinin seçilmiş olması lazım.
Bu ekrandan sonraki ekranlarda optimizing data, checking integrity veya performing a full database backup ile ilgili herhangi bir seçenek girmeyip “< ı>Specify Transaction Log Backup Disk Directory” ekranına gelinceye kadar tüm ekranları geçelim. Bu ekranda “Use This Directory” seçeneğini işaretleyip “C:\LogShipOrnek\Logs” klasörünü gösterelim. Aynı zamanda bu ekrandaki “Remove Files Older Than” seçeneğini kullanarak log backupların ne kadar süre arşivde bekleyeceğini de belirleyebiliriz.
Bu ekrandaki ayarlara göre log dosyaları ilgili klasörde Kaynak_tlog_yyyymmddhhmm.trn olarak kayıt edilir. Sonraki ekran olan “Specify the Transaction Log Share” ekranında log backup klasörünün networkten erişim yolunu yazalım (\\WXX\Logs\ ).
“Specify the Log Shipping Destinations” ekranında Add buttonunu tıklayıp ikinci sunucu veya sunucuları ekleyelim.
Bu ekranda yedek sunucu olarak görev yapacak olan DW sunucusunu ekledik. Ayrıca DW üzerinde veri tabanı ilk defa yaratılacağı için mdf ve ldf dosyalarının hangi klasörde olacağını ve log dosyalarının DW tarafında hangi klasöre kopyalanacağını tanımlıyoruz. Bu ikinci sunucunun nonrecovered durumunda olması gerekir.
no recovery mode – Veritabanına her türlü kullanıcını erişimini engeller
standby mode – Sadece okunabilir (read-only) erişimlere izin verir. Ayrıca transaction logların restore edilmesi esnasında bağlı kullanıcıları sonlandırmak için bu ekrandaki “Terminate users in database” seçeneği kullanılır.
Sunucuyu ekleyip diğer ekrana geçelim;”Initialize the Destination Databases”. Bu ekranda iki sunucuyu eşitlemek için gerekli olan full backup’ın şimdi mi alınması yoksa daha önce alınıp alınmadığını belirtiyoruz. Kaynaktaki veritabanımız çok büyükse bu işlemi gece almamız daha uygun olacaktır. Ekranda gösterildiği gibi full backupın şimdi alınmasını sağlayıp diğer ekrana geçelim.
Sonraki ekran olan “Log Shipping Schedules” ekranı log shipping işlemlerinin hangi sürelerde gerçekleştirileceği belirtilir.
Copy/Load Frequency, ne sıklıkta backup dosyalarının ikinci sunucuya kopyalanacağı ve restore edileceğini belirtir.
Load Delay, backup copy veya restore jobları arasındaki süreyi belirtir. Bu süreyi azaltmak için değeri sıfıra yaklaştırmalıyız. Nitekim bu alanın varsayılan değeri 0’dır.
The file-retention period, ikinci sunucuda log backupların ne kadar süre tutulacağını belirtir. Varsayılan değerde olduğu gibi son 24 saate ait backupların tutulması tavsiye edilir.
Bir sonraki ekrana geçelim. “Log Shipping Thresholds” ekranında backupların alınamaması ve restore jobların çalışmaması için ne kadar mühlet verileceği belirtilir. Diğer ekranda monitor server seçilir. Burada birinsi sunucuyu izleme sunucusu olarak işaretledik.
Sonraki ekranları da düzenleyip kurulum işlemini bitirelim.
“DB Maintenance Plan1¨ uygulaması oluşturulduğunda öncelikle WXX\KAFKA tarafındaki C:\LogShipOrnek\Logs klasöründe Kaynak_logshipping_init.bak isimli full backup oluşturulur. Ve ikinci sunucu (DW) tarafında aşağıdaki ifade aracılığıyla bu full backup ikinci sunucuya kopyalanır.
DECLARE @rv int EXECUTE @rv = master.dbo.xp_cmdshell N'copy "\\Wxx\Logs\Kaynak_logshipping_init.bak" "C:\LogShipOrnek\LogBackupFile\Kaynak_init.bak"', no_output SELECT @rv
Ardından ikinici sunucu tarafında bu full backup verdiğimiz klasörlere uygun olarak restore edilir.
RESTORE DATABASE [Kaynak] FROM DISK = N'C:\LogShipOrnek\LogBackupFile\Kaynak_init.bak' WITH FILE = 1, NOUNLOAD , STATS = 10, STANDBY = N'C:\LogShipOrnek\Data\undo_Kaynak.dat', MOVE N'Kaynak_Data' TO N'C:\LogShipOrnek\Data\Kaynak.mdf', MOVE N'Kaynak_Log' TO N'C:\LogShipOrnek\Data\Kaynak_log.ldf'
Ve yeni yaratılan bu database standby moduna geçirilir.
Log shipping modelinde kullanılan birinci ve ikinci sunucu tanımlamaları, en son hangi düzeyde backup alındığı ve restore edildiği gibi bilgiler msdb altındaki log_shipping_primaries, log_shipping_secondaries ve sysdbmaintplan_databases tablolarında tutulur.
Log shipping ayarlarını düzenlemek veya silmek için “DB Maintenance Plan1¨ dosyası çift tıklanır ve açılan penceredeki “Log Shipping” sekmesi kullanılır.
Ayrıca Log Shipping sürecinin takibi için Enterprise Manager altındaki Management bölümündeki “Log Shipping Monitor” alanı kullanılır. Buradan en hangi backupların alındığı, kopyalandığı ve karşıya yüklendiği bilgileri öğrenilir.
Log shipping, backup job, copy job, restore job ve alert job olmak üzere 4 temel job oluşturur. Backup Job, her primary database için primary server üzerinde oluşturulur. Varsayılan olarak bu job 15 dk’da bir çalışır. Copy Job, secondary server üzerinde oluşturulur. Bu job, primary server’den secondary server’e backup dosyalarını kopyalar. Restore Job, secondary server üzerinde oluşturulur. Bu job, kopyalanmış olan backup dosyalarını secondary database’ler üzerinde restore eder. Alert Job, eğer kullanıldıysa bu job monitor server üzerinde oluşturulur. Bizim örneğimizde monitor server olarak birinci sunucuyu seçtiğimiz için bu job birinci sunucu üzerinde oluşturuldu. Bu job, primary ve secondary database’ler tarafından paylaşımlı olarak kullanılıp backup ve restore işlemlerinin başarısız olması durumunda uyarı verir. Eğer monitor server kullanılmazsa alert job hem primary server hem de her secondary server üzerinde oluşturulur. Primary server üzerindeki alert job, backup işlemi başarısız olduğu zaman, secondary server üzerindeki alert job ise kopyalama ve restore işlemleri başarısız olduğu zaman uyarı evrir.
SQL 2005’te log shipping işleminin nasıl yapılacağını da örneklendirelim. Bu sefer hem kaynak hem de hedef database aynı sunucu üzerinde bulunsun.
Primary Server -> AHMETKAYMAZ
Secondary Server -> AHMETKAYMAZ
Primary Database -> Kaynak1
Secondary Database -> Kaynak2
Log backupların alınacağı klasör ->C:\LogShipOrnek\Logs
Log backupların ikinci sunucu tarafından kopyalanacağı klasör -> LogsCopy
Kaynak2 veritabanının veri klasörü->C:\LogShipOrnek\Data
Kaynak2 veritabanının log klasörü->C:\LogShipOrnek\Log
SQL Server Management Studio aracını açıp Kaynak1 veritabanını sağ tıklayarak “Tasks » Ship Transaction Logs” menüsünü Log Shipping penceresini açalım. Bu pencereye Kaynak1 veritabanının Properties bölümünden de erişilebilir.
Bu ekranda öncelikle Kaynak1 veritabanının birincil veritabanı olduğunu belirtiyoruz. Ekrandaki “Backup Settings” buttonunu tıklayıp yedek dosyalarıyla ilgili ayarlar yapalım.
Yedek klasörlerinin ağ ve yerel konumlarını girdikten sonra pencereyi kapatalım. Bir sonraki adım yedek sunucularını tanımlamaktır. Bunun için “Secondary server instances and databases” bölümünde Add düğmesini tıklayalım. “Secondary Database Settings” penceresinde ikinci sunucuyla ilgili ayarlar yapılır. Connect düğmesini tıklayıp ikinci sunucu olarak mevcut birinci sunucuyu göstereceğiz. Yedek veritabanının adını Kaynak2 olarak giriyoruz ve bu veritabanı şu anda sistem üzerinde hazır olmadığı için birinci veritabanında full backup alınmasını ve Kaynak2 olarak restore edilmesini sağlayacağız.
İkinci sunucuyla ilgili ayarları da bitirdikten sonra bu süreci izleyecek bir monitor server tanımlayalım. Bunun için ana penceredeki “Use a monitor server instance” seçeneğini işaretleyip Settings düğmesini tıklıyoruz. Monitor server olarak mevcut sunucuyu göstereceğiz.
Artık SQL Server 2005 üzerinde log shipping işlemini hazırlamış olduk. OK düğmesini tıklayarak gerekli jobları oluşturalım. İşlemi başlattığımız anda Kaynak2 veritabanı salt-okunur modunda oluşturulur ve işlemleri yürütecek joblar yaratılır.
Son olarak şu notu ekleyelim SQL 2005 ve SQL 2000 arasında secondary/primary veya primary/secondary olarak log shipping kurulamaz.