MS SQL Server2k数据转换服务部署

1. 目标 www.yestar2000iTbulo.comWp3XQ
  MS SQL Server做大数据量传输的时候,我们大多会用到数据传输服务。现在假设,在开发环境下,我们已经设计好了DTS包并且运行良好,接下来我们要做的事情是迁移和部署这个DTS数据包。www.yestar2000iTbulo.comWp3XQ

  所以,我们需要把设计环境下的DTS包保存成结构化的存储文件,并且这个文件导入到目标环境下的MS SQL Server中,最后添加作业,让MS SQL Server Angent在我们预期的事情执行这个DTS包完成数据传输工作。其中需要重点解决的一个问题是,在目标环境中,DTS传输的源和目的地会发生改变,需要对它进行配置。 www.yestar2000iTbulo.comWp3XQ

  2. 解决方案 www.yestar2000iTbulo.comWp3XQ

  2.1. DTSRun www.yestar2000iTbulo.comWp3XQ

  DTSRun是微软提供的命令用于执行DTS包(包括结构化存储的、存储在SQL Server或存储在Meta Data Services的包)。 www.yestar2000iTbulo.comWp3XQ

  dtsrun的用法: www.yestar2000iTbulo.comWp3XQ

  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]
  ]

www.yestar2000iTbulo.comWp3XQ
  具体的用法参看微软的资料。这里需要重点指出的是,通过“/A global_variable_name:typeid=value”选项,我们可以给DTS包传递多个自定义的参数,在DTS包部署的目标环境下,我们用这个选项告诉DTS包服务器名称、用户名、密码等数据库连接信息。通过“/!Y”选项可以获取加密后的DTSRun参数。 www.yestar2000iTbulo.comWp3XQ

  2.2. 重新设计DTS包 www.yestar2000iTbulo.comWp3XQ

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

  下面的例子是ActiveX Script任务中的脚本。例子中的DTS包包含名称为"DBConnection"的数据库连接对象。 www.yestar2000iTbulo.comWp3XQ

  '************************************************************************
  '  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")www.yestar2000iTbulo.comWp3XQ

  ' 配置数据源对象的数据连接信息
  If bDBUseTrusted Then
  oConnection.UseTrustedConnection = bDBUseTrusted
  Else
  oConnection.UserID = sDBUserID
  oConnection.Password = sDBPassword
  End Ifwww.yestar2000iTbulo.comWp3XQ

www.yestar2000iTbulo.comWp3XQ


  oConnection.DataSource = sDBDataSource
  oConnection.Catalog = sDBCatalog
  Set oConnection = nothingwww.yestar2000iTbulo.comWp3XQ

  ' 配置跟多的信息,这里是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 Functionwww.yestar2000iTbulo.comWp3XQ

www.yestar2000iTbulo.comWp3XQ
  2.3. 保存为结构化的存储文件 www.yestar2000iTbulo.comWp3XQ

  这个过程相当的简单,通过企业管理器可以完成。另存为的结构化存储文件就是我们要分发的DTS包。 www.yestar2000iTbulo.comWp3XQ

  2.4. 导入到MS SQL Server www.yestar2000iTbulo.comWp3XQ

  我们需要通过DTS编程来实现这个过程。需要强调的是,下面这段示例需要在ApartmentState为STA线程中才可以正确的被调用。 www.yestar2000iTbulo.comWp3XQ


  public void Go()
  {
  DTS.Package2Class pkg = new DTS.Package2Class();
  DTS.Application app = new DTS.ApplicationClass();www.yestar2000iTbulo.comWp3XQ

  //从SQL SERVER中删除已经存在的同名DTS包
  try
  {
  pkg.RemoveFromSQLServer(
  DBServer,
  DBSUserID,
  DBSPassword,
  DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_Default,
  "", www.yestar2000iTbulo.comWp3XQ

www.yestar2000iTbulo.comWp3XQ


  "",
  PkgName
  );
  }
  catch
  {
  }www.yestar2000iTbulo.comWp3XQ

  //取得待分发DTS包(结构化的存储文件)的包信息,这里假定包中只包含一个版本
  DTS.SavedPackageInfos infos = pkg.GetSavedPackageInfos(UNCFile);
  DTS.SavedPackageInfo info = infos.Item(1);www.yestar2000iTbulo.comWp3XQ

  object obj1 = null;
  object obj2 = null;
  string sPkgID = info.PackageID;
  string sVerID = info.VersionID;
  string sPkgName = info.PackageName;www.yestar2000iTbulo.comWp3XQ

  //载入结构化的存储文件
  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();www.yestar2000iTbulo.comWp3XQ

www.yestar2000iTbulo.comWp3XQ

www.yestar2000iTbulo.comWp3XQ


  //检查是否保存成功
  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();      www.yestar2000iTbulo.comWp3XQ

  mPkgID = inf.PackageID;
  mVerID = inf.VersionID;
  }www.yestar2000iTbulo.comWp3XQ

www.yestar2000iTbulo.comWp3XQ
  2.5. 添加作业 www.yestar2000iTbulo.comWp3XQ

  添加作业可以用传统的方式,用SQL语句可做到,不做详细说明。MS SQL Server更是提供一系列的存储过程对作业进行修改,以达到用户预期的效果。www.yestar2000iTbulo.comWp3XQ

  3. 小结 www.yestar2000iTbulo.comWp3XQ

  文章到此已经达到我们的目标。总体上说,2.2这步的实现有些困难,在实现过程当中也碰到过很多困难,有一些是在新闻组中得到的解答,其它的步骤查看MSDN都可以得到比较容易的解决。www.yestar2000iTbulo.comWp3XQ

时间: 2024-10-11 23:39:47

MS SQL Server2k数据转换服务部署的相关文章

SQL Server数据转换服务小妙招

以下的文章主要是介绍SQL Server数据转换服务的4妙用之执行一些自动化的操作.在SQL Server数据库的实际操作管理中,数据库管理员所希望的是数据库能够自动收集信息并将信息发送到用户指定的地点如邮件等等. 在数据转换任务中,就提供了一系列类似的工具,来简化数据库管理员的工作.如在DTS组套种,有一个发送邮件的工具.通过相关的设置,数据库会在包成功或者失败的时候自动发送一个电子邮件给数据库管理员,以提醒他作业是成功还是失败.并且会附上比较详细的信息,以便于数据库管理员进行后续的操作. 数

MS SQL Server2k字符串分拆与合并处理代码

server|字符串          -- MS SQL Server2k字符串分拆与合并处理代码               --字符串分拆处理代码CREATE FUNCTION f_splitSTR(@s     varchar(8000),  --待分拆的字符串@split  varchar(10)     --数据分隔符)RETURNS TABLEAS--SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR  --字符串分拆

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

本文详细介绍了如何使用SQL Server数据转换服务升迁Access数据库 开发者常常以Access作为原型或者用Access来开发不是很关键的应用程序.但是,随着公司业务的增长,要解决的问题会变得越来越复杂,Access环境可能无法满足需要.目前,Access 2002的.mdb和.adp文件都将一个数据库的长度限制在2 GB以内.这意味着几乎每个Access和SQL Server开发者最终都要将一个Access数据库升迁成一个SQL Server数据库. 由于升迁已成为极为常见的一个任务,

MS SQL Server 2000数据转换服务部署

server|数据|转换 1. 目标 MS SQL Server做大数据量传输的时候,我们大多会用到数据传输服务.现在假设,在开发环境下,我们已经设计好了DTS包并且运行良好,接下来我们要做的事情是迁移和部署这个DTS数据包.所以,我们需要把设计环境下的DTS包保存成结构化的存储文件,并且这个文件导入到目标环境下的MS SQL Server中,最后添加作业,让MS SQL Server Angent在我们预期的事情执行这个DTS包完成数据传输工作.其中需要重点解决的一个问题是,在目标环境中,DT

SQL Server数据转换服务的四个妙用

在企业中,各种数据分布于各个场合中.如在企业采用SQL Server数据库之前,可能采用了Excle或者MY SQL等数据库.他们的格式不同,存储的位置也不同.但是,管理者在决策的时候,可能需要用到各方面的数据.此时,用户就会遇到一个问题,如何把这些不同格式.不同地理位置的数据集中起来进行分析呢?为了解决这个难题,SQL Server数据库中提出了一种叫做DTS(数据转换)的服务.通过这个工具,使得数据库管理员可以将来自不同的源的数据(不同格式)提取.转换甚至合并到某个特定的目的(如SQL Se

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

开发者常常以Access作为原型或者用Access来开发不是很关键的应用程序.但是,随着公司业务的增长,要解决的问题会变得越来越复杂,Access环境可能无法满足需要.目前,Access 2002的.mdb和.adp文件都将一个数据库的长度限制在2 GB以内.这意味着几乎每个Access和SQL Server开发者最终都要将一个Access数据库升迁成一个SQL Server数据库. 由于升迁已成为极为常见的一个任务,所以Access配套提供了一个"升迁向导".它虽然能完成这个工作,但

MS SQL基础教程:数据转换服务基本概念

在使用SQL Server 的过程,中由于经常需要从多个不同地点将数据集中起来或向多个地点复制数据,所以数据的导出,导入是极为常见的操作.我们可以使用BCP 命令来完成这一任务,但是记住 BCP 的命令格式是一件令人头痛的苦差事,虽然你可以查看帮助文件,所以我们需要功能强大操作简单的工具来完成这一任务,数据转换服务DTS 提供了这种支持.因此本章将介绍DTS 的基本情况.讨论DTS 的各个构建组件以及如何完成数据转换服务. 18.1.1 数据转换服务简介 为了支持企业决策,许多组织都需将数据集中

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

server|数据|转换 摘要: 为了完成数据合并.存档和分析等任务:为了进行应用程序开发:为了进行数据库或服务器升级,数据库管理员经常需要导入.导出以及转换数据.SQL Server 2000 中的数据转换服务(DTS)为此提供了一组图形化工具和可编程对象,能够帮助管理员和开发人员解决从不同来源到单个或多个目标的数据转移问题,包括数据提取.转换以及合并.您可以将任务.工作流操作和限制条件组成 DTS数据包,然后安排定期或在特定事件发生时执行该数据包.本白皮书将介绍 DTS,给出一些能够用于创建

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

本文回答了有关 SQL Server 2005 中的数据转换服务的某些常见问题,特别回答了某些设计问题,这是关于"为什么"而不是关于"如何"的常见问题. 为什么传输几千个表的数据时向导会失败? 当前的向导体系结构会创建一个 DTS 软件包数据流以传输数据.但如果要处理几千个表,则会遇到可伸缩性限制.我们认为这是合理的,因为软件包设计人员不太可能在一个数据流中使用几千个源和几千个目标.Beta 3 中可能会针对此问题进行一些改进. 为什么我不能在导入/导出向导中复制对