在SQL Enterprise manager中的[Server /Current Activity]可以讓您一目了然地看出SQL的連接情況,
是個非常好用的工具。
在Current Activity中,可見到已登入的用戶清單、數據庫名稱、工作站名稱與應用程序名稱。下方的狀态欄顯示目前有多少連接關系正在運作,多少連接關系處于空閑。
存取時限
一般連接關系的存取時限從15秒到1、2分鐘不等,至于精确的數值要視你所選擇的程序界面與時限的設定值而定。亦即假如你要存取數據庫時,選擇了不正确的服務器或服務器已經關機,則CLIENT端便會沒有任何反應,一直到存取時限時,才會返回連接失敗信息。
若要連接LAN網中的SQL SERVER不須耗費多少時間,約1至5秒内便能獲得回應,應用程序第一次連接會花費較長的時間,第二次後會比較短。因為Windows系統會将先前的連接關系所用的控件或DLL文件一直保留在内存。
設定遠程數據的存取方式
您可以自己設定取數據的處理方式,在VFP的TOOLS菜單裡,選中Options... 菜單項,彈出OPTIONS對話框,選中Remote Data 标簽:
1: 共享連接 指定 Visual FoxPro 使用當前連接處理新的視圖。在數據源一次隻支持一個連接時,它很有用。它可以使一個連接處理多個視圖。
2:取備注字段指定隻有在視圖輸出中激活一個備注或通用字段後才從數據源取備注或通用字段。清除該選項可以減少初始從遠程表中下載的數據量,這将提高性能。
3:SQL 更新條件 指定當您試圖更新數據前的數據對比方式,Visual FoxPro 檢查遠程服務器上的字段來決定是否改變數據。如果選擇條件所指定遠程字段中的數據已經更改,則更新失敗。
(1):Key Fieds Only 隻對比主鍵
(2):Key and Updateble Fieds 對比主鍵和要更新的字段
(3):Key and Modified Fieds 對比主鍵和修改過的字段(默認)
(4):Key and Timestamp 對比主鍵和數據庫的時間截。
4:SQL 更新 指定 Visual FoxPro 是使用 SQL UPDATE 還是使用 SQL DELETE,然後用 INSERT 來更新遠程服務器上的信息。
(1):SQL Update 直接用SQL語言更新(默認)
(2):SQL Delete + SQL Insert 删除舊記錄,然後增加一條新記錄
5:每次取的記錄數 當用批處理方式時,指定 Visual FoxPro 從遠程數據源中一次返回多少條記錄。選定“全部”可以指定在第一次取操作中即返回所有的記錄。該設置受“要取的最大記錄數”中指定值的限制。 6:要取的最大記錄數指定一個視圖返回的記錄總數。如果您錯誤地建立了一個查詢,它可以防止返回過多的數據。選擇“全部”可以指定返回所有的記錄。
7:使用備注字段的長度 >= 指定長字符型字段中數據的最大長度。指定在視圖輸出中,如果字符數據超出指定長度時,将長字符字段轉換成備注字段。默認值是255,等于 Visual FoxPro 中字符型字段的最大長度。
8:成批更新的記錄數指定視圖一次發送的更新語句數目。調整這個值可以明顯地提高更新性能。默認值是 1。有關的詳細内容,請參閱“REPLACE 命令”以及“Scope 子句”。
9:異步執行 指定把控制權返回給您的應用程序之後,Visual FoxPro 在後台執行 SQL pass-through 命令(使用 SQLEXEC( )、SQLMORERESULTS( )、SQLTABLES( ) 和 SQLCOLUMNS( ))。
如果您選定了該選項,您的應用程序可以顯示過程信息,并且允許用戶使用 ESC 鍵中斷一個命令(如果 SET ESCAPE 已經設置為“真”)。您可以決定一個異步執行的 SQL 命令的狀态,方法是重複地調用其中一個 SQL pass-through 函數,直至它報告命令已經完成為止。這個選項的默認值是廢止(同步執行),它指定 Visual FoxPro 在把控制權返回您的應用程序之前一直等待,直至 pass-through SQL 命令完成為止。
10:顯示警告信息 允許顯示警告信息。
11:批處理 在使用 SQLEXEC( ) 發送多個 SQL pass-through 語句時,指定 Visual FoxPro 并不返回任何結果,直到所有結果集合都檢索到為止。
對應于在 SQLSETPROP( ) 函數中設置 BatchMode。如果廢止了該選項,您必須調用 SQLMORERESULTS( ) 來确定數據是否可用。
12:自動事務處理指定由遠程表上的連接自動處理事務。如果清除了該選項,您必須使用 SQLCOMMIT( ) 和 SQLROLLBACK( ) 人工處理事務過程。
13:顯示登錄信息當一個連接激活時,指定是否顯示登錄提示(如果該連接需要用戶進行登錄)。例如,“隻在必要時”指出,隻有在連接或視圖定義中未指定登錄信息的情況下,才出現登錄提示。
14:連接超時設定(秒)指定與遠程服務器建立一個連接所需等待的秒數(0 到 600 之間)。如果在指定時間内不能建立這個連接,則 Visual FoxPro 顯示錯誤。指定 0 為無限制地等待一個連接。
15:空閑超時設定(分鐘)指定連接不活動前允許空閑時間的分鐘數。如果在指定時間内沒有請求使用服務器,則 Visual FoxPro 終止該連接。但是,連接超時後如果對服務器又有請求,則 Visual FoxPro 将試圖自動恢複這個連接。
16:查詢超時設定(秒) 指定等待服務器響應一個請求的秒數(0 與 600 之間)。如果服務器在指定秒數的時間内還不處理查詢,則 Visual FoxPro 顯示錯誤。指定 0 可以無限制地等待查詢結果。 等待時間(毫秒) 指定 Visual FoxPro 檢查 SQL 語句是否執行結束之前經過的毫秒數。
VFP與SQL Server的連接(4)
----解決區域網絡方面的連接問題
排除連接錯誤
C/S程序結構的運作就像是主人與仆人之間的互動一樣,仆人偶爾會因溝通不良而抱怨。這種情況在C/S程序中即所謂的錯誤信息(Error message ),每個錯誤信息都包含了一個錯誤代碼與描述問題的說明文字。由于各種程序的錯誤處理方式不盡相同,所以當我們在做除錯工作之前,除了要參考錯誤信息外,還應當注意下列幾個問題,以掌握可能的原因,提高效率。
錯誤原因
1:程序以往在執行時是否曾成功建立連接關系?如果是,後來有沒有變更過什麼設定?因為若曾經連接成功的話,那麼在設定、安全、通訊協議等方面應該不會有問題。之後,假如有安裝新版的應用程序、操作系統後升級驅動程序的話将影響連接情況。
2:屏幕上顯示什麼信息?Modem 或網絡卡的LED顯示是否正常?屏幕上的信息可以引導我們朝正确的方向排除錯誤。Modem 或網絡卡的LED顯示網絡交通是否正常運作。
3:網絡是否已超出負荷?用戶是否搭錯線,連接到其他的網絡?也有可能許多應用系統一直站用網絡資源造成網絡異常。
4: 碰到錯誤時、程序有沒有做除錯措施或者直接關機。
程序庫所引發的連接問題很多問題的發生都因為動态連接程序庫(DLL)或控制元件(Control,即OCX),存放到其它目錄或者根本沒有安裝到系統中,或由于安裝了新版的ODBC 而覆蓋掉舊版的ODBC所引起的。他們必須被放置到程序載入器(WIndows loader)在執行期間能找到的地方,一般在Windows\system之下,而且這些程序應該在系統注冊、安裝,而不是直接放置到該目錄就可以。
所有Windows 平台的Windows loader作業流程都是相同的,一旦程序檔案總管、浏覽器、執行.......等方式啟動後,Windows loader 便會依次往下列幾個地方搜尋相關的程序庫或元件:
1: Momery
2: 應用程序所在的目錄
3: Windows 的目錄
4: Windows\system目錄
5: 環境變數所指定的目錄
如果以上五個地方都找不到相關的程序庫或元件的話,Windows便會告知用戶錯誤信息。
Microsoft SQL Server 的Client 端是籍由named pips 與Server端溝通的,為了支持named Pips ,所有程序界面都采用16位元的DBNMP3.DLL或32位元的DBNMPNTW.DLL程序庫。在強調一次,這些DLL檔必須被放置在Windows\System或其他Windows loader 能找到的目錄。
解決區域網絡方面的連接問題
通常根據下列的問題及步驟來處理這方面的問題:
1:用戶是否确實登入網絡?這是常見的疏忽,因為用戶經常隻登入到工作站本身,而沒有進入網絡,這是您可以選擇開始/關閉系統來關閉所有程序,登入成其他的用戶,重新做一次登入。
2:是否還有連接空間讓用戶使用? 假如用戶建立許多的連接關系後,忘了切斷它,那麼操作系統有可能無法建立新的連接,有些操作系統可供同時連接的數目是有限的,預設的狀況下,假如用戶同時用4、5條的遠端連接關系後,這個用戶若想再連線到SQL Server 就會有問題。
3:網絡是否癱瘓?假如執行了很多個遠端數據庫存取程序都無回應的話,您可用[網絡鄰居]來檢查其他機器上的共用目錄是否依舊可以存取。
4:您是否曾用Client Configuration Utility 去設定裝置的驅動程序後網絡地址?當SQL Server 支援TCP/IP後,系統會要求您做相關的設定。因系統将參照網址而非用名稱來存取服務器。
與SQL有關的連接問題通常根據下列的問題及步驟來處理這方面的問題
1:用戶是否輸入正确的登入ID和PASSWORD。
2:服務器有沒有運作?當服務器開機時,是否有自動開啟SQL Server?您可以在控制台的服務程序或用Startup.cmd 這個批處理文件來檢視這項設定。也可以用SQL Server Manager 來确定SQL Server 是否正常運作:
(1):服務器的RAM或硬盤空間是否太小了?
(2):SQL Server 數據庫中的資料是否以壞掉?
(3):SQL SERVER 是否處于單機模式運作?或SQL的ADMINISTRATOR正在維護系統。
用戶權利和授權問題
SQL SERVER 具有可連接超過1000個的用戶的能力,但真正可同時連接的數目就要看Administrator 的設定了,每一條的連接關系都會消耗37KB至42KB大小不等的RAM,這些RAM是被用來充當程序或資料的快取空間之用。微軟公司要求所有要存取WIndows NT 或SQL Server 的用戶都必須取得用戶端存取授權(Client Access License :ACL)。用戶端存取授權和操作系統授權是分開的,用戶端存取授權有兩種:
1:每服務器模式(Per Server Mode):用戶在用戶端可與SQL Server 或Windows NT 建立n條連接關系。換而言之,不能同時有超過n個的連接關系存取服務器。
2:每一客戶模式(per Seat Mode ):每個用戶端都必須購買用戶段存取權限,若同時連到NT & SQL Server 的連接關系已經超過每一客戶的授權數目,用戶端的用戶仍然可繼續連線上來。
有話要說...