Удаление логов из базы данных
При длительном использовании ПО Shelter увеличивается размер БД, т.к. действия пользователей логируются и записываются в таблицы LOG$FIELDS и LOG$TABLES.
Для удаления логов из БД, сначала необходимо выполнить диагностику базы. Подключится к БД и запустить диагностику можно с помощью программы IBExpert (Рис. 1).

Рис. 1
После выполнения диагностики результаты можно посмотреть на вкладке «Tables» поля «Size» для таблиц LOG$FIELDS и LOG$TABLES (Рис. 2).

Рис. 2
Для удаления всех логов необходимо выполнить следующие скрипты:
1. Удаление логирования из таблицы LOG$FIELDS
delete from log$fields;
commit;
2. Удаление логирования из таблицы LOG$TABLES
delete from log$tables;
commit;
Для удаления логов за определенный период необходимо выполнить следующий скрипт:
delete from LOG$TABLES LT where LT.DATE_TIME < d2dbl('now') - 30;
delete from LOG$FIELDS LF where not LF.LOG_TABLES_ID in (select LT.ID from LOG$TABLES LT where LT.ID = LF.LOG_TABLES_ID);
commit;
После выполнения данного скрипта, в БД останутся логи за 30 дней, остальные будут удалены.
Для уменьшения размера БД необходимо сделать backup / restore.
Для автоматического удаления логов необходимо в «Планировщик заданий» Windows добавить простую задачу с выполнением .bat файла, рядом с котором должен быть файл script.sql.
Содержание .bat файла:
@rem Указать путь до isql.exe
@echo off
set isql="C:\Program Files (x86)\Shelter\Firebird\bin\isql.exe"
set sqlPath=%~dp0
set sqlFile=%sqlPath%script.sql
%isql% -input %sqlFile%
Содержание script.sql:
CONNECT 'localhost/3080:C:\_BASE\SHELTER.FDB' user 'ucs' PASSWORD 'ucs';
delete from LOG$TABLES LT where LT.DATE_TIME < d2dbl('now') - 30;
delete from LOG$FIELDS LF where not LF.LOG_TABLES_ID in (select LT.ID from LOG$TABLES LT where LT.ID = LF.LOG_TABLES_ID);
commit;