使用 BizTalk Server 对 Oracle 数据库中具有 BFILE 数据类型的表运行操作

Oracle 数据库适配器支持表和存储过程中的 BFILE 数据类型。 本部分介绍如何对具有 BFILE 数据类型列的表执行操作。 有关 Oracle 数据库适配器如何支持 BFILE 的详细信息,请参阅 对 Oracle 数据库中具有 BFILE 数据类型的表的操作

为 BFILE 上的操作设置 Oracle 数据库服务器

本部分演示如何调用将记录插入 SCOTT 的过程。CUSTOMERDOC 表。 此表包含 BFILE 数据类型的列,通过运行 BizTalk 适配器包示例随附的 SQL 脚本来创建。 若要详细了解示例和 SQL 脚本,请参阅 Oracle 数据库适配器的示例

运行脚本以创建 CUSTOMERDOC 表后,必须在运行 Oracle 数据库的计算机上执行某些操作,以便对 BFILE 数据类型启用操作。 必须在 Oracle 数据库上执行的任务包括:

  1. 在运行 Oracle 数据库的计算机上创建目录 C:\MYDIR。

  2. 在 Oracle 数据库中创建逻辑目录。 这通常需要具有 SYSDBA 权限的用户。 例如:

    CREATE OR REPLACE DIRECTORY MYDIR AS 'C:\MYDIR';  
    
  3. 为用户访问 Oracle 中的逻辑目录添加权限。 例如:

    GRANT READ, WRITE ON DIRECTORY MYDIR to SCOTT;  
    
  4. 将要访问的文件复制到运行 Oracle 数据库的计算机上与 Oracle 中的逻辑目录关联的物理目录位置。 已在步骤 1 中创建此目录。

    根据上面的示例,将文件、customer_profile.txt 复制到目录 C:\MYDIR 中。 此文件现在可用于 BFILE 操作。 有关执行操作的详细信息,请参阅使用 Oracle Database 中的BizTalk Server对具有大型对象类型数据的表执行操作

    重要

    具有 BFILE 数据类型的表支持 ReadLOB 操作。 不支持 UpdateLOB 操作。 但是,用户可以交替使用 UPDATE 操作。

如何使用 BFILE 数据类型执行操作

使用带 BizTalk Server 的 Oracle 数据库适配器对 Oracle 数据库执行操作涉及构建基块以使用 Oracle 数据库开发 BizTalk 应用程序中所述的过程性任务。 调用将记录插入 SCOTT 的过程。CUSTOMERDOC 表,这些任务包括:

  1. 创建 BizTalk 项目并为CREATE_CUSTOMERDOC存储过程生成架构。

  2. 在 BizTalk 项目中创建消息,以便从 Oracle 数据库发送和接收消息。

  3. 创建业务流程以调用 Oracle 数据库表或视图上的操作。

  4. 生成并部署 BizTalk 项目。

  5. 通过创建物理发送和接收端口配置 BizTalk 应用程序。

  6. 启动 BizTalk 应用程序。

    本主题提供有关执行这些任务的说明。

基于本主题的示例

BizTalk 适配器包还提供了基于本主题的示例Operate_BFILE。 有关详细信息,请参阅 Oracle 数据库适配器的示例

生成架构

在本主题中,为了演示如何对具有 BFILE 列的表执行操作,我们将调用 CREATE_CUSTOMERDOC 过程。 此过程是通过运行随示例提供的 SQL 脚本在 SCOTT\Package\ACCOUNT_PKG 架构下创建的。 此过程采用 BFILE 记录类型,并在 CUSTOMERDOC 表中添加记录。 有关 SQL 脚本的详细信息,请参阅 架构示例

有关如何生成架构的详细信息,请参阅 在 Visual Studio 中检索 Oracle 操作的元数据

定义消息和消息类型

前面生成的架构描述了业务流程中的消息所需的“类型”。 消息通常是一个变量,其类型由相应的架构定义。 必须将第一步中生成的架构链接到 BizTalk 项目的“业务流程视图”窗口中的消息。

对于本主题,必须创建两条消息-一个用于向 Oracle 数据库发送请求,另一个用于接收响应。

执行以下步骤来创建消息并将其链接到架构。

  1. 打开 BizTalk 项目的“业务流程视图”窗口(如果尚未打开该窗口)。 为此,请单击“ 视图”,指向 “其他窗口”,然后单击“ 业务流程视图”。

  2. 在“业务流程视图”中,右键单击“ 消息”,然后单击“ 新建消息”。

  3. 右键单击新创建的消息,然后选择“ 属性窗口”。

  4. Message_1的“属性”窗格中,执行以下操作:

    使用此选项 要执行此操作
    标识符 键入 “请求”。
    消息类型 从下拉列表中展开“ 架构”,然后选择 “BFILE_Operations.OracleDBBindingSchema.CREATE_CUSTOMERDOC”,其中 BFILE_Operations 是 BizTalk 项目的名称。 OracleDBBindingSchema 是为CREATE_CUSTOMERDOC过程生成的架构。
  5. 重复步骤 2 以创建新消息。 在新邮件的“ 属性 ”窗格中,执行以下操作:

    使用此选项 要执行此操作
    标识符 键入 Response
    消息类型 从下拉列表中展开“ 架构”,然后选择“ BFILE_Operations.OracleDBBindingSchema.CREATE_CUSTOMERDOCResponse”。

设置业务流程

必须创建 BizTalk 业务流程才能使用 BizTalk Server 来执行过程。 在此业务流程中,会在定义的接收位置放置请求消息。 Oracle 数据库适配器使用此消息,并通过 ODP 将其传递到 Oracle 数据库。 来自 Oracle 数据库的响应将保存到另一个位置。 用于对 Oracle 数据库表中的 BFILE 列执行操作的典型业务流程将包含:

  • 发送和接收形状,用于将消息发送到 Oracle 数据库并接收响应。

  • 单向接收端口,用于接收要发送到 Oracle 数据库的请求消息。

  • 用于将请求消息发送到 Oracle 数据库和接收响应的双向发送端口。

  • 用于将响应从 Oracle 数据库发送到文件夹的单向发送端口。

    示例业务流程如下所示:

    使用 BFILE 执行操作的业务流程

添加消息形状

请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是刚才提到的业务流程中显示的消息形状的名称。

形状 形状类型 属性
ReceiveMessage 接收 - 将 Name 设置为 ReceiveMessage
- 将 “激活” 设置为 “True”
SendMessage 发送 - 将 “名称” 设置为 SendMessage
ReceiveResponse 接收 - 将 Name 设置为 ReceiveResponse
- 将 “激活” 设置为 “False”
SendResponse 发送 - 将 Name 设置为 SendResponse

添加端口

请确保为每个逻辑端口指定以下属性。 “端口”列中列出的名称是业务流程中显示的端口名称。

端口 属性
FileIn - 将 标识符 设置为 FileIn
- 将 Type 设置为 FileInType
- 将 通信模式 设置为 单向
- 将 通信方向 设置为 接收
LOBPort - 将 标识符 设置为 LOBPort
- 将 Type 设置为 LOBPortType
- 将 通信模式 设置为 请求-响应
- 将 “通信方向 ”设置为 “发送-接收”
SaveResponse - 将 标识符 设置为 SaveResponse
- 将 Type 设置为 SaveResponseType
- 将 通信模式 设置为 单向
- 将“通信方向”设置为“发送

指定操作形状的消息,并将其连接到端口

下表指定应设置的属性及其值,以便为操作形状指定消息并将消息链接到端口。 Shape 列中列出的名称是前面提到的业务流程中显示的消息形状的名称。

形状 属性
ReceiveMessage - 将 消息 设置为 请求
- 将 “操作 ”设置为 “FileIn.Create_BFILE”。请求
SendMessage - 将 消息 设置为 请求
- 将 “操作 ”设置为 “LOBPort.Create_BFILE”。请求
ReceiveResponse - 将 消息 设置为 响应
- 将 “操作 ”设置为 “LOBPort.Create_BFILE”。响应
SendResponse - 将 消息 设置为 响应
- 将 “操作 ”设置为 “SaveResponse.Create_BFILE”。请求

指定这些属性后,消息形状和端口将连接,并且业务流程完成。

现在,必须生成 BizTalk 解决方案并将其部署到BizTalk Server。 有关详细信息,请参阅 生成和运行业务流程

配置 BizTalk 应用程序

部署 BizTalk 项目后,前面创建的业务流程将列在 BizTalk Server 管理控制台的“业务流程”窗格下。 必须使用 BizTalk Server 管理控制台来配置应用程序。 有关演练,请参阅 演练:部署基本 BizTalk 应用程序

配置应用程序涉及:

  • 为应用程序选择主机。

  • 将业务流程中创建的端口映射到 BizTalk Server 管理控制台中的物理端口。 对于此业务流程,必须:

    • 定义硬盘上的位置和相应的文件端口,你将在其中删除请求消息。 BizTalk 业务流程将使用请求消息并将其发送到 Oracle 数据库。

    • 定义硬盘上的位置和相应的文件端口,BizTalk 业务流程将在其中删除包含 Oracle 数据库的响应的响应消息。

    • 定义物理 WCF-Custom 或 WCF-OracleDB 发送端口以将消息发送到 Oracle 数据库。 还必须在发送端口中指定操作。 有关如何创建 WCF-Custom 或 WCF-OracleDB 端口的信息,请参阅 手动配置到 Oracle 数据库适配器的物理端口绑定

      注意

      使用使用适配器服务 BizTalk 项目加载项生成架构还会创建一个绑定文件,其中包含有关端口的信息以及要为这些端口设置的操作。 可以从 BizTalk Server 管理控制台导入此绑定文件,为出站呼叫创建发送端口 () ,或接收入站呼叫) 的端口 (。 有关详细信息,请参阅 使用到 Oracle 数据库的端口绑定文件配置物理端口绑定

启动应用程序

必须启动 BizTalk 应用程序以调用在 CUSTOMERDOC 表中创建记录的过程。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程

在此阶段,请确保:

  • 用于接收业务流程请求消息的 FILE 接收端口正在运行。

  • 用于从业务流程接收响应消息的 FILE 发送端口正在运行。

  • 用于将消息发送到 Oracle 数据库的 WCF-Custom 或 WCF-OracleDB 发送端口正在运行。

  • 操作的 BizTalk 业务流程正在运行。

执行操作

运行应用程序后,必须将请求消息删除到 FILE 接收位置。 请求消息的架构必须符合前面生成的过程的架构。 有关使用 Oracle 数据库适配器调用过程的请求消息架构的详细信息,请参阅 函数和过程 的消息架构。

例如,调用CREATE_CUSTOMERDOC过程的请求消息为:

<CREATE_CUSTOMERDOC xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG">  
  <CNAME>John Smith</CNAME>  
  <CDOC>MYDIR/John_Smith_profile.txt</CDOC>  
</CREATE_CUSTOMERDOC>  

注意

文本文件 John_Smith_profile.txt 必须存在于与 Oracle 中的逻辑目录关联的物理目录位置中。 对于此示例,文本文件必须存在于 C:\MYDIR 中

业务流程使用消息并将其发送到 Oracle 数据库。 Oracle 数据库的响应保存在定义为业务流程的一部分的其他 FILE 位置。 例如,Oracle 数据库对上述请求消息的响应为:

<?xml version="1.0" encoding="utf-8"?>  
<CREATE_CUSTOMERDOCResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG"></CREATE_CUSTOMERDOCResponse>  

注意

可以创建类似的业务流程,以从具有 BFILE 类型字段的表读取数据。 BizTalk 适配器包附带的 SQL 脚本创建包含GET_CUSTOMERDOC过程的ACCOUNT_PKG。 可以使用此过程从 SCOTT 检索 BFILE 数据。CUSTOMERDOC 表。

BizTalk 适配器包的示例还包含Operate_BFILE示例。 此示例演示如何在 SCOTT 中插入记录。如本主题中所述,使用CREATE_CUSTOMERDOC存储过程 (CUSTOMERDOC 表。) 此示例还演示如何从 SCOTT 读取 BFILE 数据。使用GET_CUSTOMERDOC存储过程的 CUSTOMERDOC 表。

可能的异常

有关在使用 BizTalk Server 执行 DML 操作时可能遇到的异常的信息,请参阅异常和错误处理

最佳实践

部署并配置 BizTalk 项目后,可以将配置设置导出到名为绑定文件的 XML 文件。 生成绑定文件后,可以从文件导入配置设置,这样就无需为同一业务流程创建发送端口、接收端口等。 有关绑定文件的详细信息,请参阅 重用 Oracle 数据库适配器绑定

另请参阅

使用 Oracle 数据库开发 BizTalk 应用程序的构建基块