如何在OCILogon2上设置超时?

时间:2009-11-13 01:07:10

标签: oracle login timeout

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

我现在和OCI一起玩,在我看来这是不可能的。 我能想到的唯一方法是使用非阻塞模式。在这种情况下,您将需要OCIServerAttach()和OCISessionBegin()而不是OCILogon()。但是当我尝试这个时,OCISessionBegin()不断返回OCI_ERROR,并带有以下错误代码:

  • ORA-03123操作会阻止
  • 原因:现在无法完成尝试的操作。
  • 操作:稍后重试该操作。

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

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

答案 1 :(得分:1)

我们认为我们找到了正确的文件设置 - 但这是其中一个问题,我们必须等到一些罕见且可怕的事情发生才能验证它: - /

[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 Net连接的时间(以秒为单位)。

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

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

如果没有此参数,当数据库服务器主机系统无法访问时,对数据库服务器的客户端连接请求可能会阻止默认的TCP连接超时持续时间(Linux上大约8分钟)。

出站连接超时间隔仅适用于TCP,带SSL的TCP和IPC传输连接。

默认

实施例

SQLNET.OUTBOUND_ CONNECT _TIMEOUT = 10