我用的是沒有見證的,但找的文章里有鏡像,所以都做一下補充,兩個網址做的參考,
之所以在從他們那再補充一次是為了怕有一天他們的文章被刪了我這還有個備用的,這兩篇寫的不錯 其他的都不行 特別亂,這是找的最全的
來源:https://blog.csdn.net/zhanglong_longlong/article/details/52692412
來源:https://blog.csdn.net/wangqi0079/article/details/8602399
主機名稱為:HOST_A,IP地址為: 192.168.1.102
備機名稱為:HOST_B,IP地址為:192.168.1.103
要鏡像的庫:test
這是已經做好的狀態,左邊主機,右邊備機
一、首先要確保兩個服務器的數據庫的版本為標准版、企業版或者開發版,檢測版本可以用命令:
1 select@@version;
二、把數據庫恢復模式改為完整模式:
1 USE master; 2 ALTER DATABASE <DatabaeName> //<DatabaeName>既為需要配置鏡像的數據庫名 3 SET RECOVERY FULL;
或者:

如果是簡單模式,在簡歷鏡像的時候會報錯:無法啟用數據庫鏡像,因為'DataName'數據庫在兩個伙伴上都不處於完全恢復模式
三、在鏡像服務器上建立空庫。
在鏡像服務器上建立和主服務器上名稱一樣的空數據庫,為的是配置用戶。
四、在鏡像服務器上建立和主服務器上一樣的用戶,並賦予數據庫
4.1、在主服務器上執行命令:
1 USE master; 2 select sid,name from syslogins;

出現如上圖的結果。
4.2、在鏡像服務器上安裝這個表建立用戶,大部分都是系統用戶不用管,只建立我們自定義的用戶。
1 USE master; 2 exec sp_addlogin 3 @loginame='<LoginName>', 4 @passwd='<Password>', 5 @sid=<sid>;
sid就是上面查詢結果中的sid,復制過來。
4.3、把新建的用戶付給對應數據庫。
登錄數據庫→安全性
→登錄名→【對應用戶名】上右鍵。
在彈出的窗體中,左側找到用戶映射,然后在右側選中對應的數據庫,如下圖:

在右下方的“數據庫角色成員身份”中,選擇db_owner和public。 如果不能選 但只有public是默認的也可以
五、開始創建證書環境。
5.1、創建證書。
如果證書存在或者添加出錯可以 刪除證書:
--刪除證書
1 DROP CERTIFICATE HOST_A_cert 2 drop master key
主機執行:
1 USE master; 2 CREATE MASTER KEY ENCRYPTION BY PASSWORD ='證書的密碼'; 3 CREATE CERTIFICATE HOST_A_cert WITH SUBJECT ='HOST_A certificate', 4 START_DATE ='08/21/2014';
備機執行:
1 USE master; 2 CREATE MASTER KEY ENCRYPTION BY PASSWORD ='證書的密碼'; 3 CREATE CERTIFICATE HOST_B_cert WITH SUBJECT ='HOST_B certificate', 4 START_DATE ='08/21/2014';
5.2、創建連接的端點(主備可並行執行)
如果期間建立出錯可以刪除端點
1 DROP ENDPOINT Endpoint_Mirroring
--主機執行:
--備機執行:
5.3、備份證書
先建立一個目錄:D:\SQLBackup,目錄名可任意。
主機執行:
-
BACKUP CERTIFICATE HOST_A_cert TO FILE ='D:\SQLBackup\HOST_A_cert.cer';
-
BACKUP CERTIFICATE HOST_B_cert TO FILE ='D:\SQLBackup\HOST_B_cert.cer';
5.4、互換證書
把主機中的HOST_A_cert.cer拷貝到備機的D:\SQLBackup(5.3中建立的目錄)目錄中
把備機中的HOST_B_cert.cer拷貝到主機的D:\SQLBackup目錄中
5.5、添加登錄名、用戶
如果期間出錯可以刪除登錄名 用戶
--刪除登錄名 DROP LOGIN HOST_B_login --刪除用戶 DROP USER HOST_B_user --刪除證書 DROP CERTIFICATE HOST_B_cert
主機執行:
CREATE LOGIN HOST_B_login WITH PASSWORD ='證書的密碼'; CREATE USER HOST_B_user FOR LOGIN HOST_B_login; CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE ='D:\SQLBackup\HOST_B_cert.cer'; GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
備機執行:
CREATE LOGIN HOST_A_login WITH PASSWORD ='證書的密碼'; CREATE USER HOST_A_user FOR LOGIN HOST_A_login; CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE ='D:\SQLBackup\HOST_A_cert.cer'; GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
執行成功后再主機中的登錄名中會看到:

對應的備機中也有一個用戶:HOST_A_login
到此證書環境建立完畢,就是一堆命令,其實並不太復雜。
六、建立鏡像
6.1、備份主機中的數據庫。
找到要建立鏡像的數據庫→右鍵任務
→備份,備份類型現在“完整”。
把備份文件復制到備機中備用。
在備機中建立的空數據庫上右鍵任務
→還原→數據庫


選項中一定要選擇:不對數據庫執行任何操作,不會滾未提交的事物。
點擊確定,備機的數據庫會顯示:

這時候前期准備就已經完成,可以建立鏡像了。
七、建立鏡像
先在備機中執行:
ALTER DATABASE NewDB SET PARTNER = N'TCP://hostA:5022'-- boat主機名 GO
然后在主機中執行:
ALTER DATABASE NewDB SET PARTNER = N'TCP://hostB:5022'-- boat主機名 GO
執行成功后會如下圖所示(圖片來自上文提到的blog中):

測試操作
1、主備互換
--主機執行:
2、主服務器Down掉,備機緊急啟動並且開始服務
--備機執行:
3、原來的主服務器恢復,可以繼續工作,需要重新設定鏡像
--備機執行:
4、原來的主服務器恢復,可以繼續工作
--默認情況下,事務安全級別的設置為 FULL,即同步運行模式,而且SQL Server 2005 標准版只支持同步模式。
--關閉事務安全可將會話切換到異步運行模式,該模式可使性能達到最佳。
八、可能遇到的問題。
鏡像一路順風其實很快,但是各種各樣的 問題都會出現,記錄下我遇到的問題。
8.1、 在,執行步驟七的時候,主機執行語句的時候報錯:
無法啟用數據庫鏡像,因為'NewDB'數據庫在兩個伙伴上都不處於完全恢復模式
這個上文已經提到過,把數據庫的恢復模式設為完整即可。
8.2、依然是步驟七
-
-
鏡像數據庫"pqsys_config"包含的事務日志數據不足,無法保留主體數據庫的日志備份鏈。如果沒有從主體數據庫進行日志備份或者沒有在鏡像數據庫上還原日志備份,則可能會出現這種情況。
-
這個是步驟6.1中備份完數據庫后,主機數據庫要有了新的操作,這時候重新備份一下,再還原即可。一般是在主機中備份事務日志而不是完整。

在備機上還原的時候也選擇還原事務日志。
注:如果備機的數據庫的狀態不是“正在還原”,還原的時候“事務日志”不可選,所以要保證備機的數據庫的狀態,一次不成功多試幾次。這個錯話最有可能遇到。
8.3、在第七步的時候,如果主機和備機的執行順序反了,也會報一個錯,大意是鏡像服務器為准備好之類的。
整理的sql

