|
|
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! В приложении используется связь с удаленной БД MySQL. Т.к. в нем идёт обработка очень важных данных (бухгалтерия), решил все добавления/изменения/удаления записей записывать в отдельную таблицу, т.е. вести лог. В целях бехопасности и для удобства реализовал это с помощью хранимых функций. Проверил - всё работает. Вчера посомтрел логи, и обнаружил, что некоторые записи дублируются, а некоторые - нет. Не могу понять в чём дело. Функция вызывается один раз, а выполняется от 1 до 3 раз. При чем на моём ПК дублирования ни разу не происходило, а на ПК сотрудников происходит... Что это может быть? Какие есть мысли? Заранее спасибо! Прилагаю скриншот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 16:56:58 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, забыл: вот код функции. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 16:58:45 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
fezilk, а почему вы думаете, что виновата функция? На мой взгляд виноват либо юзер, который что-то там дважды нажимает, либо код, который вызывает эту функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 17:04:39 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
fezilk, кстати, возня с двумя часами очень похожа на костыль и может аукнуться в будущем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 17:05:45 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
miksoft, дело в том, что приложение не пошлет запрос, если данные в ячейке таблицы не изменились. Например: в ячейке "должны" было число 5000. пользователь заходит в эту ячейку, пишет 6000, тыкает enter - посылается запрос. заходит еще раз в ячейку - ничего не изменяет, тыкает enter - запрос не идет. Поэтому, скорее всего, виновата функция.. Костыль с часами - это часовая зона (+2ч. от сервера), это лишь для удобства просмотра лога и нигде не используется больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 17:16:16 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
fezilkmiksoft, дело в том, что приложение не пошлет запрос, если данные в ячейке таблицы не изменились.Но время-то в логе разное. Что может программа делать 6 секунд? Кстати, триггеров на таблицах нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 17:20:46 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
miksoft, триггеров нет.. а есть идеи, как можно отловить, например, второй вызов функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 17:23:04 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
fezilkКостыльиспользовали бы timestamp вместо двух полей дата+время, и можно было бы не городить огород, а воспользоваться этим http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 17:29:17 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
А еще вы неправильно логируете oldtext. Процедура не должна верить тому, что приходит извне и должна сама читать данные из таблицы. Мог произойти примерно такой сценарий: сессия1сессия2чтение--чтениезапись--записькаждая из сессий получает команду на редактирование, видит, что данные изменились и производит изменения. Это архитектурный просчет, имхо. Система не должна позволять менять что-то, если другой пользователь/сессия взяли этот бизнес-объект (накладная, заказ и т.п.) на редактирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 17:29:31 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
miksoft, хм.. да, нужно разобраться с этим, спасибо за подсказку. но, думаю, такой сценарий не происходил - ID юзера были бы разные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 18:14:04 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
fezilkно, думаю, такой сценарий не происходил - ID юзера были бы разныеОдин юзер не мог залогиниться дважды в двух запущенных программах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 18:27:36 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
miksoft, теоретически - мог, но не было такого - узнал сейчас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 18:35:52 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
fezilk, Тогда ищите ошибку в коде программы. Возможно, при проверке необходимости изменений она руководствуется "несвежими" данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 18:39:13 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
miksoft, Кстати, еще один интересный момент: (см. скришот в первом посте) запись с id 833 дублирует предыдущую, но у нее указан другой месяц (7 вместо 6). Проверил вручную - записи "руководители" не было в июле. Возможно ли, что при одновременной работе двух сотрудников в таблицей (в разных строках), данные каким-то образом перемешиваются и из-за этого пишется неправильный лог? Если да,то как можно это устранить? Структура такая: есть таблица "ДОХОД" за июль, в ней около 100 строк. Один пользователь редактирует первую строку, второй - сотую. (При редактировании вызывается одна и та же функция, ей передаются параметры, к-ые нужно изменить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 18:46:50 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
fezilk, опять же, в 10 вечера несколько сотрудников работать не могут.. значит работал один юзер, при этом дублировалась запись с задержкой в 9 секунд и неправильным месяцем.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 18:49:09 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
fezilkmiksoft, Кстати, еще один интересный момент: (см. скришот в первом посте) запись с id 833 дублирует предыдущую, но у нее указан другой месяц (7 вместо 6). Проверил вручную - записи "руководители" не было в июле.Тогда тем более ищите ошибки в программе. Не забудьте переделать логирование oldtext, о чем я писал выше. Возможно, это что-то прояснит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 19:01:21 |
|
||
|
Хранимая функция ИНОГДА дублирует своё выполнение
|
|||
|---|---|---|---|
|
#18+
в программе ошибок не нашел, временно заменил функции на триггеры - посмотрим, будет ли дублирование с ними. отпишусь о результатах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 02:00:41 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38325840&tid=1836373]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 191ms |
| total: | 280ms |

| 0 / 0 |
