无码精品不卡一区二区三区,亚洲综合另类一区无码,亚洲AV无码乱码在线观看裸奔,在线观看无码爽视频,精品少妇无码av专区在线观看 ,免费精品无码一级毛片牛牛影视 ,91天堂在线观看无码

在線咨詢
QQ咨詢
服務熱線
服務熱線:13125520620
TOP

MS SQL Server2k數據轉換服務部署-數據庫

發布時間:2011-11-12 瀏覽:6030

  1. 目標

  MS SQL Server做大數據量傳輸的時候,我們大多會用到數據傳輸服務。現在假設,在開發環境下,我們已經設計好了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_Success
  End 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都可以得到比較容易的解決。

TAG
軟件定制,軟件開發,瀚森HANSEN,遼寧,沈陽,撫順
0
該內容對我有幫助