最初在為公司設(shè)計SQLServer數(shù)據(jù)庫鏡像的時候,首先考慮的是高可用性(三臺計算機(jī),一臺見證服務(wù)器,一臺做主數(shù)據(jù)庫,一臺做鏡像) 在虛擬機(jī)環(huán)境下部署成功,一切都是那么的完美。 故障轉(zhuǎn)移3秒之內(nèi)就可以順利完成。 1.高可用性的實(shí)施代碼: 主體數(shù)據(jù)庫 /* ***
最初在為公司設(shè)計SQLServer數(shù)據(jù)庫鏡像的時候,首先考慮的是高可用性(三臺計算機(jī),一臺見證服務(wù)器,一臺做主數(shù)據(jù)庫,一臺做鏡像)
在虛擬機(jī)環(huán)境下部署成功,一切都是那么的完美。 故障轉(zhuǎn)移3秒之內(nèi)就可以順利完成。
1.高可用性的實(shí)施代碼:
主體數(shù)據(jù)庫
/********************************************************
此腳本在主體服務(wù)器執(zhí)行
********************************************************/
--鏡像只支持完全恢復(fù)模式,在備份數(shù)據(jù)庫之前檢查恢復(fù)的模式
--對要鏡像的數(shù)據(jù)庫進(jìn)行完整備份后,復(fù)制到鏡像數(shù)據(jù)庫以NORECOVERNY選項(xiàng)進(jìn)行恢復(fù)
USE master;
--DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
GO
--為此服務(wù)器實(shí)例制作一個證書。
--DROP CERTIFICATE HOST_A_cert
CREATE CERTIFICATE HOST_A_cert
WITH SUBJECT = 'HOST_A certificate',START_DATE = '01/01/2009';
GO
--使用該證書為服務(wù)器實(shí)例創(chuàng)建一個鏡像端點(diǎn)。
--DROP ENDPOINT Endpoint_Mirroring
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 = PARTNER
);
GO
--備份 HOST_A 證書,并將其復(fù)制到其他機(jī)器,將 C:\HOST_A_cert.cer 復(fù)制到 HOST_B\HOST_C。
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'e:\HOST_A_cert.cer';
GO
--為入站連接配置 Host_A
--在 HOST_A 上為 HOST_B 創(chuàng)建一個登錄名。
USE master;
--DROP LOGIN HOST_B_login
CREATE LOGIN HOST_B_login WITH PASSWORD = 'password';
GO
--創(chuàng)建一個使用該登錄名的用戶。
--DROP USER HOST_B_user
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
GO
--使證書與該用戶關(guān)聯(lián)。
--DROP CERTIFICATE HOST_B_cert
CREATE CERTIFICATE HOST_B_cert
AUTHORIZATION HOST_B_user
FROM FILE = 'e:\HOST_B_cert.cer'
GO
--授予對遠(yuǎn)程鏡像端點(diǎn)的登錄名的 CONNECT 權(quán)限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
GO
--在 HOST_A 上為 HOST_C 創(chuàng)建一個登錄名。
USE master;
--DROP LOGIN HOST_C_login
CREATE LOGIN HOST_C_login WITH PASSWORD = 'password';
GO
--創(chuàng)建一個使用該登錄名的用戶。
--DROP USER HOST_C_user
CREATE USER HOST_C_user FOR LOGIN HOST_C_login;
GO
--使證書與該用戶關(guān)聯(lián)。
--DROP CERTIFICATE HOST_C_cert
CREATE CERTIFICATE HOST_C_cert
AUTHORIZATION HOST_C_user
FROM FILE = 'e:\HOST_C_cert.cer'
GO
--授予對遠(yuǎn)程鏡像端點(diǎn)的登錄名的 CONNECT 權(quán)限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login];
GO
USE master;
--DROP LOGIN HOST_A_login
CREATE LOGIN HOST_A_login WITH PASSWORD = 'password';
GO
--創(chuàng)建一個使用該登錄名的用戶。
--DROP USER HOST_A_user
CREATE USER HOST_A_user FOR CERTIFICATE HOST_A_cert;
GO
--授予對遠(yuǎn)程鏡像端點(diǎn)的登錄名的 CONNECT 權(quán)限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
GO
--必須要在鏡像數(shù)據(jù)庫中先設(shè)置好伙伴后,才能在主體服務(wù)器執(zhí)行
--在 HOST_A 的主體服務(wù)器實(shí)例上,將 HOST_B 上的服務(wù)器實(shí)例設(shè)置為伙伴(使其成為初始鏡像服務(wù)器實(shí)例)。
ALTER DATABASE crm
SET PARTNER = 'TCP://192.168.1.205:5022';
GO
--設(shè)置見證服務(wù)器
ALTER DATABASE crm SET WITNESS = N'TCP://192.168.1.204:5022';
GO
鏡像數(shù)據(jù)庫
/***********************************************
在鏡像服務(wù)器執(zhí)行此腳本
***********************************************/
USE master;
--DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
GO
--為 HOST_B 服務(wù)器實(shí)例制作一個證書。
--DROP CERTIFICATE HOST_B_cert
CREATE CERTIFICATE HOST_B_cert
WITH SUBJECT = 'HOST_B certificate for database mirroring',START_DATE = '01/01/2009';
GO
--在 HOST_B 中為服務(wù)器實(shí)例創(chuàng)建一個鏡像端點(diǎn)。
--DROP ENDPOINT Endpoint_Mirroring
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 = PARTNER
);
GO
--備份 HOST_B 證書,將 C:\HOST_B_cert.cer 復(fù)制到 HOST_A\HOST_C。
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'e:\HOST_B_cert.cer';
GO
--為入站連接配置 Host_B
--在 HOST_B 上為 HOST_A 創(chuàng)建一個登錄名。
USE master;
--DROP LOGIN HOST_A_login
CREATE LOGIN HOST_A_login WITH PASSWORD = 'password';
GO
--創(chuàng)建一個使用該登錄名的用戶。
--DROP USER HOST_A_user
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
GO
--使證書與該用戶關(guān)聯(lián)。
--DROP CERTIFICATE HOST_A_cert
CREATE CERTIFICATE HOST_A_cert
AUTHORIZATION HOST_A_user
FROM FILE = 'e:\HOST_A_cert.cer'
GO
--授予對遠(yuǎn)程鏡像端點(diǎn)的登錄名的 CONNECT 權(quán)限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
GO
--在 HOST_B 上為 HOST_C 創(chuàng)建一個登錄名。
USE master;
--DROP LOGIN HOST_C_login
CREATE LOGIN HOST_C_login WITH PASSWORD = 'password';
GO
--創(chuàng)建一個使用該登錄名的用戶。
--DROP USER HOST_C_user
CREATE USER HOST_C_user FOR LOGIN HOST_C_login;
GO
--使證書與該用戶關(guān)聯(lián)。
--DROP CERTIFICATE HOST_C_cert
CREATE CERTIFICATE HOST_C_cert
AUTHORIZATION HOST_C_user
FROM FILE = 'e:\HOST_C_cert.cer'
GO
--授予對遠(yuǎn)程鏡像端點(diǎn)的登錄名的 CONNECT 權(quán)限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login];
GO
--在 HOST_B 上為 HOST_B 創(chuàng)建一個登錄名。
USE master;
--DROP LOGIN HOST_B_login
CREATE LOGIN HOST_B_login WITH PASSWORD = 'password';
GO
--創(chuàng)建一個使用該登錄名的用戶。
--DROP USER HOST_B_user
CREATE USER HOST_B_user FOR CERTIFICATE HOST_B_cert;
GO
--授予對遠(yuǎn)程鏡像端點(diǎn)的登錄名的 CONNECT 權(quán)限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
GO
--在 HOST_B 的鏡像服務(wù)器實(shí)例上,將 HOST_A 上的服務(wù)器實(shí)例設(shè)置為伙伴(使其成為初始主體服務(wù)器實(shí)例)。
ALTER DATABASE crm
SET PARTNER = 'TCP://192.168.1.203:5022';
GO
見證服務(wù)器
/****************************
見證服務(wù)器執(zhí)行
*****************************/
--ALTER DATABASE MirrorDB SET PARTNER OFF
USE master;
--DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
GO
--為此服務(wù)器實(shí)例制作一個證書。
--DROP CERTIFICATE HOST_C_cert
CREATE CERTIFICATE HOST_C_cert
WITH SUBJECT = 'HOST_C certificate',START_DATE = '01/01/2009';
GO
--使用該證書為服務(wù)器實(shí)例創(chuàng)建一個鏡像端點(diǎn)。
--DROP ENDPOINT Endpoint_Mirroring
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=5022
, LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE HOST_C_cert
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE = WITNESS
);
GO
--備份 HOST_C 證書,并將其復(fù)制到其他系統(tǒng),即 HOST_B\HOST_A。
BACKUP CERTIFICATE HOST_C_cert TO FILE = 'e:\HOST_C_cert.cer';
GO
--為入站連接配置 Host_C
--在 HOST_C 上為 HOST_B 創(chuàng)建一個登錄名。
USE master;
--DROP LOGIN HOST_B_login
CREATE LOGIN HOST_B_login WITH PASSWORD = 'password';
GO
--創(chuàng)建一個使用該登錄名的用戶。
--DROP USER HOST_B_user
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
GO
--使證書與該用戶關(guān)聯(lián)。
--DROP CERTIFICATE HOST_B_cert
CREATE CERTIFICATE HOST_B_cert
AUTHORIZATION HOST_B_user
FROM FILE = 'e:\HOST_B_cert.cer'
GO
--授予對遠(yuǎn)程鏡像端點(diǎn)的登錄名的 CONNECT 權(quán)限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
GO
--在 HOST_C 上為 HOST_A 創(chuàng)建一個登錄名。
USE master;
--DROP LOGIN HOST_A_login
CREATE LOGIN HOST_A_login WITH PASSWORD = 'password';
GO
--創(chuàng)建一個使用該登錄名的用戶。
--DROP USER HOST_A_user
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
GO
--使證書與該用戶關(guān)聯(lián)。
--DROP CERTIFICATE HOST_A_cert
CREATE CERTIFICATE HOST_A_cert
AUTHORIZATION HOST_A_user
FROM FILE = 'e:\HOST_A_cert.cer'
GO
--授予對遠(yuǎn)程鏡像端點(diǎn)的登錄名的 CONNECT 權(quán)限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
GO
--在 HOST_C 上為 HOST_C 創(chuàng)建一個登錄名。
USE master;
--DROP LOGIN HOST_C_login
CREATE LOGIN HOST_C_login WITH PASSWORD = 'password';
GO
--創(chuàng)建一個使用該登錄名的用戶。
--DROP USER HOST_C_user
CREATE USER HOST_C_user FOR CERTIFICATE HOST_C_cert;
GO
可能有朋友們會比較有疑惑,你一下搞兩個數(shù)據(jù)庫出來,他們的ip地址都不一樣,到時候數(shù)據(jù)庫切換過去了,我的數(shù)據(jù)庫的連接字符串可如何是好?難道還得在代碼中去控制是連接哪個數(shù)據(jù)庫嗎?
其實(shí)這個問題是這樣的,使用ADO.NET或者SQL Native Client能夠自動連接到故障轉(zhuǎn)移后的伙伴,連接字符串如下所示:
ConnectionString="DataSource= A;Failover Partner=B;Initial Catalog=AdventureWorks;Integrated Security=true;"
DataSource= A;這個就是我們常用的主數(shù)據(jù)庫的ip地址,F(xiàn)ailover Partner=B;這個填寫的就是鏡像數(shù)據(jù)庫的ip地址,一旦出現(xiàn)了連接錯誤,ado.net會在超時以后自動去連接鏡像數(shù)據(jù)庫。
2.高級別保護(hù)模式
在昨天晚上加班做實(shí)施的時候,才發(fā)現(xiàn)我的設(shè)計已經(jīng)被修改了,由于以前的項(xiàng)目有java寫的也有c#寫的,全自動的故障轉(zhuǎn)移不能夠?qū)崿F(xiàn) 。換句話說,由于老項(xiàng)目中的歷史遺留問題,以及特殊模塊的耦合性過高,無法解耦,只能在高級別保護(hù)模式或高性能模式中選擇一種了。那么這兩者有什么區(qū)別呢?
簡單一點(diǎn)來說,區(qū)別就在與事務(wù)安全模式上跟應(yīng)用場景上。
高級別保護(hù)模式采用的是同步鏡像, SAFETY FULL。應(yīng)用場景:通常在局域網(wǎng)中或?qū)?shù)據(jù)要求比較高的場景中。
高性能保護(hù)模式采用的是異步鏡像, SAFETY OFF。應(yīng)用場景:通常在廣域網(wǎng)或?qū)?shù)據(jù)要求不太高,丟失幾條數(shù)據(jù)是允許的,但是必須保證它不中斷服務(wù)。
在微軟的SQLServer2005的課程上是這么說的。如果是高級別保護(hù)模式的話,主、從數(shù)據(jù)庫只要有一臺不能正常保證服務(wù),數(shù)據(jù)庫就不能夠?qū)ν膺M(jìn)行服務(wù)了,我在開始的時候就沒有打算采用這種模式,因?yàn)椴块T經(jīng)理說了,丟失一兩條數(shù)據(jù)是可以接受的,況且我們公司是做運(yùn)營的,按照起先微軟的課程的理論,高級別保護(hù)模式是不太適合我們公司的應(yīng)用場景的,萬一有一臺數(shù)據(jù)庫出問題了,整個服務(wù)就被中斷,這是不能讓人接受的。再說了,公司對數(shù)據(jù)要求不太苛刻,兩臺服務(wù)器都有內(nèi)網(wǎng)線連接,由于內(nèi)網(wǎng)傳輸速度非常的快,即使采用高性能模式,一般來說也是不會丟失數(shù)據(jù)的。于是我打算采用高性能模式來做數(shù)據(jù)庫的鏡像。由于公司服務(wù)器沒有域環(huán)境,所以我就采用了證書驗(yàn)證來做SQLServer鏡像。
意外收獲:
兩臺服務(wù)器全部都安裝了SQLServer2008,在設(shè)置事務(wù)安全模式的時候,才發(fā)現(xiàn)SQLServer2008不支持異步模式。提示大概如下:此SQLServer版本不支持修改事務(wù)安全模式,alter database失敗。 我當(dāng)時汗都出來了,忙活了一晚上,到最后居然是這個結(jié)果。
由于是服務(wù)器維護(hù)時間,我大膽的把鏡像服務(wù)器停止了,結(jié)果卻讓我大吃一驚,主數(shù)據(jù)庫依舊可以正常工作,正常對外提供服務(wù)。也就是說,起先微軟的課程講的知識是錯誤的,兩臺數(shù)據(jù)庫做鏡像,不管是哪臺數(shù)據(jù)庫出了問題,另外的一臺數(shù)據(jù)庫都可以保證正常對外提供服務(wù)。于是我反復(fù)試驗(yàn)反復(fù)切換了一下,結(jié)果依然是這樣。
由于高級別保護(hù)模式與高性能模式代碼差不太多,只是在事務(wù)安全模式的設(shè)置上有些小區(qū)別,前面已經(jīng)提到,這里就不再多解釋了。實(shí)施的代碼如下:
主體服務(wù)器
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' ,
START_DATE = '01/01/2009';
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 );
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'e:\HOST_A_cert.cer';
CREATE LOGIN HOST_B_login WITH PASSWORD = 'password';
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'e:\HOST_B_cert.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
ALTER DATABASE crm SET PARTNER = 'TCP://10.10.10.8:5022';
鏡像數(shù)據(jù)庫
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate',
START_DATE = '01/01/2009';
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 );
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'e:\HOST_B_cert.cer';
CREATE LOGIN HOST_A_login WITH PASSWORD = 'password';
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'e:\HOST_A_cert.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
ALTER DATABASE crm SET PARTNER = 'TCP://10.10.10.6:5022';
可能有朋友會比較奇怪,你這里也沒有使用ALTER DATABASE crm SET SAFETY FULL; 按理應(yīng)該是高性能模式才對呀?
其實(shí)這個問題是這樣的,我的這個SQLServer2008默認(rèn)已經(jīng)是將事務(wù)安全模式設(shè)置為full了,即使是手動設(shè)置也一樣,并且我實(shí)施的時候SQLServer2008不支持將
事務(wù)安全模式設(shè)置為OFF。
OK,一切都設(shè)置好了,那么就可以模擬服務(wù)器真的down機(jī)時候的操作了,后續(xù)的工作我也把代碼做了總結(jié),具體代碼如下:
手動故障轉(zhuǎn)移代碼
--主備互換
--主機(jī)執(zhí)行:
ALTER DATABASE crm SET PARTNER FAILOVER
--主服務(wù)器Down掉,備機(jī)緊急啟動并且開始服務(wù)
ALTER DATABASE crm SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
原來的主服務(wù)器恢復(fù),可以繼續(xù)工作,需要重新設(shè)定鏡像
--備機(jī)執(zhí)行:
USE master
ALTER DATABASE crm SET PARTNER RESUME --恢復(fù)鏡像
ALTER DATABASE crm SET PARTNER FAILOVER; --切換主備
3.監(jiān)視數(shù)據(jù)庫鏡像
SQLServer提供了一些視圖,可以供查詢鏡像的各種狀態(tài),到時候可以根據(jù)這個做一個監(jiān)視,一旦發(fā)生故障轉(zhuǎn)移群集,發(fā)郵件給系統(tǒng)管理員,好讓系統(tǒng)管理員及時的知道數(shù)據(jù)庫服務(wù)器發(fā)生了什么問題,即使的做故障分析、排查。有關(guān)這方面資料,MSDN上已經(jīng)提供太多資料了。感興趣的朋友可以去查這方面的資料。
在文章的最后提出一個有爭議的問題:SQLServer(2008)高級別保護(hù)模式,只要有一臺數(shù)據(jù)庫能夠保證正常運(yùn)行,就可以正常對外提供服務(wù)。我的實(shí)驗(yàn)結(jié)果是這樣的,這的確跟以往的理論知識有些出入。
還等什么,趕快搭環(huán)境動手實(shí)驗(yàn)一下吧,體驗(yàn)一下SQLServer鏡像帶來的快感。 希望有興趣的朋友們一起學(xué)習(xí)探討。
后話:
在發(fā)布本文以后,有朋友問到說SQLServer鏡像在實(shí)施過程中不知道開放什么端口,導(dǎo)致防火墻必須關(guān)閉掉的這個問題。因?yàn)槲疫@里的環(huán)境已經(jīng)沒有了,搭建真實(shí)環(huán)境進(jìn)行模擬測試也不太可能,簡單看了下,SQLServer服務(wù)需要用到了如下端口如圖所示:
另外,請參考msdn的這篇文章:http://msdn.microsoft.com/zh-cn/library/cc646023.aspx
下表列出了數(shù)據(jù)庫引擎經(jīng)常使用的端口。
應(yīng)用場景 | 端口 | 注釋 |
---|---|---|
通過 TCP 運(yùn)行的 SQL Server 默認(rèn)實(shí)例 |
TCP 端口 1433 |
這是允許通過防火墻的最常用端口。它適用于與默認(rèn)數(shù)據(jù)庫引擎安裝或作為計算機(jī)上唯一運(yùn)行實(shí)例的命名實(shí)例之間的例行連接。(命名實(shí)例具有特殊的注意事項(xiàng)。請參閱本主題后面的動態(tài)端口)。 |
采用默認(rèn)配置的 SQL Server 命名實(shí)例 |
此 TCP 端口是在啟動數(shù)據(jù)庫引擎時確定的動態(tài)端口。 |
請參閱下面動態(tài)端口部分中的描述。當(dāng)使用命名實(shí)例時,SQL Server Browser 服務(wù)可能需要 UDP 端口 1434。 |
配置為使用固定端口的 SQL Server 命名實(shí)例 |
由管理員配置的端口號。 |
請參閱下面動態(tài)端口部分中的描述。 |
專用管理員連接 |
對于默認(rèn)實(shí)例,為 TCP 端口 1434。其他端口用于命名實(shí)例。有關(guān)端口號,請查看錯誤日志。 |
默認(rèn)情況下,不會啟用與專用管理員連接 (DAC) 的遠(yuǎn)程連接。若要啟用遠(yuǎn)程 DAC,請使用外圍應(yīng)用配置器方面。有關(guān)詳細(xì)信息,請參閱了解外圍應(yīng)用配置器。 |
SQL Server Browser 服務(wù) |
UDP 端口 1434 |
SQL Server Browser 服務(wù)用于偵聽指向命名實(shí)例的傳入連接,并為客戶端提供與此命名實(shí)例對應(yīng)的 TCP 端口號。通常,只要使用數(shù)據(jù)庫引擎的命名實(shí)例,就會啟動 SQL Server Browser 服務(wù)。如果客戶端配置為連接到命名實(shí)例的特定端口,則不必啟動 SQL Server Browser 服務(wù)。 |
通過 HTTP 端點(diǎn)運(yùn)行的 SQL Server 實(shí)例。 |
可以在創(chuàng)建 HTTP 端點(diǎn)時指定。對于 CLEAR_PORT 通信,默認(rèn)端口為 TCP 端口 80,對于 SSL_PORT 通信,默認(rèn)端口為 443。 |
用于通過 URL 實(shí)現(xiàn)的 HTTP 連接。 |
通過 HTTPS 端點(diǎn)運(yùn)行的 SQL Server 默認(rèn)實(shí)例。 |
TCP 端口 443 |
用于通過 URL 實(shí)現(xiàn)的 HTTPS 連接。HTTPS 是使用安全套接字層 (SSL) 的 HTTP 連接。 |
Service Broker |
TCP 端口 4022。若要驗(yàn)證使用的端口,請執(zhí)行下面的查詢: |
對于 SQL Server Service Broker,沒有默認(rèn)端口,不過這是聯(lián)機(jī)叢書示例中使用的常規(guī)配置。 |
數(shù)據(jù)庫鏡像 |
管理員選擇的端口。若要確定此端口,請執(zhí)行以下查詢: |
對于數(shù)據(jù)庫鏡像,沒有默認(rèn)端口,不過聯(lián)機(jī)叢書示例使用 TCP 端口 7022。務(wù)必避免中斷正在使用的鏡像端點(diǎn),尤其是處于帶有自動故障轉(zhuǎn)移功能的高安全模式下時。防火墻配置必須避免破壞仲裁。有關(guān)詳細(xì)信息,請參閱指定服務(wù)器網(wǎng)絡(luò)地址(數(shù)據(jù)庫鏡像)。 |
復(fù)制 |
與 SQL Server 的復(fù)制連接使用典型的常規(guī)數(shù)據(jù)庫引擎端口(供默認(rèn)實(shí)例使用的 TCP 端口 1433 等) 復(fù) 制快照的 Web 同步和 FTP/UNC 訪問要求在防火墻上打開其他端口。為了將初始數(shù)據(jù)和架構(gòu)從一個位置傳輸?shù)搅硪粋€位置,復(fù)制可以使用 FTP(TCP 端口 21)或者通過 HTTP(TCP 端口 80)或文件和打印共享(TCP 端口 137、138 或 139)進(jìn)行的同步。 |
對于通過 HTTP 進(jìn)行的同步,復(fù)制使用 IIS 端點(diǎn)(其端口可配置,但默認(rèn)情況下為端口 80),不過 IIS 進(jìn)程通過標(biāo)準(zhǔn)端口(對于默認(rèn)實(shí)例為 1433)連接到后端 SQL Server。 在使用 FTP 進(jìn)行 Web 同步期間,F(xiàn)TP 傳輸是在 IIS 和 SQL Server 發(fā)布服務(wù)器之間進(jìn)行,而非在訂閱服務(wù)器和 IIS 之間進(jìn)行。 有關(guān)詳細(xì)信息,請參閱Configuring Microsoft Internet Security and Acceleration Server for Microsoft SQL Server 2000 Replication over the Internet(為通過 Internet 進(jìn)行的 Microsoft SQL Server 2000 復(fù)制配置 Microsoft Internet Security and Acceleration Server)。 |
Transact-SQL 調(diào)試器 |
TCP 端口 135 請參閱端口 135 的特殊注意事項(xiàng) 可能還需要 IPsec 例外。 |
如果使用 Visual Studio,則在 Visual Studio 主機(jī)計算機(jī)上,還必須將 Devenv.exe 添加到“例外”列表中并打開 TCP 端口 135。 如果使用 Management Studio,則在 Management Studio 主機(jī)計算機(jī)上,還必須將 ssms.exe 添加到“例外”列表中并打開 TCP 端口 135。有關(guān)詳細(xì)信息,請參閱配置和啟動 Transact-SQL 調(diào)試器。 |
有關(guān)為數(shù)據(jù)庫引擎配置 Windows 防火墻的分步說明,請參閱如何為數(shù)據(jù)庫引擎訪問配置 Windows 防火墻。
默 認(rèn)情況下,命名實(shí)例(包括 SQL Server Express)使用動態(tài)端口。也就是說,每次啟動數(shù)據(jù)庫引擎時,它都將確定一個可用端口并使用此端口號。如果命名實(shí)例是安裝的唯一數(shù)據(jù)庫引擎實(shí)例,則它 可能使用 TCP 端口 1433。如果還安裝了其他數(shù)據(jù)庫引擎實(shí)例,則它可能會使用其他 TCP 端口。由于所選端口可能會在每次啟動數(shù)據(jù)庫引擎時更改,因而很難配置防火墻以啟用對正確端口號的訪問。因此,如果使用防火墻,則建議重新配置數(shù)據(jù)庫引擎以 每次都使用同一端口號。這稱為固定端口或靜態(tài)端口。有關(guān)詳細(xì)信息,請參閱配置固定端口。
另一種配置命名實(shí)例以偵聽固定端口的方法是在防火墻中為諸如 sqlservr.exe 之類的 SQL Server 程序創(chuàng)建例外(針對數(shù)據(jù)庫引擎)。這會非常方便,但當(dāng)使用高級安全 Windows 防火墻 MMC 管理單元時,端口號將不會顯示在“入站規(guī)則”頁的“本地端口”列中。這會使審核哪些端口處于打開狀態(tài)變得更為困難。另一注意事項(xiàng)是 Service Pack 或累積的更新可能會更改 SQL Server 可執(zhí)行文件的路徑,這將使防火墻規(guī)則作廢。
希望可以幫到那些困惑中的人們。祝:好運(yùn)。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com