最近在給項目部署測試環境,需要進行部分數據遷移的工作。第一次接觸到了SSIS,研究了半天,總算是把項目部署到了數據庫中。由於接觸SSIS還比較淺,寫這篇文章也是圍繞工作中實際使用到的部分,我相信對於剛接觸SSIS的同學,在了解如何使用SSIS應該會有一定的幫助。廢話不多說,我們進入正題。
1、安裝Integration Services和SSIS
Integration Services 是用於生成企業級數據集成和數據轉換解決方案的平台。 使用 Integration Services 可解決復雜的業務問題,具體表現為:復制或下載文件,加載數據倉庫,清除和挖掘數據以及管理 SQL Server 對象和數據。
在SQL2017安裝時勾選Integration Services 項目。安裝完成后打開SQL server配置管理器,啟動Named pipes和TCP/IP服務。
如果想使用VS編寫SSIS的同學可以移步到微軟的官方網站上下載SSIS,Microsoft.DataTools.IntegrationServices.exe:
https://ssis.gallery.vsassets.io/_apis/public/gallery/publisher/SSIS/extension/SqlServerIntegrationServicesProjects/3.2.2/assetbyname/Microsoft.DataTools.IntegrationServices.exe?redirect=true&install=true
等待安裝完成之后,我們的VS中,就會出現Integration Services 項目。
至此,開發環境安裝完成。
2、編寫IS項目
新建IS項目后,我們先熟悉一下工作環境。如圖2.1:
可以看到,微軟同樣給我們提供了很多控件,通過這些控件,我們很容易就可以完成原本只能在SQL Server Management Studio中才能完成的任務。
下面,我們要做的就是把源數據庫中的某張表里的數據復制到目標數據庫中對應的表中。其實,SSIS最典型的用途在於能夠從不同版本或者不同類型的數據庫間很方便的遷移數據。
為了操作方便,我在這里僅僅使用了SQL Server做為唯一數據源。
2.1 建立數據庫
這里,為了演示方便,我在同一個實例下建立了兩個數據庫,分別為DBSource和DBTarget。在DBSource和DBTarget下,又分別創建了一張Student表。如圖2.2:
在DBSource的Student表中,先錄入數據,為一會兒的操作做准備。
2.2 配置連接管理器
在解決方案資源管理器中,右鍵連接管理器,選擇“新建連接管理器”。我們選擇OLEDB做為鏈接管理器的類型。如圖2.3:
然后,在彈出的“配置 OLE DB 連接管理器”中,選擇新建。因為我使用的是SQL Server數據庫,所以一般使用默認的提供程序“SQL Server Native Client 11.0”。如果你的源數據庫是Oracle,則選擇”Oracle Provider for OLE DB”做為提供程序即可。如果列表中沒有“Oracle Provider for OLE DB”,可以搜一下,網上有很多解決辦法。選擇完提供程序並且輸入了服務器的登陸信息后,我們可以測試一下連接是否成功。單擊“測試鏈接”,如果沒有問題,我們就可以選擇源數據庫了。具體如圖2.4:
單擊“確定”,我們就打開了一條通向源數據庫的通道。
用同樣的方法,我們再次創建一個用於目標數據庫的連接管理器。由於步驟相同,不再贅述。
2.3 編輯SSIS包
在我們創建項目的時候,默認已經新建了一個SSIS包,我們對其進行重命名為“Student”,與我們需要進行操作的表名相同。如圖2.5:
雙擊“Student.dtsx”文件,打開包。切換到“控制流”視圖下,我們向設計器中拖入“執行SQL任務”控件。這個控件的作用是執行SQL語句,我們使用這個控件的目的是,在每次從源數據庫獲取數據存入目標數據庫之前,先將目標數據庫中的數據清空。如圖2.6:
雙擊該控件,打開編輯器。在Connection屬性中選擇目標服務器,SQLStatusment屬性中輸入執行的SQL語句。如圖2.7所示:
切換到“表達式”頁中,我們在Expressions屬性下添加兩個表達式,分別為“Name”和“SqlStatementSource”。如圖2.8:
注意delete from的后面有空格!
填入相應的信息(可參考如上寫法,添加變量“System::PackageName”,也就是我們剛才設置過的包名)后,保存。
接着,我們再在桌面中拖一個“數據流任務”控件,並移動箭頭指向數據流任務。如圖2.9:
雙擊“數據流任務”控件,切換到“數據流”視圖下,在工具欄中分別拖出“OLE DB源”和“OLE DB目標”控件,如圖2.10:
雙擊“OLE DB源”控件,打開編輯器,在“OLE DB 連接管理器”中,選擇源數據庫,“數據訪問模式”選擇“表或視圖”,最后選擇我們需要遷移的數據表,如圖2.11:
單擊保存,配置完成。我們以同樣的方式,配置“OLE DB目標”控件,在“映射”頁中可以查看源數據庫和目標數據庫的列的映射關系是否正確,如圖2.12:
當然,對於設置為自增的列,我們無法為其插入數據。所以我們可以刪除其映射關系,這樣這一列的數據就不會被轉移到目標數據庫中。
到這里,編輯SSIS包的工作就完成了。最后讓我們執行一下,看看我們的包是否配置成功。成功的顯示效果如圖2.13:
當然,我們也可以在“進度”視圖下,查看更具體的執行情況。
3、部署SSIS包
完成了以上步驟后,我們可以開始進行包的部署工作。打開SQL2017,這里注意要使用windows身份驗證登錄,右鍵解決方案,
在右鍵菜單中選擇部署,進入“Integration Services 部署向導”界面,如圖3.1:
在“選擇目標”標簽頁下,選擇我們要部署包的服務器,根據個人需要選擇本地服務器或遠程服務器,然后選擇包存放的路徑。此時,會提示如下信息:
這是因為SSIS包固定是存放在SQL Server的“Integration Services 目錄”下的“SSISDB”目錄下,這個目錄默認是沒有的,需要我們自行創建。
打開SQL Server,在對象資源管理器中找到“Integration Services 目錄”。右鍵,選擇“新建目錄”,打開“創建目錄”對話框,如圖3.3:
勾選“啟用CLR集成”,鍵入密碼。單擊確定,“SSISDB”目錄創建成功。
好了,現在我們回到Visual Studio。再次選擇路徑,剛才的信息消失了,轉而出現了“通過瀏覽查找文件夾或項目”對話框。我們能看到剛才已經創建好的“SSISDB”文件。如圖3.4:
SSIS包不能直接存放在“SSISDB”目錄下,我們新建一個文件夾,然后單擊確定,OK,程序已經幫我們把路徑設置好了。
單擊下一步,我們開始執行部署。部署完成后的界面如圖3.5:
現在,我們進入SQL Server。可以看到,包已經部署成功了: