我有一个tomcat服务器从jsp调用存储过程。在存储过程中,我有一个用数据填充临时表的查询。该临时表然后通过dblink连接到另一个表以使用提示填充另一个临时表 - DRIVING_SITE
。然后将最后一个临时表连接到我们数据库上的另一个表以将结果集返回给tomcat。数据库链接连接超时
对不起,但我真的不能提供所有这些的代码示例,但我遇到的问题是这样的 - 经过一段时间的数据库链接没有被使用,第一个查询使用链接将什么也不做,返回错误:
test.jsp caught exception, closing connection: ORA-02068: following severe error from DATABASE_LINK_NAME
ORA-03135: connection lost contact
在10分钟内左右最后一次通话的数据库链接上进行将被罚款每一个后续查询。临时表可能很大或很小,查询的数据量似乎没有什么区别,但空闲时间后的第一个调用大概会有75%的时间出现此错误。有没有人遇到过这个问题?如果是这样,是否有任何决议?
查询的结构类似于这样:
INSERT INTO temp_table_2
WITH last_submissions AS (
SELECT /*+ DRIVING_SITE(some_schema.some_table_1) */
bs.unique_id,
CASE WHEN COUNT(bs.unique_id) > 1 THEN 'Y' ELSE 'N' END some_flag,
MAX(trx.unique_id) last_submission
FROM (SELECT unique_id
FROM temp_table_1) oids,
[email protected]_LINK bs,
[email protected]_LINK trx
WHERE oids.unique_id = bs.unique_id
AND bs.non_unique_join_id = trx.non_unique_join_id
GROUP BY bs.unique_id),
something_relevant AS (
SELECT /*+ DRIVING_SITE(some_schema.some_table_2) */
last_value_of_something.unique_id,
last_value_of_something.some_flag,
mv.value_description status
FROM (
SELECT /*+ DRIVING_SITE(some_schema.some_table_1) */
ls.unique_id,
CASE WHEN COUNT(ls.unique_id) > 1 THEN 'Y' ELSE 'N' END some_flag,
MAX(prd.prd_some_id) last_submission
FROM last_submissions ls,
[email protected]_LINK trx,
[email protected]_LINK prd
WHERE ls.last_submission = trx.unique_id
AND trx.some_unique_id = prd.some_unique_id (+)
GROUP BY ls.unique_id) last_value_of_something,
[email protected]_LINK prd,
[email protected]_LINK cs,
[email protected]_LINK mv
WHERE last_value_of_something.last_submission = prd.prd_some_id (+)
AND prd.some_id = cs.some_id (+)
AND cs.status_code = mv.value (+)
AND mv.value_type (+) = 'SOME_INDICATOR_FOR_DISPLAY_VALUES')
SELECT ls.unique_id unique_id,
NVL(pr.status, trx.some_code) status,
CASE WHEN ls.some_flag = 'Y' OR pr.some_flag = 'Y' THEN 'Yes' ELSE 'No' END display_the_flag
FROM /*+ DRIVING_SITE(some_schema.some_table_1) */
last_submissions ls,
[email protected]_LINK trx,
something_relevant pr
WHERE ls.last_submission = trx.unique_id
AND ls.unique_id = pr.unique_id
两个数据库之间是否存在防火墙,在空闲时间后丢弃连接?似乎可能在10分钟后。听起来像是一个网络问题,而不是一个特定的Oracle。 –