學習筆記(十五)——鏡像的知識點與注意事項數據庫
1、基礎知識安全
一、SQL Server鏡像只有兩種模式:高安全模式和高性能模式。兩種模式的主要區別在於在事務提交後的操做。服務器
在高性能模式下,主體服務器不須要等待鏡像服務器響應便可提交事務。異步
在高安全性模式,須要把事務同步到鏡像並獲得響應後才最終提交主體服務器的事務。性能
二、SQL Server鏡像狀態可能包含下面幾種:學習
可使用sys.database_mirroring目錄視圖查看鏡像信息。加密
2、示例spa
一、分別在主體服務器、鏡像服務器上建立端點設計
IF EXISTS (SELECT 1 FROM sys.database_mirroring_endpoints AS E DROP ENDPOINT ep_EduBase_Mirroring; GO CREATE ENDPOINT ep_EduBase_Mirroring STATE=STARTED // 端點將當即啓動 AS TCP(LISTENER_PORT=5022) //監聽TCP端口 FOR DATABASE_MIRRORING (AUTHENTICATION=WINDOWS NEGOTIATE //身份驗證方式設爲Windows協商(即在NTLM和KERBEROS之間選擇) ,ENCRYPTION=SUPPORTED //若通訊端點支持加密,則鏡像過程使用加密 ,ROLE=PARTNER); PARTNER //角色用於主體/鏡像服務器;WITNESS角色用於見證服務器;
二、經過完整備份、日誌備份(如有必要)、還原,將數據庫從主體服務器複製到鏡像服務器上日誌
DECLARE @FullBkDesc VARCHAR(MAX); SELECT @FullBkDesc = 'Full backup on principal server for database mirroring at '+CONVERT(VARCHAR,GETDATE(),120)+'.'; BACKUP DATABASE EduBase2017 TO DISK='C:\EduBase2017\Mirroring\EduBase_FullBackup_ForMirroring.bak' WITH INIT ,Name = 'EduBase_FullBackup' ,DESCRIPTION = @FullBkDesc; //完整備份 GO DECLARE @LogBkDesc VARCHAR(MAX); SELECT @LogBkDesc = 'Log backup on principal server for database mirroring at '+CONVERT(VARCHAR,GETDATE(),120)+'.'; BACKUP LOG EduBase2017 TO DISK='C:\EduBase2017\Mirroring\EduBase_LogBackup_ForMirroring.bak' WITH INIT ,Name = 'EduBase_LogBackup' ,DESCRIPTION = @LogBkDesc; //日誌備份:若在完整備份後,主體服務器的數據庫發生更改,則需進一步備份、還原日誌,以便保持日誌鏈完整 //爲便於鏡像服務器訪問主體服務器的備份文件,可在cmd控制檯將備份文件所在位置設爲共享。 RESTORE HEADERONLY FROM DISK='\\WinSvr-1\EduBase2015Mirroring\EduBase2015_FullBackup_ForMirroring.bak'; 鏡像服務器經過統一命名約定(UNC)地址訪問主體服務器中的備份文件 RESTORE DATABASE EduBase2015 FROM DISK = '\\WinSvr-1\EduBase2015Mirroring\EduBase2015_FullBackup_ForMirroring.bak' WITH FILE = 1 ,REPLACE ,NORECOVERY; 從完整備份中還原 GO RESTORE HEADERONLY FROM DISK= '\\WinSvr-1\EduBase2015Mirroring\EduBase2015_LogBackup_ForMirroring.bak'; RESTORE DATABASE EduBase2015 FROM DISK='\\WinSvr-1\EduBase2015Mirroring\EduBase2015_LogBackup_ForMirroring.bak' WITH FILE = 1 ,NORECOVERY; // 從日誌備份中還原 最後一步備份務必指定非還原狀態,以確保鏡像服務器的數據庫不可用 //鏡像數據庫已包含主體數據庫中的數據庫用戶,但鏡像服務器未包含映射至這些數據庫用戶的登陸,故需另行建立
三、分別在鏡像服務器、主體服務器的相應數據庫上啓動鏡像會話
ALTER DATABASE EduBase2015 SET PARTNER='TCP://WINSVR-1.EDUBASE.COM:5022'; //在鏡像服務器的數據庫上,設置主體服務器的完整域名、監聽端點 ALTER DATABASE EduBase2015 SET PARTNER='TCP://WINSVR-2.EDUBASE.COM:5022'; //在主體服務器的數據庫上,設置鏡像服務器的完整域名、監聽端點 ALTER DATABASE EduBase2015 //在主體服務器中設置鏡像安全性 SET SAFETY FULL; //完整安全性:主體服務器的數據庫中的事務在提交前,必須同步寫入鏡像服務器的數據庫若設爲OFF,則容許異步寫入,可能致使丟失 ALTER DATABASE EduBase2015 //在主體服務器中設置鏡像安全性 SET SAFETY FULL; //在客戶端的ADO.Net的鏈接字符串中,增長Failover Partner=鏡像服務器名,ADO.Net將自動重定向服務器
四、在主體服務器的數據庫中修改數據
USE EduBase2015; UPDATE Course SET Name='計算機導論(1)' WHERE Name='計算機導論'; UPDATE Course SET Name='C語言程序設計(2)' WHERE Name='C語言程序設計'; //亦可在客戶端中進行操做
五、假設發生故障,此時在主體服務器上手動設置故障轉移,從而切換主體服務器、鏡像服務器的角色
ALTER DATABASE EduBase2015
SET PARTNER FAILOVER;
六、在當前的主體服務器(即先前的鏡像服務器)的數據庫中檢查數據是否一致,隨後修改數據
USE EduBase2015; SELECT * FROM Course; UPDATE Course SET Name='VB語言程序設計(3)' WHERE Name='VB語言程序設計'; //亦可在客戶端中進行操做
七、假設主體服務器的數據庫遇到大量數據寫入,此時掛起鏡像會話,隨後繼續鏡像會話
ALTER DATABASE EduBase2015
SET PARTNER SUSPEND;
ALTER DATABASE EduBase2015
SET PARTNER RESUME;
八、當前的鏡像服務器(即先前的主體服務器)已排除故障,此時在當前的主體服務器(即先前的鏡像服務器)上手動設置故障轉移,從而切換主體服務器、鏡像服務器的角色,隨後檢查數據是否一致
ALTER DATABASE EduBase2015
SET PARTNER FAILOVER;
USE EduBase2013;
SELECT * FROM tb_Course;
九、中止鏡像會話
ALTER DATABASE EduBase2015
SET PARTNER OFF;