Номер регламента | Вид обслуживания | Периодичность | Необходимые программы |
---|---|---|---|
1 | Копирование базы данных | Ежедневно | см. Batch-файл резервного копирования |
2 | Удаление событий старше заданного периода | Ежемесячно | DBClean |
3 | Удаление неактивных пользователей | Ежеквартально | С помощью программы IBExpert запросом delete from people p where p."ACTIVE"=0 |
4 | Бэкап-Ресторе базы данных | Ежеквартально | DBClean |
5 | Автоматическая чистка базы данных | Ежедневно | db_skud_service.zip Открыть архив в любую папку. Проверить пути к исполняемым файлам. Настроить Назначенные задания на запуск файла db_SKUD_service.bat в указанное время (лучше ночью, т.к. процесс очистки может занимать длительное время). — Бухаров А.В. 11.01.2020 10:49 Содержимое файла db_SKUD_service.sql изменено согласно SQL запросы для удаления событий и содержит необходимые команды для удаления событий. |
— Бухаров А.В. 2019/06/17 08:58
№ п/п | Название | IP адрес | Логин | Пароль | Версия БД | Версия Сити |
---|---|---|---|---|---|---|
1 | Дххххххх | 192.168.222.1 | ХХХ | |||
2 | Фххх | 192.168.230.9 | СКД | |||
3 | Вххххх | 192.168.230.5 | Восток | |||
4 | Рххххххххх | 192.168.183.200 | Артсек | |||
5 | Дхххххх | 192.168.222.1 | Administrator | |||
6 | Шххххххх | 192.168.230.4 | administrator | 1.2.5 | ||
7 | Зххххххх | 192.168.23.119 | Запад | 1.2.5 |
№ п/п | Сервис, программа | Объект | ||||
---|---|---|---|---|---|---|
Доминион | Резиденция | Лайнер Восток | Шуваловский | Балчуг | ||
1 | Автоматический бэкап базы данных | Нет. — Бухаров А.В. 2019/06/18 08:56 | Есть, в папку C:\service. — Бухаров А.В. 2019/06/18 08:49 | |||
2 | Сбор статистики по контроллерам | Есть, сбор данных разделен по типам контроллеров (Адемант и Артонит) — Бухаров А.В. 2019/06/18 08:58 | Есть, проверен — Бухаров А.В. 2019/06/18 08:46 — | - | Есть, проверен — Бухаров А.В. 10.03.2020 23:51 | |
3 | Автоматическое удаление неизвестного идентификатора | Нет — Бухаров А.В. 2019/06/21 14:01 | Есть | |||
4 | Панель управления Артонит Сити вер. 1.2.5 | |||||
5 | AServer | 1.2.0.27 | 1.2.0.27 |
— Бухаров А.В. 2019/06/17 09:04
БД СКУД не имеют версий. Есть отличительные признаки доработок, которые я излагаю ниже.
№ п/п | Версия | Краткая характеристика | Резиденция |
---|---|---|---|
1 | Базовая Артонит 10 | Имеются таблица ZKSOFT_FP_TAMPLATE для хранения отпечатков пальца | Есть Бухаров А.В. 2019/06/18 |
2 | Артонит Сити | Имеются таблицы с характерным началом ss_. | Есть Бухаров А.В. 2019/06/18 |
3 | Статистика | Имеются таблицы с названием st_. Запуск скрипта сбора статистики установлен в шедулер. C:\xampp\curl.exe -L http://127.0.0.1/city/task/stat_device | Есть Есть (был с ошибкой) Бухаров А.В. 2019/06/18 |
4 | Разделение идентификаторов, работа с ГРЗ | CARDTYPE, DEVTYPE_CARDTYPE | Есть Есть — Бухаров А.В. 2019/06/18 |
5 | Дабавлена аналитика событий | В таблицу events добавлено поле analit. В базу данных добавлена процедура EVENT_ANALIT. ALTER TABLE EVENTS ADD ANALIT INTEGER\\ update RDB$RELATION_FIELDS set RDB$DESCRIPTION = 'Результат аналитики событий' where (RDB$RELATION_NAME = 'EVENTS') and (RDB$FIELD_NAME = 'ANALIT')
event_analit_процедура.zip | Добавлена Добавлена Обновлена — Бухаров А.В. 2019/06/19 |
6 | Удаление неизвестного идентификатора | При возникновении события 80 (Проход неизвестного идентификатора) карта автоматически ставится на удаление из всех точек прохода. delete_unknow_card_процедура.zip events_del_unknow_card_trigger.zip | Добавлена Добавлена — Бухаров А.В. 2019/06/19 |
INSERT INTO CARDTYPE (ID, NAME, DESCRIPTION) VALUES (1, 'RFID', 'Карта EM-marine'); INSERT INTO CARDTYPE (ID, NAME, DESCRIPTION) VALUES (2, 'FP', 'Отпечаток пальца'); INSERT INTO CARDTYPE (ID, NAME, DESCRIPTION) VALUES (3, 'ШК', 'Штрих-код'); INSERT INTO CARDTYPE (ID, NAME, DESCRIPTION) VALUES (4, 'ГРЗ', 'Государственный регистрационный знак а/м'); COMMIT WORK;
INSERT INTO DEVTYPE_CARDTYPE (ID_DEVTYPE, ID_CARDTYPE, ID_DB) VALUES (1, 1, 1); INSERT INTO DEVTYPE_CARDTYPE (ID_DEVTYPE, ID_CARDTYPE, ID_DB) VALUES (5, 4, 1); INSERT INTO DEVTYPE_CARDTYPE (ID_DEVTYPE, ID_CARDTYPE, ID_DB) VALUES (6, 1, 1); INSERT INTO DEVTYPE_CARDTYPE (ID_DEVTYPE, ID_CARDTYPE, ID_DB) VALUES (4, 2, 1); INSERT INTO DEVTYPE_CARDTYPE (ID_DEVTYPE, ID_CARDTYPE, ID_DB) VALUES (4, 1, 1); COMMIT WORK;
INSERT INTO DEVTYPE (ID_DEVTYPE, ID_DB, NAME, STANDALONE) VALUES (1, 1, 'Контроллеры Артонит/Адемант', 1); INSERT INTO DEVTYPE (ID_DEVTYPE, ID_DB, NAME, STANDALONE) VALUES (2, 1, 'Контроллеры Артонит (резерв)', 1); INSERT INTO DEVTYPE (ID_DEVTYPE, ID_DB, NAME, STANDALONE) VALUES (3, 1, 'UHF RFID контроллеры', 1); INSERT INTO DEVTYPE (ID_DEVTYPE, ID_DB, NAME, STANDALONE) VALUES (4, 1, 'Biomrteical', 1); INSERT INTO DEVTYPE (ID_DEVTYPE, ID_DB, NAME, STANDALONE) VALUES (5, 1, 'Система распознавания ГРЗ', 1); INSERT INTO DEVTYPE (ID_DEVTYPE, ID_DB, NAME, STANDALONE) VALUES (6, 1, 'Артонит в режиме он-лайн', 0); COMMIT WORK;
"C:\Program Files (x86)\Firebird\Firebird_1_5_6\bin\gbak.exe" -b -v -ig -g "127.0.0.1:C:\Program Files (x86)\Cardsoft\DuoSE\Access\SHIELDPRO_REST.GDB" C:\service\SHIELDPRO_REST_%date%.FBK -USER sysdba -PASSWORD temp
ALTER TABLE EVENTS ADD ANALIT INTEGER
База обновлена и готова к проверке и последующему использованию по назначению.
Удаление - процесс опасный, поэтому я привожу пример select.
При необходимости удаления следует select * заменить на delete.
select * from events e where e.datetime>CURRENT_DATE-2
либо
select * from events e where e.datetime >DATE'today' - 2
9.08.2019 В ходе работы база данных быстро пополняется событиями, что приводит к росту размера базы данных. Большое количество событий в таблице events может приводить к замедлению вставки событий, получаемых от АСервера.
Для автоматизации контроля размера базы данных я предлагаю следующий алгоритм:
№ п/п | Назначение | Срок хранения |
---|---|---|
1 | Оперативный анализ | 14 |
2 | Данные для отчетов | 45 |
3 | Важные данные | 60 |
Код события | Название события | Оперативный анализ | Данные для отчетов | Важные данные |
---|---|---|---|---|
0 | неизвестное событие | + | ||
17 | добавлена карточка | + | ||
18 | удалена карточка | + | ||
19 | изменены параметры карточки | + | ||
32 | добавлен новый сотрудник | + | ||
33 | удален сотрудник | + | ||
34 | изменены данные сотрудника | + | ||
46 | неизвестная карточка | + | ||
49 | дверь открыта кнопкой | + | ||
50 | действительная карточка | + | ||
51 | дверь открыта пользователем | + | ||
52 | дверь открыта всегда | + | ||
55 | дверь закрыта всегда | + | ||
56 | дверь разблокирована | + | ||
65 | недействительная карточка | + |
Удаление указанных событий старше 30 дней delete from events e where e.datetime < CURRENT_DATE-14 and e.id_eventtype in (0, 46, 49)
Удаление указанных событий старше 30 дней delete from events e where e.datetime < CURRENT_DATE-45 and e.id_eventtype in (17, 18, 19, 32, 33, 34, 51)
Удаление указанных событий старше 30 дней delete from events e where e.datetime < CURRENT_DATE-60
— Бухаров А.В. 28.02.2020 08:51
Т.к. в результате нам требуется выполнение всех запросов за один раз, то резонно их собрать в одном файле.
Для анализа состояния базы данных хорошо бы знать и количество событий в журнале, и их распределение по событиями. Все это реализуется в одном файле (см. ниже).
В лог-файле будет отображено время и окончания работы скрипта, количество событий после удаления событий и статистика по событиям:
delete from events e where e.datetime < CURRENT_DATE-45; commit;; delete from events e where e.datetime < CURRENT_DATE-5 and e.id_eventtype in (0, 46, 49, 53, 54, 57, 58); commit;; delete from events e where e.datetime < CURRENT_DATE-5 and e.id_eventtype in (17, 18, 19, 32, 33, 34, 51); commit;; select count (*) from events; commit;; select distinct e.id_eventtype, et.name, count(e.id_event) from events e join eventtype et on et.id_eventtype=e.id_eventtype group by e.id_eventtype, et.name ; commit;; select distinct e.analit, count (*) from events e where e.analit is not null and e.datetime> CURRENT_TIMESTAMP-1 group by e.analit; commit;;
Вывод информации о типах событий и их количество в базе данных.
select distinct e.id_eventtype, et.name, count(e.id_event) from events e join eventtype et on et.id_eventtype=e.id_eventtype group by e.id_eventtype, et.name
Для запрета удаления пользователя Администратор необходимо выполнить указанный ниже скрипт.
/******************************************************************************/ /*** Generated by IBExpert 06.03.2020 16:28:50 ***/ /******************************************************************************/ SET SQL DIALECT 3; SET NAMES WIN1251; SET TERM ^ ; CREATE TRIGGER PEOPLE_MET_DELETE_ADMIN FOR PEOPLE ACTIVE BEFORE DELETE POSITION 0 AS begin if (old.id_pep = 1) then exception deletenotallowed; end ^ SET TERM ; ^