首页 > 数据库 > SQL Server > 正文

MS SQL Server2k数据转换服务部署

2024-08-31 00:49:36
字体:
来源:转载
供稿:网友


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






发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表