<%@ page contentType="text/html; charset=gb2312"%> mssqlserver2000数据转换服务部署
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
mssqlserver2000数据转换服务部署
     发布者: 发布时间:2006-05-07
  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都可以得到比较容易的解决。


 

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
sqlserver2000分布式查询:oledb连接
配置sqlserver2000选项
sqlserver性能优化
一次简单的sqlserver的安全测试(1)
一次简单的sqlserver的安全测试(2)
sqlserver2000允许用户执行任意指令/非法提升用户权限的修补
 
最近评论:
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(6349)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(7604)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(3646)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号