В Артиксе на кассе есть две основные БД: спровчники (dictionaries) и документы (documents). Инодга при выключении кассы по питанию либо сбоев в жестком диске падает БД справочников, но касса все равно загружается и продолжает работу, только не видит либо товары либо кассиров (наиболее распространенные). При этом в логе кассы есть ошибки про невозможность выполенения select-а из базы.
Есть 2 варианта восстанвления работоспособности:
1. Пересоздание БД
2. Ремонт таблиц.
Пересоздание БД целесообразно, если нет больших справочников товаров, которые необходимо загружать в кассу. Под большими справочниками панимается более 1 млн записей например карт или товаров. Для среднего магазина количество товаров обычно до 50тыс записей и процесс загрузки произойдет достаточно быстро.
Что сделать на кассе:
1. Остановить mysql
service mysql stop
2. Остановить сервисы обмена
service nes stop
service sync-core2 stop
3. Удалить БД
rm -R /linuxcash/cash/data/mysql/dictionaries
4. запустить mysql
service mysql start
5. Запустить скрипт на создание/обновление БД
/linuxcash/cash/data/db/update_db
6. Запустить сервисы обмена
service nes start
service sync-core2 start
7. Сделать полную выгрузку на кассу всех справочников через КС через веб. Проще стать на кассу, поставить галочку "Сезонна касса" и снять ее, согласиться с полной выгрузкой. При необходимости вручную подтолкнуть выгрузку на кассу.
Ремонт таблиц целесообразно делать если плохие каналы связи или большие справочники (например 3 млн дисконтных карт)
Отступление: в БД справочников есть по две таблицы с цифрами в конце названия 1 или 2. В каждой хранится информация, а ротация таблиц происходит только после полного обовления данных в ней. Для простоты просмотра есть вьюхи, например: таблицы tmc1 и tmc2 а вьюха tmc, которая покажет данные из текущей таблицы.
Для восстановления таблиц необходимо :
1. Выяснить какая таблица умерла. Для этого можно смотреть логи mysql /var/log/mysql и логи NES /linuxcash/logs/current/nes*.log
Там будет информация о битых файлах. Чаще всего падают *.frm
2. Остановить сервисы обмена и загрузки в БД
service nes stop
service sync-core2 stop
3. Войти в mysql и удалить таблицу
mysql
use dictionaries;
DROP TABLE roleuser2;
4. Получить структуру таблицы с индексом отличным от упавшей:
show create table roleuser1;
5. Скопировать в блокнот создание таблицы:
CREATE TABLE `roleuser1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`usercode` varchar(30) NOT NULL,
`rolecode` int(11) NOT NULL,
`rule` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=78 DEFAULT CHARSET=utf8
6. Заменить название таблицы на другой индекс, добавить в конце ";" выполнить:
CREATE TABLE `roleuser2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`usercode` varchar(30) NOT NULL,
`rolecode` int(11) NOT NULL,
`rule` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=78 DEFAULT CHARSET=utf8;
7. Стартануть сервисы обмена
service nes start
service sync-core2 start
8. Перевыгрузить с кассового сервера необходимые справочники.
P.S. Сам чаще использую первый вариант, т.к. реально проще и быстрее)))