鏡像安裝的環境:
主機:win server 2012 , sql server 2012 ,ip:192.168.1.189 PC賬戶:administrator
備機:win server 2012 , sql server 2012 ,ip:192.168.1.190 PC賬戶:administrator
無見證服務器(witness)
鏡像准備工作:
1.設置主數據庫為完整模式
2.完整備份主數據庫並備份數據庫的完整日志文件
3.將備份文件拷貝到鏡像數據庫並選擇還原數據庫 (還原選項 norecovery(即不對數據庫執行任何操作),鏡像數據庫現在(正在還原...)
如圖:
說明:
a.鏡像服務器備份的是用戶的數據庫,不是系統的數據庫,比如不能鏡像master,msdb,model和tempdb
b.鏡像的數據庫對象恢復模式必須是完整的,不能是簡單和大容量日志類型的
c.備機鏡像不能被訪問,正常情況下一直處於正在還原的狀態
d.主機可以被訪問,正常情況下一直處於主體正在同步的狀態
e.主機和備機的5022端口必須沒有被占用
鏡像實施:
1.准備工作完成對主數據庫開始做鏡像

2.這里的數據庫實例服務賬戶,最好單獨一個賬戶來管理主數據庫與鏡像數據庫,方便以后數據庫的管理.這里要注意確保這里填寫的賬戶可以正常數據庫,否則會出問題
3.配置完成,如圖開始鏡像
4.主數據庫顯示(主體,已同步), 鏡像數據庫顯示(鏡像,已同步/正在還原...)
鏡像出現的問題:
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
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)
鏡像可用性解決辦法:
1.主體與鏡像轉換
--主機
use master;
alter database dataName set partner failover;
執行成功后原主體數據庫會顯示正在還原,備機數據庫顯示主體正在同步字樣
主機崩潰,強制備機當主機,原主機恢復后再切換回去
主機A
備機B
此時,在B機上執行
use master;
alter database dataName set partner FORCE_SERVICE_ALLOW_DATA_LOSS; --強制接收
停止主機A的SQL SERVER 服務(比如斷電),此時備機上的數據庫會顯示正在恢復狀態,大概持續幾十秒,最后變成
dataName(主體,已斷開鏈接),即現在的鏡像B可以用來充當主機了
假如現在有業務往數據庫里插也是能成功的
現在把原主機A恢復(通電),然后在B機里操作
use master;
alter database dataName set partner resume;
此時A機是作為鏡像的,B機是作為主機的,要再切換一下,則再在B上執行
alter database dataName set partner failover;