天天看點

SQL Server中六種資料移動的方法(重點講解DTS)

 1.通過工具DTS的設計器進行導入或導出 DTS的設計器功能強大,支援多任務,也是可視化界面,容易操作,但知道的人一般不多,如果隻是進行中部分表的移動,用這種方法最好,當然,也可以進行全 部表的移動。在SQL Server Entrise Manager中,展開左邊的+,選擇資料庫,右擊,選擇All tasks/Import Data...(或All tasks/Export Data...),進入向導模式,按提示一步一步走就行了,裡面分得很細,可以靈活的在不同資料源之間複制資料,很友善的。而且可以另存成DTS包,如果 以後還有相同的複制任務,直接運作DTS包就行,省時省力。也可以直接打開DTS設計器,方法是展開伺服器名稱下面的Data Transformation Services,選Local Packages,在右邊的視窗中右擊,選New Package,就打開了DTS設計器。值得注意的是:如果源資料庫要拷貝的表有外鍵,注意移動的順序,有時要分批移動,否則外鍵主鍵,索引可能丢失,移 動的時候選項旁邊的提示說的很明白,或者一次性的複制到目标資料庫中,再重建立立外鍵,主鍵,索引。其實建立資料庫時,建立外鍵,主鍵,索引的檔案應該和 建表檔案分開,而且用的資料檔案也分開,并分别放在不同的器上,有利于資料庫的優化。 2. 利用Bcp工具 這種工具雖然在SQL Server7的版本中不推薦使用,但許多資料庫管理者仍很喜歡用它,尤其是用過SQL Server早期版本的人。Bcp有局限性,首先它的界面不是圖形化的,其次它隻是在SQL Server的表(視圖)與文本檔案之間進行複制,但它的優點是性能好,開銷小,占用記憶體少,速度快。有興趣的朋友可以查參考手冊。 3. 利用備份和恢複 先對源資料庫進行完全備份,備份到一個裝置(device)上,然後把備份檔案複制到目的伺服器上(恢複的速度快),進行資料庫的恢複操作,在恢複的資料 庫名中填上源資料庫的名字(名字必須相同),選擇強制型恢複(可以覆寫以前資料庫的選項),在選擇從裝置中進行恢複,浏覽時選中備份的檔案就行了。這種方 法可以完全恢複資料庫,包括外鍵,主鍵,索引。 4. 直接拷貝資料檔案 把資料庫的資料檔案(*.mdf)和日志檔案(*.ldf)都拷貝到目的伺服器,在SQL Server Query Analyzer中用語句進行恢複:

這樣就把test資料庫附加到SQL Server中,可以照常使用。如果不想用原來的日志檔案,可以用如下的指令:

EXEC sp_detach_db @dbname = ’test’EXEC sp_attach_single_file_db @dbname = ’test’,@physname = ’d:mssql7data est_data.mdf’

這個語句的作用是僅僅加載資料檔案,日志檔案可以由SQL Server資料庫自動添加,但是原來的日志檔案中記錄的資料就丢失了。 5. 在應用程式中定制 可以在應用程式(、)中執行自己編寫的程式,也可以在Query Analyzer中執行,這種方法比較靈活,其實是利用一個平台連接配接到資料庫,在平台中用的主要時SQL語句,這種方法對資料庫的影響小,但是如果用到遠 程連結伺服器,要求網絡之間的傳輸性能好,一般有兩種語句: 1>

select ... into new_tablename where ...

2>

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代理使用的 NT帳号不能是一個本地的系統帳号,因為本地的系統帳号不允許網絡存取。 6>如果參與複制的伺服器在另外的計算機域中,必須在這些域之間建立信任關系。本人從事的工作是資料庫管理者,要維護多台伺服器中的資料庫,經常把 某台伺服器中的某個資料庫移動到另外一台伺服器,對資料的移動有些心得體會,希望和大家共同交流 .

SQL Server 2000中的資料轉換服務 (DTS)

摘要: 為了完成資料合并、存檔和分析等任務;為了進行應用程式開發;為了進行資料庫或伺服器更新,資料庫管理者經常需要導入、導出以及轉換資料。SQL Server 2000 中的資料轉換服務(DTS)為此提供了一組圖形化工具和可程式設計對象,能夠幫助管理者和開發人員解決從不同來源到單個或多個目标的資料轉移問題,包括資料提 取、轉換以及合并。您可以将任務、工作流操作和限制條件組成 DTS資料包,然後安排定期或在特定事件發生時執行該資料包。本白皮書将介紹 DTS,給出一些能夠用于建立 DTS 解決方案的元件和服務,介紹如何使用 DTS Designer 來實施 DTS 解決方案,最後将介紹 DTS 應用程式開發。

SQL Server中六種資料移動的方法(重點講解DTS)

本頁内容

SQL Server中六種資料移動的方法(重點講解DTS)
DTS 簡介
SQL Server中六種資料移動的方法(重點講解DTS)
使用 DTS Designer
SQL Server中六種資料移動的方法(重點講解DTS)
儲存 DTS 資料包的選項
SQL Server中六種資料移動的方法(重點講解DTS)
将 DTS 作為應用程式開發平台
SQL Server中六種資料移動的方法(重點講解DTS)

傳回頁首

檢視大圖。

在 DTS Designer 中,您可以将連接配接和任務拖動到設計頁中,并指定工作流執行的順序,進而輕松地建立功能強大的 DTS 資料包。下面的内容将定義任務、工作流、連接配接和轉換,并介紹如何使用 DTS Designer 輕松地實施 DTS 解決方案。

任務:定義資料包中的步驟

DTS 資料包中通常包含一個或多個步驟。每個任務定義了一個可能在資料包執行過程中執行的工作項目。您可以使用任務來:

轉換資料
SQL Server中六種資料移動的方法(重點講解DTS)
轉換資料任務 用來将資料從來源移動到目标,可以選擇在資料上應用資料欄轉換。
SQL Server中六種資料移動的方法(重點講解DTS)
資料驅動的查詢任務 用來對資料執行基于 Transact-SQL 的靈活操作,包括存儲過程以及 INSERT、UPDATE 或 DELETE 聲明。
? 平行資料泵任務 (1) 僅可用于程式設計,平行資料泵任務執行與轉換資料和資料驅動的查詢任務相同的功能,但是支援 OLE DB 2.5 及更新版本所定義的 “章節式” 資料行集。
複制和管理資料
SQL Server中六種資料移動的方法(重點講解DTS)
批量插入任務 用于快速地将批量資料裝載到 SQL Server 表或視圖中。
SQL Server中六種資料移動的方法(重點講解DTS)
Execute SQL 任務 用于在資料包執行過程中運作 SQL 語句。Execute SQL 任務也可以儲存查詢的結果資料。
SQL Server中六種資料移動的方法(重點講解DTS)
Copy SQL Server Objects 任務 用來将 SQL Server 對象從一個 SQL Server 安裝或執行個體中複制到另一個中。您可以複制資料和表等對象,也可以複制視圖和存儲過程等對象定義。
SQL Server中六種資料移動的方法(重點講解DTS)
Transfer Database 任務(1) 用來将 SQL Server 資料庫從一個 SQL Server 7.0 或 SQL Server 2000 執行個體移動或複制到 SQL Server 2000 執行個體中。
SQL Server中六種資料移動的方法(重點講解DTS)
Transfer Error Messages 任務(1) 用于将使用者指定的錯誤消息從 SQL Server 7.0 或 SQL Server 2000 執行個體複制到 SQL Server 2000 執行個體,這些錯誤消息是由sp_addmessage系統存儲過程所生成的。
SQL Server中六種資料移動的方法(重點講解DTS)
Transfer Logins 任務(1) 用來将帳号從 SQL Server 7.0 或 SQL Server 2000 執行個體複制到 SQL Server 2000 執行個體。
SQL Server中六種資料移動的方法(重點講解DTS)
Transfer Jobs 任務(1) 用來将作業從 SQL Server 7.0 或 SQL Server 2000 執行個體複制到 SQL Server 2000 執行個體。
SQL Server中六種資料移動的方法(重點講解DTS)
Transfer Master Stored Procedures 任務(1) 用來将存儲過程從 SQL Server 7.0 或 SQL Server 2000 執行個體中的master資料庫複制到 SQL Server 2000 執行個體的 master資料庫。
從資料包中将任務作為作業運作
SQL Server中六種資料移動的方法(重點講解DTS)
ActiveX Script 任務 用來編寫代碼,執行其他 DTS 任務中沒有的功能。
SQL Server中六種資料移動的方法(重點講解DTS)
Dynamic Properties 任務(1) 用于在資料包運作時從 DTS 資料包外的來源處獲得數值,并将這些值配置設定給標明的資料包屬性。
SQL Server中六種資料移動的方法(重點講解DTS)
Execute Package 任務(1) 用于從資料包中運作其他 DTS 資料包。
SQL Server中六種資料移動的方法(重點講解DTS)
Execute Process 任務 用于運作可執行程式或批處理檔案。
SQL Server中六種資料移動的方法(重點講解DTS)
FTP 任務 (1) 用來從遠端伺服器或 Internet 位置下載下傳資料檔案。
SQL Server中六種資料移動的方法(重點講解DTS)
Message Queue 任務(1) 用來從 Microsoft 消息隊列發送和接受消息。
SQL Server中六種資料移動的方法(重點講解DTS)
Send Mail 任務 用來發送電子郵件。
SQL Server中六種資料移動的方法(重點講解DTS)
Analysis Services Processing 任務 (2) 用于處理一個或多個 SQL Server 2000 分析服務中所定義的對象。
SQL Server中六種資料移動的方法(重點講解DTS)
Data Mining 任務 (1,2) 用于從 SQL Server 2000 分析服務所定義的資料挖掘模型對象中建立一個預測查詢和輸出表。

1 SQL Server 2000中新增。

2 僅适用于已安裝 SQL Server 2000 分析服務的情形。

您可以程式化地建立定制任務,然後使用 Register Custom Task(注冊定制任務)指令将它們內建到 DTS Designer 中。

為了說明這些任務的使用,在這裡我們給出了一個包含兩個任務的簡單 DTS 資料包: Microsoft ActiveX Script 任務和 Send Mail 任務:

SQL Server中六種資料移動的方法(重點講解DTS)

圖2:具有兩個任務的 DTS 資料包

ActiveX Script 任務可以駐留任何 ActiveX 腳本引擎,包括 Microsoft Visual Basic Scripting Edition (VBScript)、Microsoft JScript 或者 ActiveState ActivePerl(您可以從http://www.activestate.com [英文] 下載下傳)。 Send Mail 任務可以發送消息,指出該資料包已經運作。請注意,這些任務是沒有順序的。在執行資料包時,ActiveX Script 任務和 Send Mail 任務同時運作。

工作流:設定任務優先級

當您在定義一組任務時,通常任務的執行是應該有一定順序的。如果這些任務擁有一定的順序,那麼每個任務将稱為一個過程中的一個步驟。在 DTS Designer 中,您可以在 DTS Designer 設計頁中對任務進行操作,使用優先級限制來控制任務執行的順序。

優先級限制将資料包中的任務依次連結起來。下表給出了您可以在 DTS 中使用的優先級限制的類型。

優先級限制 說明
SQL Server中六種資料移動的方法(重點講解DTS)

On Completion(完成後)

(藍色箭頭)

如果您希望任務 2 處于等待狀态,直至任務 1 完成(無論結果如何),那麼就使用 On Completion 優先級限制将任務 1 連結到任務 2。
SQL Server中六種資料移動的方法(重點講解DTS)

On Success(成功後)

(綠色箭頭)

如果您希望任務 2 處于等待狀态,直至任務 1 成功完成,那麼就使用 On Success 優先級限制将任務 1 連結到任務 2。
SQL Server中六種資料移動的方法(重點講解DTS)

On Failure(失敗後)

(紅色箭頭)

如果您希望任務 2 僅在任務 1 無法成功執行時才開始執行,那麼就使用 On Failure 優先級限制将任務 1 連結到任務 2。

下圖給出了具有 On Completion 優先級限制的 ActiveX Script 任務和 Send Mail 任務。當 ActiveX Script 任務完成後(不論成功還是失敗),Send Mail 任務都開始運作。

SQL Server中六種資料移動的方法(重點講解DTS)

圖3:具有 On Completion 優先級限制的 ActiveX Script 任務和 Send Mail 任務

您可以配置不同的 Send Mail 任務,一個用于 On Success 限制,另一個用于 On Failure 限制。這兩個 Send Mail 任務可以根據 ActiveX Script 的成功或失敗來發送不同的郵件。

SQL Server中六種資料移動的方法(重點講解DTS)

圖4:郵件任務

您也可以在一個任務上應用多個優先級限制。例如, Send Mail 任務"Admin Notification"可以具有來自腳本#1的 On Success 限制和來自腳本#2 的 On Failure 限制。在這種情況下,DTS 認為其使用邏輯"AND"關系。是以為了發送 Admin Notification 郵件,腳本#1必須成功執行,而腳本#2 必須失敗。

SQL Server中六種資料移動的方法(重點講解DTS)

圖5:同一任務多個優先級限制的示例

連接配接:通路和移動資料

為了成功地執行複制和轉換資料的 DTS 任務,DTS 資料包必須與其來源和目标之間建立有效的連接配接,同樣需要連接配接到其他資料源(例如查詢表)

在建立資料包時,您可以從有效 OLE DB 提供商和 ODBC 驅動程式清單中選擇連接配接類型,對連接配接進行配置。可用的連接配接類型包括:

Microsoft 資料通路元件(MDAC)驅動程式
SQL Server中六種資料移動的方法(重點講解DTS)
Microsoft OLE DB Provider for SQL Server
SQL Server中六種資料移動的方法(重點講解DTS)
Microsoft 資料連結
SQL Server中六種資料移動的方法(重點講解DTS)
Microsoft ODBC Driver for Oracle
Microsoft Jet 驅動程式
SQL Server中六種資料移動的方法(重點講解DTS)
dBase 5
SQL Server中六種資料移動的方法(重點講解DTS)
Microsoft Access
SQL Server中六種資料移動的方法(重點講解DTS)
HTML 檔案(來源)
SQL Server中六種資料移動的方法(重點講解DTS)
Microsoft Excel 97-2000
SQL Server中六種資料移動的方法(重點講解DTS)
Paradox 5.X
其他驅動程式
SQL Server中六種資料移動的方法(重點講解DTS)
文本檔案(來源)
SQL Server中六種資料移動的方法(重點講解DTS)
文本檔案(目标)
SQL Server中六種資料移動的方法(重點講解DTS)
其他連接配接

DTS 允許您使用任何 OLE DB 連接配接。連接配接工具欄中的圖示為常用連接配接提供了友善的通路方式。

下圖介紹了一個具有兩個連接配接的資料包。資料被從一個 Access 資料庫(來源連接配接)複制到 SQL Server 生産資料庫(目标連接配接)。

SQL Server中六種資料移動的方法(重點講解DTS)

圖6:具有兩個連接配接的資料包示例

檢視大圖。

這個資料包的第一步是一個執行 SQL 任務,該任務檢查是否已經存在目标表。如果已經存在,這個表将被删除并重新建立。在成功的完成了執行 SQL 任務後,資料在第二步中被複制到 SQL Server 資料庫。如果複制操作失敗,則在第三步中發送一封電子郵件。

資料泵:轉換資料

DTS 資料泵是一個 DTS 對象,用來驅動資料的導入、導出和轉換。在轉換資料、資料驅動的查詢以及平行資料泵任務中将使用這個資料泵。這些任務将在來源和目标連接配接中建立資料行組, 然後建立資料泵執行個體,将資料行在來源和目标之間移動。在資料行被複制時,對每一行進行資料轉換。

下圖的步驟 2 中,在 Access DB 任務和 SQL Production DB 任務之間使用了一個轉換資料任務。轉換資料任務是兩個連接配接之間的灰色箭頭。

SQL Server中六種資料移動的方法(重點講解DTS)

圖7:轉換資料任務的示例

檢視大圖。

為了定義從來源連接配接收集到的資料,您可以為這個轉換任務建立一個查詢。DTS 支援參數化的查詢,允許您在查詢執行時定義查詢值。

您可以在該任務的屬性對話框中鍵入這個查詢。或者使用資料轉換服務查詢設計器(Data Transformation Services Query Designer),該工具可以用來為 DTS 任務圖形化地建立查詢。下圖中,使用查詢設計器建構了一個将三個表加入到pubs資料庫中的查詢。

SQL Server中六種資料移動的方法(重點講解DTS)

圖8:資料轉換服務查詢設計器界面

檢視大圖。

在轉換任務中,您也可以定義對資料做出的更改。下表解釋了 DTS 提供的内置轉換功能。

轉換 說明
複制資料欄 用來直接将資料從來源複制到目标資料欄中,對資料不進行任何轉換。
ActiveX 腳本 用來建構定制的轉換。請注意,由于轉換是逐行進行的,是以ActiveX 腳本可能會影響 DTS 資料包的執行速度。
日期事件字元串 用來将來源資料欄中的日期或事件轉換為目标資料欄中不同的格式。
小寫字母字元串 用來将來源資料欄中的小寫字母轉換(如果需要)為目标資料欄的資料類型。
大寫字母字元串 用來将來源資料欄中的所有大寫字母轉換(如果需要)為目标資料欄的資料類型。
字元串中段 用來從來源資料欄中提取子字元串,将其轉換,然後将結果複制到目标資料欄中。
修剪字元串 用于删除來源資料欄中字元串前、後和中間的空白,并将結果複制到目标資料欄中。
讀取檔案 用來打開來源資料欄中所指定的檔案的内容,并将其内容複制到目标資料欄中。
寫入檔案 用來将來源資料欄(資料)的内容複制到檔案中,該檔案的路徑由第二個來源資料欄(檔案名)指定。

您也可以通過程式設計建立自己的定制轉換。建立定制轉換的最快方法是使用活動模闆庫(Active Template Library,ATL)定制轉換模闆,該模闆包含在 SQL Server 2000 DTS 示例程式中。

資料泵錯誤日志

SQL Server 2000中 擁有一種記錄轉換錯誤的新方法。您可以定義三種異常日志檔案,用于資料包執行過程:錯誤文本檔案、來源錯誤資料行檔案以及目标錯誤資料行檔案。

正常錯誤資訊被寫入到錯誤文本檔案中。
如果轉換過程失敗,那麼來源資料行将出現錯誤,并将該行寫入到來源錯誤資料行檔案中。
如果插入過程失敗,那麼目标資料行将出現錯誤,并将該行寫入到目标錯誤資料行檔案中。

異常日志檔案被定義在轉換資料的任務中。每個轉換任務可以擁有它自己的日志檔案。

資料泵階段

在預設情況下,資料泵隻有一個階段:資料行轉換。這個階段就是您所配置的在轉換資料任務、資料驅動的查詢任務以及平行資料泵任務中的資料欄轉換,而不選擇階段。

多資料泵階段功能是 SQL Server 2000 中所新增的。通過在 SQL Server Enterprise Manager 中選中多段資料泵選項,您可以在操作過程中的不同地方通路資料泵,添加功能。

在将一行資料從來源複制到目标時,資料泵按照下圖所示的基本程式進行操作。

SQL Server中六種資料移動的方法(重點講解DTS)

圖9:資料泵過程

檢視大圖。

在資料泵處理完最後一行資料後,任務完成,資料泵操作結束。

如果進階使用者需要在資料包中添加功能,使其支援任何資料泵階段,他可以這樣做:

為每個定制的資料泵階段編寫一個ActiveX腳本階段。如果您使用ActiveX腳本功能來定制資料泵階段,不需要任何資料包以外的代碼。
在 Microsoft Visual C++ 中建立 COM 對象,定制所選中的資料泵階段。您在資料包以外開發這個程式,轉換的每個所選中的階段都将調用這個程式。與通路資料泵階段的 ActieX 腳本方法不同的是,ActiveX 腳本方法為每個選中的階段使用不同的功能和入口點,而這種方法提供了單一入口點,由多個資料泵階段在任務執行過程中調用。
SQL Server中六種資料移動的方法(重點講解DTS)

傳回頁首

SQL Server中六種資料移動的方法(重點講解DTS)

傳回頁首

http://www.microsoft.com/china/sql/ 。   •  

Microsoft SQL Server Developer Center,位址為http://msdn.microsoft.com/library/default.asp?URL=/sqlserver/。   •  

SQL Server Magazine,位址為http://www.sqlmag.com/ [英文] 。   •  

Microsoft.public.sqlserver.server和 microsoft.public.sqlserver.datawarehouse新聞討論區,位址為 news://news.microsoft.com。   •  

關于SQL Server的微軟官方課程(Microsoft Official Curriculum)。如需了解最新的課程資訊,請通路Microsoft Training and Services Web站點,位址為http://www.microsoft.com/traincert/default.asp [英文]