1

我正在编写一个夜间作业,使用 ODP.NET 将数据从 SQL Server 移动到 Oracle。

我们使用大约 100 个连接对象(与数据无关),并且我们预计单次运行中传输的行数不会超过 1500 行(总共)。我读过的 ODP.NET 笔记和资料从不谈论保持连接池关闭。

在开发中,我关闭了连接池,它工作正常。

在给定的场景中是否建议关闭连接池,(假设所有连接在使用后都正确处理),因为:

  1. 这是一项夜间工作,Oracle 服务器上不会有太多负载。

  2. 连接池可能会返回陈旧的连接,需要对其进行验证设置/异常处理。

4

1 回答 1

5

池化的唯一原因是性能,因此如果您的夜间作业在它的窗口内运行,那么您所做的事情并没有错,特别是因为它不必担心死连接,从而使您的实现变得简单。

也就是说,我不会做这个标准的做法。我很少编写代码来处理陈旧的连接,即使那样它也是一个简单的工厂。问题从为什么你有过时的连接开始?通常,这与终止空闲连接的防火墙或 DBA 作业有关,对于应用程序帐户,这两者都应更改或放宽。即使在这种情况下,您也可以执行以下操作:

  • 在连接字符串中指定 Min Pool Size=0。这样做可以让 ODP.net 清理您的应用程序的最后一个连接,让您的应用程序在空闲足够长的时间后完全断开连接。
  • 在连接字符串中指定更高的 Decr 池大小。这将允许 ODP.net 每 3 分钟关闭更多空闲连接。
  • 您可以尝试设置 Validate Connection = true - 我的猜测是验证连接的开销比打开连接的开销要少。

更多信息可以在这里找到:http: //docs.oracle.com/cd/E15296_01/doc.111/e15167/featConnecting.htm#i1006228

于 2012-11-21T22:01:24.197 回答