Bu yazıda Microsoft Configuration Manager (SCCM) veri tabanını SQL Always on yapısına nasıl aktarılacağını anlatmaya çalışacağım.
Başlamadan önce SCCM sunucunuzun yedeğini almayı unutmayın.
Önemli Hatırlatmalar
- SQL Server Enterprise Sürüm kullanılmalıdır. Eğer Standard kurulum yapılımı bir ortamınız varsa nasıl Enterprise sürümüne yükselteceğinize aşağıdaki yazımdan bakabilirsiniz.
https://www.sertactopal.com/how-to-upgrade-sql-server-standard-to-enterprise - Eğer SCCM kurulumunu yeni sıfırdan yapıyorsanız kurulumu normal olarak yapıp DB’yi daha sonra Always on yapısına aktarmalısınız.
- Always on ortamı DB aktarımından önce hazır hale getirilmelidir.
- Kullandığınız SQL Server sürümü SCCM tarafından desteklenen SQL sürümü olmalıdır.
Supported SQL Server versions – Configuration Manager | Microsoft Learn - Kurulum işlemi yapacağınız kullanıcı hesabı, SCCM ve SQL sunucularında Local admin, SCCM üzerinde Full Admin SQL üzerinde de SYSAdmin olmalıdır.
- Kullanılan Sunucuların Computer Hesapları (SCCM Server ,SQL Sunucular) birbirlerinde Local Admin gurubuna üye olmalıdır.
- SQL Server 2016 Standard edition üzerindeki basic availability groups’lar desteklenmemektedir.
- Reporting database ve WSUS database Always on için desteklenmemektedir.
- Örnek bir Always On yapılandırmasına aşağıdaki yazımdan ulaşabilirsiniz.
https://www.sertactopal.com/how-to-create-and-configure-sql-server-always-on-availability-group - Yazıdaki ortamda SCCM DB ile SCCM aynı sunucu üzerinde. SQL01 ve SQL02 ismindeki sunucular aktarım yapılacak SQL Sunucularıdır.
İlk olarak SCCM servislerini durdurarak yedek alma işlemini gerçekleştirmeliyiz.
Aldığımız yedeği aktarım yapacağımız SQL sunucuna kopyalayarak Restore ediyoruz.
Yedeği dönmecen önce Verify etmekte fayda var, sonrasında restore işlemini gerçekleştirebiliriz.
Artık SCCM DB yeni SQL sunucumuzda bulunuyor.
Bu andan sonra sırayla aşağıdaki komutları çalıştıracağız.
Kullandığım komutları aşağıdaki Microsoft sitesinden alarak kullandım. Komutları kullanmadan önce bir Notepad’e yapıştırın. Tırnak işaretleri Copy/paste yaparken bozuluyor.
Eğer böyle bir sorun yaşarsanız Notepad üzerinde düzeltmeyi unutmayın.
Prepare to use an availability group – Configuration Manager | Microsoft Learn
İlk olarak SQL sunucularımızdan hangisi Primary ise (Yedeği döndüğümüz sunucu) benim örneğimde SQL01 onun üzerinde aşağıdaki komutları çalıştıracağız.
Dikkat: Bu işlemleri önce sadece Primary olan sunucuda yapmalıyız!
- Enable CLR Integration:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
- Set Max text repl size to 2147483647:
EXECUTE sp_configure 'max text repl size (B)', 2147483647
- Turn ON the TRUSTWORTHY setting:
ALTER DATABASE [CM_xxx] SET TRUSTWORTHY ON;
- Enable the Service Broker:
ALTER DATABASE [CM_xxx] SET ENABLE_BROKER
- Configure the Service Broker priority:
ALTER DATABASE [CM_xxx] SET HONOR_BROKER_PRIORITY ON;
ALTER DATABASE [CM_xxx] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
- Set the database owner to the SA account (SA Hesabını Enable Etmenize Gerek YOK)
USE CM_xxx
go
sp_changedbowner
'sa'
go
Yukarıdaki tüm komutları çalıştırdıktan sonra SQL servisini restart edip kontrol scipt’ini çalıştırıyoruz. ,
Restart etmezseniz test Script’i hata verebilir.
- Database verification script:
SET NOCOUNT ON
DECLARE @dbname NVARCHAR(128)
SELECT @dbname = sd.name FROM sys.sysdatabases sd WHERE sd.dbid = DB_ID()
IF (@dbname = N'master' OR @dbname = N'model' OR @dbname = N'msdb' OR @dbname = N'tempdb' OR @dbname = N'distribution' ) BEGIN
RAISERROR(N'ERROR: Script is targeting a system database. It should be targeting the DB you created instead.', 0, 1)
GOTO Branch_Exit;
END ELSE
PRINT N'INFO: Targeted database is ' + @dbname + N'.'
PRINT N'INFO: Running verifications....'
IF NOT EXISTS (SELECT * FROM sys.configurations c WHERE c.name = 'clr enabled' AND c.value_in_use = 1)
PRINT N'ERROR: CLR is not enabled!'
ELSE
PRINT N'PASS: CLR is enabled.'
DECLARE @repltable TABLE (
name nvarchar(max),
minimum int,
maximum int,
config_value int,
run_value int )
INSERT INTO @repltable
EXEC sp_configure 'max text repl size (B)'
IF NOT EXISTS(SELECT * from @repltable where config_value = 2147483647 and run_value = 2147483647 )
PRINT N'ERROR: Max text repl size is not correct!'
ELSE
PRINT N'PASS: Max text repl size is correct.'
IF NOT EXISTS (SELECT db.owner_sid FROM sys.databases db WHERE db.database_id = DB_ID() AND db.owner_sid = 0x01)
PRINT N'ERROR: Database owner is not sa account!'
ELSE
PRINT N'PASS: Database owner is sa account.'
IF NOT EXISTS( SELECT * FROM sys.databases db WHERE db.database_id = DB_ID() AND db.is_trustworthy_on = 1 )
PRINT N'ERROR: Trustworthy bit is not on!'
ELSE
PRINT N'PASS: Trustworthy bit is on.'
IF NOT EXISTS( SELECT * FROM sys.databases db WHERE db.database_id = DB_ID() AND db.is_broker_enabled = 1 )
PRINT N'ERROR: Service broker is not enabled!'
ELSE
PRINT N'PASS: Service broker is enabled.'
IF NOT EXISTS( SELECT * FROM sys.databases db WHERE db.database_id = DB_ID() AND db.is_honor_broker_priority_on = 1 )
PRINT N'ERROR: Service broker priority is not set!'
ELSE
PRINT N'PASS: Service broker priority is set.'
PRINT N'Done!'
Branch_Exit:
Aşağıda görüldüğü gibi hatamız olmamalı.
Bir diğer önemli konu SCCM DB’nin durduğu klasöre her iki SQL sunucusunda da SQL servisini çalıştırması için tanımladığımız kullanıcı hesabına Full Control yetkisi vermemiz gerekiyor.
Availability Group oluşturmadan önce DB özelliklerine gelerek “Recovery Model” ayarını “Full” yapmamız lazım.
Daha sonrasında bir de backup almak gerekiyor.
Artık Availability Group oluşturabiliriz.
Aşağıdaki alandaki ayarlar bizim için önemli.
- SCCM “Asynchronous commit” DESTEKLEMİYOR. Bu yüzden “Synchronous Commit” seçiyoruz.
- Readable Secondary ayarı “Yes” olmalı.
- “The Connections in Primary Role” Bu ayar “Allow all connections” olmalı. (Kurulumdan sonra ayarlanıyor.)
- Automatic Failover kutucukları SCCM Setup ve Upgrade işleri esnasında Manual olmalı.
Bizde birazdan SCCM Setup çalıştıracağız için bu kutucukları şimdilik işaretlemiyoruz. Daha sonra işaretleyeceğiz.
Yedekleme ayarı: Bu alanda DB yedekleme işleminin hangi sunucu üzerinden alınmasını istiyorsanız ona göre ayar yapabilirsiniz.
Aşağıdaki alandan SCCM sunucumuza SQL sunucu adı olarak tanımlayacağımız ismi Listener olarak belirliyoruz. Burada farklı bir port kullanabilirsiniz.
Aşağıdaki alanda Seconday sunucuya DB’nin otomatik olarak gönderilmesini sağlayacak şekilde ayar yapıyoruz.
Diğer seçenekler DB’yi backup’dan dön ya da ben DB’yi zaten restore ettim sen Join ol anlamlarına geliyor.
İşlem tamam.
Kontrollerimizi gerçekleştirelim.
- Listener ip adersine ping geldi.
– Failover Cluster konsolundan baktığımızda Listener objemiz oluşmuş durumda.
- Secondary SQL sunucumuz üzerine DB oluştu ve sağlıklı durumda
-
Dashboard kontrolünde sorun yok.
Şimdi Kontrol Script’ini Secondary olan sunucuda çalıştırıp durumu kontrol edelim. Aşağıda görüldüğünüz gibi hatlar var. Bunları düzeltmek için Failover işlemi yaparak Secondary olan sunucuyu Primary yapacağız.
Primary olan sunucuda Failover komutunu veriyoruz.
SQL02 üzerinden baktığımızda artık bu sunucu Primary durumda.
Yazının başında SQL01 için çalıştırdığımız SQL script’lerini bu sunucu için de çalıştıracağız.
- Gerekli Komutlar:
sp_configure
'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure
'clr enabled', 1;
GO
RECONFIGURE;
GO
EXECUTE
sp_configure
'max text repl size (B)', 2147483647
ALTER
DATABASE [CM_XXX] SET
TRUSTWORTHY
ON;
USE CM_XXX
go
sp_changedbowner
'sa'
go
Kontrol script’ini tekrar çalıştırdığımızda tüm hataların düzeldiğini görüyoruz.
Şimdi SQL01 sunucusunu tekrar Primary yapalım. SQL02 üzerinden Failover komutunu verip next diyerek işlemi tamamlıyoruz.
SQL01 tekrar Primary oldu.
Sırada SQL Server Native Client sürümlerini eşitleme işlemi var.
SCCM Primary Site Server ve eski SQL sunucunuzda yüklü olan Native Client sürümünü yeni aktaracağımız SQL01 ve SQL02 sunucularına da yüklememiz lazım.
Sürüm daha güncel olabilir ama daha düşük olmamalı.
Kurulum dosyasını SCCM sunucusunda cd.latest\redist klasörü içinde bulabilirsiniz.
Sırada Local Admin işlerini halletmek var SCCM sunucunda SQL01 ve SQL02 (Always On Sunucularımız), SQL01 ve SQL02 de SCCM sunucusunu Local admin gurubuna üye yapmayı unutmamalıyız.
SQL01 ve SQL02 de SCCM Site server Computer Objesine Sysadmin yetkisi veriyoruz.
Login Name alanını elle doldurun. DOMAINADI\SUNUCUADI$ Şeklinde
Artık SCCM sunucumuza gidelim ve yeni DB sunucusunu ona söyleyelim
Daha önce belirlediğimiz listener adı ve port numarasınız burada gösteriyoruz.
Kurulum sihirbazı DB’nin bir SQL Availabiliry group üyesi olduğunu anladı.
Artık SCCM konsolunu açabiliriz.
SQL Server üzerinde de Failover Mode ayarını artık Otomatik yapabiliriz.
Önemli Hatırlatma: SCCM versiyon Upgrade işlemi yapmadan önce bu ayarı Manual olarak ayarlamalısınız!
Şimdi bir test yapalım. Primary olan sunucunun network bağlantısını kesiyorum (Plansız kesinti) bakalım sistem çalışmaya devam edecek mi?
SQL02 otomatik olarak Primary oldu ve SCCM konsolunda problem yaşanmadı.
Bir de Failover testi yapalım.
İşlem başarılı. SCCM konsolumuzda da herhangi bir problem yaşanmadı.
Umarım faydalı olmuştur.