下面主要是2008 MSSQL的一個 鏡像 安裝步驟,使用到的工具是mssql自帶的Management Studio purpose : SQL SERVER 2008 mirror configuration Created : 2012-04-13 Author : kenyon 鏡像 安裝的環境: 主機:win server 2003,sql server 2008,IP:192.168.9.1
下面主要是2008 MSSQL的一個鏡像安裝步驟,使用到的工具是mssql自帶的Management Studio
purpose : SQL SERVER 2008 mirror configuration
Created : 2012-04-13
Author : kenyon
鏡像安裝的環境:
主機:win server 2003,sql server 2008,IP:192.168.9.182 PC賬戶:administrator
備機:win server 2003,sql server 2008,IP:192.168.9.181 PC賬戶:administrator
無見證服務器(witness)
說明:
a.鏡像服務器備份的是用戶的數據庫,不是系統的數據庫,比如不能鏡像master,msdb,model和tempdb
b.鏡像的數據庫對象恢復模式必須是完整的,不能是簡單和大容量日志類型的
c.備機鏡像不能被訪問,正常情況下一直處于正在還原的狀態
d.主機可以被訪問,正常情況下一直處于主體正在同步的狀態
e.主機和備機的5022端口必須沒有被占用,可以用telnet 192.168.9.182 5022來驗證
0.確定主機的恢復模式是完整性恢復的
USE master;
ALTER DATABASE backuptest SET RECOVERY FULL;
1.創建證書,實現互通的根本
--主機
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'clq';
CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' ,
START_DATE = '09/20/2011';
--備機
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'clq';
CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate',
START_DATE = '09/20/2011';
2.創建主備連接的端點
--主機
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS
TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL )
FOR
DATABASE_MIRRORING
( AUTHENTICATION = CERTIFICATE HOST_A_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
--備機
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS
TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL )
FOR
DATABASE_MIRRORING
( AUTHENTICATION = CERTIFICATE HOST_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
3.備份證書用來互換
--主機
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'D:\working\HOST_A_cert.cer';
--備機
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:\working\HOST_B_cert.cer';
4.主備之間互換證書
將主機上產生的證書HOST_A_cert復制到備機上,將備機上產生的證書HOST_B_cert復制到主機上,放在第5步指定的目錄
5.新增主備登陸用戶
--主機
CREATE LOGIN HOST_B_login WITH PASSWORD = 'clq'; --主機上登錄到備機的用戶
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:\working\HOST_B_cert.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
--備機
CREATE LOGIN HOST_A_login WITH PASSWORD = 'clq'; --備機上登錄到主機的用戶
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:\working\HOST_A_cert.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
6.登錄名維護,即主機與備機有相同的登錄用戶,防止切換到備機時業務無法登錄,假如主備登錄用戶一致,此步驟可免
--主機
use master;
select sid,name from syslogins where name = 'clq';
sid name
0xC6C9DB1494DA514882D4BEAA362A8FB7 clq
--備機
USE master;
exec sp_addlogin
@loginame = 'clq',
@passwd = 'clq',
@sid = 0xC6C9DB1494DA514882D4BEAA362A8FB7 ;
----以下步驟是針對每個庫執行的,有幾個庫就執行幾次
7.準備備機數據庫
--主機
backup database backuptest to disk= 'E:\database\sql server\MSSQL10.MSSQLSERVER\MSSQL\Backup\backuptest.log'
with init
go
--備機
將主機上備份的文件復制到備機上,并還原備機數據庫,還原時必須指定norecovery參數
create database backuptest; --該步驟為備機上無此數據時需先創建一個空數據庫,若已有則直接恢復
restore database backuptest from disk = 'E:\working\backuptest.log' with norecovery;
恢復時指定覆蓋原有備機數據庫即可。
當恢復時報錯時可以參考用replace參數(首次恢復)
restore database EOL_TCCLUB FROM disk= 'd:\backup\EOL_TCCLUB.bak'
with move 'AC_SSC_BZ' to 'D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\EOL_TCCLUB.mdf',
move 'AC_SSC_BZ_log' to 'D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\EOL_TCCLUB.ldf',
replace,norecovery.
如果還不行,報錯信息如:日志尾部未備份之類信息,則去主機上備份日志文件,在備機上做恢復,恢復時同樣指定norecovery。
8.增加鏡像伙伴,需要先在備機上執行,再執行主機
--備機
ALTER DATABASE backuptest SET PARTNER = 'TCP://192.168.9.181:5022';
--主機
ALTER DATABASE backuptest SET PARTNER = 'TCP://192.168.9.182:5022';
執行成功以后,主機上數據庫backuptest會顯示主體正在同步字樣,備機數據庫會顯示正在還原字樣。若上述步驟
有報日志錯誤,則還需從主機上備份日志文件,然后在備機上還原,還原日志時同樣需要指定norecovery
9.鏡像與主體切換
--主機
use master;
alter database backuptest set partner failover;
執行成功后原主體數據庫會顯示正在還原,備機數據庫顯示主體正在同步字樣
10.測試主備切換
主機崩潰,強制備機當主機,原主機恢復后再切換回去
主機A
備機B
此時,在B機上執行
use master;
alter database backuptest set partner FORCE_SERVICE_ALLOW_DATA_LOSS; --強制接收
停止主機A的SQL SERVER 服務(比如斷電),此時備機上的數據庫會顯示正在恢復狀態,大概持續幾十秒,最后變成
backuptest(主體,已斷開鏈接),即現在的鏡像B可以用來充當主機了
假如現在有業務往數據庫里插也是能成功的
現在把原主機A恢復(通電),然后在B機里操作
use master;
alter database backuptest set partner resume;
此時A機是作為鏡像的,B機是作為主機的,要再切換一下,則再在B上執行
alter database backuptest set partner failover;
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com