使用ODP.NET Managed 12c与Oracle数据库10g2的连接池不兼容

时间:2014-11-26 12:29:21

标签: asp.net oracle iis

我经常使用托管版本的ODP.NET 12c在多个.NET应用程序上超出SESSIONS_PER_USER错误。这些应用程序托管在单个大型Oracle数据库10g2实例上。

显然,连接处理存在问题,因为这两个应用程序的会话限制为30和100,并且它会迅速升级,直到完全耗尽它为止。当DBA工作人员试图终止会话时,这些会议仍未发布,处于“KILLED”状态,而不是减少可用连接数。显然,Application Server(IIS 7.5)“保留”这些连接,禁止任何新的连接请求。

应用程序1连接字符串(带有换行符以提高可读性)

Data Source=(DESCRIPTION = 
  (ADDRESS_LIST = 
    (ADDRESS = 
      (PROTOCOL = TCP)
      (HOST = 1.2.3.4)
      (PORT = 1521)
    )
  )
  (CONNECT_DATA =
    (SID = MYDB)
    (SERVER = SHARED)
  )
);
User Id=USR_APP;
Password=********;
Pooling=True;
Max Pool Size=30;
Connection Lifetime=300;
Incr Pool Size=2;
Decr Pool Size=2;
Statement Cache Size=100;
Validate Connection=true;

应用程序2连接字符串(带有换行符以提高可读性)

Data Source=(DESCRIPTION=
  (ADDRESS_LIST=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=MYDB.MYDOMAIN.COM)
      (PORT=1521)
    )
  )
  (CONNECT_DATA=
    (Service_name=CBA1SHARED)
    (SERVER=SHARED)
  )
);
User ID=usr_app2;
Password=***********;
Connection Lifetime=300; 
Connection Timeout=30; 
Decr Pool Size=30;

我不记得在ODP.NET 11的非托管版本上存在这些问题,在App Server上安装Oracle客户端。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

似乎USR_APP和/或USR_APP2帐户可能已超过允许其携带的最大会话数。为了找到答案,请查询DBA_USERS和dba_profiles视图。

e.g。

select username, profile from DBA_USERS where username like 'USR_APP%'

select profile,resource_name,limit from dba_profiles
where resource_name = 'SESSIONS_PER_USER'

如果SESSIONS_PER_USER太低,请要求DBA增加现有配置文件中的SESSIONS_PER_USER金额,或者创建专用于这些帐户的配置文件,其上限更高。 DBA还应该考虑在实际死亡之前保留额外会话所需的额外RAM,这对于RAM较低的系统来说可能很重要。