使用 Oracle 数据库适配器接收数据库更改通知的注意事项

本主题提供了在使用 Oracle 数据库适配器接收来自 Oracle 数据库的数据库通知时必须记住的一些注意事项和最佳做法。

使用适配器接收通知时的注意事项

使用 Oracle 数据库适配器接收查询通知时,必须考虑以下事项。

  • Oracle 数据库适配器只是将通知(它从 Oracle 数据库接收)传递给适配器客户端。 适配器不区分不同操作的通知,即适配器没有任何信息,无论特定通知是用于插入操作还是更新操作。

  • 操作的通知消息不受该操作影响的记录数的影响。 例如,无论在 Oracle 数据库表中插入的记录数如何,适配器客户端只接收一条通知消息。

  • 建议适配器客户端应用程序包含逻辑,以解释从 Oracle 数据库接收的通知类型。 适配器客户端应用程序可以通过提取收到的通知消息的 <Info> 元素中的信息来执行此操作。 下面是为插入操作收到的通知消息的示例。

    <?xml version="1.0" encoding="utf-8" ?>   
    <Notification xmlns="http://Microsoft.LobServices.OracleDB/2007/03/Notification/">  
      <Details>  
        <NotificationDetails>  
          <ResourceName>SCOTT.ACCOUNTACTIVITY</ResourceName>   
          <Info>1</Info>   
          <QueryId>0</QueryId>   
        </NotificationDetails>  
      </Details>  
      <Info>Insert</Info>   
      <ResourceNames>  
        <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">SCOTT.ACCOUNTACTIVITY</string>   
      </ResourceNames>  
      <Source>Data</Source>   
      <Type>Change</Type>   
    </Notification>  
    
    

    请注意 Info> 元素中的<值。 此值提供有关接收通知消息的操作的信息。 应用程序应具有提取 Info> 元素中的<值的功能,然后根据值执行后续任务。 在 Oracle 数据库中处理通知消息以完成特定任务的主题包含有关如何提取 Info> 元素中的<值的说明。

  • 理想情况下,在客户端应用程序收到通知后,它应更新已接收通知的记录,以便后续通知不针对同一记录。 例如,假设有一个具有“已处理”列的 ACCOUNTACTIVITY 表。 对于插入 ACCOUNTACTIVITY 表的所有新记录, “已处理 ”列中的值始终为“n”。 例如,执行插入操作后, ACCOUNTACTIVITY 表中的记录将如下所示:

    帐户事务 ID 已处理
    10001 n

    若要获取新插入记录的通知,适配器客户端会将 NotificationStatement 绑定属性设置为:

    SELECT * FROM SCOTT.ACCOUNTACTIVITY WHERE PROCESSED = ‘n’  
    

    收到通知后,客户端应用程序必须将 “已处理 ”列的值设置为“y”,以便通知语句不会对已通知的记录进行操作。 因此,若要实现此目的,客户端应用程序必须对 ACCOUNTACTIVITY 表执行 Update 操作。 完成 Update 操作后, ACCOUNTACTIVITY 表中的相同记录将如下所示:

    帐户事务 ID 已处理
    10001 y

    有趣的是,更新操作将再次向适配器客户端发送通知,整个过程将再次重复。 因此,客户端应用程序必须具有所需的逻辑才能放弃此类不需要的通知。

  • 如果 NotifyOnListenerStart 绑定属性为 true,则每次启动接收位置时,适配器都会向适配器客户端发送通知。 有关如何使用绑定属性和解释通知消息的详细信息,请参阅 在接收位置明细后接收 Oracle 数据库更改通知

用于接收通知的典型业务流程

本部分概述了使用 Oracle 数据库适配器接收通知的典型业务流程。

  1. 业务流程必须做的第一件事是检查收到的通知类型。 要检查的事项包括:

    • 是否收到接收位置重启通知。

    • 是否为数据库表上的操作(如 Insert、Update 或 Delete)收到通知。

      业务流程必须包含 表达式 形状,并在该 xpath 查询中确定接收的消息类型。

  2. 通知类型可用后,业务流程必须包含决策块,以便根据收到的通知类型执行特定操作。 为此,业务流程必须包含 “决定 ”形状。 “决定”形状由一个规则块和一个 Else 块组成。 在 Rule 块中,必须指定条件,然后包括业务流程形状,以在满足条件时执行某些操作。 在 Else 块中,如果 条件不 满足,则必须包含业务流程形状以执行某些操作。

    使用 BizTalk Server 处理通知消息以完成 Oracle 数据库中的特定任务中详细介绍了上述建议。

另请参阅

使用 BizTalk Server 接收 Oracle 数据库更改通知