MS SQL Server2k数据转换服务部署

2016-02-19 19:43 6 1 收藏

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

【 tulaoshi.com - 编程语言 】

  1. 目标

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

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

  2. 解决方案

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

  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 

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

   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都可以得到比较容易的解决。

来源:http://www.tulaoshi.com/n/20160219/1621635.html

延伸阅读
熟悉SQL SERVER 2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact-SQL语句进行导入导出操作。在Transact-SQL语句中,我们主要使用OpenDataSource函数、OPENROWSET 函数,关于函数的详细说明,请参考SQL联机帮助。利用下述方法,可以十分容易地实现SQL SERVER、ACCESS、EXCEL数据转换...
标签: SQLServer
  Linux作为一个免费的Unix类操作系统,以其开放性源代码、多任务、Xwindow等特点为众多的用户所采用,并有很多企业采用Linux来作为其内部网的全功能服务器(WWW,FTP,Email、DNS)。企业的内部网不仅要提供文本信息的访问,还要能提供对企业关系数据库中的信息的访问。SQL Server以其低成本、性能高以及与NT的有效集成等特性为许多企...
视图的好处,它可以横纵分割表,在视图上的可以执行与在表上一至的操作,如:Insert、Update、Delete。这些操作与在表上的相应操作大至相同,不过也有些不同之处。在视图上进行操作的列是只属于视图的列,这些列不一定包含对应表中的所有列,所以在执行Insert操作或Update操作时,如果视图中有未被包含的列,并且这些列是Not NULL的,那么...
概述 “数据库镜像”是一种针对数据库高可用性的基于软件的解决方案。其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中。建议使用不同位置的两台服务器来承载。在同一时刻,其中一台上的数据库用于客户端访问,充当“主体服务器”角色;而另一台则根据镜像会话的配置和状态,充当热备份服务器,即“镜...
前面已经完成了镜像数据库的配置,并进行那个了故障转移测试。接下来将部署见证服务器,实现自动故障转移。 一、关于见证服务器 1、若要支持自动故障转移,必须在高安全性模式下配置数据库镜像会话,并且还要具有第三个服务器实例(也称为“见证服务器”)。见证服务器是 SQL Server 的可选实例,它能使高安全性模式会话中的镜像服务器识别出...

经验教程

636

收藏

5
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部