如何让oracle dblink 不超时

如何让oracle dblink 不超时,第1张

一般是防火墙阻断长连接造成的。

在服务器端sqlnet.ora中设置expire_time 参数,此值小于防火墙断开连接的时间。

集群环境设置grid用户下的文件,单点环节设置oracle用户下的文件。

设置此参数后,需要重新启动监听服务后生效。

能不能不用dblink,我现在用dblink都怕了。用dblink会同步两个数据库的scn值,万一有一台出问题。另外一台也会出问题的。你这样又是程序,又是trigger,很容易出事的,另外,如果你的Oracle是10.1及以下版 本,建议尽快升级 ,这个版本的dblink有问题的。

ora-02068是由链接超时导致,重点问题在ora-03135,也就是你的DBlink上,先保证你的DBlink账号是通的,如果你的DBlink账号,在PLSQL客户端可以正常查询远程Oracle,接下来就检查你的程序中账号是否是dblink账号,权限以及防火墙是否正确。

原因:

1、EF 、EFCore 中默认存在链接池,每次数据库 *** 作完成之后,会将连接丢到连接池。连接的释放过程单独管控(这里不做详细解释);

2、当Oracle数据库中设置有连接(会话)有效期时,到期后,Oracle服务端会中断连接,并将会话标识为:SNIPED状态;

注:查询数据中已超时,未释放的会话:select * from v$session where status = 'SNIPED'

3、当Oracle数据库中连接超时后,EF连接池中的连接依然存在,若再次进行数据库 *** 作,则会提示 idle 超时异常;

解决方案:

方案1:调整数据库设置,将数据库中的“IDLE_TIME”设置未“UNLIMITED”,具体方式请自行百度

可通过以下语句查看当前设置:

select username, b.* from dba_users a, dba_profiles b where a.profile = b.profile and username='IOT_SUB_ALL'

方案2:

在项目代码数据库连接字符串中添加:min pool size=0设置,将EF连接池最小连接保持数设置为0(默认为1);

连接字符串样式:

"User Id=用户idPassword=密码Data Source=IP:端口/服务器名min pool size=0"

连接字符串参数详细说明见:

https://docs.oracle.com/database/121/ODPNT/OracleConnectionClass.htm#ODPNT805


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11226539.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存