MS SQL Server 2000資料轉換服務部署

來源:互聯網
上載者:User
server|資料|轉換
1. 目標

MS SQL Server做大資料量傳輸的時候,我們大多會用到Data Transmission Service。現在假設,在開發環境下,我們已經設計好了DTS包並且運行良好,接下來我們要做的事情是遷移和部署這個DTS資料包。所以,我們需要把設計環境下的DTS包儲存成結構化的隱藏檔,並且這個檔案匯入到目標環境下的MS SQL Server中,最後添加作業,讓MS SQL Server Angent在我們預期的事情執行這個DTS包完成資料轉送工作。其中需要重點解決的一個問題是,在目標環境中,DTS傳輸的源和目的地會發生改變,需要對它進行配置。

2. 解決方案

2.1. DTSRun

DTSRun是微軟提供的命令用於執行DTS包(包括結構化儲存的、儲存在SQL Server或儲存在Meta Data Services的包)。

dtsrun的用法:
dtsrun
[/?]|
[
    [
        /[~]S server_name[\instance_name]
        { {/[~]U user_name [/[~]P password]} | /E }
    ]
    {    
        {/[~]N package_name }
        | {/[~]G package_guid_string}
        | {/[~]V package_version_guid_string}
    }
    [/[~]M package_password]
    [/[~]F filename]
    [/[~]R repository_database_name]
    [/A global_variable_name:typeid=value]
    [/L log_file_name]
    [/W NT_event_log_completion_status]
    [/Z] [/!X] [/!D] [/!Y] [/!C]
]
具體的用法參看微軟的資料。這裡需要重點指出的是,通過“/A global_variable_name:typeid=value”選項,我們可以給DTS包傳遞多個自訂的參數,在DTS包部署的目標環境下,我們用這個選項告訴DTS包伺服器名稱、使用者名稱、密碼等資料庫連接資訊。通過“/!Y”選項可以擷取加密後的DTSRun參數。



2.2. 重新設計DTS包

為了處理DTSRun傳入的自訂參數,DTS包需要重新設計。我們可以增加一個ActiveX Script任務,在ActiveX Script任務中通過VB Script或者Java Script對DTS編程,並且定義流程,把ActiveX Script任務設定成最開始的一個任務。由於DTS COM對象線程模式與ActiveX Script任務宿主的不一致,需要將ActiveX Script任務工作流程屬性設定成在主包線程中執行,否則可能會出現調用錯誤。

下面的例子是ActiveX Script任務中的指令碼。例子中的DTS包包含名稱為"DBConnection"的資料庫連接對象。



'************************************************************************' Visual Basic ActiveX Script'************************************************************************Function Main() Dim sDBDataSource Dim sDBCatalog Dim sDBUserID Dim sDBPassword Dim bDBUseTrusted Dim sOLAPServer Dim sOLAPCatalog Dim oPackage Dim oConnection Dim oTask Dim oCustomTask ' 擷取DTSRun傳入的自訂參數 sDBDataSource = DTSGlobalVariables("DBDataSource").Value sDBCatalog = DTSGlobalVariables("DBCatalog").Value sDBUserID = DTSGlobalVariables("DBUserID").Value sDBPassword = DTSGlobalVariables("DBPassword").Value bDBUseTrusted = DTSGlobalVariables("DBUseTrusted").Value sOLAPServer = DTSGlobalVariables("OLAPServer").Value sOLAPCatalog = DTSGlobalVariables("OLAPCatalog").Value ' 取得當前DTS包對象的技巧 Set oPackage = DTSGlobalVariables.Parent ' 取得包中的資料連線對象 Set oConnection = oPackage.Connections("DBConnection") ' 配置資料來源對象的資料連線資訊 If bDBUseTrusted Then oConnection.UseTrustedConnection = bDBUseTrusted Else oConnection.UserID = sDBUserID oConnection.Password = sDBPassword End If oConnection.DataSource = sDBDataSource oConnection.Catalog = sDBCatalog Set oConnection = nothing ' 配置跟多的資訊,這裡是OLAP分析服務處理任務 Set oTask = oPackage.Tasks("DTSTask_DTSOlapProcess.Certificate") Set oCustomTask = oTask.CustomTask Set oTask = nothing oCustomTask.Properties("TreeKey").Value = sOLAPServer & "\" _ & sOLAPCatalog & "\CubeFolder\Certificate" Set oCustomTask = nothing ' 返回成功狀態 Main = DTSTaskExecResult_SuccessEnd Function



2.3. 儲存為結構化的隱藏檔

這個過程相當的簡單,通過企業管理器可以完成。另存新檔的結構化隱藏檔就是我們要分發的DTS包。

2.4. 匯入到MS SQL Server

我們需要通過DTS編程來實現這個過程。需要強調的是,下面這段樣本需要在ApartmentState為STA線程中才可以正確的被調用。

public void Go(){ DTS.Package2Class pkg = new DTS.Package2Class(); DTS.Application app = new DTS.ApplicationClass(); //從SQL SERVER中刪除已經存在的同名DTS包 try { pkg.RemoveFromSQLServer( DBServer, DBSUserID, DBSPassword, DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_Default, "", "", PkgName ); } catch { } //取得待分發DTS包(結構化的隱藏檔)的包資訊,這裡假定包中只包含一個版本 DTS.SavedPackageInfos infos = pkg.GetSavedPackageInfos(UNCFile); DTS.SavedPackageInfo info = infos.Item(1); object obj1 = null; object obj2 = null; string sPkgID = info.PackageID; string sVerID = info.VersionID; string sPkgName = info.PackageName; //載入結構化的隱藏檔 pkg.LoadFromStorageFile( UNCFile, PkgPwd, sPkgID, sVerID, sPkgName, ref obj1 ); //儲存到SQL Server中 pkg.SaveToSQLServerAs( PkgName, DBServer, DBSUserID, DBSPassword, DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_Default, PkgOwnerPwd, PkgOperatorPwd, "", ref obj2, false); pkg.UnInitialize(); //檢查是否儲存成功 DTS.PackageSQLServer pkgSQLServer = app.GetPackageSQLServer( DBServer, DBSUserID, DBSPassword, DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_Default ); DTS.PackageInfos infs = pkgSQLServer.EnumPackageInfos(PkgName, true, ""); if (infs.EOF) throw new Exception("DTS包匯入到資料庫失敗。"); DTS.PackageInfo inf = infs.Next(); mPkgID = inf.PackageID; mVerID = inf.VersionID;}

2.5. 添加作業

添加作業可以用傳統的方式,用SQL語句可做到,不做詳細說明。MS SQL Server更是提供一系列的預存程序對作業進行修改,以達到使用者預期的效果。

3. 小結

文章到此已經達到我們的目標。總體上說,2.2這步的實現有些困難,在實現過程當中也碰到過很多困難,有一些是在新聞群組中得到的解答,其它的步驟查看MSDN都可以得到比較容易的解決。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.