【正文】
。關(guān)于使用服務(wù)器網(wǎng)絡(luò)實(shí)用程序的更多信息,請(qǐng)參見 SQL Server 在線參考書中的 “SQL Server 網(wǎng)絡(luò)實(shí)用程序 ”專題。 有時(shí)候, SQL Server 2021 可能不會(huì)綁定于端口 1433 或任何其他指定的端口。如果端口正被其他 應(yīng)用程序使用,或者如果 你 正在嘗試使用一個(gè)錯(cuò)誤的 IP 地址進(jìn)行連接,就可能會(huì)出現(xiàn)此問(wèn)題。因此, TCP/IP 到 SQL Server 的連接可能不成功,在 SQL Server 錯(cuò)誤日志中 你 會(huì)收到下列錯(cuò)誤信息: 20211114 15:49: server SuperSocket Info:Bind failed on TCP port 1433. 如果通過(guò) TCP/IP 連接 你 不能連接到 SQL Server 實(shí)例,請(qǐng)嘗試使用命名管道協(xié)議或共享內(nèi)存協(xié)議。 運(yùn)行下面的命令 在命令提示符下,以獲取 信息關(guān)于正在使用的端口 : NETSTAT an 注意 :對(duì)于 SQL Server 命名實(shí)例, SQL Server 動(dòng)態(tài)地決定端口并偵聽決定的端口。因此,當(dāng) 你 啟動(dòng) SQL Server 命名實(shí)例時(shí), SQL Server 將設(shè)法偵聽之前使用的端口。如果 SQL Server 不能綁定到該端口,命名實(shí)例可能會(huì)動(dòng)態(tài)地綁定到另一個(gè)端口。在這種情況下,請(qǐng)確認(rèn)客戶端應(yīng)用程序也被設(shè)置為動(dòng)態(tài)地決定端口。作為選擇, 你 還可以為命名實(shí)例指定一個(gè)靜態(tài)端口,通過(guò)客戶端網(wǎng)絡(luò)實(shí)用程序?qū)ζ溥M(jìn)行綁定和偵聽。 解決 MDAC 問(wèn)題 MDAC 的問(wèn)題也可能會(huì)引起連接問(wèn)題。例如,安裝一個(gè)軟件可能會(huì)覆蓋一些 MDAC 文件或更改權(quán)限,而 你 需要這些權(quán)限才能訪問(wèn) MDAC 文件。 你 可以 18 運(yùn)行 MDAC 部件檢查器來(lái)驗(yàn)證 MDAC 在計(jì)算機(jī)上的安裝。 注意 :如果 你 正連接到 SQL Server 的一個(gè)命名實(shí)例,請(qǐng)確認(rèn)計(jì)算機(jī)上運(yùn)行的是 MDAC 或更新的版本。 MDAC 的早期版本不識(shí)別 SQL Server 的命名實(shí)例。因此,可能無(wú)法連接到命名實(shí)例。 你 可以使用 實(shí)用程序來(lái)驗(yàn)證通過(guò) SQL Server ODBC 驅(qū)動(dòng)程序的連 接。 解決防火墻問(wèn)題 如果防火墻存在于客戶端計(jì)算機(jī)和正在運(yùn)行 SQL Server 的計(jì)算機(jī)之間,請(qǐng)確認(rèn)通過(guò)防火墻進(jìn)行通信時(shí)所需的端口已打開。 如果 你 使用 TCP/IP 協(xié)議連接 SQL Server 實(shí)例,請(qǐng)確認(rèn)能夠用 Tel 程序連接到 SQL Server 正在偵聽的端口。要使用 Tel 程序,在命令提示符下運(yùn)行下列命令: Tel IP Address Port Number 如果 Tel 程序沒有成功,并且 你 接收到錯(cuò)誤信息,請(qǐng)解決此錯(cuò)誤然后嘗試再次連接。 注意 :因?yàn)橛? Slammer 病毒引起的問(wèn)題,在 你 的防火墻上,用戶數(shù)據(jù)報(bào)協(xié)議 (UDP) 端口 1434 可能被阻擋。 解決身份驗(yàn)證和安全問(wèn)題 由于身份認(rèn)證失敗,可能無(wú)法連接到 SQL Server。如果身份認(rèn)證失敗, 你可能收到下列錯(cuò)誤信息之一: Login failed for user 39。username39。 Login failed for user 39。NTAUTHORITY\ANONYMOUS LOGON39。 Login failed for user 39。null39。 如果 你 接受 一個(gè)錯(cuò)誤信息因?yàn)樯矸菡J(rèn)證失敗和錯(cuò)誤信息不提到一個(gè)特定的SQL Server 登錄名,請(qǐng)使用 Windows 身份認(rèn)證解決該問(wèn)題。由于 Windows 身份認(rèn)證的問(wèn)題, 你 可能會(huì)收到下列錯(cuò)誤信息: Cannot generate SSPI Context 下列問(wèn)題可能會(huì)引起身份認(rèn)證和安全問(wèn)題: ? NTLM 身份認(rèn)證或 Kerberos 身份認(rèn)證出現(xiàn)問(wèn)題。 ? 由于連接問(wèn)題,無(wú)法聯(lián)系域控制器。 ? 域之間的信任關(guān)系出現(xiàn)問(wèn)題。 有關(guān)可能原因的更多信息,請(qǐng)參見計(jì)算機(jī)上的事件日志。要解決 Windows 身份認(rèn)證 的連接問(wèn)題, 你 可以使用 SQL Server 身份認(rèn)證連接到 SQL Server 實(shí)例。 有關(guān)如何診斷和解決 “Cannot Generate SSPI Context” 如果在使用 SQL Server 身份認(rèn)證時(shí)連接沒有成功, 你 會(huì)收到下列錯(cuò)誤信息: Login failed for user 39。username39。 .Not associated with a trusted connection 若要解決此問(wèn)題,請(qǐng)按照以下步驟操作。 19 警告 : 不恰當(dāng)?shù)氖褂?“注冊(cè)表編輯器 ”可 能 導(dǎo)致嚴(yán)重問(wèn)題,可能需要重 新安裝操作系統(tǒng)。 Microsoft 不能保證 你 可以解決因 “注冊(cè)表編輯器 ”使用不當(dāng)而導(dǎo)致的問(wèn)題。使用 “注冊(cè)表編輯器 ”的風(fēng)險(xiǎn) 需要 你 承 擔(dān)。 1. 請(qǐng)確認(rèn) SQL Server 實(shí)例配置為使用 Windows 身份認(rèn)證和 SQL Server 身份認(rèn)證。為此,請(qǐng)確認(rèn)在正在運(yùn)行 SQL Server 的計(jì)算機(jī)上存在下列注冊(cè)表項(xiàng)。對(duì)于默認(rèn)的 SQL Server 實(shí)例: HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\LoginMode 對(duì) 于 SQL Server 的命名實(shí)例: HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\Instance Name\MSSQLServer\LoginMode 請(qǐng)確認(rèn)已設(shè)置下列注冊(cè)表項(xiàng)的值: 身份認(rèn)證類型 值 僅限于 Windows 身份認(rèn)證 1 混合模式( SQL Server 身份認(rèn)證和 Windows 身份認(rèn)證) 2 注意:如果 你 對(duì)注冊(cè)表進(jìn)行了任何更改,必須關(guān)閉并重新啟動(dòng) SQL Server 實(shí)例使更改生效。 2. 嘗試使用 其他 Windows 帳戶或 SQL Server 登錄帳戶連接到 SQL Server 實(shí)例。這樣能夠幫助確定是否是由于某個(gè)特殊的登錄帳戶的問(wèn)題而造成連接失敗。例如,登錄帳戶的密碼可能已被更改。 3. 嘗試使用其他協(xié)議連接到 SQL Server 實(shí)例。例如,使用 TCP/IP 協(xié)議進(jìn)行 Windows 身份認(rèn)證的連接可能會(huì)失敗,但是使用命名管道協(xié)議進(jìn)行 Windows 身份認(rèn)證的連接就可能會(huì)成功。 如果 你 正在使用證書,當(dāng)嘗試連接到 SQL Server 實(shí)例時(shí),可能會(huì)收到一條安全錯(cuò)誤信息關(guān)于 安全套接字層 (SSL)的 。 解決 TCP/IP 套接字上的壓力問(wèn)題 當(dāng)你為 SQL Server 使用 ODBC 驅(qū)動(dòng)程序、 Microsoft OLE DB Provider for SQL Server 或 管理提供程序時(shí),可以使用恰當(dāng)?shù)膽?yīng)用程序 設(shè)計(jì)界面 (API) 來(lái)禁用連接。在禁用連接、并且應(yīng)用程序 時(shí)常 打開和關(guān)閉連接時(shí), 壓力在 對(duì)基本 SQL Server 網(wǎng)絡(luò)庫(kù)可能會(huì)增 加 。有時(shí), Web 服務(wù)器和 JDBC 驅(qū)動(dòng)程序也會(huì)嘗試連接到 SQL Server 實(shí)例。因此,對(duì) SQL Server 連接需求的增加可能會(huì)超過(guò) SQL Server 的處理能力。這可能會(huì)給 TCP/IP 套接字帶來(lái)壓力, 你 還可能在 SQL Server 錯(cuò)誤 記錄 文件中收到下列錯(cuò)誤信息: 20210807 20:46: server Error:17832, Severity:20, State:6 20210807 20:46: server Connection opened but invalid login packet(s) closed. 注意 :如果運(yùn)行 SQL Server 2021 SP3 或 SQL Server 2021 SP3a,則不會(huì)注意到 20 對(duì) TCP/IP 套接字的壓力,這是由于添加了對(duì)登陸數(shù)據(jù)包數(shù)量的限制。在使用第三方驅(qū)動(dòng)程序連接到 SQL Server 實(shí)例時(shí),發(fā)生錯(cuò)誤 17832。要解決該問(wèn)題,請(qǐng)與第三方供應(yīng)商聯(lián)系,并獲取經(jīng)測(cè)試證明能夠用于 SQL Server 2021 SP3 和 SQL Server 2021 SP3a 的驅(qū)動(dòng)程序。 查看 SQL Server 實(shí)例是否以單用戶模式啟動(dòng) 如果嘗試連接的 SQL Server 實(shí)例是以單用戶模式啟動(dòng)的,只能建立一個(gè)到 SQL Server 的連接。如果運(yùn)行軟件的計(jì)算機(jī)自動(dòng)連接到 SQL Server,該軟件可以輕松地使用唯一的連接。例如,下面的軟件可以自動(dòng)連接到 SQL Server 實(shí)例: ? SQL Server 代理程序 ? 第三方備份軟件 ? 第三方監(jiān)測(cè)軟件 ? 第三方病毒軟件 ? Microsoft Inter 信息服務(wù) (IIS) ? SQL Server 企業(yè)管理器 嘗試連接到 SQL Server 實(shí)例的客戶端應(yīng)用程序收到下列錯(cuò)誤信息: SQL Server does not exist or Access Denied 當(dāng)安裝過(guò)程以單用戶模式啟動(dòng) SQL Server 實(shí)例時(shí), 這一個(gè) 錯(cuò)誤一般發(fā)生在 SQL 群集安裝和服務(wù)軟件包安裝期間。指定的應(yīng)用程序 可能 自動(dòng) 地 連接到使用唯一可用連接的 SQL Server 實(shí)例,從而安裝 不成功 。 要確定 SQL Server 實(shí)例是否已經(jīng)以單用戶模式啟動(dòng),請(qǐng)檢查 SQL Server 錯(cuò)誤日志文件中是否具有一個(gè)與以下 各項(xiàng) 類似的條目: 20210731 11:26: spid3 Warning ****************** 20210731 11:26: spid3 SQL Server started in single user allowed to system catalogs. 驗(yàn)證到 SQL Server 的命名管道連接 如果 你 無(wú)法使用命名管道連接到 SQL Server 實(shí)例,請(qǐng)確認(rèn) SQL Server 實(shí)例配置為接受命名管道連接。 解決在恢復(fù)過(guò)程中連接超時(shí)的問(wèn)題 在每次啟動(dòng)一個(gè) SQL Server 實(shí)例時(shí), SQL Server 將恢復(fù)各個(gè)數(shù)據(jù)庫(kù)。在此恢復(fù)過(guò)程中, SQL Server 回滾未提交的事務(wù)。當(dāng)停止 SQL Server 實(shí)例時(shí), SQL Server 還將前滾已提交的事務(wù)和沒有寫入硬盤的更改。當(dāng)恢復(fù)過(guò)程完成時(shí), SQL Server 將在 SQL Server 錯(cuò)誤日志文件中寫入下列信息: Recovery Complete 在恢復(fù)過(guò)程中, SQL Server 可能不會(huì)接受連接。在此時(shí)間內(nèi)嘗試連接到 SQL Server 的客戶端可能會(huì)收到一條與以下類似的錯(cuò)誤信息: Timeout Expired 21 SQL Server 代理服務(wù)可能無(wú)法啟動(dòng),這是因?yàn)樗却? SQL Server 恢復(fù)數(shù)據(jù)庫(kù)。因此,當(dāng) 你 在 SQL Server 錯(cuò)誤日志文件中收到下面的信息時(shí),連接不再會(huì)因?yàn)槌瑫r(shí)錯(cuò)誤而失?。? Recovery Complete 如果恢復(fù)過(guò)程花費(fèi)的時(shí)間很長(zhǎng), 你 也許還要排除恢復(fù)過(guò)程的故障。 測(cè)試連接到 SQL Server 實(shí)例的不同方法 當(dāng) 你 連接到 SQL Server 實(shí)例時(shí),如果遇到了連接問(wèn)題,可以使用下面的一種或多種方法來(lái)解決連接問(wèn)題。 ? 使用 SQL Server 身份認(rèn)證和 Windows 身份認(rèn)證測(cè)試到 SQL Server 實(shí)例的連接。 ? 從其他數(shù)據(jù)源(例如 ODBC DSN、 .udl 文件、 SQL 查詢分析器、 SQL Server 企業(yè)管理器, isql 實(shí)用程序或 osql 實(shí)用程序)測(cè)試到 SQL Server 實(shí)例的連接。 ? 使用其他協(xié)議測(cè)試到 SQL Server 實(shí)例的連接。 你 可以為使用該協(xié)議的 SQL Server 實(shí)例創(chuàng)建一個(gè)新的別名,從而指定不同的協(xié)議。還可以通過(guò)在 SQL Server 實(shí)例名稱的開始處添加 tcp:、 np:、 lpc:、或 rpc: 來(lái)指定 你 的連接字符串中的協(xié)議 。例如,如果 TCP/IP 連接失敗,則命名管道連接成功。 ? 使用其他登錄帳戶測(cè)試連接,這樣可以幫助 你 確定該問(wèn)題是否與某個(gè)特定的登錄帳戶有關(guān)。 ? 在 %systemroot%\system32\drivers\etc\hosts 文件中添加一個(gè)與正在運(yùn)行 SQL Server 實(shí)例的計(jì)算機(jī)的 IP 地址相應(yīng)的條目。 ? 嘗試從運(yùn)行 SQL Server 的計(jì)算機(jī)和客戶端連接到 SQL Server 實(shí)例。 ? 如果 你 正從運(yùn)行 SQL Server 的計(jì)算機(jī)進(jìn)行連接,可以指定 “.”或 “(本地) ”(不帶引號(hào) )取代服務(wù)器名稱,然后連接。 ? 嘗試使用 IP 地址而不是服務(wù)器名稱連接到 SQL Server 實(shí)例。 ? 嘗試指定 SQL Server 實(shí)例正在偵聽的特定端口。有兩種方法:創(chuàng)建一個(gè)別名或?qū)⒁粋€(gè)端口號(hào)添加到連接字符串(例如 MyServer\MyInstance, 1433)。