管理事务 (XMLA)
每个发送到 MicrosoftSQL ServerAnalysis Services 实例的 XML for Analysis (XMLA) 命令在当前隐式或显式会话的事务上下文中运行。若要管理这些事务,则可使用 BeginTransaction、CommitTransaction 和 RollbackTransaction 命令。通过使用这些命令,可创建隐式或显式事务,更改事务引用计数以及启动、提交或回滚事务。
隐式和显式事务
事务可以是隐式的或显式的:
隐式事务
如果 BeginTransaction 命令未指定启动事务,则 Analysis Services 将为 XMLA 命令创建“隐式”事务。如果此命令成功,则 Analysis Services 将始终提交隐式事务,如果此命令失败,则将回滚隐式事务。显式事务
如果 BeginTransaction 命令启动事务,则 Analysis Services 将创建“显式”事务。但是,如果发送 CommitTransaction 命令,则 Analysis Services 仅提交显式事务,如果发送 RollbackTransaction 命令,则将回滚显式事务。
此外,如果在活动事务完成之前,当前事务结束,则 Analysis Services 将同时回滚隐式事务和显式事务。
事务和引用计数
Analysis Services 可继续每个会话的事务引用计数。但是,Analysis Services 不支持嵌套事务,因为仅为每个会话维持一个活动事务。如果当前会话没有活动事务,则事务引用计数将设置为零。
换言之,每个 BeginTransaction 命令使引用计数按 1 递增,而每个 CommitTransaction 命令使引用计数按 1 递减。如果 CommitTransaction 命令将事务计数设置为零,则 Analysis Services 将提交该事务。
但是,无论事务引用计数的当前值如何,RollbackTransaction 命令都将回滚活动事务。换言之,不管已发送多少 BeginTransaction 命令或 CommitTransaction 命令,单个 RollbackTransaction 命令都将回滚活动事务,并将事务引用计数设置为零。
启动事务
BeginTransaction 命令可在当前会话上开始显式事务,并按 1 递增当前会话的事务引用计数。所有后续命令都将视为位于活动事务中,直至发送足够的 CommitTransaction 命令来提交活动事务,或发送单个 RollbackTransaction 命令来回滚活动事务。
提交事务
CommitTransaction 命令可提交对当前会话运行 BeginTransaction 命令后运行的命令的结果。每个 CommitTransaction 命令都会减少会话上活动事务的引用计数。如果 CommitTransaction 命令将引用计数设置为零,则 Analysis Services 将提交活动事务。如果不存在活动事务(换言之,当前会话的事务引用计数已设置为零),则 CommitTransaction 命令将导致出错。
回滚事务
RollbackTransaction 命令可回滚对当前会话运行 BeginTransaction 命令后运行的命令的结果。无论当前事务引用计数如何,RollbackTransaction 命令都将回滚活动事务,并将事务引用计数设置为零。如果不存在活动事务(换言之,当前会话的事务引用计数已设置为零),则 RollbackTransaction 命令将导致出错。