對於一個系統管理員,要同時管理一個網絡中的多個數據庫服務器或者是互連網中分屬不同網絡的多個數據庫服務器,首先要解決同時連通訪問這些數據庫服務器的問題。一般來說,各種數據庫必須使用自己相應的客戶端工具進行連接,而不能連接另外的數據庫。微軟公司的SQLSERVER6.0數據庫是從SYBASE4.2數據庫發展而來,其自身的客戶端工具是不能連接SYBASE10或SYBASE11數據庫的。另外Sybase11客戶端所帶工具WISQLl32可以分段執行一個SQL文件中的任一選擇部分,這樣給管理數據庫服務器,調試存儲過程、觸發器帶來了很大的方便。這個功能在微軟公司的SQLSERVER6.0數據庫客戶端所帶工具ISQL_W所不具備的。
在工作實踐中,筆者發現只要對SYBASE11客戶端進行適當的配置,在WISQLl32的菜單中斷開一個已連通的數據庫服務器後,連接網絡中另一個的數據庫服務器,不用重新啟動,就可以達到既訪問微軟的SQLSERVER6.0數據庫也能同時訪問Sybase11(或者10)數據庫的目的。既給同時管理多個數據庫服務器(尤其是SQLSERVER6.0數據庫)帶來了很大的方便,也使得在SQLSERVER6.0和Sybase11之間移植存儲過程、觸發器提供了可能性。本文就筆者自己的實現方法提供給大家參考。
一.系統環境
為了簡化起見,假設只在一個網絡環境中,只有一台網絡服務器,在這台網絡服務器上同時安裝了MSSQLSERVER6.0、SYBASE11(或者SYBASE10,建議不要同時安裝Sybase11和10兩個版本)。不考慮單一網絡多台服務器或互聯網絡多台網絡服務器環境。但是無論什麼環境,應用同樣的方法都可以實現WISQLl32對分布在一台或多台網絡服務器上數據庫服務器的訪問。
1.網絡服務器:WindowsNT3.51或4.0網絡操作系統,內存64MB以上,奔騰133以上,網絡協議為TCP/IP,主域控制器名RMYH,網絡服務器的計算機名DBSERVER。
2.在DBSERVER網絡服務器上同時安裝的MSSQLSERVER6.0數據庫服務器名為DBSERVER(與網絡服務器同名),SYBASE11數據庫服務器包含SYBASE11(SQL服務器)、SYBASE11-BS(BACKUP服務器)、SYBASE11-MS(MONITOR服務器)、SYBASE11-HS(HISTORY服務器)四個數據庫服務器(SYBASE10數據庫服務器只包含SYABSE10,SYBASE10-BS、Sybase10-MS三個數據庫服務器)。
3.客戶機:中文WINDOWS95,SYABSEFORWindows95客戶端工具
二.配置SYABSEFORWindows95客戶端工具
SQLEDIT是SYBASE與平台無關的程序,用來配置客戶連接,SQLEDIT用於編輯SYBASE根目錄下INI子目錄中名為SQL.INI的文件,也可以人工地編輯SQL.INI文件,但是借助SQLEDIT的圖形工具要容易一些,並且可以把錯誤推給SYBASE。SQLEDIT的使用方法請參考有關SYBASE的說明書。本文主要討論在SQL.INI如何選擇參數來使WISQL同時訪問MSSQLSERVER和Sybase11數據庫服務器。
WindowsNT可以選擇NetBEUI、IPX/SPX、TCP/IP三種網絡協議來組建網絡,SYBASE11(或者Sybase10)數據庫服務器安裝時,會根據網絡協議來生成NET-LIBRARY驅動程序,三種網絡協議都能生成名為NLMSNMP(命名管道)的NET-LIBRARY驅動程序,其中對於TCP/IP網絡協議,還多生成一個名為NLWNSCK(軟插口)的NET-LIBRARY驅動程序,所以筆者選擇使用TCP/IP構成的WindowsNT網絡作為分析的環境。
使用SQLEDIT或編輯軟件配置好的SQL.INI文件內容如下(SQL.INI文件在c:\Sybase\ini目錄中):
[MSSQL6.0]
$BASE$00=NLMSNMP,\\ dbserver \pipe\sql\ query
$BASE$01=NLWNSCK,dbserver,1433
query=$BASE$00;$BASE$01;
$BASE$02=NLMSNMP,\\dbserver\pipe\sql\query
$BASE$03=NLWNSCK,dbserver,1433
master=$BASE$02;$BASE$03;
[Sybase11]
$BASE$00=NLWNSCK,dbserver,5000
$BASE$01=NLMSNMP,\\dbserver\pipe\Sybase\query
master=$BASE$00;$BASE$01;
$BASE$02=NLWNSCK,dbserver,5000
$BASE$03=NLMSNMP,\\dbserver\pipe\Sybase\query
query=$BASE$02;$BASE$03;
[Sybase11_BS]
$BASE$00=NLWNSCK,dbserver,5001
$BASE$01=NLMSNMP,\\dbserver\pipe\Sybase\ backup
query=$BASE$00;$BASE$01;
$BASE$02=NLWNSCK,dbserver,5001
$BASE$03=NLMSNMP,\\dbserver\pipe\Sybase\backup
master=$BASE$02;$BASE$03;
[Sybase11_MS]
$BASE$00=NLWNSCK,dbserver,5002
$BASE$01=NLMSNMP,\\dbserver\pipe\Sybase\monitor
master=$BASE$00;$BASE$01;
$BASE$02=NLWNSCK,dbserver,5002
$BASE$03=NLMSNMP,\\dbserver\pipe\Sybase\monitor
query=$BASE$02;$BASE$03;