Перейти к основному контенту

Удаление логов из БД

  При продолжительном использовании ПО "Абонемент" работающего в связке с утилитами gkHost и GkHostConnect (модуль управления турникетами), вся информация о каждой попытке прохода сохраняется в таблице Access_Control_Log, которая может достигать больших размеров (порядка нескольких гигабайт).

  Для данного случая был подготовлен скрипт "AutoDelete_Access_Control_Log", оставляющий в упомянутом выше файле информацию за последние 90 дней.

  На Рисунках 1,2,3 отражена последовательность действий в программе IBExpert для уточнения размера служебного файла (имеется ли смысл в применении данного скрипта).

Рис.1 "Заходим в программу IBExpert, щелкаем левой кнопкой мыши (один раз) по алиасу нашей рабочей базы в списке "Database Explorer", далее  нажимаем "Services" -> "Database Statistics";

Рис.2 "Откроется окно в котором нужно будет нажать на кнопку "Retrieve Statistics";

Рис.3 "Далее будет выведена статистика базы, переходим на вкладку "Tables" и обращаем внимание на колонку "Size, bytes".


Соответственно из "Рис.3" видим - файл ACCESS_CONTROL_LOG занимает 4.8 Гб, понимаем, что применение скрипта в данном случае актуально.

Удаление логов взаимодействия оборудования с БД "Абонемент"

Скрипт состоит из 2 частей ("*.bat" и "*.sql"):

Содержание файла "AutoDelete_Access_Control_Log.bat":

set isql="C:\Program Files (x86)\Firebird\FireBird_2_5\bin\isql.exe"  
set sqlPath=%~dp0
set sqlFile=%sqlPath%AutoDelete_access_control_log.sql
%isql% -input %sqlFile% 

Содержание файла "AutoDelete_Access_Control_Log.sql":

/*Удаляет логи взаимодействия с оборудованием.
Оставляет только последние 90 дней*/
CONNECT '127.0.0.1/3080:D:\_FITNESS\IBData\FITNESS.FDB' USER 'ucs' PASSWORD 'ucs';
delete from access_control_log acl where acl.regdate < d2dbl('now') - 90;
commit work;

Удаление логов действий пользователей из БД "Абонемент" до заданной даты

Совместно со скриптом указанным выше, возможно (на усмотрение Заказчика) удаление логов действий пользователей в БД "Абонемент".

Содержание файла "AutoDelete_IBHistory_Log.bat":

set isql="C:\Program Files (x86)\Firebird\FireBird_2_5\bin\isql.exe"  
set sqlPath=%~dp0
set sqlFile=%sqlPath%AutoDelete_IBHistory_Log.sql
%isql% -input %sqlFile% 

Содержание файла "AutoDelete_IBHistory_Log.sql":

/*Удаляет логи до заданной даты. */ 
CONNECT '127.0.0.1/3080:D:\_FITNESS\IBData\FITNESS.FDB' USER 'ucs' PASSWORD 'ucs';
delete from sys_history;
delete from sys$log sl where sl.regdate<d2dbl('ДД.ММ.ГГГГ');
commit work;

Вся история изменений до ДД.ММ.ГГГГ будет удалена.

Скрипт AutoDelete_IBHistory_Log.sql, как и в случае AutoDelete_Access_Control_Log.sql, можно настроить на периодическое выполнение через "Планировщик задач" MS Windows.

При выполнении скрипта отдавайте себе отчет, что вносимые изменения необратимы! Рекомендовано все скрипты выполнять изначально на тестовой БД!

После выполнения любых скриптов по очистке логов необходимо сделать backup/restore 

 
 

Пример использования скрипта, в результате которого будет поддерживаться актуальная информация о проходах за последние 90 дней в таблице Access_Control_Log БД Абонемент(Создание задачи в "Планировщике задач" MS Windows):

***Данный пример, также актуален для использования скрипта AutoDelete_IBHistory_Log.sql***
Рис.4 "Заходим на сервере БД в <Планировщик заданий> MS Windows, переходим в списке  в <Библиотеку планировщика> (слева) и в списке <Действия> (справа) нажимаем <Создать задачу...>
 
Рис.5 На вкладке <Общие> указываем <Имя:> задачи и параметр <Настроить для:> - соответствующую операционную систему 
 
Рис.6 Переходим на вкладку <Триггеры>, нажимаем кнопку <Создать...> и указываем параметры триггера: "Ежедневно", "Повторять каждые: 1 дн.", "Включено" и нажимаем кнопку "ОК"
 
Рис.7 Переходим на вкладку <Действия>, нажимаем кнопку <Создать...> и указываем параметры действия: "Запуск программы", "Программа или сценарий: указываем путь к *.bat файлу" и нажимаем кнопку "ОК"
 
 
Рис.8 После создания действия, нажимаем кнопку  "ОК" - задача создана.