SQL Server 2000數據庫連接
2024-08-31 00:47:54
供稿:網友
 
sql server 2000數據庫連接
 
目錄
 
1         sql server 2000服務和實例... 1
2         sql server 2000數據庫應用結構... 2
3         sql server 2000安全管理... 2
3.1       服務組件的啟動帳戶.... 2
3.2       客戶端連接用戶管理... 2
4         sql server 2000數據庫連接常見故障及處理方法... 3
4.1       sql server 不存在或訪問被拒絕... 3
4.2       用戶登陸失敗... 6
4.3       超時已過期... 6
4.4       版本兼容性問題... 6
5         sql server 2000數據庫連接故障與上層應用程序錯誤辨析... 7
6         總結... 10
 
1           sql server 2000服務和實例
sql server2000的服務組件是以 windows 服務(windows services)方式運行的。sql server2000通常包含四種windows服務(不考慮 olap):
 
●  mssqlserver—提供一般的數據庫功能,如文件管理、查詢處理、數據存儲等
 
●  dtc(distributed transaction coordinator)—分布式事務協調器, 支持跨越兩
個或多個服務器的更新操作來保證事務的完整性
 
●  sqlserveragent—負責sql server 自動化工作, 如果需要sql server 在指定時
間執行某一個存儲過程,就需要用到這個服務
 
●  search service—全文查詢服務, 負責全文檢索方面的工作。
 
在實踐中我們可能安裝所有的服務組件,也可能只安裝其中的一部分,這一組sql server 2000 服務即稱sql server 2000實例。安裝sql server 服務組件,就是創建一個新的sql server 實例或是在原有實例中增減服務組件。
sql server 2000 允許在同一個操作系統中創建多個實例。
 
●  如果只安裝一個 sql server 實例,不需要在sql server安裝時指定實例名稱,自動使用默認名稱。那么在windows域里計算機的名稱就是 sql server 實例的名稱;使用tcp/ip協議連接sql server 實例時,可以用ip地址表示sql server 2000實例。
 
●  如果一個操作系統中安裝了多個sql server 2000的實例,則需要在sql server安裝時指定實例名稱。在windows域里可以用“計算機名稱/實例名稱”的形式標志sql server 2000實例;使用tcp/ip協議連接sql server 實例時,可以用“ip地址/實例名稱”表示sql server 2000實例。
2          sql server 2000數據庫應用結構
sql server 2000數據庫應用一般是c/s結構,sql server 2000實例作為服務器,提供引擎,用戶操作界面工具則是客戶端,兩者相輔相成。客戶端對服務器的數據庫連接實際上是客戶端應用程序訪問sql server 2000實例的連接。
3          sql server 2000安全管理3.1         服務組件的啟動帳戶
把sql server服務器組件作為windows服務程序,主要是因為windows 服務程序能夠在windows用戶沒有登錄的情況下使用。那么既然是服務方式運行,根據windows系統的要求就需要為服務設定windows啟動帳戶。
在安裝中安裝程序會要求用戶為服務設定啟動帳戶,界面如下:
如果安裝時沒有能夠正確配置,或是后期需要修改,則可以通過windows的服務管理器對相應的服務的對應配置進行修改。
3.2         客戶端連接用戶管理
sql server的用戶分為不同用戶組,不同用戶組的用戶可以具有不同的數據庫訪問操作權限。sql server默認提供用于對sql server用戶身份進行管理授權的超級用戶組system administrators,sql server超級用戶sa則是這個組的固有用戶,也是數據庫訪問操作權限最大的用戶。這個組在正常安裝的情況下,還默認擁有<本地機器名>/administrator用戶和<本地機器名>/administrators用戶。用戶可以根據應用需求自己在sql server中創建新的用戶組和用戶,并賦之以適當的權限。
sql server 2000對客戶端連接用戶的安全管理有兩種模式:
●   windows 用戶身份驗證模式
●   混合模式(windows 用戶身份驗證模式和sql server身份驗證)
前者實際上是在sql server的用戶庫中建立對應的windows系統用戶,當客戶端發起連接時直接以客戶端登錄windows系統的用戶的合法性來檢查確定客戶端連接用戶的權限。  
后者則同時支持sql server自定義用戶安全策略,客戶端發起連接時必須提供sql server用戶名和登錄口令。
如果希望對客戶端連接用戶管理采用sql server身份驗證,在安裝時必須指定其登錄方式為第二種模式。界面如下:
安裝完成后,系統對應注冊表注冊項hkey_local_machine oftware/microsoft /mssqlserver/mssqlserver/loginmode的值決定了sql server將采取何種身份驗證模式:
●   1 表示使用"windows 身份驗證"模式
●   2 表示使用混合模式(windows 身份驗證和 sql server 身份驗證)
如果后期需要修改身份驗證模式,可以修改并保存對應值后重新啟動sql server服務。
4          sql server 2000數據庫連接常見故障及處理方法
sql server連接中最常見錯誤有四種:
●   sql server 不存在或訪問被拒絕
●   用戶登陸失敗,無法連接到服務器 
●   連接超時
●   版本兼容性問題
4.1         sql server 不存在或訪問被拒絕
sql server 不存在或訪問被拒絕的問題是最常見的,通常也是最復雜的,錯誤發生的原因比較多,需要檢查的方面也比較多。
解決這個問題時,我們首先要分別檢查服務器和客戶端的網絡配置。
客戶端與服務器的連通需要通訊庫的支持,sql server 2000 的通訊庫net-library網絡協議通信庫支持多種網絡協議,但一般來說都是選擇tcp/ip或命名管道協議通信庫。
對于簡單的網絡來說,服務器和客戶端使用同一種通訊協議即可,而對于復雜的網絡則意味著服務器上必須同時支持tcp/ip或命名管道;客戶端則通常選擇其中一種。
檢查服務器端的網絡配置是否啟用了命名管道,是否啟用了 tcp/ip 協議等等。我們可以利用 sql server 自帶的服務器網絡使用工具來進行檢查。
點擊:程序 -> microsoft sql server -> 服務器網絡使用工具,打開該工具后看到的畫面如下圖所示:
    從這里我們可以看到服務器啟用了哪些協議。一般而言,我們啟用命名管道以及 tcp /ip 協議。
進一步檢查 sqk server 服務默認端口的設置,我們可以點中 tcp/ip 協議,選擇"屬性",如下圖所示:
一般而言,我們使用 sql server 默認的1433端口。對于"隱藏服務器"選項,只是限制客戶端通過枚舉服務器來枚舉這臺服務器,僅是保護功能,不影響連接。
客戶端連接服務器是也是通過net-library網絡協議通信庫實現的,微軟的mdac組件提供了net-library網絡協議通信庫,如dbnmpntw.dll——命名管道協議和dbmssocn.dll——tcp/ip協議,其上層的數據庫訪問基本組件ado、oledb、odbc、db-library等都是在此基礎上實現與服務器的數據訪問通訊的。
完成mdac的安裝后(如果安裝sql server 2000服務器組件或是其客戶端工具組件則net-library網絡協議通信庫會內置在sql server 2000的安裝中進行,無需獨立提供安裝),通過對系統注冊表注冊項:
 
hkey_local_machine oftware /microsoft/mssqlserver/client/connectto
 
下面各配置項的查看和修改可以實現對客戶端網絡使用屬性的配置。
這個配置節點下面的配置項實際上該客戶端可以連接的服務器別名列表。服務器的別名是客戶端應用程序用來連接的服務器的偽名稱,其連接屬性參數中的服務器是真正的服務器名稱,兩者可以相同或不同。這對于客戶端應用程序編程來說非常有用,這樣開發者就可以用固定的偽名稱(服務器別名)而不必依賴現場實際服務器的名稱來定義數據庫連接參數,使得軟件具備通用性。具體發布時只需要在客戶端上通過上述服務器別名的定義使得需要訪問的服務可以映射到真實的服務器上。服務器別名的定義規則如下:
 
<服務器別名>=<網絡協議通信庫>,<連接屬性>
 
網絡協議通信庫定義連接該服務器時使用的通訊協議,連接屬性則指明該別名真正連接的對端sql server服務的屬性信息,如服務器名、實例名、連接端口等。
假定我們有一個sql server 2000服務器sql_server,具有實例testdata,ip地址為10.10.10.10,定義其別名為dataserver,服務器上同時支持命名管道協議和tcp/ip協議,且tcp/ip的默認端口為1433(服務器詳細配置方法參見上文相關內容)。
對于命名管道協議,則別名配置如下:
 
dataserver = dbnmpntw,sql_server/testdata
或
dataserver = dbnmpntw,10.10.10.10/testdata
注意,這里的服務器機器名sql_server和服務器ip地址10.10.10.10是等價的。有時候客戶端和服務器不在同一個局域網里面,這時候很可能無法直接使用服務器名稱來標識該服務器,這時候我們可以使用ip地址來直接指定;這與下文將要提及的host文件方式有異曲同工之處。
 
對于tcp/ip協議,則別名配置如下:
 
dataserver = dbmssocn,10.10.10.10/testdata,1433
注意,這里使用服務器的ip地址10.10.10.10,同時指定的1433端口保持和服務器的端口設置一致。
 
在獲取或正確配置了服務器和客戶端的網絡使用參數后,我們將從物理網絡上首先確保服務器和客戶端連通。
使用ping命令檢查物理網絡連接
 
ping <服務器ip地址>或者ping <服務器名稱>
 
如果 ping <服務器ip地址> 失敗,說明物理連接有問題,這時候要檢查硬件設備,如網卡、hub、路由器等。還有一種可能是由于客戶端和服務器之間安裝有防火墻軟件造成的,比如 isa server。防火墻軟件可能會屏蔽對 ping、telnet 等的響應,因此在檢查連接問題的時候,我們要先把防火墻軟件暫時關閉,或者打開所有被封閉的端口。
如果ping <服務器ip地址> 成功而 ping <服務器名稱> 失敗,則說明名字解析有問題,這時候要檢查 dns 服務是否正常。有時候客戶端和服務器不在同一個局域網里面,這時候很可能無法直接使用服務器名稱來標識該服務器,這時候我們可以使用hosts文件來進行名字解析,具體的方法是:
       1、使用記事本打開hosts文件(一般情況下位于c:/winnt ystem32/drivers/etc).        2、添加一條ip地址與服務器名稱的對應記錄,如:172.168.10.24 myserver    
也可以對客戶端網絡使用參數進行配置,具體參見上文使用命名管道協議的別名配置部分。
總而言之,要確保物理網絡連接。
確保物理網絡連接完好后,還要確保服務器sql server 2000實例處于正常的服務狀態,最后針對使用通訊協議庫的不同再進行相應的檢查項目。
對使用tcp/ip協議通訊庫的客戶端來說,需要使用 telnet 命令檢查sql server服務器工作狀態:
 
telnet <服務器ip地址> 1433
 
如果命令執行成功,可以看到屏幕一閃之后光標在左上角不停閃動,這說明 sql server 服務器工作正常,并且正在監聽1433端口的 tcp/ip 連接;如果命令返回"無法打開連接"的錯誤信息,服務器端沒啟用 tcp/ip 協議,或者服務器端沒有在 sql server 默認的端口1433上監聽。如此則需要對服務器的網絡使用配置進行相應的修正。
而對于使用tcp/ip協議通訊庫的客戶端來說還要保證客戶機已經具有訪問服務器資源的權限,可以直接連接sql server。最簡單的測試是對服務器進行共享訪問,如果拒絕則需要對服務器和客戶端進行相應的授權。
至此,通過以上幾個方面的檢查,我們基本上可以解決大多數的sql server 不存在或訪問被拒絕的問題。
4.2         用戶登陸失敗
用戶登錄失敗的問題一般是由于用戶名或口令不合法。如果確認用戶名和口令符合連接要求,則問題一般出在sql server 2000安全管理模式的配置問題上。大家可以參考上文sql server 2000安全管理模式一節中的配置方法進行修改和設置。
4.3         超時已過期
發生這個錯誤,一般而言表示客戶端已經找到了這臺服務器,并且可以進行連接,不過是由于連接的時間大于允許的時間而導致出錯.
要解決這樣的錯誤,可以修改客戶端應用進程的連接超時設置。具體的修改方法,可參考相應客戶端應用進程的軟件使用說明或聯系軟件供應商解決。
4.4         版本兼容性問題
這種問題發生的概率比較低,但是sql server本身也有很大發展,從sql server 6.5到sql server 2000甚至sql server 2003都有不小的變更。如果客戶端和服務器使用的接口版本兼容性存在問題,則也會造成sql server數據庫連接故障。這一點需要提醒大家不要大意忽略了版本兼容性這個基本問題。
 
 
5          sql server 2000數據庫連接故障與上層應用程序錯誤辨析
一般來說,報告數據庫連接失敗不會是sql server 2000數據庫服務的告警,通常都是客戶端應用進程上報出來的故障,這里就存在故障定位的辨析問題,因為故障的引發不一定是sql server本身的設置問題,上層應用程序也有可能存在故障。
實際上,這種辨析工作還是很容易進行的。那就是拋開應用進程,在客戶端上通過odbc配置中的測試功能另建一個客戶端連接,如果測試通過則問題在應用進程,否則反之。具體操作方法,請大家參考下面的界面操作:
 
至此如果存在sql server本身的設置問題,則會彈出類似下面的故障告警框:
否則則sql server連接成功,不存在本身的設置問題。
6          總結
  sql server 2000數據庫連接故障問題是一個非常復雜的問題,關聯到很多節點和知識點。不是一個或是幾個片面的絕招就可以解決的。在處理過程中,要求一定要有保持冷靜分析和細致查找的能力。先確認故障的類別,再系統的有計劃的逐個層次,逐個節點的進行核查和確認,直至追根溯源,最終確認并解決問題。
  此外,除了部分實例和服務的概念和內容sql server 2000有異于sql server 6.5,本文絕大部分內容同樣也適用于sql server 6.5。