這篇文章總結(jié)了常見的Azure SQL數(shù)據(jù)庫連接失敗的情況,主要分為5大類,旨在幫助用戶或企業(yè)數(shù)據(jù)庫管理員排查數(shù)據(jù)庫連接異常的問題。
問題一:連接字符串問題
1.錯誤的login或密碼
如果在連接數(shù)據(jù)庫的時(shí)候輸入了錯誤的login或者密碼,那么通常我們會看到如下報(bào)錯:
這時(shí)可以檢查一下連接字符串或者SSMS客戶端輸入的login和密碼是否正確。
2.錯誤的服務(wù)器名稱
在遇到下面這種報(bào)錯信息的時(shí)候,需要檢查一下是否是服務(wù)器名稱輸入有誤。
問題二:Login/User權(quán)限問題
如果使用的Login并沒有訪問目標(biāo)數(shù)據(jù)庫的權(quán)限,那么在嘗試直接連接到這個數(shù)據(jù)庫或者連接到master數(shù)據(jù)庫后展開這個數(shù)據(jù)庫的時(shí)候就會遇到下面這個錯誤:
這時(shí)候需要根據(jù)情況為這個Login創(chuàng)建一個User,然后賦予這個User訪問數(shù)據(jù)庫的權(quán)限;或者直接更換一個有訪問權(quán)限的賬號進(jìn)行連接。下面的例子是如何創(chuàng)建一個名為testlogin的Login并且賦予對數(shù)據(jù)庫testdb的read權(quán)限:
--在master數(shù)據(jù)庫下運(yùn)行語句,創(chuàng)建名為testlogin的Login
CREATE LOGIN testlogin WITH password='Pass word1';
--切換到testdb數(shù)據(jù)庫,創(chuàng)建名為testuser的User
CREATE USER testuser FROM LOGIN testlogin;
--給新建的testuser添加read權(quán)限
EXEC sp_addrolemember'db_datareader','testuser';
問題三:防火墻設(shè)置問題
1.IP地址不在允許列表中
如果發(fā)起連接的客戶端IP地址不在Azure SQL Database的IP允許列表中,那么連接會失敗。這時(shí)候需要登錄到Azure管理門戶中添加相應(yīng)的防火墻規(guī)則。
2.在客戶端和Internet之間的所有防火墻上面,確保1433端口的出站鏈接(outbound connection)是開放的。
3.對于部署在Azure虛擬機(jī)上的客戶端,除1433端口外,確保為客戶端與SQL數(shù)據(jù)庫之間的交互保留Azure客戶端計(jì)算機(jī)上11000-11999和14000-14999的端口范圍。
問題四:暫時(shí)性錯誤
當(dāng)應(yīng)用嘗試連接到Azure SQL Database的時(shí)候,如果收到了下面的錯誤信息:
Error code 40613:"Database<x>on server<y>is not currently available.Please retry the connection later.If the problem persists,contact customer support,and provide them the session tracing ID of<z>"
這種錯誤通常都是暫時(shí)性的。SQL Database在需要動態(tài)調(diào)整硬件資源,或者有計(jì)劃事件(例如軟件更新)等情況下,會觸發(fā)重新配置(reconfiguration),大多數(shù)的重新配置會很快完成,最多不超過60s。針對這種暫時(shí)性的錯誤,可以有如下解決辦法:
1.應(yīng)用端應(yīng)該做好應(yīng)對這種暫時(shí)性錯誤的準(zhǔn)備,很重要的一點(diǎn)就是添加重試邏輯(retry logic),在問題發(fā)生時(shí)進(jìn)行重試而不是直接把報(bào)錯拋給客戶端/用戶,有關(guān)重試邏輯的示例代碼,可以參考:SQL Azure Connection Retry
2.當(dāng)數(shù)據(jù)庫的資源使用接近上限時(shí),也可能造成暫時(shí)的連接問題。對于這種情況,可以通過管理門戶的監(jiān)控圖表來及時(shí)發(fā)現(xiàn)資源不足的情況,根據(jù)實(shí)際需求調(diào)整服務(wù)級別。
問題五:啟用了數(shù)據(jù)庫表審核
在開啟了Azure SQL Database Table Auditing之后,對于下層客戶端來說,需要修改連接字符串,否則會出現(xiàn)無法連接的情況。
備注
該問題只會出現(xiàn)在應(yīng)用了Table Auditing的情況,而Table Auditing目前已經(jīng)被棄用。對于Blob Auditing,則不需要修改。
對于“下層客戶端”,即支持TDS 7.3版和更低版本的客戶端—應(yīng)修改連接字符串中的服務(wù)器FQDN:
連接字符串中的原始服務(wù)器FQDN:<服務(wù)器名稱>.database.chinacloudapi.cn
連接字符串中修改后的服務(wù)器FQDN:<服務(wù)器名稱>.database.secure.chinacloudapi.cn
“下層客戶端”的部分列表包括:
·.NET 4.0和更低版本,
·ODBC 10.0和更低版本。
·JDBC(JDBC雖然支持TDS 7.4,但不完全支持TDS重定向功能)
·Tedious(適用于Node.JS)
關(guān)于更多相關(guān)信息,可以參考:SQL數(shù)據(jù)庫-針對審核的下層客戶端支持和IP終結(jié)點(diǎn)更改。