如何在OCILogon2上设置超时时间?

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

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:Connect timeout occurred错误。

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

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

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

默认值

示例

SQLNET.OUTBOUND_CONNECT_TIMEOUT=10


1

我目前正在使用OCI进行编程,但似乎这是不可能的。

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接