WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明

简介:

使用WF 中的SqlTrackingService 跟踪服务,我们可以记录有关工作流及其关联活动的跟踪信息到Sql Server数据库库中。SqlTrackingQuery 类提供对包含在跟踪数据库中的数据的高级别访问。但是,我们也可以直接查询 SQL 跟踪服务数据库视图。我们使用WF提供的脚本建立好的Sql数据库主要有21张表,20个视图和59个存储过程,下面就说一些比较重要的。

1.跟踪数据库的表

1.1.Workflow :Workflow 表存储了所有工作流类型的工作流定义,该表已由 SqlTrackingService 进行跟踪。它在第一次将工作流实例化并为该工作流类型启用 SqlTrackingService 时填充。
说明
WorkflowTypeId 链接至存储类型名称和在其中出现工作流类型的程序集名称的 Type 表。
WorkflowDefinition 工作流的定义。

1.2.Activity:Activity 表存储在对应工作流类型中出现的所有活动类型。

说明
WorkflowTypeId 链接至存储类型名称和在其中出现工作流类型的程序集名称的 Type 表。
QualifiedName 工作流定义中的活动限定名。
ActivityTypeId 链接至存储类型名称和在其中出现活动类型的程序集名称的 Type 表。
ParentQualifiedName 如果该活动是另一个活动的组成部分,则此字段将包含该父级活动的活动限定名。

1.3.Type:Type 表存储了所有类型信息和在其中出现类型的程序集名称。这包括了工作流类型、活动类型以及 SqlTrackingService 中使用的其他所有类型。例如,如果将字符串作为跟踪数据项进行跟踪,则该字符串类型信息将存储在此表中。

说明
TypeId 类型的唯一 ID。
TypeFullName 该类型的完全限定名。
AssemblyFullName 存储类型的程序集的全名。
IsInstanceType 指示工作流实例是否为仅 XOML 实例的布尔值(在这种情况下,类型和程序集全名为空)。

1.4.WorkflowInstance:WorkflowInstance 表维护跟踪数据库中已跟踪的所有工作流实例的列表。

说明
WorkflowInstanceInternalId 由数据库给予工作流实例的唯一内部 ID。该 ID 用作外键以联接数据库中的其他表。
WorkflowInstanceId 工作流实例的 GUID。
ContextGuid 有关此工作流实例的上下文信息。
CallerInstanceId 调用此工作流实例的工作流实例的 ID。
CallPath 当工作流实例调用一个工作流实例,本身又被另一个工作流实例调用时使用的完整调用路径。
CallerContextGuid 有关调用方的上下文信息。
CallerParentContextGuid 有关调用实例的父级工作流实例的上下文信息。
WorkflowTypeId 使用工作流类型 ID 链接至 Workflow 表。
InitializedDateTime 初始化工作流实例的日期和时间。
CreatedDateTime 创建工作流实例的日期和时间。
DbInitializedDateTime 初始化工作流实例记录时的数据库日期和时间。
EndDateTime 完成/终止工作流实例的日期和时间。
DbEndDateTime 提交工作流实例记录时的数据库日期和时间。

1.5.ActivityInstance:ActivityInstance 表用于存储正在跟踪的活动的实例。此表与 WorkflowInstance 表之间存在多对一的关系。

说明
WorkflowInstanceInternalId 活动所属的工作流实例的内部数据库 ID。
ActivityInstanceId 给定工作流实例正在跟踪的活动的唯一 ID。
QualifiedName 工作流定义中的活动的限定名。
ContextGuid 活动的上下文。
ParentContextGuid 父活动的上下文。
WorkflowInstanceEventId 工作流实例事件记录的唯一 ID。

1.6.ActivityExecutionStatusEvent :ActivityExecutionStatusEvent 表存储了活动在其生命周期中已经历的不同状态。给定工作流实例中的给定活动可以有多个活动状态。只有其中一个是当前状态。

说明
ActivityExecutionStatusEventId 活动执行状态记录的唯一 ID。
WorkflowInstanceInternalId 活动所属的工作流实例的内部数据库 ID。
EventOrder 事件发生的顺序。
ActivityInstanceId 记录了状态的活动的唯一 ID。
ExecutionStatusId 链接至存储了不同状态的说明的 ActivityExecutionStatus 表。
EventDateTime 事件发生的日期和时间。
DbEventDateTime 事件发生时的数据库日期和时间。

1.7.ActivityExecutionStatus:ActivityExecutionStatus 表是一个参考表,该表存储活动可经历的所有执行状态的文本值。

说明
ExecutionStatusId 状态的唯一 ID。
Description 状态的文本值。

1.8.TrackingDataItem:对于每个活动状态,TrackingDataItem 表都存储了一组数据(如变量、属性等),前提是 SqlTrackingService 正在跟踪这些项(如跟踪配置文件所指示)。跟踪配置文件可以指定当特定活动达到特定状态时必须跟踪哪些工作流属性。

说明
TrackingDataItemId 表示给定活动状态的给定项目的记录的唯一 ID,属于特定的 workflowInstance。
WorkflowInstanceInternalId 工作流实例的内部数据库 ID。
EventId 从其中提取跟踪数据项的事件 ID。
EventTypeId 从其中提取跟踪数据项的事件类型。
FieldName 被跟踪变量(数据项)的名称。
FieldTypeId 被跟踪变量(数据项)的类型 ID。引用 Type 表。
Data_Str 被跟踪数据的字符串值(如果该数据属于基元类型并可转换为字符串)。
Data_Blob 被跟踪数据的值的二进制大型对象值(如果该数据属于非基元类型并可进行二进制序列化)。
DataNonSerializable 用于指示数据存在,但不能转换为字符串或进行二进制序列化的标志。

1.9.TrackingDataItemAnnotation:TrackingDataItemAnnotation 表存储了为工作流中的给定跟踪数据项添加的批注。批注由跟踪配置文件指示。

说明
TrackingDataItemId 为其存储批注的跟踪数据项的 ID。
WorkflowInstanceInternalId 工作流实例的内部数据库 ID。
Annotation 批注的文本值。

1.10.EventAnnotation:EventAnnotation 表存储了与工作流事件关联的所有批注。

说明
WorkflowInstanceInternalId 工作流实例的内部数据库 ID。
EventId 在其中进行批注的事件的内部数据库 ID。
EventTypeId 事件类型的内部数据库 ID。
Annotation 批注的文本值。

1.11.WorkflowInstanceEvent:WorkflowInstanceEvent 表存储了工作流在其生命周期中已经历的不同事件。一个给定工作流实例可以有多个事件;但是只有其中一个是当前事件。.

说明
WorkflowInstanceEventId 工作流实例事件记录的唯一 ID。
WorkflowInstanceIntebrnalId 活动所属的工作流实例的内部数据库 ID。
TrackingWorkflowEventId 事件的唯一 ID。
EventDateTime 事件发生的日期和时间。
EventOrder 事件发生的顺序。
EventArgTypeId 事件参数的数据类型的内部数据库 ID。
EventArg 事件参数的二进制序列化数据。
DbEventDateTime 事件发生时的数据库日期和时间。

1.12.TrackingWorkflowEvent:TrackingWorkflowEvent 表存储了工作流可经历的所有事件的文本值。

说明
TrackingWorkflowEventId 事件的唯一 ID。
Description 事件的文本值。

1.13.UserEvent:“UserEvent“表存储了由自定义用户跟踪点发出和跟踪的不同事件。一个给定工作流实例可以有多个用户事件。

说明
UserEventId 用户事件的唯一 ID。
WorkflowInstanceInternalId 活动所属的工作流实例的内部数据库 ID。
EventOrder 事件发生的顺序。
ActivityInstanceId 发生用户事件的活动的唯一 ID(在该活动中,发出事件的代码出现在工作流代码中)。
EventDateTime 事件发生的日期和时间。
UserDataKey 在用户事件中传递的键值(当您使用 TrackData 方法时)。
UserDataTypeId 正在跟踪的用户数据的 Type 表中的类型 ID。
UserData_Str 被跟踪数据的字符串值(如果该数据属于基元类型并可转换为字符串)。
UserData_Blob 被跟踪数据的值的二进制大型对象值(如果该数据属于非基元类型并可进行二进制序列化)。
DataNonSerializable 用于指示数据存在,但不能转换为字符串或进行二进制序列化的标志。
DbEventDateTime 事件发生时的数据库日期和时间。

1.14.AddedActivity:AddedActivity 表存储了发生工作流更改时添加至工作流的活动。每次发生工作流更改时都可能会添加许多活动。

说明
WorkflowInstanceInternalId 工作流实例的内部数据库 ID。
WorkflowInstanceEventId 对工作流实例的事件的引用。
QualifiedName 添加活动的限定名。
ActivityTypeId 链接至 Type 表,以指示作为动态更改的一部分添加的活动的类型和程序集名称。
ParentQualifiedName 包含此活动的父级活动的限定名。
AddedActivityAction 从动态更新事件创建的 ActivityChangeAction 对象的序列化值。
Order 将活动添加至工作流的顺序

1.15.RemovedActivity:RemovedActivity 表存储了因工作流更改而移除的所有活动。每次发生工作流更改时都可能会移除许多活动。

说明
WorkflowInstanceInternalId 工作流实例的内部数据库 ID。
WorkflowInstanceEventId 对工作流实例的事件的引用。
QualifiedName 移除活动的限定名。
ParentQualifiedName 包含此活动的父级活动的限定名。
RemovedActivityAction 从动态更新事件创建的 ActivityChangeAction 对象的序列化值。
Order 将活动添加至工作流的顺序

1.16.TrackingProfile:TrackingProfile 表存储了给定工作流类型的跟踪配置文件。

说明
TrackingProfileId 跟踪配置文件的唯一 ID。
Version 跟踪配置文件的版本,应与 Tracking Profile 的版本对应(跟踪配置文件 XML 中的 TrackingProfile.Version 或版本属性)
WorkflowTypeId 链接至存储了工作流的类型名称和程序集名称的 Type 表。
TrackingProfileXml 跟踪配置文件 XML。
InsertDateTime 插入配置文件的日期和时间。

1.17.TrackingProfileInstance:TrackingProfileInstance 表存储了与特定工作流实例关联的跟踪配置文件。当不同配置文件用于不同工作流实例时使用此表。

说明
InstanceId 存储跟踪配置文件的工作流实例的内部 ID。
TrackingProfileXml 跟踪配置文件 XML。
UpdatedDateTime 发生更新的日期和时间。

1.18.DefaultTrackingProfile:DefaultTrackingProfile 表存储了默认跟踪配置文件。如果跟踪配置文件与给定工作流类型不关联,则使用默认跟踪配置文件。

说明
Version 跟踪配置文件的版本号,应与 Tracking Profile 的版本对应(跟踪配置文件 XML 中的 TrackingProfile.Version 或版本属性)
TrackingProfileXml 跟踪配置文件 XML。
InsertDateTime 插入跟踪配置文件的日期和时间。

1.19.TrackingPartitionInterval:TrackingPartitionInterval 表存储了用于启用数据维护分区的分区间隔。只有在将 SqlTrackingService 类的 PartitionOnCompletion 属性设置为 true 时,此事件才会发生。默认为每月(“m”)。您可以将其设置为每日(“d”)或每年(“y”)。

说明
Interval 要对表进行分区所设置的间隔。

1.20.TrackingPartitionSetName:TrackingPartitionSetName 表包含了有关分区集名称的信息。

说明
PartitionId 分区的唯一 ID。
Name 分区的名称。
CreatedDateTime 创建分区的日期和时间。
EndDateTime 结束分区的日期和时间。
PartitionInterval 此特定集的分区间隔。

1.21.SqlTrackingServiceQfeLog:

说明
InstallDateTime  
KbId  
Description  

2.部分视图和存储过程说明

2.1.SetPartitionInterval

设置 SQL 跟踪服务在对跟踪数据进行分区时使用的间隔。若要启用跟踪数据分区,请将 SqlTrackingService 的 PartitionOnCompletion 属性设置为 true。启用此属性后,Windows Workflow Foundation 将在您指定的时间间隔内创建一个新的分区集(新的表格集)。表格 vw_TrackingPartitionSetName 包含有关分区集名称的信息,包括 Name yyyy_m、CreatedDateTime、EndDateTime 和 PartitionInterval。完成工作流实例后,相应的跟踪数据将移到新创建的表格集中。

2.2.DetachPartition

如果为 SqlTrackingService 启用了分区,此过程将从分区总集中移除一个分区。这样分区即会分离出来,并且视图不会在以后的查询中包含此分区。此分区的表格保留在数据库中。

2.3.DropPartition

如果为 SqlTrackingService 启用了分区,此过程将从分区总集中移除一个分区。这样分区即会分离出来,并且视图不会在以后的查询中包含此分区。此外,该分区的所有表格也将移除。

如果为 @PartitionName 和 @PartitionId 提供了一个值,则在 @PartitionId 不指向 @PartitionName 参数所指定的分区名称时,dbo.DropPartition 将会失败。

2.4.UpdateTrackingProfile

更新给定工作流类型的跟踪配置文件。

2.5.DeleteTrackingProfile

删除给定工作流类型的跟踪配置文件。

该存储过程不会从 SQL 跟踪数据库中移除跟踪配置文件。它只是解除跟踪配置文件与给定工作流类型之间的关联。

2.6.SetInstanceTrackingProfile

设置给定工作流实例的跟踪配置文件。

若要为运行中的工作流实例更新跟踪配置文件,请从要更改跟踪配置文件的 WorkflowInstance 对象中调用 SetInstanceTrackingProfile 存储过程,然后调用 ReloadTrackingProfiles 方法。

2.7.DeleteInstanceTrackingProfile

删除给定工作流实例的跟踪配置文件。

DeleteInstanceTrackingProfile 存储过程不会从 SQL 跟踪数据库中删除跟踪配置文件,而只是解除跟踪配置文件与给定工作流实例之间的关联。

若要为运行中的工作流实例更新跟踪配置文件,请从要解除与跟踪配置文件关联的 WorkflowInstance 对象中调用 DeleteInstanceTrackingProfile 存储过程,然后调用 ReloadTrackingProfiles 方法。

2.8.GetCurrentDefaultTrackingProfile

检索 SqlTrackingService 使用的当前默认跟踪配置文件。当 SqlTrackingService 的 UseDefaultProfile 属性设置为“True”,且当工作流类型没有关联的 TrackingProfile 时,使用默认配置文件。

2.9.UpdateDefaultTrackingProfile

更新 SqlTrackingService 所使用的默认跟踪配置文件。 当 SqlTrackingService 的 UseDefaultProfile 属性设置为 true,并且工作流类型没有关联的 TrackingProfile 时,使用默认配置文件。

不能删除默认跟踪配置文件。要停止使用默认配置文件,请将 SqlTrackingService 的 UseDefaultProfile 属性设置为 false。

3.SQL 跟踪服务数据库角色

3.1.tracking_writer 
运行宿主进程的帐户应在此角色下运行。该角色具有检索跟踪配置文件和写入跟踪数据的权限。 
3.2.tracking_reader 
此角色中的帐户可以查看所有数据,但不能更新或修改数据。此角色中的用户也不能访问基础表。3.3.tracking_profilereaderwriter 
此角色适用于需要修改配置文件数据的用户帐户。


本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2008/11/21/WFTrackingDB.html,如需转载请自行联系原作者

相关文章
|
13天前
|
SQL Oracle 关系型数据库
sql语句创建数据库
在创建数据库之前,请确保你有足够的权限,并且已经考虑了数据库的安全性和性能需求。此外,不同的DBMS可能有特定的最佳实践和配置要求,因此建议查阅相关DBMS的官方文档以获取更详细和准确的信息。
|
24天前
|
SQL 安全 算法
【SQL server】玩转SQL server数据库:第四章 数据库安全性
【SQL server】玩转SQL server数据库:第四章 数据库安全性
65 12
|
24天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
97 6
|
1天前
|
SQL 数据库 Windows
sql数据库安装过程,SQL数据库的安装过
本文概述了安装SQL Server数据库的步骤:准备硬件和软件环境,运行安装程序,选择安装类型,接受许可协议,设定安装路径和组件,配置实例和服务账户,选择身份验证模式,配置其他设置,然后安装并完成。安装后需检查验证SQL Server是否正常工作。确保遵循步骤以顺利完成安装。
40 3
|
5天前
|
PHP 数据库
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务-2
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务
|
5天前
|
存储 PHP Apache
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务-1
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务
|
5天前
|
SQL 关系型数据库 MySQL
利用 SQL 注入识别数据库方法总结
利用 SQL 注入识别数据库方法总结
|
11天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
12天前
|
SQL 运维 数据库
sql数据库引擎失败
sql数据库引擎失败
|
13天前
|
SQL 缓存 数据库
sql 数据库优化
SQL数据库优化是一个复杂且关键的过程,涉及多个层面的技术和策略。以下是一些主要的优化建议: 查询语句优化: 避免全表扫描:在查询时,尽量使用索引来减少全表扫描,提高查询速度。 使用合适的子查询方式:子查询可能降低查询效率,但可以通过优化子查询的结构或使用连接(JOIN)替代子查询来提高性能。 简化查询语句:避免不必要的复杂查询,尽量使SQL语句简单明了。 使用EXISTS替代IN:在查询数据是否存在时,使用EXISTS通常比IN更快。 索引优化: 建立合适的索引:对于经常查询的列,如主键和外键,应创建相应的索引。同时,考虑使用覆盖索引来进一步提高性能。 避免过多的索引:虽然索引可以提高查询