Показано с 1 по 4 из 4

Тема: Постоянные ошибки сохранения базы ( Cannot save data to DB )

  1. #1
    Новичок
    Регистрация
    31.07.2016
    Адрес
    Вьетнам
    Сообщений
    9
    Поблагодарил(а)
    0
    Благодарностей: 0 (сообщений: 0)

    Post Постоянные ошибки сохранения базы ( Cannot save data to DB )

    Ув. Форумчане. Столкнулся с проблемой, с решением которой поддержка никак не может помочь.
    Сервер на ксеоне + 32 гига оперативки. Всего порядка 10 терминальных лицензий +4 мобильные лицензии.
    Хранение данных в базе выставлено в 30 дней.
    Вес файла базы 32 гигабайта. вес лога 81 гигабайт.
    Каждый день вылетает ошибка Cannot save data to DB. Лечится перезагрузкой сервера, но сервер с первого раза не всегда запускает базу + сама загрузка в базу может занимать по 30 минут.
    Вот только что опять звонили из ресторана. На официантском терминале висят открытые столы, но на кассе они не появляются, естественно нельзя расчитать людей. База опять пишет что невозможно сохранить данные. Такая проблема уже несколько раз в день, поддержка более 3х месяцев пытается решать проблему, но теперь вовсе забили. До этого пробовали ограничивать память sql, но не помогало.
    В логе ошибок сначала появляется вот такая строчка

    [2016-09-19 20:31:38,994] WARN [http-bio-8080-exec-121@117.3.82.229] (resto.rpc.ServiceMethodCaller) Error calling method public static resto.back.cache.EntitiesUpdate resto.back.cache.UpdateService.getEntitiesUpdate(i nt,int)
    resto.RestoException: Failed to flush data to database within given timeout
    затем
    [2016-09-19 20:31:38,994] ERROR [http-bio-8080-exec-121@117.3.82.229] (resto.rpc.ServicesServlet) Service call 'update.getEntitiesUpdate' failed, entitiesUpdates: null
    resto.RestoException: Failed to flush data to database within given timeout

    затем
    [2016-09-19 20:34:41,702] WARN [Thread-3] (resto.watchdog.EntitiesFlushTimerChecker) Cannot save data to DB for 5 minutes. The system has been transferred to emergency mode and will be stopped within 54 minutes. Data may be lost upon continuing work. Contact your system administrator or support immediately!



    Вот несколько скринов ошибки во время работы.
    image-0-02-01-8ee13dcf43339802d0db89d8624038246c66e1067f3bf91e363cb6d76d536069-V.jpgimage-0-02-01-d51902d35d36ef098c58c3d567e9edf30d7b3abba0f7298a394b89c9fd7ff5f9-V.jpgimage-0-02-01-ec150786f1e303f2070f132b6c58707fbacb1c7850a236b581b7d3d7b66d3675-V.jpgimage-0-02-01-fcc607c61fd17d76e7eb0807ab84b1689897aaaf7c2b0a019367ecb7746ca20c-V.jpg

    Пожалуйста подскажите как решить данную проблем.
    Еще в логе в течеии дня вот такие ошибки [2016-09-19 19:53:19,306] ERROR [scheduler_Worker-5] (resto.iikonet.MQChecker) JMS: crmId is not consistent
    [2016-09-19 19:53:19,306] ERROR [scheduler_Worker-7] (resto.iikonet.MQChecker) JMS: crmId is not consistent
    [2016-09-19 19:00:50,223] WARN [Resto Executor] (resto.back.cache.AemUpdateManager) Building 'committed' update from revision 6145792 to 6145793 for BACK. Cache states: committed 6135794..6145793 (6145793), flushed 6100467..6145793 (6145792) (inconsistent revision!)
    resto.RestoException: Building 'committed' update from revision 6145792 to 6145793 for BACK. Cache states: committed 6135794..6145793 (6145793), flushed 6100467..6145793 (6145792) (inconsistent revision!)
    Спасибо
    Последний раз редактировалось ipf; 19.09.2016 в 18:37.

  2. #2
    Интересующийся Аватар для banrofun
    Регистрация
    16.09.2016
    Адрес
    СПБ
    Сообщений
    47
    Поблагодарил(а)
    0
    Благодарностей: 2 (сообщений: 1)
    По умолчанию задан таймаут 5 минут, в течении которого iikoTomcat должен обработать полученные данные и записать их в базу.
    Если данные не сохранились за такой таймаут, система выводит предупреждение.
    ==
    Не удалось сохранить данные в БД в течение 5 минут. Система переведена в аварийный режим работы и будет остановлена через 54 минут. При продолжении работы возможна потеря данных. Срочно свяжитесь с системным администратором или со службой поддержки!!!
    ==
    Если время в предупреждении не превышает 20 минут, как правило, проблемы нет.
    Сервер мог получить большой пакет данных ( например в результате репликации) и должен их обработать.
    Или , например, задним числом правились техкарты или заводились документы.
    В таком случае сервер должен сначала обработать эти данные, пересчитать себестоимости и тд.
    В зависимости от мощности машины (Disk i/o time) это может занимать некоторое время, в течении которого запись в базу не идет и выходит предупреждение.

    Если время в предупреждении превышает 1 час это уже может свидетельствовать о проблемах.
    Но если на сервере был открыт большой период редактирования и проводили документ, кторый делает приход на отрицательные остатки не торопитесь останавливать сервер!
    Дайте ему обработать и записать данные!

    1 Переведите режим запуска службы Томкат с "Автоматически (Automatic)" на "Ручной (Manual)" и Остоновите Tomcat
    2. Выполните скрипт проверки БД Resto на ошибки:
    DBCC CHECKDB ('Resto') WITH NO_INFOMSGS, ALL_ERRORMSGS
    (Если у вас проблемы с базой Чейн, то скрипт должен быть DBCC CHECKDB ('Chain') WITH NO_INFOMSGS, ALL_ERRORMSGS)
    3. Если в БД обнаружены ошибки (строки в логе красного цвета, в конце логи строка вида «CHECKDB found ... allocation errors and ... consistency errors in database 'Resto'», где "..." - ненулевое значение) , то:
    • забэкапьте файлы базы (посмотрите путь к ним в свойствах базы - пункт Файлы)
    • сохраните данные этого лога и оформите заявку в службу тех.поддержки. Не забудьте приаттачить к заявке лог скрипта, логи сервера, а также напишите параметры подключения к серверу с проблемной БД.
    4. Ошибки Жесткого диска ( физическое повреждение или логическое , вызванное как правило первой причиной )

    Решение : Замена жесткого диска и только после переноса данных на новый диск применить скрипты из решения ниже

    Если база данных в состоянии Suspect (Подозрительный), то сначала ее нужно перевести в аврийный режим. Исправлять базу в режиме Suspect невозможно.
    Для этого нужно выполнить скрипт:
    ALTER database Resto SET EMERGENCY
    После этого можно выполнить проверку базы ( пункт 2)
    Если последння строка , которую показавает скрипт проверки вида:
    repair_rebuild is the minimum repair level for the errors found by DBCC CHECKDB (Resto).
    И база не показывается как Аварийная, можно вылечить ее простым перестроением несогласованных данных ( индексов)
    alter database resto set single_user with rollback immediate
    go
    dbcc checkdb('resto',repair_rebuild) with no_infomsgs,all_errormsgs
    go
    alter database resto set multi_user

    Скрипт Напишет, что завершился с ошибками покажет строки вида:
    CHECKDB found 0 allocation errors and 2 consistency errors in database 'Resto'.
    CHECKDB fixed 0 allocation errors and 2 consistency errors in database 'Resto'

    Завершился с ошибками - означает, что ошибки были в базе при выполнении скрипта.
    В строках говорится сколько ошибок нашел(CHECKDB found ) и сколько исправил (CHECKDB fixed )
    Если исправил все, что нашел, значит база починена.
    Можно еще раз проверить базу на ошибки и при их отстуствии ззапускать томкет.

    Мне помогало.

  3. #3
    Новичок
    Регистрация
    31.07.2016
    Адрес
    Вьетнам
    Сообщений
    9
    Поблагодарил(а)
    0
    Благодарностей: 0 (сообщений: 0)
    Добрый день. Спасибо, все прошло как вы говорили. Скрипт нашел 2 ошибки и исправил их. Следующая проверка показала что ошибок больше нет. Но проблема осталась как и была. Существует ли способ как либо сократить базу, например урезав данный 3х годичной давности ?
    Еще вопрос в айке есть очистить лог транзакций Б.Д. Никогда не использовал, поскольку не знаю что это такое. Может поможет ?
    С дисками тоже все в порядке, у меня установлены 2 wd black, в raid1. Ошибок не выводит, им около 5 месяцев.

  4. #4
    Интересующийся Аватар для banrofun
    Регистрация
    16.09.2016
    Адрес
    СПБ
    Сообщений
    47
    Поблагодарил(а)
    0
    Благодарностей: 2 (сообщений: 1)
    Как сократить базу: Базу можно обрезать.
    Процедуры обрезки РМС и Чейн не зависят друг от друга. Можно обрезать либо то, либо другое, либо и то и другое.
    Версия желательно чтобы была последняя 4.2.3006.0 (на момент обновления этой статьи) так как было много изменений, в том числе по проблемам обрезки

    Запускается по адресу
    http://host:port/resto/service/maint...nkDatabase.jsp
    Принцип работы простой: ввести дату, до которой обрезать, нажать кнопку, через 2-10 минут урезанная БД готова.
    Порядок действия для оптимальной обрезки:

    1.Остановить томкет.
    2.Снять бекап.
    3.Сделать период в 1 день для ускорения запуска.
    4.В server.xml сменить порт со штатного, чтобы ничего не мешало ( фронты, беки, обмены)
    5. Запустить томкет.
    6. Запустить скрипт обрезки базы на изменнном ранее порту.
    7. Проконтролировать его работу как в браузере, так и по логу по словам DBShrinker ( Удобнее всего в FAR Manager . который читает full.log сервера онлайн)
    8.По завершению работы скрипта остановить томкет.
    9. Дефрагментировать и сжать базу.
    10. Вернуть на место порт и период.
    11. Запустить томкет
    12. Наслаждаться уменьшенной базой

    Удаляются все исторические данные, которые имеют дату (документы, транзакции, техкарты, события, и т.п.) до указанной даты. Никакие справочники не удаляются. Начальные балансы по счетам сохраняются.
    ВНИМАНИЕ: создаваемые скриптом приходные накладные нельзя перепроводить, в том числе репликацией!
    Они не валидны: строки могут содержать отрицательные количества товаров, а проводки имеют бОльшую точность, чем у обычных накладных, эта информация теряется при перепроведении.
    ВНИМАНИЕ: дата обрезки должна быть ДО начала периода.



    Это не просто защита от дурака, чтобы не удалить слишком много. После обрезки нельзя расширять период, чтобы включить дату обрезки, это приведет к расхождению себестоимости.


    Начальные остатки и себестоимость сохраняются в накладные от поставщика «Администратор».

    При обрезке даты необходимо указать дату на которую нужно обрезать. Например нужно удалить все до 1 июля - ставить дату 01.07.2011.
    Удалятся документы и кассовые смены до этой даты, на 00:00 остатки заведутся приходными накладными от имени поставщика Администратор.
    Еще вопрос в айке есть очистить лог транзакций Б.Д. Никогда не использовал, поскольку не знаю что это такое. Может поможет ?

    Очистить лог можно, но обычно это делается если. Файл транзакций Resto_log.ldf в разы превышает файл базы Resto.mdf.

    Но проблема осталась как и была.


    Что бы сделал я еще:
    1. Проверить доступность дискового пространства на диске куда сохраняются бекапы
    2. Проверить журналы Windows:
    · Системы - на наличие ошибок диска, и др ошибки
    · Приложений – на ошибки и предупреждения от SQL сервера
    3. Просмотреть логи сервера Tomcat на наличие ошибок %programfiles%\iikoRMS\Server\logs\error.log и full.log
    4. Проверить, чтобы размер файла логов БД %programfiles%\iikoRMS\Server\DatabaseData\Resto_l og.ldf не превышал более чем в 4 раза размер файла данных БД %programfiles%\iikoRMS\Server\DatabaseData\Resto.m df
    5. Просмотреть наличие в папке %programfiles%\iikoRMS\Server\DatabaseData\ файлов с именем Suspend_
    6. Подключиться через SQL Management Studio к инстансу Resto и развернуть структуру таблиц БД Resto
    7. Выполнить запрос dbcc checkdb к БД Resto. Результат=зеленый галочка: БД Resto без ошибок, иначе – что-то не так. Если что-то не так , переходите к пункту 11
    8. Выполнить запрос dbcc checkdb к служебным БД master, msdb, model . Результат=зеленая галочка: , иначе – что-то не так. Если что-то не так , переходите к пункту 11
    9. Просмотреть наличие в папке %programfiles%\iikoRMS\Server\ файлов unsaveddata.xml или unsaveddata.xml.old
    10. Если таковые файлы есть, то необходимо остановить службу сервера iiko Appache Tomcat, чтобы касса и станции ушли в автономный режим.
    11 Остановить службу SQL и скопировать все файлы из папки %programfiles%\iikoRMS\Server\DatabaseData\ на ДРУГОЙ физический носитель
    12. При положительных результатах проверки по пп 3, 4,8 должно быть произведено обращение:
    Клиентов – к обслуживающей организации, партнеру iiko
    Партнеров – к вышестоящей организации партнеру, или в техподдержку iiko, если такой алгоритм прописан в партнерском договоре

    Проверить доступность дискового пространства на диске куда сохраняются бекапы
    Проверить журналы Windows:
    • Системы - на наличие ошибок диска
    • Приложений (на наличие ошибок с кодами (832, )
      832 Event: A page that should have been constant has changed (expected checksum: 0dc764f0, actual checksum: 0dc764a0, database 6, file 'C:\Program Files (x86)\iikoRMS\Server\DatabaseData\Resto.mdf', page (1:38783)). This usually indicates a memory failure or other hardware or OS corruption.
    3 Остановить службы Tomcat и SQL и скопировать файлы БД в резервное хранилище: %programfiles%\iikoRMS\Server\DatabaseData\Resto.m df и %programfiles%\iikoRMS\Server\DatabaseData\Resto_l og.ldf
    5. Просмотреть наличие в папке %programfiles%\iikoRMS\Server\DatabaseData\ файлов с именем Suspend_ / если есть также скопировать в резервное хранилище
    6. Подключиться через SQL Management Studio к инстансу Resto и развернуть структуру таблиц БД Resto
    7. В файле конфигурации сервера Tomcat C:\Program Files\iikoRMS\Server\tomcat\conf\server.xml измените порт подключения <Connector port="8080" на <Connector port="8070" , чтобы кассы оставались в автономном режиме (перекинуть сервер на другой порт)

    Рекомендации:
    В данной заявке побилась таблица справочников 'entity'.
    8 Запустите службу SQL
    8. Выполните рекомендации 1-7 и можете запустить скрипт проверки и восстановления БД с потерей данных
    9 Проверить корретность процедуры лечения тестовым запуском службыTomcat
    10 Если Tomcat успешно запустится, то можно вернуть порт из п 7 на место и перезапустить Tomcat

    Так же есть платный вариант, могу взять вас в свое обслуживание. (если устали искать проблемы самостоятельно)
    Dead line Неделя с постановки на обслуживание.

    Способ решения будет, как руками наших специалистов, а так же способами разработчиков iiko.


    -------------->ВНИМАНИЕ ПЕРЕД ВЫПОЛНЕНИЕМ НЕ ЗАБУДЬТЕ СДЕЛАТЬ BACKUP<--------------



    Последний раз редактировалось banrofun; 30.09.2016 в 17:55.

Похожие темы

  1. Касса виснет при отмене сохранения заказа с количеством блюд больше 7
    от RomanR в разделе RK: Базы данных, ошибки, проблемы
    Ответов: 1
    Последнее сообщение: 07.03.2016, 00:33
  2. Добавить модификатор после сохранения заказа
    от dio025 в разделе Работа с заказами на станциях в R-Keeper 7
    Ответов: 4
    Последнее сообщение: 22.04.2015, 02:44
  3. Сервер отчетов и пусть сохранения смен.
    от mnekin в разделе Сервер справочников и сервер отчетов R-Keeper 7
    Ответов: 6
    Последнее сообщение: 24.09.2014, 21:45
  4. Ответов: 1
    Последнее сообщение: 26.06.2014, 23:52
  5. Постоянные чеки окончания блюд.
    от rrock.ru в разделе RK: Сервис-печать, принтеры
    Ответов: 11
    Последнее сообщение: 14.06.2013, 18:06

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •