我经常使用托管版本的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客户端。有什么想法吗?
答案 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较低的系统来说可能很重要。