SSIS可靠性和扩展性—简介

简介: 可靠性和扩展性是所有系统的最终目标之一,他们两个看起来有些对立,不过通常来讲他们又有相互的联系。错误和造成错误的条件是可靠性最明显的威胁。SSIS提供了解决这些情况的优雅的方法。这个章节中要关注的特性是错误输出和检验点,使用他们来实现可靠性,他们也可以保证包的执行性能和扩展性。

可靠性和扩展性是所有系统的最终目标之一,他们两个看起来有些对立,不过通常来讲他们又有相互的联系。错误和造成错误的条件是可靠性最明显的威胁。SSIS提供了解决这些情况的优雅的方法。这个章节中要关注的特性是错误输出和检验点,使用他们来实现可靠性,他们也可以保证包的执行性能和扩展性。

  

重新启动

一种经常遇到的情况,一个需要整夜执行的包执行失败了,需要重新执行它。如果其中一个步骤非常的耗费资源和时间,重新执行它是一件痛苦的事情。在DTS中没有类似“断点续传”的功能。重新执行一个失败的包是很容易再次出错的。由不同的策略在解决这些问问题,但是需要清楚DTS模型的工作原理,大多数DBA都没有这样的工作经验。


由于这些因素,SQL Server 2008中的检验点功能是非常难得的方法,在SSIS中检验点是包的重新启动的基础,它将包的执行状态写入到一个文件中。这些状态信息包括那个task已经执行过,那个task执行出错了。要正确地设置检验点文件,有三个包 属性和一个task属性需要设置:

  • CheckpointFilename:这个属性必须设置,检验点文件的后缀是.chk
  • CheckpointUsage:  是否使用检验点,有三种值来描述如何使用检验点
      Never: 不使用检验文件
      If Exists:  如果设置了CheckpointFilename属性,包将按照检验文件重新执行
      Always:  总是使用检验文件重新执行,如果没有指定文件将报错
  • SaveCheckpoints: 这是一个布尔值指定是否写入检验点,很明显这个值应该重视设置为true
  • FailPackageOnFailure:  这个属性是在task中设置的,当要将一个task设置为重新执行的检验点,如果这个属性没有被设置为true,执行失败时信息不会被写入到检验点文件中,下次执行的时候将会从第一个task开始执行

注意:SSIS 包被细分成Control Flow和 Data Flow,只能在Control Flow中设置检验点而不能在Data flow中设置。如果在包的执行过程中没有出现错误,检验点文件也不会产生。检验点文件包含所有重新启动包的信息。

  

简单的Control Flow

我们首先从一个简单的例子开始如图1三个ExecuteSQL。

图1

  

在第二个task中我们设置一个错误,select  1/0,如图2

图2

  

我们假设第一个task是一个耗时耗力的任务,为了它在执行完之后不会被执行第2次,将检验点设置在这个任务上,首先设置包的属性如图3

图3

  

现在设置第二个task的属性如图4

图4

  

执行包,它在第二个task处失败如图5

图5

  

在这里如果这个是在DTS环境中我们修改package,并且做一些额外的工作保证task 1不会被再次执行,但是我们是用SSIS来创建的这个包,依赖检验点来实现这个。在错误输出重我们看到一些内容被写倒检验点文件中,如下:

SSIS package "CheckPoint.dtsx" starting.

Information: 0x40016045 at CheckPoint: The package will be saving checkpoints to file "D:\MyProject\IntegrationService\ProSSISChapter5\checkpoint\chkSimple3ExecuteSqltask.chk" during execution. The package is configured to save checkpoints.

Information: 0x40016049 at CheckPoint: Checkpoint file "D:\MyProject\IntegrationService\ProSSISChapter5\checkpoint\chkSimple3ExecuteSqltask.chk" update starting.

Information: 0x40016047 at 1: Checkpoint file "D:\MyProject\IntegrationService\ProSSISChapter5\checkpoint\chkSimple3ExecuteSqltask.chk" was updated to record completion of this container.

Error: 0xC002F210 at 2, Execute SQL Task: Executing the query "select 1/0" failed with the following error: "Divide by zero error encountered.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

Task failed: 2

Warning: 0x80014058 at 2: This task or container has failed, but because FailPackageOnFailure property is FALSE, the package will continue. This warning is posted when the SaveCheckpoints property of the package is set to TRUE and the task or container fails.

Information: 0x40016049 at CheckPoint: Checkpoint file "D:\MyProject\IntegrationService\ProSSISChapter5\checkpoint\chkSimple3ExecuteSqltask.chk" update starting.

Information: 0x40016047 at 2: Checkpoint file "D:\MyProject\IntegrationService\ProSSISChapter5\checkpoint\chkSimple3ExecuteSqltask.chk" was updated to record completion of this container.

SSIS package "CheckPoint.dtsx" finished: Failure.

 

在文件目录中我们也可以看到这个文件如图6

图6

  

现在我们修正task2种的错误:select 1/2,再次执行这个包结果如图7:

图7

  

Task1被忽略,从task2开始执行。这里注意task2的FailPackageOnFailure属性必须设置成true,否则的话检验文件不会被写入,再次执行的时候还是会从task1开始执行。我们来试一试如图8

图8

  

执行包,如图9它将仍然从task1开始执行,这不是我们希望的。

图9

  

这个例子简单地说明了检验点的工作过程,在实际的生产环境情况可能会很复杂。

作者:Tyler Ning
出处:http://www.cnblogs.com/tylerdonet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com  联系我,非常感谢。

目录
相关文章
|
负载均衡 监控 算法
Finagle:构建可靠的分布式系统的利器
今天介绍一个强大的工具,它能够帮助您构建可靠的分布式系统 - **Finagle**。作为一个开源的网络通信框架,Finagle在大规模分布式系统中扮演着至关重要的角色。它以其可扩展性、灵活性和高度可定制的特性而受到广泛赞誉。让我们一起深入了解Finagle,并探索它如何帮助您构建稳健的分布式应用程序。
152 0
|
25天前
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
30 1
|
2月前
|
SQL 缓存 开发框架
深入实践:通过高级特性优化NHibernate性能与扩展性
【10月更文挑战第13天】在现代软件开发中,高效的数据访问层是应用程序性能的关键因素之一。NHibernate作为一个强大的对象关系映射(ORM)框架,提供了丰富的功能来简化数据库操作。然而,仅仅掌握NHibernate的基础用法并不足以发挥其全部潜力。本文将深入探讨NHibernate的一些高级特性和最佳实践,包括懒加载与预加载策略、缓存机制以及批处理操作等,以帮助开发者构建更高效且易于维护的应用程序。
42 1
|
消息中间件 存储 数据可视化
【结合业务需求给出合理的技术解决方案,改进现有模块功能,提高系统的可扩展性,封装性,稳定性】
【结合业务需求给出合理的技术解决方案,改进现有模块功能,提高系统的可扩展性,封装性,稳定性】
132 1
|
7月前
|
分布式计算 负载均衡 Java
构建高可用性Java应用:介绍分布式系统设计与开发
构建高可用性Java应用:介绍分布式系统设计与开发
76 0
|
7月前
|
SQL 关系型数据库 MySQL
MySQL数据库进阶实战:优化性能、提高安全性和实现高可用性
MySQL数据库进阶实战:优化性能、提高安全性和实现高可用性
184 0
|
消息中间件 设计模式 缓存
聊聊结合业务需求给出合理的技术解决方案,改进现有模块功能,提高系统的可扩展性,封装性,稳定性
聊聊结合业务需求给出合理的技术解决方案,改进现有模块功能,提高系统的可扩展性,封装性,稳定性
|
SQL 存储 JSON
读书笔记《数据密集型应用系统设计》- 高可靠性、高可展性、可维护性 & 数据模型与查询语言
《数据密集型应用系统设计》是一本很好介绍数据密集类系统设计原理的纲要性书籍,笔者再次阅读下,记录一些读书笔记,也写一些自己的思考穿插其中,以做备忘。
249 0
|
存储 缓存 运维
构建可靠、可扩展与可维护的应用系统
构建可靠、可扩展与可维护的应用系统
2694 0
构建可靠、可扩展与可维护的应用系统