2009-11-13 293 views
2

当Oracle 10数据库启动并正常运行时,OCILogon2()将立即连接。当由于网络问题而关闭数据库或无法访问数据库时,数据库将立即失败。 但是,当我们的数据库管理员进入紧急维护并阻止接通连接时,超时可能需要5到10分钟。 这对我来说是有问题的,因为我发现OCILogin2不是线程安全的,我们只能串行使用它 - 而且我连接了不少Oracle数据库。 3个阻塞服务器X 5-10分钟= 15〜30分钟的锁定时间如何设置OCILogon2的超时时间?

有谁知道如何设置OCILogon2连接超时?

谢谢。

回答

0

我们认为我们找到了正确的文件设置 - 但它的那些地方,我们要等到什么问题之一罕见的恐怖发生之前,我们可以验证: -/

[sqlnet.ora] 
SQLNET.OUTBOUND_CONNECT_TIMEOUT=60 

从Oracle文档..

http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/sqlnet.htm#BIIFGFHI

5.2.35 SQLNET.OUTBOUND_ CONNECT _TIMEOUT

目的

使用SQLNET.OUTBOUND_ CONNECT _TIMEOUT参数指定的时间,以秒为客户建立的数据库实例的Oracle网络连接。

如果Oracle Net连接未在指定的时间建立,连接尝试被终止。客户端收到ORA-12170:TNS:发生连接超时错误。

出站连接超时间隔是TCP的一个超集连接的超时间隔,指定上建立一个TCP连接所花费的时间的限制。此外,出站连接超时间隔还包括连接到提供所请求服务的Oracle实例所需的时间。

没有此参数,一个客户端的连接请求到数据库服务器可能会阻塞默认的TCP连接超时持续时间(约8分钟在Linux上)时,数据库服务器主机系统是不可到达的。

出站连接超时间隔只适用于TCP时,TCP使用SSL,和IPC的交通连接。

默认

SQLNET.OUTBOUND_ CONNECT _TIMEOUT = 10

1

我currenty与OCI玩,在我看来这是不可能的。 我能想到的唯一方法是使用非阻塞模式。在这种情况下,您需要OCIServerAttach()和OCISessionBegin(),而不是OCILogon()。但是,当我尝试这样做,OCISessionBegin()返回始终与OCI_ERROR以下错误代码:

  • ORA-03123操作会阻塞
  • 原因:尝试的操作不能立即完成。
  • 操作:稍后重试操作。

这看起来很奇怪,我还不知道如何处理它。

可能的解决方法是在另一个进程中,你可以超时后杀死运行您的登录...