1

SSIS 上的日志记录模式属性是否存在错误?

我知道任务应该从父容器继承日志记录模式,但是通过将容器设置为 logging mode =Disabled并将容器内的任务设置为 logging mode Enabled,我希望容器不会记录操作并且任务会记录。我会这样做以避免由于嵌套组件而导致日志表上的重复。

但这不会发生,如果我将容器上的日志记录模式设置为禁用,它似乎会在属于该容器的所有任务中禁用它,即使它们的日志记录模式设置为启用。

我发现这段文字几乎证实了我所期望的行为,但事实并非如此。

对这件事有什么想法吗?

可以在 SSIS 对象层次结构中的不同级别(包级别、容器级别和任务级别)配置日志记录。在确定哪个 SSIS 对象应捕获哪些事件属性时,您应该记住 SSIS 对象层次结构支持继承:任务可以使用专有的日志记录设置,也可以从父对象(容器或包)继承它们。如果应将 SSIS 对象层次结构的特定分支配置为记录相同的事件和相同的一组属性,则可以将整个分支放在一个容器中,以避免必须配置每个 SSIS 对象;在容器中配置日志记录后,只要启用了继承,它包含的其他对象将使用相同的设置。当特定 SSIS 对象的 LoggingMode 属性设置为 UseParentSetting(默认情况下)时,日志记录设置将从 SSIS 层次结构中的父级继承(如果对象放置在容器中,则为容器,或包本身如果对象存在于包的范围内)。当然,必须将父级配置为直接或通过继承进行日志记录。

另一方面,要为特定任务配置不同于其父任务的日志记录,您必须将 LoggingMode 属性设置为 Enabled 并单独配置该任务。要防止任务记录其事件,请将 LoggingMode 属性设置为 Disabled。

4

1 回答 1

3

您需要在LoggingMode属性设置为的父容器中单独配置子任务Disabled

在 SSIS 2012 中创建的示例包用于说明日志记录:

这是一个示例 SSIS 包,它说明了如何为您在问题中描述的场景配置日志记录。我已经配置了一个包,如下所述。

  • 创建一个 SSIS 包,将其命名为SO_14982991.dtsx

  • 如果您希望记录到 SQL Server 数据库,请为要配置记录的数据库创建OLEDB 连接管理器。此示例使用名为 的连接管理器OLEDB_PracticeDB

  • 将 a 拖放Sequence Container到“数据流”选项卡上。将其重命名为 simple Container

  • 将 a 拖放Data Flow TaskSequence Container中。将其重命名为Task within container.

  • 拖放另一个Data Flow Task并将其放在Sequence Container下方。将其重命名为Independent task.

  • 将序列容器LoggingMode属性从UseParentSetting 更改为。Disabled

  • 将名为的数据流任务LoggingMode 属性从UseParentSetting 更改为。Task within containerEnabled

样品包

  • 要启用日志记录,请单击 SSIS 菜单,然后单击日志记录...

执行以下步骤Configure SSIS Log: SO_14982991

  • SSIS log provider for SQL Server提供者类型中选择

  • 选中名称列下的框

  • 选择连接管理器OLEDB_PracticeDB

记录 1

执行以下操作以启用子操作和禁用父操作。

  • 取消选中名为 的父容器的复选框Container

  • 选中名为 的子任务的复选框Task within container

  • 然后,您需要选择子任务,然后选中Providers and Logs选项卡上名称列下的复选框。

  • 选择适当的事件以登录Details选项卡。

  • 单击确定。

记录 2

在执行包之前,我对日志记录数据库执行以下查询以找到没有记录。

select id, event, source, starttime, endtime from dbo.sysssislog

执行前

执行了包,然后再次运行查询,找到以下记录。

  • 您可以注意到OnInformation子任务Task within container的事件已被捕获,但其父容器的事件并未被捕获。

执行后

希望这有助于回答您关于在禁用日志记录的父容器中仅记录子任务的问题。

于 2013-02-20T15:42:48.377 回答