Bu yazımızda AlwaysOn Mimarisinde olan 2 sunucudan secondary makine üzerinde olan database’leri yeniden restore etmeden Windows Format sonrası tekrar AlwayOn’a bağlarken yapılması gereken senaryoları adım adım işleyeceğiz.
- Adım: Sunucu içinde yer alan tüm Cluster Bilgileri Alınır (Ekran Görüntüleri ile Roles ve Nodes bilgileri dâhil). Varsa Witness Share File veya Disk Quarum bilgileri alınır. Buradaki amaç herhangi bir beklenmeyen durumda tüm bilgileri tekrar girip cluster’ı ayağa kaldırmak.
- Adım: Sunucu içinde kullanmış olduğunuz Disklerin Bilgisini almak. Aşağıdaki komut ile diske ait ihtiyaç olabilecek bilgileri bir csv uzantılı bir dosyaya yazdırabilirsiniz. Bu bilgileri almamızın sebebi, biz sql server yapımızda root and mount disk yapısı kullandığımız için root diske bağlanacak olan mount diskler offline moda çekilecek ve sonrasında tekrar bağlantı yapıldığında doğru diskleri doğru yere bağlamak için bu bilgiler önemlidir.
get-disk | select disknumber,uniqueid,FriendlyName,Size | Sort-Object -Property DiskNumber > H:\DiskInf\Disks_All.csv
- Adım: Sql Server kullanıcı bilgilerini sp_help_revlogin komutu ile bir notepad.txt dosyası içinde yedeklenmelidir.
- Adım: Sql Server üzerinde kullanılan tüm linked server’ların create bilgisi notepad.txt içinde yedeklenmelidir.
- Adım: Sunucu içinde ODBC kullanılıyorsa (Oracle, postgre vs.) tüm bilgiler yedeklenmelidir. Ayrıca Windows Search => HKEY_LOCAL_MACHINE => SOFTWARE=> ODBC klasörünü sağ click => export ederek yedekleyiniz. Daha sonra bunu sunucu kurulumu tamamlandıktan sonra regedit açılıp File kısmından import ettiğinizde kullanmış olduğunuz ODBC’ye ait önceki tüm bilgiler gelecektir.
Görsel 1: ODBC regedit Export
- Adım: SQL server path bilgileri saklanmalıdır. Aşağıdaki script ile bu bilgileri bir csv dosyası içerisinde saklayınız.
select a.physical_name,DB_NAME(a.database_id)as name,a.size,b.volume_mount_point,b.total_bytes from sys.master_files a cross apply sys.dm_os_volume_stats(a.database_id,a.file_id) b order by volume_mount_point asc
- SQL Server için kullandığınız Trace Flag’ların bilgisi not ediniz. Bu bilgiler C diskinde yapılacak format sonrası sistem veri tabanları yedeklemiş olsanız da gelmeyecektir. O yüzden bu bilgileri kesinlikle not etmelisiniz.
- Adım: Bu adım en önemli kısmı. Format işlemimizi C klasörüne atacağız. Biz SQL Server sadece bin klasörünü bu path’te tutuyoruz. Sistem veri tabanlarımız(msdb, master ve model) ayrı bir local olmayan disk altında tutuyoruz. Veri tabanlarına, joblara, AlwaysOn ait tüm bilgiler bu veri tabanlarında tutulduğu için bu veri tabanlarını mdf ve ldf file’larını başka bir sunucuda ya da local bilgisayarınızda yedekleyiniz.
- Format işlemi yapılacak olan Secondary makine AlwaysOn Primary Availability Group (AG) altında Availablity Replicas altından Remove edilerek çıkarılır. Bu işlem sonrası Secondary Makine üzerindeki tüm database’lerin Restoring Moda geçmesini bekleyiniz. Ve Eğer Primary üzerinden transaction log backup almaya devam edecekseniz. Çıkarma işlemi yaptığınız saati not ediniz. İlerdeki adımlarda log transaction işleme durumunda bu saat önemli olacak.
Görsel 2: Primary AG üzerinden Secondary Makine’nin Çıkarılması
Görsel 3: Primary AG üzerinden çıkarılan Secondary Makine’nin veri tabanları
- SQL Server system database’lerinin kurulu olduğu klasörün adını değiştiriniz. Örneğin MSSQL14 ise MSSQL14_Old Olarak
Görsel 4: Yeni SQL Server kurulumu öncesi dosya ismi değişikliği görüntüsü ve kurulum sonrası oluşacak olan klasör.
- Adım: Yukarıdaki adımlar tamamlandıktan sonra mdf ve ldf file’ların bilgisinin tutulduğu diskler herhangi bir corruption meydana gelmemesi adına offline moda alınır.
Görsel 5: Formatlama öncesi disklerde problem yaşanmaması için Offline mode çekilmesi
- Sistemimiz Always On mimarisinde olduğu için Failover Cluster Manager Ekranından => Nodes kısmında format işlemi yapacağımız Node üzerinden sağ click => More Actions => Stop Cluster Service diyoruz ve node’u susturuyoruz. Tekrardan Node üzerinde sağ click => More Actions => Evict ederek cluster’dan node’u koparıyoruz. Node durdurmadan da Evict edilebilir fakat bu yöntem daha güvenli olduğu için bu yöntemi izlemenizi tavsiye ederiz.
Görsel 6: Failover Cluster Manager’dan çıkarılacak Node’un Durdurulması
Görsel 7: Failover Cluster Manager çıkarılacak Node’un Cluster’dan çıkarılması
- Adım: Windows Server formatlama işlemine başlanılır. Formatlama hatasız bir şekilde sonlandıktan sonra bir sonraki adıma geçilir.
- Adım: Server Manager’dan Failover Cluster Manager Kurulumu gerçekleştirilir ve Node tekrardan Failover Cluster Manager’e eklenir. Failover Cluster Manager => Add Node => Enter Server Name kısmına server name eklenerek Node Cluster’a dahil edilir.
Görsel 8: Format işlemi sonrası Node Failover Cluster Manager’a eklenmesi
- Adım: Diskler tekrardan Online moda çekilir ve SQL Server kurulumu yapılır. Kurulum esnasında dikkat edilmesi gereken hususlar;
- Instance adı kurulum önceki Instance adı ile aynı olmalıdır.
- System Database’lerin path’leri kurulum önceki path’ler ile aynı olmalıdır.
- Service ve agent hesapları kullanıcıları özellikle AlwaysOn olan sistemlerde kurulum öncesi hesaplar ile aynı olmasına dikkat edilmelidir.
- Adım: SQL Server kurulumu tamamlandıktan sonra system database’lerinin kurulu olduğu klasörün altındaki veri tabanlarının uzantılarını değiştiriniz. Örneğin msdb.mdf ise msdb_new.mdf şeklinde tüm system veri tabanları adlarını değiştiriniz.
- Adım: Kurulum öncesi MSSQL14_Old (9.Adımda örnekte verdiğimiz Klasör) klasörün altındaki system database’leri (mdf ve ldf file) kopyalanıp yeni kurulum sonrası oluşan MSSQL14 altındaki system veri tabanları yerine yapıştırılır. Tüm bu adımlar SQL Server Service hesabı kapalı iken yapılır. SQL Server Service start edildikten sonra Tüm database’ler restoring mode’da gelecektir.
Görsel 9: SQL Server kurulumu sonrası eski sistem veri tabanlarının yeni kurulum sonrası oluşan sistem veri tabanlarının yerine kopyalanması sonrası oluşan görüntü.
- Adım: Cluster içine eklemiş olduğumuz node’u SQL Server Always On üzerinde Availability Replicas üzerinden Replikayı ekliyoruz.
Görsel 10: Secondary ile Primary makine arasındaki AlwaysOn bağlantısının yapılması için Yeni kurulan secondary makinenin primary AG üzerinden replicaya eklenmesi
- Adım: Replika eklendikten sonra database’leri eklememiz gerekmektedir. Biz işlemimiz süresince oluşabilecek herhangi bir aksaklık durumunda backupların alınmasına devam ettik. Sizler burada transaction log alınmasını durdurursanız. Database’leri AlwaysOn’da herhangi bir işlem yapmadan join edebilirsiniz.
- Adım: Eğer backup almaya devam ettiyseniz. Tüm transactional log backupların Restoring mode’daki databaselere işlememiz gerekmektedir. Aşağıdaki scriptle replikayı kopardığınız tarihi not ettiyseniz. Aşağıdaki script ile tarih şartını kullanarak çıktı restore edeceğiniz Instance üzerinde kullanabilirsiniz.(Doğru Instance üzerinde olduğundan emin olunuz.). Eğer script boyutunuz sığmaz ise SSMS => Query => Query Options=> Maximum Number of characters displayed in each column değerini arttırınız.
DECLARE @i int = 5 WHILE @i<= (Select max(database_id) from sys.databases) BEGIN DECLARE @dbName sysname Select @dbName=name from sys.databases where database_id=@i SELECT 'RESTORE LOG ['+@dbName+'] FROM DISK = N''' + m.physical_device_name + ''' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10' +CHAR(10) + CHAR (13) + ' GO' FROM msdb.dbo.backupset s INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id WHERE s.database_name = @dbName and s.[type]='L' -- Remove this line for all the database and backup_finish_date >='2023-08-24 15:00:38.000' ORDER BY backup_finish_date ASC SET @i=@i+1 END i+1 END
- Windows search > Local Security Policy > User Rights Assignment > Perform Volume Maintenance Tasks ve Windows search > Local Security Policy > User Rights Assignment > Lock Pages in Memory içeriğine SQL Server Engine kullanıcı eklenerek IFI için aktif edilir. konu hakkında detaylı bilgi için SQL SERVER – INSTANT FILE INITIALIZATION adlı makaleyi inceleyebilirsiniz.
- Adım: Transaction Log backupları işleyerek, Primary makine ile Secondary makine eşit zamana getirilir. Sonrası Avaliability Database altından ilgili Database join edilerek hizmete açılır.
0 Yorum