本文回答了有关 SQL Server 中的数据转换服务的某些常见问题特别回答了某些设计问题这是关于为什么而不是关于如何的常见问题
为什么传输几千个表的数据时向导会失败?
当前的向导体系结构会创建一个 DTS 软件包数据流以传输数据但如果要处理几千个表则会遇到可伸缩性限制我们认为这是合理的因为软件包设计人员不太可能在一个数据流中使用几千个源和几千个目标Beta 中可能会针对此问题进行一些改进
为什么我不能在导入/导出向导中复制对象?
导入/导出向导是为了让用户方便地将数据移入和移出 SQL Server 而设计的在服务器之间复制数据库对象实际上属于管理操作而不是数据移动操作即使实际上移动了数据
用户可以使用 SQL Server管理工作区中的复制数据库向导来复制数据库对象而且该向导是专门用于复制数据库对象的
另一方面DTS 导入/导出向导简化了典型的 DTS 操作——从各种数据源(包括文本文件电子表格和 OLEDB 数据源)加载数据
为什么我不能在 SQL Server Management Studio 中设计软件包?
SQL Server Management Studio 是一个环境用于管理已部署软件包的存储和执行它提供了专门用来设计软件包的特殊功能包括与 DTS 服务的集成以及枚举远程服务器上的软件包的能力但它不是一个设计环境
Business Intelligence Design Studio 才是用于设计软件包在解决方案和项目中组织软件包调试软件包并管理多用户项目的源和版本控制的环境
所以在 SQL Server 中用户分别在两个独立的专门化环境中设计和管理软件包
有关设计和管理软件包以及在环境之间部署软件包的详细信息请参阅联机图书
什么是数据源和数据源视图?它们在我的软件包中如何与连接相关?
数据源和数据源视图不是 DTS 软件包中的对象而是存储在 Business Intelligence Development Studio 的数据转换项目中的单独对象由于它们位于项目中而不是位于 DTS 软件包中因此可以在 DTS 软件包之间共享从而允许为明星架构定义数据源视图并由加载明星架构的每个软件包一致地使用该视图
数据源定义了如何连接到 OLEDB 或 ADONET 数据库它们包含连接字符串以及其他某些属性包括连接的友好名称和描述字段
数据源视图是数据源所指向的关系架构的子集可以用命名查询计算列虚拟关系和友好名称详细描述这些视图例如在使用大型架构时您可能只想使用数据源中的一小部分表这种情况下就可以使用数据源视图来定义这样一个子集
数据源和数据源视图属于设计时对象只能在 BI Development Studio 项目中使用在设计时数据源可由项目中的一个或多个 DTS 软件包使用但在运行时已部署的 DTS 软件包将无法访问这些设计时对象DTS 软件包包含多个连接这使软件包设计器能够管理与数据库文件等的连接在设计时连接可以引用数据源或数据源视图但在运行时DTS 连接将使所有必需的元数据能够独立使用这样用户可以设计能够共享数据源引用和数据源视图的不同软件包然后独立运行并单独部署每个软件包
如果 DTS 连接引用了数据源那么使用该 DTS 连接的对象就可以使用也使用该数据源的任何数据源视图这样DTS 软件包就可以很容易地只引用大型架构的一个小子集
最后DTS 连接比数据源更通用因为它们可以连接到文本文件HTTP 连接FTP 连接以及需要连接字符串的其他很多情形而不只是连接到 OLEDB 和 ADONET 管理的提供程序
有关连接数据源和数据源视图的详细信息请参阅联机图书
为什么没有 Microsoft Excel 或 Microsoft Access 数据源?
要导入 Excel 和 Access 数据文件可以使用经过适当配置的 OLEDB 连接管理器还可以很轻松地使用 DTS 导入/导出向导该向导将为您创建连接管理器
有关详细信息请在联机图书中搜索Creating a Package Using the DTS Import/Export Wizard
为什么默认情况下在数据流中不使用快速分析选项?
快速分析选项是在适当的情况下才能使用的选项它不支持特定于区域设置的分析或年月日以外的日期格式它只对有限的数据格式有用对于这些格式来说此选项的分析速度可能比默认的标准分析方式更快因此用户必须基于自己的数据格式显式选择此选项
有关详细信息请在联机图书中搜索Fast Parse
为什么 WMI 数据任务和事件任务是相互独立的?
系统管理数据可用于影响 DTS 控制流例如运行 ETL 流之前可以检查 SQL Server 是否正在运行计算机上是否有可用的 C: 驱动器或者是否有足够的可用磁盘空间WMI 数据任务用来检索此类系统数据
系统管理事件可用于在 DTS 控制流中执行实时操作例如仅当内存使用量下降到 % 以下时才运行 ETL 流或者仅当文件系统上有可用的新源文件时才启动数据流WMI 事件任务允许定义和处理此类系统事件
而且这两种任务在所提供的功能方面也基本上是不同的在本发行版中我们可以更主动地根据任务提供的功能对任务进行拆分以创建更有针对性的软件包这种拆分的另一个例子是文件系统任务和 FTP 任务在 DTS 中这两个任务提供的功能被组合到一个任务中但在本发行版中这两个任务被拆分开来从而使用户更容易创建理解和支持软件包
为什么表达式语言既不是 SQL 也不是 Visual Basic?
因为 SQL 和 Visual Basic 都不能满足 DTS 数据流的要求例如我们想支持一组运算符比如用于处理很多情况下作为标记使用的位掩码的按位运算符此外为了更好地利用内存(从而获得最佳性能)DTS 数据流对数据类型有着严格的限制这也反映在表达式语法中
DTS 表达式语法使您能够设计出通过复杂的字符串和数据类型处理而获得高性能的数据流如果表达式语言不支持您需要的某些函数或者您更喜欢使用 Visual Basic 语法那么您可以使用脚本组件脚本组件允许您在数据流中使用 Visual Basic NET
为什么有些函数不在表达式语言中?
由于资源限制无法实现目前可从 SQL Server TSQL 中找到的每个函数设置第一批函数时我们曾咨询过客户和开发人员我们会认真考虑收到的测试版反馈信息为以后的测试版和最终版本做好准备
为什么必须在源适配器而不是在使用组件(例如合并)中配置排序顺序?
行的顺序是在源适配器中设置的并且无法通过大多数下游转换进行更改(排序可能是一个例外)能够识别源数据顺序的源适配器无需用户帮助即可设置此信息但在大多数情况下提供给源组件的元数据不充分使源组件无法设置输出列排序信息因此用户需要自行完成此操作
为什么必须在软件包中锁定变量?
当适于改进并发性并且这样可以提高性能和可伸缩性时DTS 运行时将使用多个线程来完成执行为了避免多个线程同时试图访问一个变量必须为您的操作锁定变量从而使对变量的所有访问都是安全的如果不这样做可能会导致软件包出现各种响应从有时不工作到返回完全不正确的结果即使软件包是完全线性的这也可能是一个问题例如如果用户要更改循环中的并发设置
为什么分离输出路径时没有向组件发出通知?
DTS 设计器用户应当能够删除路径然后重新附着路径这样才不会破坏软件包或更改软件包的行为通过提供 OnOutputPathDetached 方法我们允许行为不当的组件不遵守此规则为了满足希望提供多个输出的组件作者的需要DTS 对象模型提供了一个名为 DeleteOutputOnPathDetached 的输出属性如果将此属性设置为 true当路径被分离时输出将自动被删除
为什么有适用于 DTS 的 Windows 服务?
适用于 DTS 的新的 Windows 服务允许操作员查看并停止特定服务器上运行的 DTS 软件包此服务在 SQL Management Studio 中提供注意需要首先启动 DTS 服务因为默认情况下它是被禁用的
请参阅常见问题中的为什么在 Mgt Studio 中无法在 DTS 服务器下看到正在运行的软件包?主题
有关详细信息请在联机图书中搜索DTS Service和Managing DTS Service
为什么在 Mgt Studio 中无法在 DTS 服务器下看到正在运行的软件包?
默认情况下 DTS 服务是被禁用的这是故意设计的目的是为了使系统管理员可以控制何时运行该服务要启动 DTS 服务请右键单击我的电脑并选择管理(从开始按钮或从桌面上均可)然后在计算机管理窗口中双击服务和应用程序然后单击服务即可看见在右侧列出的所有 Windows 服务在列表中找到DTS 服务器右键单击并选择启动(如果您希望在每次启动计算机时自动启动该服务还可以双击该服务以打开它的属性将启动类型更改为自动)
有关详细信息请在联机图书中搜索DTS Service和Managing DTS Service
为什么默认情况下软件包日志记录不再位于系统数据库 MSDB 中?
SQL DTS 为在日志中记录有关数据库的信息添加了很多新选项这允许您为每个软件包定义一个或多个不同类型的日志提供程序日志提供程序类型包括文本文件SQL ServerWindows 事件日志等等在您的软件包中通过转到DTS菜单并选择日志记录可以添加日志提供程序
有关详细信息请在联机图书中搜索DTS Log Providers和Setting Logging Options in Packages
为什么在源适配器中看不到 XML 文档架构的变化?
XML 文档架构的变化将极大地影响数据流的元数据这要求用户显式更改架构并在更改时考虑到元数据的变化
为什么我在迁移引用 DTSGlobalVariables 父属性的软件包时会遇到问题?
DTS 中发生更改的范围要求完全重写对象模型作为迁移到 SQL Server DTS 的结果引用通过 DTSGlobalVariables 父属性访问的 SQL Server DTS 对象的 ActiveX 脚本将不再有效
为什么我在迁移数据泵任务时会遇到问题?
DTS 数据流任务取代了 DTS 数据转换任务使功能有了很大的改进但这样的结果是 和 所提供的功能之间没有明确的对应为了确保以前的数据转换任务能够继续正确操作没有将它们完全迁移到 SQL Server 迁移向导当前将这样的任务包装在专用的 SQL Server 软件包中并从执行 SQL Server DTS 软件包任务调用它
为什么我不能迁移动态属性任务?
因为此任务直接依赖于不再提供的 DTS 对象模型迁移向导当前为此任务提供的支持很有限此任务的实例被脚本任务取代脚本任务中包含描述曾由此任务设置的属性的注释要恢复以前的功能必须进行手动修改
为什么全局变量在 ActiveX 脚本任务中不可用?
Beta 不支持访问全局变量
为什么不在 DTS 中包括数据转换任务和数据驱动的查询任务?
SQL Server 包括的数据流任务取代了这两个 SQL 任务数据流任务对数据源目标和转换的数量没有限制而在 SQL 中用户对每个任务只能使用一个数据源一个目标和一个转换支持这项扩展功能所需的新对象模型无法容纳这两个功能不太强的任务
为什么 DTS 不再是客户端可再分发的?
DTS 已被重写从 SQL Server 中有用的实用程序变成了 SQL Server 中功能丰富的应用程序和平台这种变化同时带来为 DTS 用户提供服务和支持的责任这些服务和支持最好通过管理和许可与其他 SQL 服务器应用程序类似的 DTS 引擎功能来处理因此虽然用户可以使用部署向导轻松部署软件包但他们必须在需要运行软件包的每台计算机上运行 SQL Server 安装程序并安装 DTS这不仅有助于确保用户/计算机使用正确版本的 DTS 可执行程序还有助于该软件以后的更新
为什么 DTS 不支持基于 MSI 的部署?
基于 MSI 的部署具有完全独立安装的优点但它需要再分发 DTS 二进制文件如果需要某个重要的安全修补程序那么以托管方式将修补程序应用到每个部署目标是不可能的当前的部署实用程序要求目标服务器上已安装 DTS因为这对管理员来说才是更有用的模型
有关详细信息请在联机图书中搜索Deployment Utility