MS SQL Database Mirroring
Veritabanı Mirroring , veritabanı kullanılabilirliğini artırmak için temel bir yazılım çözümüdür. Mirroring , veritabanı bazında uygulanır ve yalnızca tam kurtarma modelini kullanan veritabanlarında çalışır. Basit ve toplu olarak günlüğe kaydedilen kurtarma modelleri, veritabanı Mirroring desteklemez. Veritabanı Mirroring , SQL Server Standard ve Enterprise’da desteklenir.
⦁ Veritabanı modu – Tam Kurtarma modeli
⦁ Aynı SQL sürümüne sahip en az 2 sunucu – manuel HA
(ana sunucu ve Mirroring sunucusu)
⦁ Aynı SQL sürümüne sahip en az 3 sunucu – otomatik HA
⦁ Veritabanı bazında çalışır
⦁ Yalnızca kullanıcı veritabanları Mirroring yapar
⦁ Mirroring den etkinken veritabanı adı yeniden adlandırılamaz
SQL Command Syntax
SQL komutunu çalıştırmanın 2 yolu vardır
⦁ Komutu doğrudan çalıştır
cmd.exe ve“sqlcmd”
komutu tamamladığınızda çalıştırmak için “go” yazın
Örnek:
sqlcmd
> use master;
> go
⦁ script i çalıştırın
prepare script with .sql extension, open cmd.exe
sqlcmd –s {servername} –i {instance name} script.sql
Örnek:
server adı: sql1
instance name: (boş)
sqlcmd –s sql1 –i script.sql
⦁SMSS Kurulumu
Diğer yerel kullanıcıların SQL sunucu erişimine izin verilmesi, örneğin “itsupport”
SSMS (SQL Server Management Studio) açın
ssms.exe
Önce Yerel yönetici hesabına bağlanın, ardından “Security” -> “Login” -> “New login”
seçeneğine genişletin
“Ara” -> İstenen kullanıcıları ekleyin, “itsupport”
“Server role” -> ayrıcalığı kontrol et:
Güvenlik duvarı kuralını ekleyin ve diğer SQL sunucularının aşağıdakilere bağlanmasına izin verin:
powershell i açın:
#Allow SQL Server Ports
New-NetFirewallRule -DisplayName “SQL Server” -Direction Inbound –Protocol TCP –LocalPort 1433 -Action allow
New-NetFirewallRule -DisplayName “SQL Server Mirroring” -Direction Inbound –Protocol TCP –LocalPort 5022 -Action allow
⦁ Hizmet başlangıç hesabını değiştirin
Bu adım çok önemlidir, bu olmadan SQL yansıtma asla çalışmaz, yeni hesabın yöneticiler grubunda olduğundan ve SMSS oturum açma ile olduğundan emin olun:
Servis tipi:
⦁ SQL Sunucusu
⦁ SQL Server Agenet
Sözdizimi:. \ {Hesap adı}
Söyle,
.\itsupport
⦁ Veritabanını her iki sunucuya kopyala
Veritabanının ilk önce her iki sunucuda da olması gerekir, bu “Yedekle” ve “Geri Yükle” ile yapılabilir, aşağıdaki örnek aşağıdaki adı kullanır:
Principle Server: sql1.dns.local
Mirror Server: sql2.dns.local
Database name: SQLtestdb
⦁ Ana sunucuda yedekleme veritabanı (veri / günlük)
BACKUP DATABASE SQLTestDB
TO DISK = ‘C:\database\backup.bak’
WITH FORMAT
BACKUP LOG SQLTestDB
TO DISK = ‘C:\database\log.bak’
WITH FORMAT
⦁ Copy both bak file to mirror server, say, C:\database
⦁ Her iki bak dosyasını da ayna sunucuya kopyalayın, örneğin C: \ veritabanı
RESTORE filelistonly
from disk = ‘C:\database\backup.bak’
go
restore database sqltestdb
FROM DISK = ‘C:\database\backup.bak’
WITH NORECOVERY
move ‘sqltestdb_data’ to ‘d:\database\sqltestdb.mdf’,
move ‘sqltestdb_log’ to ‘d:\database\sqltestdb.ldf’,
go
RESTORE LOG SQLTestDB
FROM DISK = ‘C:\database\log.bak’
WITH FILE=1, NORECOVERY
⦁ Her iki sunucuda da uç nokta oluşturun
Endpoint, sql sunucularının TCP / IP ağı üzerinden bir iletişim noktasıdır, ilk defa her iki sunucuda da uç nokta oluşturmamız gerekiyor
Principle Server: sql1.dns.local
Mirror Server: sql2.dns.local
Endpoint name: Mirroring
Account name: itsupport
Port: 5022
⦁ Principle Server:
CREATE ENDPOINT [Mirroring]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE
, ENCRYPTION = REQUIRED ALGORITHM RC4)
grant connect on endpoint::mirroring to [.\itsupport]
⦁ Mirror Server:
CREATE ENDPOINT [Mirroring]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE
, ENCRYPTION = REQUIRED ALGORITHM RC4)
grant connect on endpoint::mirroring to [.\itsupport]
⦁Sunucudaki uç nokta bilgilerini kontrol edin
select name,type_desc,port,ip_address from sys.tcp_endpoints;
select name,role_desc,state_desc from sys.database_mirroring_endpoints;
⦁ mirroring kapatma
Not: Önce Yansıtma Sunucusunu, ardından ana sunucuyu değiştirin
Principle Server: sql1.dns.local
Mirror Server: sql2.dns.local
⦁ Mirror Server
use master;
go
ALTER DATABASE SQLTestdb
SET PARTNER =’tcp://sql1.dns.local:5022′
Go
⦁ Principle Server
use master;
go
ALTER DATABASE sqltestdb
SET PARTNER = ‘tcp://sql2.hkvegetable.com:5022’
Go
Başarılı olursa, herhangi bir hata mesajı vermemelidir ve smss.exe’ye (SQL Management studio) girdikten sonra, her iki veritabanının da “Syncrhonized” durumunda olduğunu görebilmelisiniz,
“Tcp” adresi bulunamadı hatasıyla dönerse, en yaygın çözümler şunlardır:
⦁ SMSS (GUI) aracını kullanıyorsunuz (garip bir sorunla gelebilir)
⦁ Güvenlik duvarını kontrol edin
⦁ Hesap adı her iki sunucuda da aynı olmalıdır
⦁ Yedekleme / Geri Yükleme prosedürünü tekrar deneyin
⦁ Mesajın gerçekten ağ sorunuyla ilgili olmadığını unutmayın