您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

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

添加时间:2013-6-25 14:34:21  添加: 思海网络 

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 任务,在ActiveX 任务中通过VB 或者Java 对DTS编程,并且定义流程,把ActiveX 任务设置成最开始的一个任务。由于DTS COM对象线程模式与ActiveX 任务宿主的不一致,需要将ActiveX 任务工作流属性设置成在主包线程中执行,否则可能会出现调用错误。

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



'************************************************************************' Visual Basic ActiveX '************************************************************************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_SuccessEnd 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都可以得到比较容易的解决。

关键字:SQL Server、数据库、存储过程

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站