28 使用交易保护
交易警卫队 提供一个通用的工具,供应用程序在计划和计划外中断时使用,一旦执行一次就最好。应用程序使用逻辑事务ID来确定中断后在数据库会话中打开的上一个事务的提交结果。如果没有事务保护,试图在中断后重播操作的应用程序可能会通过执行重复事务而导致逻辑腐败。事务保护被应用程序连续性用于自动和透明的事务重放。
交易保护提供这些好处:
保留已提交或未提交的结果,以便能够依赖
确保每个事务都有已知的提交结果
可用于为希望重新提交自己的申请提供一次性最好的事务执行
被应用程序连续性用于自动和透明的事务重放
本章假设您熟悉使用事务保护的技术或产品环境的主要相关概念和技术。
专题:
另见:
甲骨文数据库JDBC开发人员指南 有关使用甲骨文Java数据库连接(JDBC)的事务保护的更多信息
甲骨文呼叫接口程序员指南 查询更多有关在OCI上使用交易保护的资料
28.1 事务保护解决的问题
在没有事务保护的应用程序中,在中断后恢复应用程序的一个基本问题是,发送给客户机的提交消息是不持久的。如果客户机和服务器之间有中断,则客户机会看到一个错误消息,显示通信失败。此错误不会通知应用程序是否执行了任何提交操作,如果已完成并执行了所有预期提交和会话状态的更改,或者如果呼叫失败部分通过或更糟糕的是仍然与客户端断开连接。
没有事务保护,在服务器通信失败后,以有保证和可伸缩的方式确定最后一次提交操作的结果是不可能或极其困难的。如果应用程序必须确定是否提交到数据库,则应用程序必须添加自定义异常代码,以查询应用程序中的每个可能提交点的结果。鉴于系统在任何地方都可能失败,这几乎是不切实际的,因为查询必须是针对每个提交的。在一个应用程序构建并投入生产之后,这是完全不切实际的。此外,查询不能给出正确的答案,因为事务可以在执行该查询之后立即提交。实际上,通信失败后,服务器可能仍在运行未意识到客户机已断开连接的提交文件。对于数据库中的LS/sql或Java,对于过程性提交,也没有记录显示该提交是否运行到完成或被部分终止。虽然这一程序可能已经完成,但随后的工作可能还没有完成。
如果不承认最后提交的文件已经提交,或者很快将提交,或者没有完成,就可能导致申请程序尝试重放,从而导致重复提交的交易和其他形式的"逻辑腐败",因为软件可能试图重新发布已经持续的更改。
没有事务保护,如果启动了事务并发布了提交,则发送给客户端的提交消息是不持久的。客户端不知道是否提交了事务。如果非事务状态不正确或已经提交,则无法有效地重新提交事务。在没有保证的提交和完成信息的情况下,重新提交可能导致不止一次的交易,并在一个会话中使用错误的状态。
28.2 事务保护提供的解决方案
与甲骨文数据库有效12 C 第1版(12.1.0.1),事务保护提供了新的集成工具,可供应用程序使用,以自动和透明的方式,并以规模化的方式实现等离子性。其主要特点如下:
持久性
COMMIT通过将所有支持的事务类型的逻辑事务标识符(LTXID)保存到数据库(甲骨文数据库12)上提交,从而实现结果。 C 释放1(12.1.0.1)或以后)。这包括使用自动提交执行的事务的有效性,包括从内(LS/SQL)、远程事务、单相xd事务和无法使用通用手段识别的调用。使用ltxid支持最多一次的执行语义,这样,当Ltxid标识的飞行中有多个事务副本时,就不能复制受逻辑事务标识符保护的数据库事务。
阻止在飞行中提交工作,以确保无论中断情况如何,受LTXID保护的同一事务的另一次提交都不能提交。
识别在LTXID上提交的工作是作为顶级调用(客户机对服务器)的一部分提交的,还是嵌入到服务器上的过程(例如LS/SQL)中的。嵌入式提交状态表示,虽然提交已完成,但执行提交的整个过程尚未运行到完成。任何超出提交的工作都不能保证已经完成,直到该过程本身返回到数据库引擎。
识别提交决议所指向的数据库是否在原始提交之前、同步或背后,当客户机事务提交顺序存在空白时,是否拒绝。如果服务器或客户机在LTXID序列上不同步,则试图获得结果被认为是错误。
JDBC瘦客户机驱动程序的回调,当LTXID更改时启动。这可以被更高层次的应用程序使用,如网络逻辑服务器和第三方,以维护当前的LTXID准备使用如果需要。
名称空间唯一性跨全球不同的数据库和跨数据库合并成一个多租户基础设施。这包括甲骨文实际应用集群(甲骨文RAC)和RAC1,数据保护和多租户数据库。
跨全局数据库和跨数据库的服务名称唯一性被合并到一个多租户基础结构。这确保连接正确地指向事务信息。
28.3 交易警卫概念和范围
本节解释了事务保护的一些关键概念,以及什么事务保护覆盖而不覆盖。
专题:
另见:
甲骨文数据库概念 查询有关交易保护如何工作的更多信息
甲骨文数据库JDBC开发人员指南 有关使用甲骨文Java数据库连接(JDBC)的事务保护的更多信息
28.3.1 逻辑事务标识符(LTXID)
应用程序使用一个叫做 逻辑事务标识符(LTXID) 确定中断后在数据库会话中打开的上一个事务的结果。逻辑事务ID存储在OCI会话句柄中,并存储在JDBCTLELY和ODP.NET驱动程序的连接对象中。逻辑事务ID是最普通语义的基础。
交易保护协议确保:
每个逻辑事务的执行是唯一的。
在支持的提交时间检测到重复,以确保所有提交点都不得规避协议。
当事务被提交时,逻辑事务ID将在重试的保留期持续(默认值为24小时,最长值为30天)。
在获得结果时,通过强制执行未提交状态,阻止Ltxid,以确保该Ltxid的早期飞行版本不能执行。如果具有相同Ltxid的早期版本已经提交或强制执行,那么阻塞Ltxid返回相同的结果。
逻辑会话号在会话设置时自动分配.它是一个不透明的结构,应用程序无法读取。为了可伸缩性,每个LTXID都携带一个运行号,称为提交号,当每次数据库运行到数据库的循环访问都提交数据库事务时,这个数字就会增加。这个运行的提交数是零基的。
28.3.2 最多一次的死刑
事务保护程序使用逻辑事务标识符(LTXID)来避免重复事务。这种确保交易至多一次执行的能力称为: 交易等离子 .LTXID在提交时保持不变,并在回滚后重用。在正常运行时,每个数据库事务的客户机和服务器都自动在会话中保存LTXID。在提交时,LTXID作为执行事务的一部分持续存在。
最简单的协议要求数据库在同意重播的保留期内维护LTXID。默认的保留期为24小时,尽管您可能需要一个更短或更长的时间,甚至可能是一周或更长的时间。保留期越长,使用旧的LTXID从重播中阻止旧的事务的时间越长。每个服务上都有设置。当涉及多个数据库时,就像使用数据保护和主动数据保护一样,通过使用重做将LTXID复制到所涉及的每个数据库。
…getLTXID API提供给甲骨文JDBCSLEE(对于OCI、OCCI和ODP.NET客户端有类似的API),让应用程序检索死会话上使用的逻辑事务标识符。这是确定最后一个事务的状态所必需的。
…DBMS_APP_CONT.GET_LTXID_OUTCOME pl/sql子程序允许应用程序找到指定逻辑事务标识符的操作结果。召唤DBMS_APP_CONT.GET_LTXID_OUTCOME 可能会涉及到服务器阻止LTXID的实施,以便知道结果。如果使用LTXID的事务正在飞行或即将提交,则需要满足此要求。使用事务保护的应用程序在出现可恢复错误后获得LTXID,然后调用DBMS_APP_CONT.GET_LTXID_OUTCOME 在尝试重播之前。
另见:
甲骨文数据库特等/SQL包和类型引用 欲知更多有关DBMS_APP_CONT.GET_LTXID_OUTCOME 个人语言/SQL子程序
28.3.3 交易警卫掩护
您可以在系统中的每个数据库中使用事务保护,包括在单个实例数据库、实际应用程序集群、数据保护和活动数据保护之间重新启动和失败。
通过以下甲骨文数据库12C配置支持交易守护:
单实例甲骨文数据库管理系统
实际应用集群
数据保护
主动数据保护
多租户,包括拔插/拔插和12.2跨PDB/CDB重新定位,但不包括"带克隆"选项
上述数据库配置的全球数据服务
交易保护支持以下针对甲骨文数据库12c的事务类型:
当地交易
数据定义语言事务
数据控制语言事务
分布式交易
远程事务
并行交易
承诺成功(自动承诺)
具有嵌入式佣金支持的客户机驱动程序的个人语言/SQL
从甲骨文数据库12C版本2(12.2.0.1)开始,使用一个阶段优化(包括xa提交标志Tmns)和读优化(12.2.0.1)的xa事务
ALTER SESSION SET包含服务条款的容器,服务使用事务保护
事务保护支持下列客户驱动程序:
12 C JDBC4型驱动程序
12 C OCI和OCCI客户驱动程序
12 C 甲骨文数据提供器。非托管驱动程序
12 C 办公室管理驱动程序网络 C 第4版或以上
28.3.4 交易保护
从甲骨文数据库12.2发布开始,事务保护支持xd事务,以确定一个阶段事务的结果。事务保护支持本地事务和在此期间使用特莫赛克的事务。commit 手术。当应用程序发出一个使用TMTWOPHASE ,事务保护程序为该事务禁用自己,并自动重新启用以准备下一个事务。这使事务保护可以支持以下的x事务:
使用的本地交易
autocommit使用显式的本地交易
commit进行XA交易
TMONEPHASE旗
tp监控器和应用程序可以使用事务保护来获得commit 这些事务类型的操作。事务保护程序为外部管理而禁用自己TMTWOPHASE 为下一个事务交付操作并自动重新启用。如果事务保护API与TMTWOPHASE 事务处理时,将在禁用事务保护时返回警告消息。Tp监视器拥有提交结果TMTWOPHASE 交易。这个功能允许TP监视器返回明确的结果TMONEPHASE 手术。
28.3.5 交易警卫队
事务保护故意排除递归事务和自主事务,以便它们可以重新执行。
截至甲骨文数据库12 C 第2版,交易保护也不包括:
两个阶段的xa事务由外部管理。事务保护程序在使用xa事务时,维护了用于单相xb事务的提交结果,并对外部管理的双阶段事务进行了无声的禁用,因为该结果由tp监视器所有。
为转发事务提供读写数据库链接的主动数据保护
在逻辑数据库中故障时用于确定结果的金门和逻辑备用。金门和逻辑备用端点可以使用事务保护
启用事务保护不能执行完整的数据库导入.使用没有事务保护的管理服务进行完整的数据库导入。不排除用户和对象的导入。
TAF和应用程序连续性处理事务保护内部。请不要在下列地方为你的应用程序设置交易防护码:
从TAF回来的失败
TAF对TAF的回调或OCI和ODP.NET的应用连续性
JDBC用于Java应用程序连续性的初始化回调
事务保护不包括通过复制技术维护的数据库之间的故障转移:
复制到金门
复制到逻辑备用
pdb克隆条款(不包括pdb在线迁移12c第2版及以后)
所有第三方复制解决方案
如果您正在使用任何复制技术使用数据库副本,例如金门、逻辑备用或第三方复制,则在此配置中,您可能不会在主数据库和次数据库之间使用事务保护。
您可以在参与复制的每个数据库中使用事务保护。在这种情况下,每个数据库必须使用不同的数据库唯一标识符。使用V$数据库获得每个数据库的D.
28.4 事务保护的数据库配置
本节包含与配置数据库以使用事务保护有关的信息。
专题:
28.4.1 配置核对表
要在应用程序中使用事务保护,必须做以下工作:
使用甲骨文数据库12 C Release 1 (12.1.0.1) or later.
对所有数据库工作使用应用程序服务。使用
srvctl如果您正在使用甲骨文RAC,或使用DBMS_SERVICE.CREATE_SERVICE如果您不使用甲骨文RAC,请使用pl/sql子程序。做 不 使用默认数据库服务,因为这些服务是为了管理目的,不能进行操纵。也就是说,不要使用设置为 名称 或 名称 .
准许在
DBMS_APP_CONT给数据库用户的包GET_LTXID_OUTCOME:在dbms_app_ 用户名称&t; ;
增加
DDL_LOCK_TIMEOUT如果使用事务保护与DDL语句。.
为了在应用程序中使用事务保护,甲骨文建议您做以下工作:
找到并定义最佳性能的事务历史表。
如果您正在使用甲骨文RAC或甲骨文数据保护,请确保将风扇配置为通信,以便在错误时快速中断客户端。
设置下列参数:
AQ_HA_NOTIFICATIONS = TRUE(如使用OCI风扇)。
另见:
28.4.2 成交历史表
事务历史表维护逻辑事务标识符(LTxiDS)映射到数据库事务。此表只能由具有DBA权限的数据库用户访问。它由甲骨文数据库自动维护,用户不得直接根据事务历史表发布DDL或DML语句。
事务历史表(ltxid_tran)是在数据库创建和升级时默认在SYsaol表空间中创建的。当添加实例时,使用最后一个分区的存储添加新的分区。但是,如果此表空间的位置对性能不理想,DBA可以将分区移动到另一个表空间。例如,下面的语句改变事务历史表,将其移动到命名的表空间FastPace :
更改表Ltxidd_tran移动分区Ltxidd 平板空间快速空间 储存(最初10克,下10克 minextents 1 maxextents 121 );
另见:
甲骨文数据库SQL语言参考 如欲查询有关
ALTER TABLE陈述书
28.4.3 服务参数
配置用于提交结果和保留的服务。
例如:
承诺_结果=真实 保留_暂停= 保留价值&t;
COMMIT_OUTCOME 确定事务提交结果在提交执行后是否可访问.这个特性使提交的结果具有持久性,应用程序使用它强制执行中断前执行的最后一个事务的状态。该特性由甲骨文重播驱动程序和网络逻辑服务器内部使用,并可供其他应用程序使用以确定结果。…COMMIT_OUTCOME 可能的价值是FALSE (默认)和TRUE ,价值必须是TRUE 使交易保护生效。
下列考虑因素适用于COMMIT_OUTCOME :
使用
DBMS_APP_CONT.GET_LTXID_OUTCOME程序要求COMMIT_OUTCOME成为TRUE.COMMIT_OUTCOME对主动数据保护和只读数据库没有影响。使用具有读写活动数据保护的事务保护和不支持转发dml的数据库链接。COMMIT_OUTCOME允许使用用户定义的数据库服务。不包括数据库服务的使用,因为该服务不跨数据保护系统切换,并且不能启动、停止或禁用主数据库的计划中断。
RETENTION_TIMEOUT 与…结合使用COMMIT_OUTCOME 设定提交结果保留的时间。保留超时值以秒为单位指定;默认值为86400(24小时),最大值为2592000(30天)。你可以使用srvctl命令DBMS_SERVICE 请指定保留超时值。
另见:
甲骨文数据库管理员指南 如欲查询有关
srvctl add service和srvctl modify service命令甲骨文数据库特等/SQL包和类型引用 如欲查询有关
DBMS_SERVICE包裹。甲骨文数据库特等/SQL包和类型引用 欲知更多有关
DBMS_APP_CONT.GET_LTXID_OUTCOME程序
28.4.3.1 示例:为服务器池添加和修改服务
如果你使用甲骨文或甲骨文,那么使用srvctl 命令创建和修改服务.
例28-1 显示出srvctl .您还可以使用全局数据服务。
增加和修改服务器池服务
SRvctl附加服务-数据库或cl-服务黄金-游泳池名称-服务成果-保留604800 SRvctl修改服务.数据库OCL.服务黄金.委托_结果真实保留604800
28.4.3.2 示例:添加管理管理服务
如果你使用甲骨文或甲骨文,那么使用srvctl 命令创建和修改服务.
例28-2 显示出srvctl .您还可以使用全局数据服务(gdsctl)
例28-2增加管理人员管理的服务
SRvctl添加服务.数据库CODEB.服务黄金.首选服务1.可用服务2.有效结果.保留604800
28.4.3.3 示例:修改服务(特等/SQL)
如果您正在使用一个单实例数据库,请使用DBMS_SERVICE.MODIFY_SERVICE 程序来修改服务和使用风扇。
例28-3 修改服务(但将实际服务名替换为<service-name> ).
示例28-3修改服务(特等/SQL)
DECLARE params dbms_service.svc_parameter_array; BEGIN params('COMMIT_OUTCOME'):='true'; params('RETENTION_TIMEOUT'):=604800; params('aq_ha_notifications'):='true'; dbms_service.modify_service('<service-name>',params); END; /
28.5 开发使用交易保护的应用程序
若要使用交易保护机制,请查阅 配置核对表 ,并在发生可恢复错误时按以下步骤处理错误:
注:
如果你在使用TAF,跳过 事务保护和透明应用程序故障转移 .- 检查错误是否是使数据库会话不可用的可恢复错误.
- 使用提供的API(
getLTXIDfor JDBC,OCI_ATTR_GET有OCI的LTXID,及LogicalTransactionId)。 - 获得一个新的会议与该届会议自己的LTXID。
- 援引
DBMS_APP_CONT.GET_LTXID_OUTCOME使用从API获得的ltxid的pl/sql过程。返回状态告诉驱动程序最后一个事务是不是COMMITTED (TRUE/FALSE)和USER_CALL_COMPLETED (TRUE/FALSE).如果客户机和数据库不同步(例如,不相同的数据库或恢复的数据库),则此p/sql函数返回错误。 - 应用程序可以将结果返回给用户来决定.一个应用程序可以重放。如果重播本身发生故障,那么重播的LTXID将用于
DBMS_APP_CONT.GET_LTXID_OUTCOME程序。
28.5.1 典型事务保护使用
下面的伪代码显示了事务保护的典型用法:
接收风扇向下事件(或可恢复错误) 范中止了死亡会话 如果出现可恢复错误(OCI的新OCI值,JDBC的可恢复值) 从你的回调中得到最后的LTXID 获得一个新的会议 用最后一个Ltxid来获得提交状态和用户完成状态 如果提交和使用者 结果是 已提交但未使用者 然后带警告返回结果(例如没有返回绑定或行计数等细节) 如果没有 清理并重新提交请求,或将未提交结果返回客户端
28.5.2 使用Ltxid的详情
为了重播和返回结果,应用程序或第三方容器需要访问每个会话在服务器上提交的下一个LTXID。可使用原料药(getLTXID JDBC和OCI_ATTR_GET 在一个可恢复的中断之后,一个失败的会话(OCI)使用LTXID。
JDBC瘦驱动程序还提供了一个回调,该回调对从数据库收到的每个提交号更改执行。如果需要故障转移,第三方容器可以使用此回调保存当前的LTXID准备使用。在每个会话中,当前的ltxid都在使用,因此回调可以覆盖以前的回调。
如果失败级联没有完成(也就是说,在从一个失败中恢复的过程中,会发生另一个失败),应用程序 必须 获得并通过当前阶段有效的LTXIDGET_LTXID_OUTCOME .
表28-1 显示需要一些与LTXID相关的操作的几个条件或情况,对于每个应用程序操作和下一个LTXID使用。
表28-1LTXID条件或情况、申请行动和下一步使用
| 情况或情况 | 申请行动 | 下一步使用LTXID(容器LTXID更改上的回调-JDBC仅限) |
|---|---|---|
应用程序接收可恢复错误和调用 | 应用程序需要一个新的连接(有自己的LTXIDB0)和调用 | 新的LTXIDB0 在注册时也使用JDBC回调设置 |
应用程序发现最后一个会话事务状态是 | 向客户端返回提交状态;应用程序可能会继续。 | (不适用) |
应用程序发现最后一个会话事务状态是 | 向客户机返回提交状态并退出--由于调用中的工作不完整,一些应用程序无法进展。(例如,没有返回输出绑定或行计数)。应用程序能否继续取决于应用程序。 | (不适用) |
应用程序发现最后一个会话事务状态是 | 应用程序将结果返回给用户,或在需要时进行清理,并在新会话上重新提交LTXID,LTXIDB0。 如果新请求执行任何提交,则服务器返回使用Ltxid-b2并增加的提交消息。 | New LTXID-B 2 .. N 在注册时也使用JDBC回调设置 |
如果应用程序决定重放,则会收到一个可恢复的错误。 | 应用程序需要一个新的连接(与LTXIDC0)和调用 | 关于新的课程。 在注册时也使用JDBC回调设置 |
如果应用程序决定重放,则收到另一个可恢复错误。 | 应用程序需要一个新的连接(与LTXIDD0)和调用 | 关于新的一节。 在注册时也使用JDBC回调设置 |
28.5.3 事务保护和透明应用程序故障转移
当透明应用程序故障转移(TAF)与事务保护启用时,TAF为开发人员处理错误。当您使用TAF时,不要对事务保护进行代码编码,因为它嵌入了从甲骨文数据库开始的事务保护代码 C 释放1(12.1.0.1)。当使用TAF和事务保护时,开发人员可以使用下面的TAF错误回滚并安全地重新提交,或返回未提交。
ORA-25402ORA-25408ORA-25405
开发者不得使用GET_LTXID_OUTCOME 在启用TAF时,直接操作,因为TAF已经在处理事务保护。
注:
在会话失败时不调用TAF(这包括操作系统级别上的"SERT-9",或ALTER SYSTEM KILL 会议)。根据下列条件援引TAF:
INSTANCE失败FAN NODE DOWN事件SHUTDOWN交易的断绝联系
POST_TRANSACTION
28.5.4 使用OP.NET交易保护
以下规则适用于使用ODP.NET交易保护:
LTXID在向开发机构推广后无法在两个组织网提供商中使用。
从甲骨文数据库12C版本2(12.2.0.1)开始,ODP.NET根据其可用性和处理能力处理事务保护。当使用ODP.NET时,LTXID只在ODP.NET无法代表应用程序获得提交结果时才暴露在应用程序中。例如,在数据保护的扩展故障转移期间。
开发人员不得在TAF回调或JDBC初始化回调中编码事务保护。交易保护为您处理.
28.5.5 连接池LTXID用法
连接池为管理LTxiDS创建了一个不同的用例,因为连接和会话是预先建立和共享的。在最简单的连接池和中间层模型中,每个会话句柄(客户端会话)上都存在一个LTXID。它在连接池签出时与应用程序请求相关联,并在签回池时与应用程序请求分离。在签出和签入之间,会话上的LTXID完全由该应用程序请求持有。入住后,LTXID属于一个闲置的集合会话。它与检查该连接的下一个应用程序请求相关联。
以这种方式使用事务保护:
可以支持当前http请求的重复检测和故障转移
允许取消(真实)
Cancel操作性的 Ctrl-c )终止申请,申请人可选择重新提交申请
28.5.6 改进了xa第一阶段优化的提交结果
从甲骨文数据库开始12 C 第2版(12.2.0.1),事务保护与事务处理监视器(TPM)一起使用,以确定在使用单阶段优化时提交操作的结果。事务保护程序使用GET_LTXID_OUTCOME 帮助TPM确定与资源管理器的连接是否丢失或是否返回了一个模糊错误。
表28-2交易经理的条件/情况和行动
| 情况或情况 | 交易经理的行动 |
|---|---|
| 事务经理返回A |
| 事务管理器可以使用事务保护(XML)来确定错误恢复时的结果。 |
如果交易是 | 事务经理申报表 |
如果交易是 | 事务管理器借用一个新连接并重新发布 |
28.5.7 交易保障发展的额外要求
事务保护是开发人员在可恢复错误后使用的工具,以提供已知的结果。必须在返回表明最后一个会话已经死亡的错误时使用它。
事务保护API必须 不 用于下列情况:
不可使用
GET_LTXID_OUTCOME关于本届会议。它会返回一个错误。不可使用
GET_LTXID_OUTCOME在未收到可恢复错误的会话(即实时会话)上运行。它将阻止会议的进行。不可使用
GET_LTXID_OUTCOME从不同的用户或者数据库。它会返回一个错误。不要获得LTXID,并保存以后使用,而不是立即使用它。的结果
GET_LTXID_OUTCOME只对最后一个打开或完成的事务有效。如果它用于同一会话上的早期事务,它将返回错误。如果应用程序使用TAF,则不要对事务保护进行代码编码。使用新的TAF错误代码来返回结果。
注:
此规则不适用于应用程序的连续性。
另见:
事务保护和透明应用程序故障转移 查询更多有关TAF的资料
28.6 交易保护及其与应用程序连续性的关系
事务保护程序为每个数据库事务提供唯一的标识符(LTXID)。这个标识符可以用来查询事务的提交结果,也可以用来确保事务只应用一次。事务保护程序由应用程序连续性使用并自动启用,但也可以独立启用。事务保护防止被应用程序连续性重放的事务被多次应用。如果应用程序已经实现了应用程序级别的重放,那么它需要将应用程序与事务保护集成以提供有效性。
对于不需要编码的解决方案,请将应用程序配置为使用应用程序连续性。对于开发自己的重播,应用程序开发人员使用事务保护代码。您可以同时为事务保护和应用程序连续性编写应用程序编码。应用程序连续性首先生效,而自定义事务保护代码只有在应用程序连续性无法重放时才生效。不需要使用两者,但如果应用程序同时使用事务保护和应用程序连续性,则它们是兼容的。如果应用程序希望在应用程序连续性之外添加事务保护API,则事务保护可以在重播被禁用或不成功时返回提交结果。




