一、注意點
1.數據庫的模式要是完整模式。
2.要對數據庫完整備份和事務日志備份,分別還原到鏡像庫上,使用NORECOVERY模式。
3.鏡像數據庫是不允許刪除和操作,即便查看屬性也不行。
4.先刪除端點,再刪除證書,再刪除主密鑰。
5.只有是同步模式的時候,才能手動故障轉移,異步模式不能手動故障轉移。
二、搭建步驟
1、創建主密鑰(主庫和鏡像庫上都執行)
命令:
use master
go
create master key encryption by password='$a123456'
go
查看主密鑰
創建主密鑰之前:
創建主密鑰之后:
2、創建主庫和鏡像庫的證書(分別在主庫和鏡像庫上執行)
命令:
主庫上執行:
use master
go
create certificate mirror01_cert with subject='mirror01 certificate',expiry_date='2099-1-1'
go
鏡像庫上執行:
use master
go
create certificate mirror02_cert with subject='mirror02 certificate',expiry_date='2099-1-1'
go
3、創建主庫和鏡像庫的端點
命令:
主庫上執行:
use master
go
create endpoint Endpoint_Mirroring
state=started
as tcp ( listener_port = 5022,listener_ip = all )
for database_mirroring ( authentication = certificate mirror01_cert, encryption = required algorithm aes, role = all )
go
鏡像庫上執行:
use master
go
create endpoint Endpoint_Mirroring
state=started
as tcp ( listener_port = 5022,listener_ip = all )
for database_mirroring ( authentication = certificate mirror02_cert, encryption = required algorithm aes, role = all )
go
SSMS查看創建的端點
4、備份證書(主庫和鏡像的庫的都備份,並互相拷貝過去,保證每個服務器上都有2個證書)
命令:
主庫上執行:
use master
go
backup certificate mirror01_cert to file = 'D:\cert\mirror01_cert.cer'
go
鏡像庫上執行:
use master
go
backup certificate mirror02_cert to file = 'D:\cert\mirror02_cert.cer'
go
5、創建登錄名(這個要和證書關聯,所以1創建2的,2創建1的)
命令:
主庫上執行:
use master
go
create login mirror02_login with password='abc@123456'
go
鏡像庫上執行:
use master
go
create login mirror01_login with password='abc@123456'
go
6、創建使用該登錄名的用戶
命令:
主庫上執行:
use master
go
create user mirror02_user for login mirror02_login
go
鏡像庫上執行:
use master
go
create user mirror01_user for login mirror01_login
go
7、證書與用戶關聯
命令:
主庫上執行:
use master
go
create certificate mirror02_cert
authorization mirror02_user
from file='D:\cert\mirror02_cert.cer'
go
鏡像庫上執行:
use master
go
create certificate mirror01_cert
authorization mirror01_user
from file='D:\cert\mirror01_cert.cer'
go
8、授予對遠程數據庫端點的登錄名的CONNECT權限
命令:
主庫上執行:
use master
go
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [mirror02_login];
go
鏡像庫上執行:
use master
go
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [mirror01_login];
go
9、對需要做鏡像的數據庫做完整備份和事務日志備份,然后在鏡像庫上做還原(先還原完整備份,再還原事務日志),使用NORECOVERY模式,這里不做闡述,最后還原后的數據庫狀態如下:
10.連接鏡像(先在鏡像庫上操作,然后在主庫上操作)
注:sqlmirror01和sqlmirror02是2台機器的機器名
命令:
鏡像庫上執行:(做完這個操作后,數據庫的狀態:正在恢復)
use master
go
ALTER DATABASE test SET PARTNER = 'TCP://sqlmirror01:5022';
go
主庫上執行:(做完這個操作,鏡像就搭建好了)
use master
go
ALTER DATABASE test SET PARTNER = 'TCP://sqlmirror02:5022';
go
此時主庫的狀態:
鏡像庫的狀態:
鏡像的狀態:(只能在主庫上右鍵-->屬性查看)
注:如果狀態不對,先刷新一下SSMS
11.查看的選項
(1)啟用數據庫監視器查看鏡像是否正常(主庫上查看)
(2)查看鏡像服務器是否授權主庫服務器
12 .主庫宕機后,怎么恢復鏡像庫為可用狀態
--第一步:脫離鏡像
alter database test set partner off
--第二步;修改數據庫的狀態為recovery
restore database test with recovery
三、涉及到的系統SQL
--1.查看所有的主秘鑰
select * from sys.key_encryptions
--刪除主秘鑰(要先刪除使用秘鑰的證書)
drop master key
--2.查看所有的證書
select * from sys.certificates
--刪除證書(要先刪除使用證書的端點)
drop certificate sqlmirror02_cert
--3.查看所有的端點(endpoint)
select * from sys.endpoints
--刪除端點
drop endpoint Endpoint_Mirroring
四、遇到的錯誤
1.數據庫鏡像監視器的報錯
(1)錯誤截圖
(2)解決辦法
注:這是有可能連接鏡像服務器的認證失效了,比如windows認證的administrator或SQLServer認證的sa密碼改了
再次查看已經OK了