【轉】SQL SERVER 主體,已同步

轉自郭大俠博客:  http://www.javashuo.com/article/p-tbnariwc-mh.htmljavascript

目錄html

SQL SERVER 基於數據庫鏡像的主從同步... 1java

一、概念... 2nginx

1.一、服務器概念... 2算法

1.二、模式概念... 2sql

1.三、數據庫鏡像的優點... 3docker

1.四、數據庫鏡像的不足... 3數據庫

二、實施前提(基於證書訪問實現)... 4windows

三、實施步驟(基於證書訪問實現)... 4安全

3.一、步驟目錄... 4

3.二、實操... 5

3.三、主備切換... 7

四、數據庫鏡像監控... 9

4.一、數據庫鏡像監視器... 9

4.二、系統存儲過程監視(聯機叢書—監視數據庫鏡像)... 9

五、常見故障排查... 11

【5.1】服務器網絡地址 「TCP://xxx:5022″ 沒法訪問或不存在。... 11

【5.2】TCP://xxx:5022 的數據庫鏡像鏈接錯誤... 11

【5.3】程序如何在主從切換時自動切換鏈接?... 11

【5.4】孤立用戶問題... 11

【5.5】自增鍵在鏡像中的影響... 11

【5.6】鏡像服務器與主服務器斷開... 11

【5.7】其餘相關... 12

附錄1:數據庫鏡像主從+見證中斷狀況... 13

1.一、1個點中斷的狀況... 13

1.二、2個點中斷的狀況... 13

1.三、鏡像集羣監控概述... 13

附錄2:鏡像相關信息查閱... 14

2.一、查看master中的證書... 14

2.二、查看鏡像端點狀態(聯機叢書視圖參考)... 14

2.三、查看端點鏈接權限... 14

2.四、常見刪除語句... 14

2.五、更多查閱... 14

附錄3:加入見證服務器,實現自動故障轉移(基於證書)... 15

附錄4:基於域帳戶的鏡像搭建... 18

4.一、操做步驟... 18

4.二、操做實踐... 18

參考文獻... 25

 

 

一、概念

1.一、服務器概念

◆ 主體服務器(Principal Server)

  其中一個實例爲客戶端提供服務,這個實例稱爲"主體服務器"。該服務器"扮演"主體角色",其數據庫副本爲當前的"主體數據庫"。

 

◆ 鏡像服務器(Mirror Server)

  另外一個實例則充當備用服務器,這個實例稱爲"鏡像服務器"(Mirror Server)。該服務器扮演"鏡像角色",其數據庫副本爲當前的"鏡像數據庫"。鏡像數據庫不能供客戶端訪問,可是能夠爲鏡像數據庫建立一個快照,讓客戶端訪問這個快照。

 

◆ 見證服務器(Witness Server)

  見證服務器並不能用於數據庫,只是用來支持自動故障轉移。見證服務器驗證主體服務器是否保持運行,當見證服務器與主體服務器斷開鏈接以後,若是此時鏡像服務器和見證服務器保持相互鏈接,則鏡像服務器啓動自動故障轉移,成爲新的主體服務器。

 

 

1.二、模式概念

數據庫鏡像會話以同步操做或異步操做運行。

  在同步操做下,事務將在夥伴雙方處提交。因爲主體數據庫須要等待鏡像數據庫將日誌寫入磁盤後返回的確認消息,所以會延長事務滯後時間。在異步操做下,事務不須要等待鏡像服務器將日誌寫入磁盤即可提交,這樣可最大程度地提升性能。

在SQL SERVER 2008以後,主庫和鏡像庫之間的日誌流傳送會默認使用壓縮,壓縮一方面下降了網絡壓力,另外一方面增大了鏡像兩端的CPU壓力。 能夠打開 TF 1462 來關閉日誌流壓縮,SQL SERVER 2005 上日誌傳送沒有使用壓縮。

 

根據是否同步操做以及是否支持自動故障轉移功能,數據庫鏡像有如下三種運行模式。

(1) 高安全性模式:主庫把事務日誌數據信息發給從庫,從庫返回事務日誌持久化確認信息,確認同步後,事務將在主從庫一塊兒提交。

(2) 高性能模式:主庫把事務日誌數據信息發給從庫,發完後無需等待從庫返回確認信息。

(3) 自動故障轉移模式(高可用模式):在高安全模式運行時,能夠添加見證服務器,從而實現自動故障轉移。

 

 

1.三、數據庫鏡像的優點

數據庫鏡像技術有如下優點:

 

(1)消除存儲方面的單一故障點:不用共享磁盤

(2)提升數據庫可用性:快速自動/手動主從切換

(3)加強的數據保護:提供完整的數據冗餘

(4)自動頁修復:2008企業版在某些類型的錯誤致使頁損壞,使其沒法讀取後,在 SQL Server 2008 企業版或更高版本上運行的數據庫鏡像夥伴(主體或鏡像)將嘗試自動修復該頁。沒法讀取該頁的夥伴將從其夥伴請求該頁的新副本。若是此請求成功,則將以可讀副本替換不可讀的頁,而且這一般會解決該錯誤。

 

1.四、數據庫鏡像的不足

鏡像數據庫技術有如下不足之處:

 

(1)版本限制

  對於標準版的 SQL Server 實例,只可使用"高安全模式",即主體數據庫與鏡像數據庫必須實現同步操做。在這種運行模式時,若是任何一個夥伴遇到性能問題,都將使同步操做帶來較大的延時。一般標準版的 SQL Server 受到一些技術限制致使性能不能提高,從而使同步操做的延時更加明顯。

 

(2)鏡像數據庫的訪問限制

  鏡像數據庫甚至不能夠提供只讀訪問,只有經過建立快照才能訪問,所以鏡像數據庫的利用率不高。

因爲數據庫鏡像技術存在上述不足,SQL Server 後續產品將刪除此項功能,建議改用 AlwaysOn 可用性組。SQL Server 2016 標準版中已經引入了"AlwaysOn 基本可用性組",用來替代數據庫鏡像技術。

  

二、實施前提(基於證書訪問實現)

(1)實例版本:必須是2005 SP1及以上(且兼容級別也要在這個版本及以上),且主從版本一致。

(2)數據庫版本:必須是標準版及更高的開發/評估/企業,且只有企業版/開發版才能實現高性能模式。且主從一致。

(3)通訊:確認網絡能ping通,肯定端點端口(默認通常是5022)與實例端口(默認1433)能夠telnet 通實現訪問。

(4)磁盤:足夠的磁盤空間(全備複製+事務備複製+還原空間+預留空間)。最好主從是相同的目錄(不一樣會形成沒法加文件)。

(5)限制:不支持 FILESTREAM。不能在主體上建立它。不能爲包含 FILESTREAM 文件組的數據庫配置數據庫鏡像。

(6)系統:32位系統下,單實例最多支持10個數據庫作鏡像。

(7)主數據庫:鏡像的數據庫對象不能是系統數據庫。主庫必須是完整恢復模式。且主從庫必須是相同的數據庫名。

(8)從數據庫:利用主數據庫的相關備份進行還原,必須以norecovery模式(RESTORING 狀態)

(9)權限:登陸名具備實施步驟權限,最好sysadmin。可能還須要實例帳戶擁有必定程度的windows權限,最好是admin組;

(10)端點:鏡像兩端的加密算法必須保持一致,不然沒法搭建。(由於不一樣版本默認加密算法不同)小版本不要緊,但前提是從庫能夠還原主庫。

 

 

三、實施步驟(基於證書訪問實現)

3.一、步驟目錄

主服務器host_A

從服務器host_B

【1】在master中,建立數據庫祕鑰

【1】建立master數據庫祕鑰

【2】基於【1】中祕鑰,建立服務器實例加密證書的出站證書

【2】基於【1】中祕鑰,建立服務器實例加密證書的出站證書

【3】使用服務器實例的證書爲該服務器實例建立端點。

【3】使用服務器實例的證書爲該服務器實例建立端點。

【4】將證書備份到文件,並將其安全地複製到從服務器。

【4】將證書備份到文件,並將其安全地複製到主服務器。

【5】爲從服務器建立登陸名。

【5】爲主服務器建立登陸名。

【6】建立一個使用該登陸名(【5】中的)的用戶

【6】建立一個使用該登陸名(【5】中的)的用戶

【7】使用證書對【6】中用戶受權

【7】使用證書對【6】中用戶受權

【8】對【5】中登陸名進行鏈接端點的受權

【8】對【5】中登陸名進行鏈接端點的受權

【9】主數據庫設置爲徹底恢復模式,並以全備傳輸到從服務器

【9】以norecovery模式還原須要鏡像的庫

【10】(後作)設置鏡像夥伴爲從庫

【10】(先作)設置鏡像夥伴爲主庫

【11】覈驗,基於SSMS與T-SQL

【11】覈驗,基於SSMS與T-SQL

 

 

 

 

 

 

3.二、實操

主服務器:SQLSVR1, 192.168.1.1

從服務器:SQLSVR2, 192.168.1.2

--一、建立 master 數據庫主密鑰

Use master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';

GO

 

--二、對服務器實例建立一個用於其數據庫鏡像出站鏈接的加密證書。 

 

USE master; 
CREATE CERTIFICATE SQLSVR1_certWITH SUBJECT ='SQLSVR1 certificate for database mirroring', 
start_date='2019-03-01',expiry_date='2030-01-01'; 
GO

 

--三、 使用主服務器實例的證書 SQLSVR1_cert 爲主服務器 SQLSVR1 建立端點。
Use naster; 
CREATE ENDPOINT [默認的鏡像端點]
STATE = STARTED AS TCP (
LISTENER_PORT=5022
, LISTENER_IP = ALL
) 

FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE SQLSVR1_cert 
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE =	ALL
);

GO

 

--四、備份主體服務器 SQLSVR1 的加密證書。必定要保證證書安全無損。
BACKUP CERTIFICATE SQLSVR1_cert TO FILE ='d:\temp_bak\SQLSVR1.cer'; 

 

--五、在主服務器實例的 master 數據庫中爲鏡像服務器建立一個登陸名 
USE master;
CREATE LOGIN SQLSVR2_login WITH PASSWORD='Sample@#';

GO

 

--六、爲5中新建立的登陸名建立一個用戶 
USE master; 
GOCREATE USER SQLSVR2_user FOR LOGIN SQLSVR2_login;

 

--七、將用戶與鏡像服務器的證書相關聯。 
--已經將從服務器的證書本分SQLSVR2.CER拷貝到D:\temp_bak\
Use master;CREATE CERTIFICATE SQLSVR2_cert AUTHORIZATION SQLSVR2_user FROM FILE ='D:\temp_bak\SQLSVR2.cer'

GO

 

--八、授予其6中登陸名對數據庫鏡像端點的 CONNECT 權限。 
GRANT connect on endpoint::[默認的鏡像端點] TO [SQLSVR2_login]; 
GO

 

--九、設置SQLSVR1中主庫爲完整恢復模式,並備份到從服務器SQLSVR2 
Alter databases db_name set recovery full with no_wait 
Backup databases db_name to disk='URL' 
/*
【1】先關閉事務備份做業。
【2】注意:模式的區別

(1)簡單模式:那麼設置爲完整模式後全備到SQLSVR2便可

(2)大容量模式:那麼設置爲完整模式後,要利用以前的大容量模式下的全備,則須要顧及好日誌鏈;(即要把主備+事務備+設置好完整模式後的事務備)

(3)完整模式:

    如要利用之前的備份,則須要全備+全備以後的全部事務備

    若是庫小能夠直接全備,再傳輸到SQLSVR2

(4)個人業務:主庫搭建最佳實踐:

 
*/

 

--十、(後作)設置鏡像主從 
Alter database db_name set partner='TCP//192.168.1.2:5022' 
 

 

--一、建立 master 數據庫主密鑰

Use master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';

GO

 

--二、對服務器實例建立一個用於其數據庫鏡像出站鏈接的加密證書。 

 

USE master; 
CREATE CERTIFICATE SQLSVR2_certWITH SUBJECT ='SQLSVR2 certificate for database mirroring',
start_date='2019-03-01',expiry_date='2030-01-01';
GO

 

--三、 使用從服務器實例的證書 SQLSVR2_cert 爲從服務器 SQLSVR2 建立端點。
Use naster; 
CREATE ENDPOINT [默認的鏡像端點]
STATE = STARTED AS TCP(

    LISTENER_PORT=5022
, LISTENER_IP =ALL
) 

FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE SQLSVR2_cert 
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE =	ALL
);

GO

 

--四、備份從服務器 SQLSVR2 的加密證書。必定要保證證書安全無損。
BACKUP CERTIFICATE SQLSVR2_cert TO FILE ='d:\temp_bak\SQLSVR2.cer'; 

 

--五、在從服務器實例的 master 數據庫中爲主體服務器建立一個登陸名 
USE master;
CREATE LOGIN SQLSVR1_login WITH PASSWORD='Sample@#';

GO

 

--六、爲5中新建立的登陸名建立一個用戶 
USE master; 
CREATE USER SQLSVR1_user FOR LOGIN SQLSVR1_login; 
GO 

 

--七、將用戶與鏡像服務器的證書相關聯。 
--已經將主服務器證書的證書備份SQLSVR2.CER拷貝到D:\temp_bak\
Use master;

CREATE CERTIFICATE SQLSVR1_certAUTHORIZATION SQLSVR1_user FROM FILE='D:\temp_bak\SQLSVR1.cer'
GO 

 

--八、授予其6中登陸名對數據庫鏡像端點的 CONNECT 權限。 
GRANT connect on endpoint::[默認的鏡像端點] TO [SQLSVR1_login]; 
GO

--九、還原SQLSVR1服務器上傳過來的主數據庫備份文件 
Restore database db_name from disk='RRL' with norecovery,stats=10, 
Move N'logic_name'to 'RRL', Move N'logic_name'to 'RRL' 
/*
【1】注意
(1)還原數據庫:必定要和主庫的數據庫名一摸同樣
(2)還原模式:必定要選擇recovery模式,不然將會失敗
(3)還原庫文件的存放路徑:儘可能和主庫的盤符及目錄及名字一摸同樣,不然不支持新增文件同步(咱們這裏沒用到,暫時不用管)。
若是機器盤符目錄不一致,那麼須要在還原時用move選項來進行位置移動。
4)個人業務:從庫搭建最佳實踐:

 
*/

 

 

 

 

 

--十、(先作)設置鏡像主從 
Alter database db_name set partner='TCP//192.168.1.1:5022' 

 

 

十一、覈驗—基於SSMS

【11.1】主服務器/從服務器,查看數據庫狀態

右擊數據庫,刷新一下,看是否有出現這種狀況

主服務器                                                從服務器

              

 

【11.2】查看數據庫屬性,鏡像選項卡

 

十二、覈驗—基於T-SQL

--建立快照

create database dbtank_demo1

on (name='db_tank_data',filename='d:\temp_bak\db_tank20190325.snap')

as SNAPSHOT of db_tank

go

--查看錶數據最先時間(能夠多弄幾個表之類的看看)

select top(5) gettime from dbtank_demo1..sys_users_runegoods

where gettime >='20190320'

order by gettime desc

--刪除快照

drop databases dbtank_demo1

 

 

3.三、主備切換

 

【1】.在高安全模式下:

 

在主機執行:

 

use master;

alter database Demo1 set partner failover;

 

即完成主備切換

 

【2】.在高性能模式下,須要先切換到高安全模式下再執行切換

 

use master;

alter database Demo1 set partner safety full;

alter database Demo1 set partner failover;

 

【3】.在主機(SQLSVR1)宕機的狀況下在備機(SQLSVR2)進行強制切換:

 

use master;

alter database Demo1 set partner FORCE_SERVICE_ALLOW_DATA_LOSS;

 

當主機(SQLSVR1)從新開機後,在SQLSVR2機器上執行

 

use master;

alter database Demo1 set partner resume;

 

此時SQLSVR1成爲了備機,而SQLSVR2成爲了主機。

 

再到SQLSVR2機器上執行

 

alter database Demo1 set partner failover;

 

就成了SQLSVR1成爲主機,SQLSVR2成爲備機

 

 

 

【4】切換鏡像在高性能模式下(慎用,可能會丟失數據)

 

use master;

alter database Demo1 set partner safety off;

 

 

 

【5】.關閉數據庫鏡像

 

ALTER DATABASE Demo1 SET PARTNER OFF

 

 

 

【6】.暫停與恢復數據庫鏡像

 

  在主體鏡像服務器上,如果不當心日誌過大,能夠進行暫停來設置日誌上限

 

  (1)暫停:ALTER DATABASE AdventureWorks2012 SET PARTNER SUSPEND;

 

  (2)恢復:ALTER DATABASE AdventureWorks2012 SET PARTNER RESUME;

 

【7】移除見證服務器

USE [master]

GO

ALTER DATABASE Demo1 SET WITNESS OFF

GO

 

 

四、數據庫鏡像監控

4.一、數據庫鏡像監視器

【1】啓動數據庫鏡像監視器

 

  1. 打開數據庫鏡像監視器

 

4.二、系統存儲過程監視(聯機叢書—監視數據庫鏡像

    

sp_dbmmonitoraddmonitoring

建立按期更新服務器實例上每一個鏡像數據庫的狀態信息的做業。

sp_dbmmonitorchangemonitoring

更改數據庫鏡像監視參數的值。

sp_dbmmonitorhelpmonitoring

返回當前更新持續時間。

sp_dbmmonitorresults

返回所監視數據庫的狀態行,使您可以選擇此過程是否預先獲取最新的狀態。

sp_dbmmonitordropmonitoring

中止並刪除服務器實例上全部數據庫的鏡像監視器做業。

 

 

重點查看

Use msdb

Go

--查看2個小時之內的同步數據記錄

EXEC sp_dbmmonitorresults db_tank, 2, 0;

、常見故障排查

【5.1】服務器網絡地址 "TCP://xxx:5022″ 沒法訪問或不存在。

請檢查網絡地址名稱,並檢查本地和遠程端點的端口是否正常運行。 (Microsoft SQL Server,錯誤: 1418)

     後來在SQLServer日誌中看到了以下錯誤:  Database mirroring connection error 4 'An error occurred while receiving data: '10054(遠程主機強迫關閉了一個現有的鏈接。)'.' for 'TCP://xxx:5022′.

經過這個錯誤找到了問題,c:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\ 沒有讀寫權限,一看真的是這樣,加入管理員(即sqlserver的運行用戶)的讀寫權限後一切正常!(若是還不行,配置權限後,再從新配置鏡像)

具體見:http://dba.stackexchange.com/questions/6222/mirroring-problems-after-removing-domain

 

【5.2】TCP://xxx:5022 的數據庫鏡像鏈接錯誤

5 'Connection handshake failed. The login 'ZBIAN\Administrator' does not have CONNECT permission on the endpoint. State 84.'。

 在日誌中看到如上這個錯誤,發現是由於鏡像數據庫實例沒有權限

 對主數據庫與鏡像數據庫進行了調整,主數據庫與鏡像數據庫使用相同的實例帳戶,並從新啓動數據庫服務SQL Server (MSSQLSERVER)

 

【5.3】程序如何在主從切換時自動切換鏈接?

(1)標準辦法的鏈接字符串示例(參考:聯機叢書—鏡像數據庫的鏈接字符串

通常形式:"Server=Partner_A; Failover Partner=Partner_B; Database=AdventureWorks; "

舉例演示:"Server=250.65.43.21,4734; Failover Partner=Partner_B; Database=AdventureWorks; "

(2)程序控制:

    直接作IP判斷便可,斷線重試,重試幾回後進行夥伴服務器鏈接嘗試。

 

【5.4】孤立用戶問題

當一個數據庫從一個實例遷移(恢復)到另一個實例時,登陸名數據並無隨之一塊兒遷移。即便從新新建與數據庫用戶相同的登陸名,卻由於SID不一樣,也成了孤立的用戶/孤立的登陸名。即-》只有數據庫用戶。沒有登陸名,沒法登錄實例,則數據庫用戶無用。 即-》有登陸名與同名數據庫用戶,可是二者沒有關聯起來,則登陸名登陸到實例沒法訪問數據庫。解決方案以下:

  1. 當一個庫剛遷移(恢復)到另一臺實例時,新建同名登陸名-》進行用戶與登陸名更新關聯
  2. 在主庫上查詢獲得須要同步的用戶sid,上在從庫上建立登陸並設定該登陸的sid爲查詢到的sid
  3. 推薦作法:直接重構一遍,刪除全部的數據庫用戶與同名登陸名,從新創建登陸名與用戶映射關係

 

【5.5】自增鍵在鏡像中的影響

  1. 在對錶TB1插入兩條數據後,表中自增列當期值爲 2 發生故障轉移
  2. 故障轉移後,對錶TB1插入一條數據,發現表中自增列當期值變成1002

結論:假設故障轉移前自增列的當前值爲 X ,在故障轉移後,自增列的初始值會變成:((X/1000)+1)*1000+1

 

【5.6】鏡像服務器與主服務器斷開

(1). 由於主庫或鏡像庫存在內存壓力,致使沒法完成鏡像日誌傳送和重作

解決辦法:設置數據庫最小內存,保證數據庫有足夠內存完成鏡像操做

 

(2) 由於主庫和鏡像庫斷開鏈接,致使鏡像失敗

 

解決辦法:

1.使用TELNET IP 5022來檢查雙方之間的網絡和端口是否打開

2.重啓主庫和鏡像庫的鏡像端口

ALTER ENDPOINT [Endpoint_Mirroring] STATE=STOPPED

ALTER ENDPOINT [Endpoint_Mirroring] STATE=STARTED

鏈接上之後,若是主庫與鏡像沒有自動開始繼續同步,則使用以下進行嘗試

(1)暫停:ALTER DATABASE AdventureWorks2012 SET PARTNER SUSPEND;

(2)恢復:ALTER DATABASE AdventureWorks2012 SET PARTNER RESUME;

 

3. 檢查證書是否過時和被更換

use master;

select *from sys.certificates

--過時了就新建一個新的證書,而後alter endpoint endpoint_name來應用新的證書。而後重新關聯用戶與證書。

--查看鏡像端點與證書的關係,是否被更換了

 

4.檢查主庫是否有非法關機的狀況,若是存在,優先運行DBCC CHECKDB和檢查備份

若是主庫上備份還原失敗,則須要使用備份重新搭建鏡像

 

【5.7】其餘相關

  1. 更換證書:過時或不安全時使用
  2. 如何在主庫上增長文件:磁盤不足或須要作文件組規劃時使用

 

 

 

附錄1:數據庫鏡像主從+見證中斷狀況

1.一、1個點中斷的狀況

 

  1. principal 與 witness 鏈接中斷:

(1)狀態:主庫會變成Disconected 狀態,表示失去與mirror鏈接,切斷全部客戶端鏈接, 中止讀寫服務,等待故障切換(默認超時爲10S)

(2)結果:若是mirror與witness正常鏈接,mirror成爲新的principal,開始對外提供讀寫服務。

 

    

  1. mirror 與 witness 鏈接中斷

(1)狀態:principal與witness鏈接正常,principal狀態變爲Disconected,表示終止與mirror鏈接,mirror狀態變爲suspend; principal再也不向mirror發送事務日誌,等待mirror從新創建到witness連接後,principal纔會恢復與mirror進行數據同步;

 

  1. principal 與 mirror 鏈接中斷:

principal與mirror同時保持witness的鏈接會話,可是principal與mirror之間會話中斷,witness會通知mirror,principal依然保持鏈接狀態,不會觸發故障切換;此時principal因爲保持有witness的鏈接會話,服務正常;

 

 

 

1.二、2個點中斷的狀況

 

  1. principal 與全部節點會話中斷

只要mirror與witness會話正常,便可完成正常的故障轉移;若是mirror與witness鏈接也中斷,則沒法完成,即使是後來mirror與witness的會話優先恢復,則也沒法故障切換,由於已然不肯定mirror是否擁有所有principal的數據,此時即使principal處於運行狀態,也沒法提供服務,等待principal與任意節點會話恢復正常,便可恢復讀寫服務;

 

【2】mirror 與 全部節點會話中斷

不會觸發故障切換,principal切入公開運行模式(異步),即不會再向mirror發送事務日誌,也再也不須要等待mirror的響應,直到mirror從新恢復會話。

 

【3】witness 與 全部節點會話中斷

 

不會觸發故障切換,principal繼續提供讀寫服務,與mirror數據繼續同步,鏡像集羣喪失自動故障轉移能力,退化爲不帶故障轉移的高安全模式;若是三方會話同時鏈接中斷,則principal沒法提供服務,直到principal與任意節點通訊恢復正常。

 

 

1.三、鏡像集羣監控概述

 

鏡像集羣的監控能夠經過SQL Server Management stdio啓動鏡像監視器,或者系統內置的存儲過程來實現,監控的主要指標包括:

 

(1)未發送日誌:principal上未發送的日誌超過指定的閾值,會在principal上生成一個警告,在高性能模式下,強制服務時能夠做爲評估principal上事務丟失數量的依據,一樣也適用於在高安全模式切換成異步模式狀態下(mirror失去鏈接)

 

(2)未還原日誌:重作隊列中的未被應用的事務日誌數量(KB),超過閾值,會在mirror上生成一個警告,該值能夠做爲評估故障轉移時間的主要因素。

 

(3)最先未被髮送的事務:principal發送隊列中,最先未被髮送的事務的至今的時間,單位時分鐘,超過閾值,會在principal上生成警告,與未發送日誌量一塊兒,從時間維度,衡量高性能模式下和高安全異步模式下,數據丟失數量;

 

(4)鏡像提交開銷:高安全模式下,principal上事務從提交到等到mirror響應的時間開銷的平均值,若是超過閾值,則在principal上生成一個警告,在同步模式下,該值能夠i衡量同步開銷;

 

附錄2:鏡像相關信息查閱

2.一、查看master中的證書

    USE master;

SELECT * FROM sys.certificates;

 

2.二、查看鏡像端點狀態(聯機叢書視圖參考

    (1)數據庫鏡像端點

SELECT name, role_desc, state_desc, connection_auth_desc, encryption_algorithm_desc

FROM sys.database_mirroring_endpoints;

 

(2)查看全部端點

select * from sys.endpoints

 

修改狀態:

    ALTER ENDPOINT Endpoint_Mirroring

STATE = STARTED

AS TCP (LISTENER_PORT = <port_number>)

FOR database_mirroring (ROLE = ALL);

GO

 

 

2.三、查看端點鏈接權限

SELECT 'Metadata Check';

SELECT EP.name, SP.STATE,

CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id))

AS GRANTOR,

SP.TYPE AS PERMISSION,

CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id))

AS GRANTEE

FROM sys.server_permissions SP , sys.endpoints EP

WHERE SP.major_id = EP.endpoint_id

ORDER BY Permission,grantor, grantee;

GO

 

2.四、常見刪除語句

查看與修改:
更多查閱參考:聯機叢書--鏡像

刪除:
【1】.    刪除某終端點(終端點不帶引號)   drop endpoint <endpoint_name>
【2】.    刪除證書  在master | Security | Certificates (drop master key...) 
3】.    刪除用戶  在master |
								User
【4】.    而後能夠刪除登陸名  drop login <login_name>
【5】.    修改master key  :   alter master key drop encryption by service master key
【6】.    刪除master key  : drop master key
【7】.    刪除鏡像的命令: alter databse <dbname> set partner off 

 

2.五、更多查閱

參考:如何使用T-SQL查看鏡像狀態

 

 

 

附錄3:加入見證服務器,實現自動故障轉移(基於證書)

 

主服務器:SQLSVR3, 192.168.1.3

加入見證服務器

 

--USE master;

--DROP MASTER KEY

 

--一、建立 master 數據庫主密鑰

Use master;

 

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';

 

GO

------------

USE master;

---二、而後對服務器實例建立一個用於其數據庫鏡像出站鏈接的加密證書。

--drop CERTIFICATE SQLSVR3_cert

CREATE CERTIFICATE SQLSVR3_cert

WITH SUBJECT = 'SQLSVR3 certificate for database mirroring',

start_date='2019-03-01',expiry_date='2030-01-01';

 

GO

 

--三、使用主體服務器實例的證書 SQLSVR3_cert 爲主體服務器 SQLSVR3 建立端點。

CREATE ENDPOINT [默認的鏡像端點]

STATE = STARTED

AS TCP (

LISTENER_PORT=5022

, LISTENER_IP = ALL

)

 

FOR DATABASE_MIRRORING (

AUTHENTICATION = CERTIFICATE SQLSVR3_cert

, ENCRYPTION = REQUIRED ALGORITHM AES

, ROLE = ALL

);

 

GO

 

---四、備份見證服務器 SQLSVR3 的加密證書。請確保此證書保存在安全可靠的存儲介質上。

 

BACKUP CERTIFICATE SQLSVR3_cert TO FILE = 'D:\temp_bak\SQLSVR3.cer';

 

GO

 

 

--五、建立登陸名,在見證服務器實例的 master 數據庫中爲主體、鏡像服務器分別建立1個登陸名

 

USE master;

 

CREATE LOGIN SQLSVR2_login

WITH PASSWORD = 'Sample@#';

GO

 

CREATE LOGIN SQLSVR1_login

WITH PASSWORD = 'Sample@#';

GO

 

--六、爲新建立的2登陸名分別建立一個用戶

 

USE master;

 

CREATE USER SQLSVR2_user FOR LOGIN SQLSVR2_login;

GO

 

CREATE USER SQLSVR1_user FOR LOGIN SQLSVR1_login;

GO

 

 

--七、將用戶與鏡像服務器的證書相關聯

USE master;

 

CREATE CERTIFICATE SQLSVR2_cert

AUTHORIZATION SQLSVR2_user

FROM FILE = 'D:\temp_bak\SQLSVR2.cer'

GO

 

CREATE CERTIFICATE SQLSVR1_cert

AUTHORIZATION SQLSVR1_user

FROM FILE = 'D:\temp_bak\SQLSVR1.cer'

GO

 

--八、授予其各自的登陸名對數據庫鏡像端點的 CONNECT 權限。

USE master;

 

GRANT connect on endpoint::[默認的鏡像端點] TO [SQLSVR2_login];

GO

 

GRANT connect on endpoint::[默認的鏡像端點] TO [SQLSVR1_login];

GO

 

 

--九、而後在主、從庫上都建立登陸名、用戶、綁定證書、受權端點(已經複製見證服務器的SQLSVR3.cer證書過去)

USE master;

 

CREATE LOGIN SQLSVR3_login

WITH PASSWORD = 'Sample@#';

GO

 

CREATE USER SQLSVR3_user FOR LOGIN SQLSVR3_login;

GO

 

CREATE CERTIFICATE SQLSVR3_cert

AUTHORIZATION SQLSVR3_user

FROM FILE = 'D:\temp_bak\SQLSVR3.cer'

GO

 

GRANT connect on endpoint::[默認的鏡像端點] TO [SQLSVR3_login];

GO

 

 

 

 

 

--十、在主從庫上進行與見證服務器鏈接

ALTER DATABASE AdventureWorks2012 SET WITNESS = 'TCP://192.168.214.13:5022'

 

-- 驗證結果

 

 

 

複製代碼

 

 

這裏的IP尾數,11爲SQLSVR1,12爲SQLSVR2,13爲見證服務器

而後關掉主庫11的引擎服務,查看從庫是否實現故障轉移~

 

成功~

 

 

 

附錄4:基於域帳戶的鏡像搭建

4.一、操做步驟

主服務器:SQLSVR1

從服務器:SQLSVR1

【1】檢查:網絡,實例端口,鏡像端口(5022),版本信息一致性

【1】檢查:網絡,實例端口,鏡像端口(5022),版本信息一致性

【2】初始化:完整模式下,備份主庫

【2】初始化:以norecovery的方式還原從主庫獲取的完整日誌鏈備份

【3】登陸名:能夠手動構建域帳戶做爲鏡像登陸名也能夠在主數據庫鏡像配置嚮導中輸入一個不存在的,則sql server會自動建立該登陸名,並給與端點connect權限與數據庫的public權限;

 

【4】配置:使用配置數據庫安全向導,配置主從與見證,端點與登陸名

 

【5】覈驗:

  1. 查看登陸名(若是是sql server自動建立的)
  2. 查看端點是否建立成功
  3. 查看數據庫狀態,是否出現同步字樣
 

 

4.二、操做實踐

【1】 檢查:略

  1. 初始化:略
  2. 登陸名:略
  3. 配置:

(4.1)右擊數據庫-》屬性/右擊數據庫-》任務-》鏡像

(4.2)點擊上圖中的配置安全性,直接下一步

(4.3)選擇是否配置見證服務器,這裏暫時先不配置

(4.4)主服務器實例與端口配置

配置嚮導默認使用 5022 端口進行偵聽。若是主體服務器已經手動建立了端點,配置嚮導將選取這個端點。

(4.5)鏡像服務器實例與端口配置

在"鏡像服務器實例"頁,單擊"鏈接"按鈕,鏈接到鏡像服務器實例。在鏈接到鏡像服務器時,請注意使用有權限的登陸賬戶,該登陸賬戶必須具備在鏡像服務器建立端點和登陸名的權限。配置嚮導能夠默認爲其分配偵聽器端口。若是鏡像服務器已經手動建立了端點,配置嚮導將選取這個端點。

(4.6)服務賬戶與端點受權

分別爲主體和鏡像指定一個域賬戶。配置嚮導將爲這些賬戶建立登陸名,併爲其授予對端點的 CONNECT 權限。這個登陸名只須要 public 固定服務器角色便可

點擊下一步

點擊完成

(4.7)開始鏡像

完成"配置安全性"過程後,配置嚮導自動詢問是否當即開始鏡像。若要當即開始鏡像,則單擊"開始鏡像"。

若是單擊"不開始鏡像",將返回到數據庫鏡像配置的主界面。能夠在配置界面上單擊"開始鏡像"。

 

  1. 覈驗

(5.1)登陸名

配置嚮導若是沒有檢查到指定的登陸名,則將自動爲 Windows 賬戶建立登陸名。

(5.2)端點

確認配置嚮導是否成功建立了端點。

(5.3)主體數據庫和輔助數據庫的狀態

配置成功後,主體數據庫的狀態應爲"主體,已同步",鏡像數據庫的狀態應爲"鏡像,已同步/正在還原..."。

 

相關文章
相關標籤/搜索