Мы используем веб-сервис, который работает на Oracle.Они строго разрешают только доступ к ODBC только для SELECT.Некоторые из отчетов, которые мы делаем, не очень хорошо объясняются представлениями, которые предоставляет компания, поэтому мы создали db_link, используя экспресс-выпуск Oracle 11g, и переписали некоторые из наиболее важных запросов в виде материализованных представлений, используя обновление:укажите настройки для повторного выполнения запросов ежечасно, что достаточно для наших целей.Пока все хорошо.
Я заметил, что некоторые из MV перестают обновляться, и за ними нет реальной картины.При дальнейшем расследовании время от времени выглядит, что внешняя база данных (та, к которой мы подключены через db_link) не выполняет запрос время от времени, и процесс обновления терпеливо ожидает события «SQL * Net more data»из dblink 'на неопределенный срок.
Вот запрос, который я выполнил, чтобы получить данные о застрявших сеансах обновления и трех сеансах, которые кажутся застрявшими операторами обновления:
select a.username, a.osuser, a.sid, a.serial#, b.spid, a.seconds_in_wait,
a.event, a.state, a.wait_class
from v$session a, v$process b
where a.paddr = b.addr
and a.seconds_in_wait > 500 and a.username is not null;
USERNAME OSUSER SID SERIAL# SPID SECONDS_IN_WAIT EVENT STATE WAIT_CLASS
KIPP_NWK SYSTEM 27 7904 2704 161991 SQL*Net more data from dblink WAITING Network
KIPP_NWK SYSTEM 35 2469 3880 139489 SQL*Net more data from dblink WAITING Network
KIPP_NWK SYSTEM 37 6051 1408 40860 SQL*Net more data from dblink WAITING Network
Я думаю, что мой вопростаким образом, «есть ли какие-либо предложения относительно сценария, который будет периодически (скажем, ежечасно) сканировать застрявшие сеансы типа« больше данных из dblink »и завершать их?»Желаемое для меня поведение - это то, что это обновление более устойчивое - если оно истечет, я бы хотел, чтобы оно началось заново и попробуйте, попробуйте снова ...
Не думаю, что выясняю, почемувнешняя база данных прекратит выполнение этих запросов, и это будет очень плодотворно - провайдер предоставляет привилегии выбора, но совершенно ясно, что не хочет поддерживать / устранять любые возникающие проблемы.
Я читал о настройке idle_time и изменении набора SQLNET.EXPIRE_TIME в файле sqlnet.ora - но я не понимаю, что это правильный подход, так как соединения не простаивают, они активны, но ждутнеопределенно, а также усложняющий фактор, что эти сеансы инициируются самой базой данных.
Как сделать это обновление более устойчивым / автоматически убить эти долгожданные обновления?