· 版本號 |
sql server 2005 版本 |
9.00.1399 |
sql server 2005(初始版本) |
9.00.2047 |
sql server 2005 SP1 |
9.00.3042 |
sql server 2005 SP2 |
我們這里直接打SP2補丁:略
準備數據庫:
條件 很重要:
主體數據庫必須是完全恢復模式
創建鏡像數據庫
在主體數據庫上做一個完全備份,在鏡像服務器上使用NORECOVER選項恢復主體數據庫。
繼續恢復后續日志備份(NORECOVER) NORECOVER 很重要
配置數據庫鏡像端點 (ENDPOINT)
數據庫鏡像端點實現鏡像會話的通訊,也就是各個服務器的入口點,有點類似于端口號。但不是。也就是說你創建了這個端點之后,各個服務器之間就可以使用TCP協議進行實例間的通訊。每個鏡像端點上都在一個唯一的TCP端口號上偵聽,一般大家都使用5022號端口。
創建數據庫鏡像端點:
需要在每個實例上創建
只有管理員組的成員才能權限。
設置端點角色 即有的是伙伴端點,有的是見證端點,所以必須要指定。
激活端點 默認是不能使用的,所以要激活。
下面我們看一下使用T-SQL 語句創建端點
CREATE ENDPOINT DBMIRRORING
AS TCP(LISTENER_PORT=5022)當然也可以使用其他端口,只要沒有被使用
FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED) GO
-- 創建的是一個數據庫鏡像端點,角色是伙伴,通訊過程是通過加密的。
ALTER ENDPOINT DBMIRRORING STATE=STARTED GO --激活
此時這個端點就開始偵聽了。
創建見證服務器的端點:創建的時候激活端點。
CREATE ENDPOINT DBMIRRORING
STATE=STARTED AS TCP(LISTENER_PORT=5022)
For DATABASE_MIRRORING (ROLE=WITNESS,ENCRYPTION=SUPPORTED)
配置安全性:
數據庫鏡像中的實例之間必須可信 都使用WINDOWS 身份驗證或是基于證書的身份驗證(非信任域),為了簡單為例,我們使用WINDOWS身份驗證。
賦予服務帳戶對端點的連接權限。
在這里我們都使用相同的用戶名口令
下面我們創建完端點后就要啟動數據庫鏡像,注意順序很重要
指定鏡像數據庫的伙伴 在鏡像服務器上操作
指定主體數據庫伙伴 在主體服務器上操作
指定見證服務器 在見證服務器上操作
指定事務安全選項 FULL 還是 OFF
對應語句分別是:
ALTER DATABASE NOTHWIND SET PARTNER=N'TCP:/SERVER1H:
–-在SERVER2(鏡像)上執行
ALTER DATABASE NOTHWIND SET PARTNER=N'TCP:/SERVER2:
--在SERVER1(主體)上執行
ALTER DATABASE NOTHWIND SET WITNESS=N'TCP:/SERVER3:
--在SERVER1(主體)上執行
ALTER DATABASE NOTHWIND SET SAFETY FULL;
--在SERVER1(主體)上執行 高可用性
當然也可以使用SMSS
那么完成之后怎么來查看數據庫鏡像是否完成,可以通過以下兩種方法:
SMSS 數據庫屬性---鏡像狀態
T-SQL
SELECT * FROM SYS.DATABASE——MIRRORING
SELECT * FROM SYS.DATABASE——MIRRORING——WITNESS
下面我們具體看一下配置高可用性數據庫鏡像
我們使用T-SQL 可以很明顯的看到配置的過程。
下面我來介紹一下我們所使用的環境:
SERVER1為主體服務器
SERVER2為鏡像服務器
SERVER3 為見證服務器
首先我們要
準備數據庫:一個是備份主體數據庫,一個是在鏡像服務器上恢復。
所以
在SERVE1上:
BACKUP DATABASE NORTHWIND TO DISK='C:\NW.BAK'
在 SERVER2上:
RESTORE DATABASE NORTHWIND FROM DISK='C:\NW.BAK' WITH NORECOVERY
創建數據庫端點:
1. 在SERVER1上創建數據庫鏡像端點,用于伙伴通訊
Create endpoint dbmirrep as tcp (listener_port=5022)
For database_mirroring (role=partner,encryption=supported );
Alter endpoint dbmirrep state=started
通過圖形界面可以查看到
2. 在SERVER2上創建數據庫端點,也是用于伙伴通訊
Create endpoint dbmirrep as tcp (listener_port=5022)
For database_mirroring (role=partner,encryption=supported)
Alter endpoint dbmirrep state=started
3. 在SERVER3上創建鏡像端點,用于見證通訊
CREATE ENDPOINT DBMIRREP AS TCP (LISTENER_PORT=5022)
FOR DATABASE_MIRRORING (role=witness,encryption=supported)
4. 檢查端點配置
SELECT * FROM SYS.DATABASE_MIRRORING_ENDPOINTS
也可以通過圖形界面查看
配置數據庫鏡像安全性:也就是指定哪些用戶可以使用這個端點。肯定是管理員,一般用戶不讓他訪問。
分別執行:
Grant connect on endpoint::"dbmirrep" to "server1\dufei"
Grant connect on endpoint::"dbmirrep" to "server2\dufei"
Grant connect on endpoint::"dbmirrep" to "server3\dufei"
最后一個就是啟動數據庫鏡像。注意:順序 首先要從鏡像服務上配置
在SERVER2上,指定伙伴端點:
ALTER DATABASE ITET SET PARTNER='TCP://SERVER1:5022'
在SERVER1上,指定伙伴端點:
ALTER DATABASE itet SET PARTNER='TCP://SERVER2:5022' –查看數據庫
--到此為止,就是咱們前面所介紹的高級別保護模式。可以實現數據完整性,但是不能實現高可用性。所以還要繼續,也就是說到這里為止,不要見證服務器也可以,但是不能實現故障的自動轉移:
在 SERVER1上,指定見證服務器端點:
Alter database ITET set wiTness=N'TCP://SERVER3:5022'
設置數據庫鏡像事務安全級別:
ALTER DATABASE ITET SET SAFETY FULL
實驗結束,但一定要注意細節
最后看一下數據庫鏡像角色切換:也就是如何實現故障轉移
自動故障轉移:
只針對高可用性模式
SAFETY=FULL
測試:禁用主服務器的網卡,查看庫狀態,再啟用再查看
我們到這里已經知道了如何實現數據庫鏡像,那么用戶如何來使用:客戶端都是連接到主體服務器上進行工作的。那么如果主體服務器不可用了,那么就會造成用戶連接的失敗,它怎么知道去自動連接鏡像服務器,這里一般使用ADO技術,如ASP.NET 或是微軟所提借的連接工具。
我們這里借助WINDOWS 的集群功能:來進行測試:
SERVER1與SERVER2配置成WINDOWS集群:
實驗到此結束!
本文出自 “杜飛” 博客