MS SQL Server2k数据转换服务部署

蟻族的奋鬥

蟻族的奋鬥

2016-02-19 19:43

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是MS SQL Server2k数据转换服务部署,一起来学习了解下吧!

  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参数。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  2.2. 重新设计DTS包

  为了处理DTSRun传入的自定义参数,DTS包需要重新设计。我们可以增加一个ActiveX Script任务,在ActiveX Script任务中通过VB Script或者Java Script对DTS编程,并且定义流程,把ActiveX Script任务设置成最开始的一个任务。由于DTS COM对象线程模式与ActiveX Script任务宿主的不一致,需要将ActiveX Script任务工作流属性设置成在主包线程中执行,否则可能会出现调用错误。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  下面的例子是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 & "CubeFolderCertificate"
  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都可以得到比较容易的解决。

展开更多 50%)
分享

猜你喜欢

MS SQL Server2k数据转换服务部署

编程语言 网络编程
MS SQL Server2k数据转换服务部署

SQL Server 2000的数据转换服务(下)

SQLServer
SQL Server 2000的数据转换服务(下)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server 2000的数据转换服务(上)

SQLServer
SQL Server 2000的数据转换服务(上)

SQL Server 2000的数据转换服务(中)

SQLServer
SQL Server 2000的数据转换服务(中)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

使用SQL Server数据转换服务升迁Access数据库

SQLServer
使用SQL Server数据转换服务升迁Access数据库

SQL Server 2005 数据转换服务的常见设计问题

编程语言 网络编程
SQL Server 2005 数据转换服务的常见设计问题

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

网页标准化:CSS代码缩写精简实例

网页标准化:CSS代码缩写精简实例

SQLServer连接VFP数据库的实现

SQLServer连接VFP数据库的实现
下拉加载更多内容 ↓