转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> Sql Server >> 正文
MS SQL Server 2000数据转换服务部署         

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1100 更新时间:2007/11/14 12:08:08

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


[Access]sql随机抽取记录  [Access]ASP&SQL让select查询结果随机排序的实现方法
[操作系统]MS-DOS:解决Windows 所不能  [操作系统]通过修改注册表禁用MS-DOS—有效防止黑客或病毒的…
[网络技术]QQ和MSN的通讯IP地址和端口小小总结  [电脑技术]msconfig启动项详细介绍
[聊天工具]企业邮件系统的利器----FoxMail Server  [系统软件]OPEN SERVER 5.0.5安装EXP300阵列柜
[系统软件]SQL语句性能优化--LECCO SQL Expert  [系统软件]关于Windows2000Server的灾难恢复
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台