Буферизация изменений
Добавлено: 03 дек 2019, 17:37
В целях обеспечение консистентности и непротиворечивости данных при зависании одного из SQL-серверов (как MSSQL так и Oracle сервера), необходимо модификацию данных на серверах делать не прямо, а через специальные команды, описанные ниже для SQL серверов. Общая идея - вначале необходимо в каталоге Buffer (в подкаталоге, где находится sarmat_timer.exe) в соотв. xml файле (или текстовом, как удобней) сформировать буфер выполнения обновлений, и, по мере его исполнения, помечать как выполненные определенные пункты.
В случае разрыва связи с сервером (или с MSSQL, или с Oracle), sarmat_timer должен тут же преркатить свою работу с выводом соотв. сообщения об ошибке (при этом таймер в самом sarmat_timer должен остановиться - и больше не выполнять никаких обращений ни к сканерам, ни к Oracle, ни к MSSQL серверу).
При загрузке sarmat_timer:
В случае разрыва связи с сервером (или с MSSQL, или с Oracle), sarmat_timer должен тут же преркатить свою работу с выводом соотв. сообщения об ошибке (при этом таймер в самом sarmat_timer должен остановиться - и больше не выполнять никаких обращений ни к сканерам, ни к Oracle, ни к MSSQL серверу).
При загрузке sarmat_timer:
- если Oracle или MSSQL сервер недоступен, то вываливаться из программы с сообщением об ошибке, сам таймер не запускать;
- если SQL-сервера доступны, то необходимо перед началом выполнения задач по таймеру (в т.ч. опросов сканеров) проверить буфер - а нет ли незаконченных команд по обновлению информации, оставшихся по причине подвисания одного из серверов. И если таковые имеются, то аккуратно и последовательно выполнить все команды такого буфера.
- «RunOracleSQL» - выполняет SQL-запрос (или несколько запросов) на обновление к Oracle SQL серверу. Параметром служит просто строка Oracle SQL-запроса;
- «RunMSSQL» - выполняет SQL-запрос (или несколько запросов) на обновление к MSSQL серверу. Параметром служит просто строка MSSQL-запроса;
- «RefreshMSSQLContainer» - обновляет в MSSQL из Oracle информацию о контейнере. В качестве параметра передается штрих-код контейнера.
- «UpdateMSSQLFromOracle» - обновляет данные в таблице MSSQL по запросу из Oracle-сервера. Два параметра:
- строка sql-запроса к Oracle-серверу. Например «select state from sarmat.command_gas where id=678»
- строка MSSQL-запроса обновления, которая в своем составе использует подстановки = номеру столбца из предыдущего SQL-запроса к Oracle. Например, «Update dbo.ask_rec set state=$01$ where id=456» - подразумевается, что нужно присвоить полю state в таблице asc_rec с соотв. ID значение, полученное из предыдущего Oracle запроса.