了解 Oracle 数据库适配器绑定属性

适用于 Oracle 数据库的 Microsoft BizTalk 适配器显示多个绑定属性。 通过设置这些属性,可以控制适配器的某些行为。 本部分介绍 Oracle 数据库适配器绑定属性。 它还演示如何使用 .NET 编程或通过设置BizTalk Server物理端口绑定上的属性来访问它们。

适配器绑定属性

下表显示了按类别分组的 Oracle 数据库适配器绑定属性。 类别是指每个绑定属性出现在不同应用程序呈现的对话框中以配置适配器 (或绑定) 的节点。

Binding 属性 类别 说明 .NET 类型
CloseTimeout 常规 WCF 连接关闭超时。 默认值为 1 分钟。 不支持。 System.TimeSpan
EnableBizTalkCompatibilityMode 常规 将适配器与 BizTalk Server 配合使用时,将此绑定属性的值设置为 True。 否则,必须将此绑定属性的值设置为 False bool (System.Boolean)
InboundOperationType 常规 指定是要执行 轮询 还是 通知 入站操作。 默认值为 轮询

有关 轮询 的详细信息,请参阅 支持在 Oracle 数据库中接收基于轮询的数据更改的消息。 有关 通知的详细信息,请参阅 有关使用 Oracle 数据库适配器接收数据库更改通知的注意事项
enum
名称 常规 一个只读值,该值返回由添加适配器服务引用Visual Studio插件生成的文件的名称,用于保存 WCF 客户端类。 添加适配器服务引用插件通过将“Client”追加到 Name 属性的值来形成文件名。 返回的值为“OracleDBBinding”;对于此值,生成的文件将命名为“OracleDBBindingClient”。 字符串
OpenTimeout 常规 ODP.NET 属性。 指定 WCF 连接打开超时。 默认值为 1 分钟。 此属性通过使用 ODP.NET 实现。

重要: Oracle 数据库适配器始终使用 OpenTimeout 在打开与 Oracle 数据库的连接时设置连接打开超时。 适配器忽略在打开通信对象(如通道)时传递的 System.TimeSpan) 参数的任何 (超时。
System.TimeSpan
ReceiveTimeout 常规 指定 WCF 消息接收超时。 实质上,这意味着适配器等待入站消息的最大时间。 默认值为 10 分钟。

重要: 对于轮询等入站操作,我们建议将超时设置为最大值,即 24.20:31:23.6470000 (24 天) 。 将适配器与BizTalk Server一起使用时,将超时设置为大型值不会影响适配器的功能。
System.TimeSpan
SendTimeout 常规 ODP.NET 属性。 指定 WCF 消息发送超时。 默认值为 1 分钟。 不支持。 System.TimeSpan
DataFetchSize BufferManagement ODP.NET 属性。 指定 ODP.NET 从一个服务器往返中从结果集中提取的数据量(以字节为单位)。 默认值为 65536。 此属性用于性能优化。 long (System.Int64)
InsertBatchSize BufferManagement 指定多个记录的“插入”操作的批大小。 默认值为 1。 对于大于 1 的 InsertBatchSize 的值,Oracle 数据库适配器会将指定的记录数批处理到单个 ODP.NET 调用中。 如果插入操作中的记录数不是批大小的倍数,则最终批将包含的记录数少于批大小值。 例如,如果插入消息有 10 条记录,并且 InsertBatchSize 设置为 1,则适配器将读取单个记录并将其写入 Oracle 数据库中。 因此,适配器对 Oracle 数据库执行 10 个单独的操作。 同样,如果插入消息包含 10 条记录, 并且 InsertBatchSize 设置为 5,适配器将一次读取并写入 5 条记录,因此仅执行 2 次插入操作。

如果记录的结构在批处理中不相同,则会引发 Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException 异常,并回滚整个插入操作的事务。 InsertBatchSize 的选定值可以极大地提高多个记录 Insert 操作的适配器性能。
int (System.Int32)
LongDatatypeColumnSize BufferManagement 指定 Oracle long 数据类型列 (32512) 的最大大小(以字节为单位)。 默认值为 0。 如果不对长数据类型执行操作,则必须使用默认值。 若要预提取数据,必须将 -1 指定为此绑定属性的值。 如果符合以下条件,则必须显式设置此绑定属性的相应值:

- 执行包含长数据类型参数的存储过程。

- 对包含具有长数据类型的列的表执行 Select 操作,SELECT 语句不包括主键列。

注意: 此绑定属性已弃用。
long (System.Int64)
MaxOutputAssociativeArrayElements BufferManagement 指定适配器在执行在响应中返回关联数组的操作时所创建的关联数组的大小。 适配器将数组的大小传达给 ODP.NET,后者又根据数组大小创建缓冲区。 默认值为 32。

执行涉及 PL/SQL 表类型的操作时,此绑定属性非常有用。
int (System.Int32)
MetadataPooling BufferManagement ODP.NET 属性。 指定 ODP.NET 是否缓存已执行的查询的元数据信息。 默认值为 True,用于启用元数据池。 Caching此信息可以提高性能;但是,如果对 Oracle 系统上的基础 Oracle 项目进行更改,则此共用元数据将不同步。这可能会导致对 Oracle 系统执行的操作返回意外异常。 此属性用于性能优化。 bool (System.Boolean)
StatementCachePurge BufferManagement ODP.NET 属性。 指定在将连接返回到连接池时是否清除与连接关联的 ODP.NET 语句缓存。 默认值为 False,用于禁用语句缓存清除。 此属性用于性能优化。 bool (System.Boolean)
StatementCacheSize BufferManagement ODP.NET 属性。 指定每个 ODP.NET 连接可以缓存的最大语句数。 将此属性设置为非零值可对连接启用语句缓存。 默认值为 10。 此属性用于性能优化。 int (System.Int32)
EnablePerformanceCounters 诊断 指定是否启用 WCF LOB 适配器 SDK 性能计数器和 Oracle 数据库适配器 LOB 延迟性能计数器。 默认值为 False;性能计数器已禁用。 LOB 延迟性能计数器度量 Oracle 数据库适配器调用 Oracle 数据库所用的总时间。 bool (System.Boolean)
EnableSafeTyping 元数据 启用或禁用安全键入。 默认值为 False;禁用安全键入。 此功能控制适配器如何显示某些 Oracle 数据类型。 有关安全键入的详细信息,请参阅 基本 Oracle 数据类型 1 bool (System.Boolean)
UseSchemaInNameSpace 元数据 指定架构名称 (SCOTT、HR 等) 是否包含在操作及其关联类型的 xml 命名空间中。 默认值为 True;架构名称包含在命名空间中。 命名空间中未包含方案名称的优点是,如果有表具有相同名称 (例如,EMP) 在两个不同的架构中,则同一 XML 可用于在两个表上执行简单的SQL操作, (插入、更新、删除、选择) 。

例如,如果 UseSchemaInNamespace 属性为 true,则为 SCOTT 上的这些操作的命名空间。EMP 表为 "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP";如果为 false,则命名空间为 "http://Microsoft.LobServices.OracleDB/2007/03/Table/EMP"

重要: 消息操作不受 UseSchemaInNamesapce 绑定属性的影响;它始终包含架构名称。

重要: 强烈建议在生成元数据时将此绑定属性设置为 True 。 如果将此属性设置为 false,则 Oracle 架构名称 (例如,在生成的架构的 XML 命名空间中将不可用 SCOTT) 。 因此,如果在两个不同的 Oracle 架构中具有相同名称的两个表,并且它们被添加到同一 BizTalk 项目中,BizTalk 项目将无法生成和部署。 如果要在同一 BizTalk 项目中包括此类架构,则必须手动编辑它们以在 XML 命名空间中包含 Oracle 架构名称。
bool (System.Boolean)
NotificationPort 通知 指定 ODP.NET 必须打开的端口号,以侦听 Oracle 数据库中的数据库更改通知。 默认值为 -1,表示 ODP.NET 使用有效的随机未使用的端口号。

重要:如果打开Windows防火墙,适配器客户端将不会收到数据库更改通知。 此外,不建议关闭Windows防火墙接收通知。 因此,为了接收通知而不损害客户端计算机的安全性,我们建议将正整数值指定为端口号,然后将该端口号添加到Windows防火墙例外列表中。 如果将此绑定属性设置为默认值 -1,ODP.NET 将使用随机端口和适配器客户端不知道要添加到Windows防火墙例外列表的端口。 有关如何将端口添加到Windows防火墙例外列表的说明,请参阅https://go.microsoft.com/fwlink/?LinkID=196959

谨慎: 如果应用程序域中有多个应用程序使用 Oracle 数据库适配器接收通知,则必须将所有应用程序的 NotificationPort 绑定属性设置为相同的端口号。 这是因为 ODP.NET 只创建一个侦听程序,侦听应用程序域中的一个端口。
int (System.Int32)
NotificationStatement 通知 指定用于注册以从 Oracle 数据库获取通知的 SELECT 语句。 SELECT 语句示例可能如下所示。

SELECT TID,ACCOUNT,PROCESSED FROM SCOTT.ACCOUNTACTIVITY WHERE PROCESSED = ‘n’

注意: 必须指定数据库对象名称以及架构名称。 例如,SCOTT.ACCOUNTACTIVITY

仅当指定 SELECT 语句的结果集发生更改时,适配器才会从 Oracle 数据库获取通知消息。
字符串
NotifyOnListenerStart 通知 指定适配器是否向适配器客户端发送通知消息,告知接收位置在侦听器启动时正在运行。 默认值为 True。 bool (System.Boolean)
ConnectionLifetime OracleConnectionPool ODP.NET 属性。 指定连接的最大持续时间(以秒为单位)。 默认值为 0。 此属性用于性能优化。 int (System.Int32)
DecrPoolSize OracleConnectionPool ODP.NET 属性。 指定在不使用过多的已建立连接时关闭的连接数。 默认值为 1。 这用于性能优化。 int (System.Int32)
IncrPoolSize OracleConnectionPool ODP.NET 属性。 指定请求新连接时要创建的新连接数,并且 ODP.NET 连接池中没有可用的连接。 默认值为 5。 此属性用于性能优化。 int (System.Int32)
MaxPoolSize OracleConnectionPool ODP.NET 属性。 指定 ODP.NET 连接池中的最大连接数。 默认值为 100。 此属性用于性能优化。

重要: 必须明智地设置 MaxPoolSize 。 如果此值设置过大,则可能会耗尽 ODP.NET 中可用的连接数。
int (System.Int32)
MinPoolSize OracleConnectionPool ODP.NET 属性。 指定 ODP.NET 连接池中的最小连接数。 默认值为 1。 此属性用于性能优化。 int (System.Int32)
UseOracleConnectionPool OracleConnectionPool ODP.NET 属性。 指定是否使用 ODP.NET 连接池。 默认值为 True,用于启用连接池。 Oracle 数据库适配器使用 ODP.NET 连接池实现连接池。 bool (System.Boolean)
PolledDataAvailableStatement PollingReceive 指定执行的 SELECT 语句,以确定是否有任何数据可用于轮询特定表。 指定的语句必须返回由行和列组成的结果集。 结果集的第一个单元格中的值指示适配器是否执行 为 PollingStatement 绑定属性指定的值。 如果结果的第一个单元格包含正值,适配器将执行轮询语句。 例如,此绑定属性的有效语句将为:

Select * from <table_name>

此绑定属性的默认值设置为:

SELECT 1 FROM DUAL

这意味着,无论要轮询的表是否具有数据,适配器都必须继续轮询。

注意: 不能为此绑定属性指定存储过程。 此外,此语句不得修改基础 Oracle 数据库。
字符串
PollingAction PollingReceive 指定轮询操作的操作。 可以从使用“使用适配器服务外接程序”为操作生成的元数据中确定特定操作的轮询操作。 字符串
PollingInterval PollingReceive 指定事务轮询间隔,即 Oracle 数据库适配器针对 Oracle 数据库执行轮询语句的间隔(以秒为单位)。 默认值为 500。 适配器使用以下轮询间隔:

- 连续轮询之间的时间间隔。 此间隔用于运行轮询和帖子轮询查询。 如果在指定的时间间隔内执行这些查询,适配器会在间隔内休眠剩余时间。

- 轮询事务超时值。 此值必须足够大,以便包括轮询语句执行时间、如果指定了) 执行时间 (帖子轮询语句,以及从客户端应用程序接收提交事务的回复的时间。

如果客户端应用程序在轮询间隔过期之前发送回复,适配器会提交事务,并等待轮询间隔到达以执行下一轮询。

如果客户端应用程序返回错误,适配器将终止事务。

如果轮询间隔在客户端应用程序发送答复之前过期,则事务将超时。有关如何在轮询方案中使用绑定属性的详细信息,请参阅 支持在 Oracle 数据库中接收基于轮询的数据更改的消息
int (System.Int32)
PollingStatement PollingReceive 指定轮询语句。 可以指定简单的 SELECT 语句或存储过程、函数或打包过程或函数进行轮询。

- 如果要轮询表或视图,则必须在此绑定属性中指定 SELECT 查询。

- 如果要在包中使用存储过程、函数或过程或函数进行轮询,则必须为此绑定属性中的相应操作指定整个请求消息。

仅当 PolledDataAvailableStatement 绑定属性执行的语句返回某些数据时,才会执行轮询语句。

重要:如果已在 Oracle 事务中指定) ,Oracle 数据库适配器将执行轮询语句和帖子轮询语句 (。 如果在 PollingStatement 绑定属性中使用 SELECT 语句,建议在 SELECT 语句中指定 FOR UPDATE 子句。 这将确保所选记录在事务期间锁定,帖子轮询语句可以对所选记录执行任何必需的更新。

有关如何在轮询方案中使用绑定属性的详细信息,包括 FOR UPDATE 子句的使用;请参阅 支持在 Oracle 数据库中接收基于轮询的数据更改的消息
string
PollWhileDataFound PollingReceive 指定 Oracle 数据库适配器是否忽略轮询间隔并连续轮询 Oracle 数据库(如果正在轮询的表中的数据可用)。 如果表中没有可用数据,适配器将还原为按指定的轮询间隔执行 SQL 语句。 默认值为 False。

假设轮询间隔设置为 60 秒,并且为 PolledDataAvailableStatement 指定的语句返回可用于轮询的数据。 然后,适配器执行为 PollingInput 绑定属性指定的语句。 假设适配器只需 10 秒才能执行语句,则现在必须等待 50 秒,然后再次执行 PolledDataAvailableStatement,然后执行轮询语句。 相反,为了优化性能,可以将 PollWhileDataFound 绑定属性设置为 true,以便适配器可以在上一轮询周期结束后立即开始执行下一轮询周期。

注意: 此绑定属性适用于使用存储过程、函数或打包过程或函数轮询表和视图和轮询。
字符串
PostPollStatement PollingReceive 指定在轮询语句之后以及 /POLLINGSTMT 消息发送到使用者之前执行的 PL/SQL 块。 默认值为 null;不会执行帖子轮询语句。 帖子轮询语句在轮询事务内执行。 帖子轮询语句的两个常见用途是:

- 更新轮询语句中返回的行中的列,以指示它们已处理,并且应从后续轮询查询中排除这些列。

- 将已处理的记录移动到其他表。

重要:如果指定了帖子轮询语句,则应将 PollingInterval 设置为足够大,以便 PL/SQL 块在间隔过期之前完成。

有关如何在轮询方案中使用绑定属性的详细信息,请参阅 支持在 Oracle 数据库中接收基于轮询的数据更改的消息
字符串
SkipNilNodes 运行时行为 指定 Oracle 数据库适配器是否会跳过在请求 XML 中标记为“nil”的节点插入或更新值。 此绑定属性适用于在表中插入或更新记录以及存储过程中的 RECORD 类型参数。 默认值为 True,这意味着适配器将跳过标记为“nil”的节点的传递值。 在这种情况下,如果为标记为“nil”的节点考虑指定的) ,则 Oracle (中的默认值。 如果设置为 False,适配器会显式传递这些节点的 null 值。

注意:对于请求 XML 中不存在的节点,无论 SkipNilNodes 绑定属性的值如何,适配器始终跳过传递值。对于 PL/SQL RECORDS 表,适配器始终为请求 XML 中标记为“nil”或不存在的节点传递 null 值,而不考虑 SkipNilNodes 绑定属性的值。

以下示例根据为此绑定属性设置的值来说明适配器配置的差异。 假设请求 XML 如下所示:

<EMPNO>1000</EMPNO> <ENAME>John</ENAME> <SAL nil=’true’></SAL>

如果 SkipNilNodes 设置为 True,适配器将执行以下命令:

INSERT INTO EMP (EMPNO, ENAME) VALUES (1000, “John”);

如果 SkipNilNodes 设置为 False,适配器将执行以下查询:

INSERT INTO EMP (EMPNO, ENAME, SAL) VALUES (1000, “John”, null);

请注意,在第二个语句中,适配器显式插入参数“SAL”的 null 值。
bool (System.Boolean)
UseAmbientTransaction 事务 指定 Oracle 数据库适配器是否使用调用方提供的事务上下文执行操作。 默认值为 True,这意味着适配器始终在事务上下文中执行操作,前提是客户端提供事务上下文。 如果存在参与事务的其他资源,则会在 System.Transaction 中创建连接,并提升为 MSDTC 事务。

但是,在某些情况下,你不希望适配器在事务上下文中执行操作。 例如:

- 在发送端口) 上对 Oracle 数据库执行简单的 SELECT 操作时 (。

- 同时指定执行 SELECT 操作的轮询语句,并且不涉及通过 DELETE 语句或调用接收端口) 上的存储过程 (对表进行任何更改。

这两项操作都不会对数据库表进行任何更新,因此,将这些操作提升为使用 MSDTC 事务可能是性能开销。 在这种情况下,可以将绑定属性设置为 false,以便 Oracle 数据库适配器不会在事务上下文中执行操作。

注意: 对于不对数据库进行更改的操作,建议不要在事务上下文中执行操作。 对于更新数据库中数据的操作,我们建议将绑定属性设置为 true,否则,可能会因执行入站或出站操作而遇到消息丢失或重复消息。
bool (System.Boolean)
GeneratedUserTypesAssemblyFilePath UDT .NET 类型生成 - 设计时间 指定适配器生成的 DLL 的名称和路径,同时生成元数据,其中包含元数据中使用的所有 UDT。 如果要为使用 UDT 的包、存储过程或函数生成元数据,则必须指定 DLL 名称。 对于具有 UDT 的表和视图,指定 DLL 名称是可选的。 生成的 DLL 将保存到可执行文件所在的同一位置。

仅生成元数据时,才需要此绑定属性。

注意: 必须仅指定一个文件名。 对于元数据中的所有 UDT,适配器会生成具有给定名称的单个文件。 如果未指定名称,适配器会生成具有 GUID 名称的 DLL。 配置 WCF-OracleDB 接收或发送端口时,此绑定属性在BizTalk Server不可用。
string
GeneratedUserTypesAssemblyKeyFilePath UDT .NET 类型生成 - 设计时间 指定适配器用于创建强类型程序集的密钥文件的名称和路径。

此绑定属性是可选的,仅在生成元数据时是必需的。

注意:配置 WCF-OracleDB 接收或发送端口时,此绑定属性在BizTalk Server不可用。
string
UserAssembliesLoadPath UDT .NET 类型生成 - 运行时 指定 DLL 的名称,用分号分隔,适配器在生成元数据时创建。 这些 DLL 保存在在生成元数据时为 GeneratedUserTypesAssemblyFilePath 绑定属性指定的位置。 必须将这些 DLL 手动复制到以下位置:

对于 BizTalk 项目:将 DLL 复制到与BTSNTSvc.exe相同的位置。 对于BizTalk Server,这通常位于安装驱动器>:\Program Files\Microsoft BizTalk Server下<。

对于 .NET 项目:将 DLL 复制到 .NET 项目文件夹中的 \bin\Development 文件夹。

仅当发送和接收消息以对 Oracle 数据库执行操作时,才需要此绑定属性。
string
AcceptCredentialsInUri “使用适配器服务加载项”或“添加适配器服务引用插件”未显示。 指定 Oracle 连接 URI 是否可以包含 Oracle 数据库的用户凭据。 默认值为 False,用于禁用连接 URI 中的用户凭据。 如果 AcceptCredentialsInUriFalse 且 Oracle 连接 URI 包含用户凭据,则 Oracle 数据库适配器将引发异常。 如果必须在 URI 中指定凭据,则可以将 AcceptCredentialsInUri 设置为 True 。 有关详细信息,请参阅 创建 Oracle 数据库连接 URI bool (System.Boolean)

如何设置 Oracle 绑定属性?

指定与 Oracle 数据库的连接时,可以设置 Oracle 绑定属性。 有关如何设置绑定属性的信息,请参阅:

另请参阅

BizTalk 应用程序部署的开发任务