阅读有关 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 数据库适配器接收数据库更改通知的注意事项
枚举
名称 常规 一个只读值,返回由添加适配器服务引用 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.64700000 (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,则适配器将一次在 Oracle 数据库中读取和写入 5 条记录,因此仅执行 2 个插入操作。

如果记录的结构在批处理中不同,则会引发 Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException 异常,并回滚整个插入操作的事务。 InsertBatchSize 的选定值可以极大地提高多个记录插入操作的适配器性能。
int (System.Int32)
LongDatatypeColumnSize BufferManagement 指定 Oracle 长数据类型列 (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,它启用元数据池。 缓存此信息可提高性能;但是,如果在 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 架构名称 (例如 SCOTT) 在生成的架构的 XML 命名空间中不可用。 因此,如果两个不同的 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 数据库中接收基于轮询的数据更改消息
字符串
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 绑定属性的值。对于 RECORDS 的 PL/SQL 表,适配器始终为标记为“nil”或请求 XML 中不存在的节点传递 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 中不可用。
字符串
GeneratedUserTypesAssemblyKeyFilePath UDT .NET 类型生成 - 设计时 指定适配器用于创建强类型程序集的密钥文件的名称和路径。

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

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

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

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

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

如何设置 Oracle 绑定属性?

指定与 Oracle 数据库的连接时,可以设置 Oracle 绑定属性。 有关如何在以下内容时设置绑定属性的信息:

另请参阅

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