持久性数据库架构
本主题介绍 SQL 工作流实例存储区支持的公共视图。
Instances 视图
Instances 视图包含有关数据库中所有工作流实例的常规信息。
列名 | 列类型 | 说明 |
---|---|---|
InstanceId | UniqueIdentifier | 工作流实例的 ID。 |
PendingTimer | DateTime | 指示工作流在延迟活动上发生阻塞,并将在计时器过期后恢复。 如果在等待计时器过期时工作流没有发生阻塞,则此值可以为 null。 |
CreationTime | DateTime | 指示创建工作流的时间。 |
LastUpdatedTime | DateTime | 指示将工作流持久化到数据库的最后时间。 |
ServiceDeploymentId | BigInt | 用作 [ServiceDeployments] 视图的外键。 如果当前工作流实例为 Web 承载的服务的实例,则此列具有一个值,否则将其设置为 NULL。 |
SuspensionExceptionName | Nvarchar(450) | 指示造成工作流挂起的异常的类型(如 InvalidOperationException)。 |
SuspensionReason | Nvarchar(max) | 指示将工作流实例挂起的原因。 如果某个异常造成实例挂起,则此列包含与该异常关联的消息。 如果该实例是手动挂起,则此列包含用户指定的挂起该实例的原因。 |
ActiveBookmarks | Nvarchar(max) | 如果工作流实例处于空闲状态,则此属性指示该实例是在哪个书签上发生阻塞的。 如果该实例没有处于空闲状态,则此列为 NULL。 |
CurrentMachine | Nvarchar(128) | 指示当前已将工作流实例加载到内存中的计算机的名称。 |
LastMachine | Nvarchar(450) | 指示最后加载工作流实例的计算机。 |
ExecutionStatus | Nvarchar(450) | 指示工作流的当前执行状态。 可能的状态包括 Executing、Idle 和 Closed。 |
IsInitialized | bit | 指示工作流实例是否已初始化。 已初始化的工作流实例是至少已持久化一次的工作流实例。 |
IsSuspended | bit | 指示工作流实例是否已挂起。 |
IsCompleted | bit | 指示工作流实例是否已执行完毕。 注意:当且仅当 InstanceCompletionAction 属性设置为 DeleteAll 时,才会在完成后从视图中移除实例。 |
EncodingOption | TinyInt | 描述用于序列化数据属性的编码。 - 0 – 无编码 - 1 – GzipStream |
ReadWritePrimitiveDataProperties | Varbinary(max) | 包含已序列化的实例数据属性,当加载实例时,这些属性将会重新提供给工作流运行时。 每个基元属性都是本机 CLR 类型,这意味着,对 Blob 进行反序列化不需要特殊程序集。 |
WriteOnlyPrimitiveDataProperties | Varbinary(max) | 包含已序列化的实例数据属性,当加载实例时,这些属性不会重新提供给工作流运行时。 每个基元属性都是本机 CLR 类型,这意味着,对 Blob 进行反序列化不需要特殊程序集。 |
ReadWriteComplexDataProperties | Varbinary(max) | 包含已序列化的实例数据属性,当加载实例时,这些属性将会重新提供给工作流运行时。 反序列化程序需要知道此 Blob 中存储的所有对象类型。 |
WriteOnlyComplexDataProperties | Varbinary(max) | 包含已序列化的实例数据属性,当加载实例时,这些属性不会重新提供给工作流运行时。 反序列化程序需要知道此 Blob 中存储的所有对象类型。 |
IdentityName | Nvarchar(max) | 工作流定义的名称。 |
IdentityPackage | Nvarchar(max) | 创建工作流时提供的包信息(例如,程序集名称)。 |
构建 | BigInt | 工作流版本的生成号。 |
主要 | BigInt | 工作流版本的主版本号。 |
次要 | BigInt | 工作流版本的次版本号。 |
修订 | BigInt | 工作流版本的修订号。 |
注意
Instances 视图还包含一个“删除”触发器。 具有适当权限的用户可以对此视图执行 Delete 语句,这将从数据库中强制移除工作流实例。 由于从工作流运行时的下面删除实例可能会导致意外的结果,所以,建议不到万不得已,不要直接从视图删除, 而应使用工作流实例管理终结点来使工作流运行时终止实例。 如果需要从视图中删除大量实例,请确保没有可能正在对这些实例进行操作的活动的运行时。
ServiceDeployments 视图
ServiceDeployments 视图包含所有 Web (IIS/WAS) 承载的工作流服务的部署信息。 每个 Web 承载的工作流实例将包含一个 ServiceDeploymentId,引用此视图中的一行。
列名 | 列类型 | 说明 |
---|---|---|
ServiceDeploymentId | BigInt | 此视图的主键。 |
SiteName | Nvarchar(max) | 表示包含工作流服务的站点名称(例如“默认网站”)。 |
RelativeServicePath | Nvarchar(max) | 表示相对于指向工作流服务的站点的虚拟路径 (例如 /app1/PurchaseOrderService.svc)。 |
RelativeApplicationPath | Nvarchar(max) | 表示相对于指向包含工作流服务的应用程序的站点的虚拟路径 (例如 /app1)。 |
ServiceName | Nvarchar(max) | 表示工作流服务的名称 (例如 PurchaseOrderService)。 |
ServiceNamespace | Nvarchar(max) | 表示工作流服务的命名空间 (例如 MyCompany)。 |
ServiceDeployments 视图还包含一个“删除”触发器。 具有适当权限的用户可以对此视图执行 Delete 语句,这将从数据库移除 ServiceDeployment 项。 请注意:
从此视图中删除项的开销很大,因为在执行此操作之前必须锁定整个数据库。 为了避免出现工作流实例可能引用一个不存在的 ServiceDeployment 项的情况,这是必需的。 请仅在停机期间/维护期间在此视图中进行删除操作。
任何删除由 Instances 视图中的项引用的 ServiceDeployment 行的尝试都将导致不执行任何操作。 仅可以删除没有任何引用的 ServiceDeployment 行。
InstancePromotedProperties 视图
InstancePromotedProperties 视图包含由用户指定的所有促销属性的信息。 促销属性用作一类属性,用户可以在查询中使用它来检索实例。 例如,用户可以添加 PurchaseOrder 促销,它始终会在 Value1 列中存储订单的成本。 这样用户可以查询所有成本超过某个值的购买订单。
列类型 | 列类型 | 说明 |
---|---|---|
InstanceId | UniqueIdentifier | 工作流实例的 ID |
EncodingOption | TinyInt | 描述用于序列化促销二进制属性的编码。 - 0 – 无编码 - 1 – GZipStream |
PromotionName | Nvarchar(400) | 与此实例关联的促销的名称。 需要 PromotionName 来在此行的一般列中添加上下文。 例如,PurchaseOrder 的 PromotionName 可能指示 Value1 包含订单成本,Value2 包含下订单的客户的名称,Value 3 包含客户地址,等等。 |
Value[1-32] | SqlVariant | Value[1-32] 包含可以在 SqlVariant 列中存储的值。 单次促销包含的 SqlVariant 不能超过 32 个。 |
Value[33-64] | Varbinary(max) | 值[33-64] 包含可序列化的值。例如 Value33 可能包含购买项的一个 JPEG。 单个促销包含的 SqlVariant 不能超过 32 个。 |
InstancePromotedProperties 视图与架构绑定在一起,这意味着,用户可以在一个列或多个列上添加索引,以便针对此视图优化查询。
注意
索引视图需要更大的存储空间,并增加额外的处理开销。 有关更多信息,请参考使用 SQL Server 2008 索引视图提高性能。