筆者從事網站建設和網頁設計教學多年,如何在網頁中導入SQL Server 2000數據庫數據,是此部分教學的一個重點,合理安排這部分的教學內容和結構,能夠把網頁設計課的內容化整為零,有助于培養學生技能的知識體系形成。下面就這方面的教學內容和結構做一次探討。
一、 SQL Server 2000常用的數據導入導出方法
1. 通過DTS的設計器進行導入或導出。DTS的設計器功能強大,支持多任務,也是可視化界面,易于操作,但熟悉的人一般不多,如果只是進行SQL Server數據庫中部分表的移動,用這種方法最好,當然,也可以進行全部表的移動。在SQL Server Enterprise Manager中,展開服務器左邊的+,選擇數據庫,右擊,選擇All tasks/Import Data……(或All tasks/Export Data……),進入向導模式,然后按照提示一步一步進行就可以了,里面分得非常詳細,可以靈活的在不同數據源之間復制數據,非常的方便,而且還可以另存成DTS包,如果以后還有相同的復制任務,直接運行DTS包就行,省時省力。
2. 利用Bcp工具。這種工具雖然在SQL Server 2000的版本中不推薦使用,但許多數據庫管理員仍很喜歡用它,尤其是用過SQL Server早期版本的人。不過Bcp確實有其局限性,首先它的界面不是圖形化的;其次它只是在SQL Server的表(視圖)與文本文件之間進行復制。但是另一方面,它也有其優點:性能好,開銷小,占用內存少,速度快。
3. 利用備份和恢復。先對源數據庫進行完全備份,備份到一個設備(device)上,然后把備份文件復制到目的服務器上,進行數據庫的恢復操作,在恢復的數據庫名中填上源數據庫的名字,選擇強制型恢復,在選擇從設備中進行恢復,瀏覽時選中備份的文件就行了。這種方法可以完全恢復數據庫,包括外鍵、主鍵、索引。
4. 直接拷貝數據文件。把數據庫的數據文件(*.mdf)和日志文件(*.ldf)都拷貝到目的服務器,在SQL Server Query Analyzer中用語句進行恢復:
EXEC sp_attach_db @dbname = ’test’,
@filename1 = ’d:\\mssql7\\data\est_data.mdf’,
@filename2 = ’d:\\mssql7\\data\est_log.ldf’
這樣就把test數據庫附加到SQL Server中,可以照常使用,如果不想用原來的日志文件,可以用如下的命令:
EXEC sp_detach_db @dbname = ’test’
EXEC sp_attach_single_file_db @dbname = ’test’,
@physname = ’d:\\mssql7\\data\est_data.mdf’
這個語句的作用是僅僅加載數據文件,日志文件可以由SQL Server數據庫自動添加,但是原來的日志文件中記錄的數據就丟失了。
5. 在應用程序中定制。可以在應用程序(PB、VB)中執行自己編寫的程序,也可以在Query Analyzer中執行,這種方法比較靈活,其實是利用一個平臺連接到數據庫,在平臺中用的主要是SQL語句,這種方法對數據庫的影響小,但是如果用到遠程鏈接服務器,要求網絡之間的傳輸性能好,一般有兩種語句:
(1)select ... into new_tablename where ...
insert (into) old_tablename select ... from ... where ...
這兩種方式的區別是前者把數據插入一個新表(先建立表,再插入數據),而后者是把數據插入已經存在的一個表中,一般來說,第二條語句強于前者。
6. SQL Server的復制功能。SQL Server提供了強大的數據復制功能,也是最不易掌握的,具體應用請參考相關資料,值得注意的是要想成功進行數據的復制工作,有些條件是必不可少的:(1) SQL Server Agent必須啟動,MSDTC必須啟動。(2) 所有要復制的表必須有主鍵。(3) 如果表中有text或image數據類型,必須使用with log選項,不能使用with no_log選項。
另外max text repl size選項控制可以復制的文本和圖像數據的最大規模,超過這個限制的操作將失敗。
(4) 在要進行復制的計算機上,應該至少是隱含共享,即共享名是C$或D$…。
(5) 為SQL Server代理使用的Windows 2000賬號不能是一個本地的系統賬號,因為本地的系統賬號不允許網絡存取。
(6) 如果參與復制的服務器在另外的計算機域中,必須在這些域之間建立信任關系。
二、 實現基于網頁的數據庫數據導入
那么,如何實現基于網頁的數據庫數據導入呢,下面利用一個比較簡單的網絡介紹一下。
假設某局域網的網絡拓撲結構如下所示:其中服務器A 和工作站B位于局域網內,工作站C 與服務器D 位于Internet內,局域網與Internet是物理隔離的,工作站C與工作站D 在同一個辦公室內,服務器A上的數據庫管理系統是Oracle, 服務器D上的數據庫管理系統是SQL Server 2000。由于工作需要,要求把服務器A 的有關數據導入到服務器D上。
1. 通常的工作流程:(1) 在工作站B上運行客戶端軟件,將服務器A上數據導入到本地的dbf文件。(2) 用移動硬盤 把dbf文件從工作站B拷貝到工作站C上。(3) 在工作站C上,用ftp軟件將dbf文件上傳到服務器D上。(4) 在工作站C上,運行遠程桌面軟件登錄到服務器D上。(5) 在服務器D上,執行DTS,將dbf文件中的數據導入到SQL Server數據庫。(6) 在服務器D上,運行相關存儲過程,做數據的后期處理工作。
在許多情況下,因為各種不同情況的需要,這個工作流程每天(甚至更短的時間內)就要執行一次,非常煩瑣,而且使用手工操作,很容易出錯。下面提出一種改進的方案。
2. 改進后的工作流程。(1) 在工作站B上運行客戶端軟件,將服務器A上數據導入到本地的dbf文件。(2) 用移動硬盤 把dbf文件從工作站B拷貝到工作站C上。(3) 在工作站C上,打開服務器D上的相關網頁,利用網頁將dbf文件的數據導入到服務器D上的SQL Server數據庫中。
首先,要在網頁里實現上傳功能,把dbf文件從工作站C上傳到服務D上,這里就不多介紹了。要通過網頁把dbf文件導入到SQL Server 中,需要借助DTS可編程對象。DTS包含一組可編程COM對象,主要包含:DTS.Package、DTS.Connection、DTS.Step、DTS.ExecuteSQLTask、DTS.DataPumpTask、DTS.Transformation。
在ASP網頁里,通過用VBScript腳本創建調用DTS可編程COM對象,可以完成數據導入任務。這里大概的介紹一下開發程序的過程。首先,在SQL Sever 2000的DTS設計器里,創建DTS包,實現從dbf文件到SQL Server 2000的數據導入,把后期處理的存儲過程也添加到DTS包里。將這個DTS包另存為VBScript文件。有了這個VBScript文件,開發程序就容易多了,加入所需要的其他代碼,就可以在網頁里實現數據庫的數據導入。
如此安排教學內容,使數據庫的導入方法一目了然,使數據庫導入的工作程序更趨合理,大大縮短了網站建設和網頁設的工期,提高了工作效率。 (燈塔市中等職業技術專業學校)