我们有一台装有 Oracle 11g 的服务器和一个数据库。网管给oracle所在服务器的ip加了别名域。
我们没有改变任何其他东西。之后,当 SSRS 服务器从 oracle 请求数据时,有时(并非总是)会抛出以下错误之一:
- ORA-12518: TNS:listener could not hand off client connection
- ORA-12520: TNS:listener could not find available handler for requested type of server
该错误并不总是发生,但如果多个用户试图运行一个报告,有时会出现错误,有时不会。
我研究了listener.log,发现有几行:
* service_update * my_service_name * 0
下面我给出一些 listener.log 和连接询问数据的不同服务器的例子:
01-FEB-2023 15:50:25 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORAMAIL2)(CID=(PROGRAM=....EmailImageProcessingService.dll)(HOST=WinServices)(USER=windows.service) )) * (ADDRESS=(PROTOCOL=tcp)(HOST=00.00.00.000)(PORT=00000)) * 创建* ORAMAIL2 * 0
01-FEB-2023 15:50:31 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORAMAIL2)(CID=(PROGRAM=....EmailImageProcessingService.dll)(HOST=WinServices)(USER=windows.service) )) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.11.11.111)(PORT=00000)) * 创建* ORAMAIL2 * 0
01-FEB-2023 15:50:31 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORAMAIL2)(CID=(PROGRAM=oracle@oracle)(HOST=oracle)(USER=oracle))) * (ADDRESS= (PROTOCOL=tcp)(HOST=22.22.22.2222)(PORT=9076)) * 创建 * ORAMAIL2 * 0
01-FEB-2023 15:50:34 * service_update * oramail2 * 0
01-FEB-2023 15:50:37 * service_update * oramail2 * 0
01-FEB-2023 15:50:39 * (CONNECT_DATA=(SERVICE_NAME=ORAMAIL2)(CID=(PROGRAM=...\ReportingServicesService.exe)(HOST=SQL2019)(USER=SQLServerReportingServices))) * (ADDRESS=( PROTOCOL=tcp)(HOST=11.11.11.1111)(PORT=00000)) * 创建* ORAMAIL2 * 0
我检查了进程和会话,我们远远低于参数限制:
select current_utilization, limit_value ,resource_name
From v$resource_limit
Where resource_name IN ('sessions','processes');
processes
CURRENT_UTILIZATION 37 LIMIT_VALUE 800
sessions
CURRENT_UTILIZATION 41 LIMIT_VALUE 1224
除了网络管理员添加的域名外,其他都没有改变。
我需要在听众中改变什么吗?
问题是进程的 MAX_UTILIZATION,但它不在连接到 SSRS 的 Oracle 服务器中!
在 SSRS 的一些报告中,有一些数据调用了一些对象,这些对象引用了来自另一台服务器(假设是 Oracle 服务器 B)的数据!Oracle Server B 有时会达到进程的限制,因此 SSRS 中出现的错误来自 Oracle Server B,而不是来自连接到 SSRS 的 Oracle Server。
以下是来自 Oracle 服务器 B 的进程和会话:
所以我增加了进程限制:
然后我计划重新启动数据库以实施更改。