管理事务 (XMLA)

每个发送到 MicrosoftSQL ServerAnalysis Services 实例的 XML for Analysis (XMLA) 命令在当前隐式或显式会话的事务上下文中运行。若要管理这些事务,则可使用 BeginTransactionCommitTransactionRollbackTransaction 命令。通过使用这些命令,可创建隐式或显式事务,更改事务引用计数以及启动、提交或回滚事务。

隐式和显式事务

事务可以是隐式的或显式的:

  • 隐式事务
    如果 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 命令将导致出错。