Скрипт для очищения логов

Last modified by Александр Таболин on 2024/04/30 09:27

Информационные материалы проекта UNA » Регламенты Unisim-Soft » IT

Очистка логов в базах данных обычно выполняется по нескольким причинам:

  1. Управление размером: Логи могут занимать значительное дисковое пространство, особенно в системах с высокой нагрузкой. Очистка помогает контролировать размер базы данных и предотвращает ее переполнение.
    2. Повышение производительности: С течением времени большое количество логов может замедлить процесс поиска и обработки данных. Очистка старых записей может улучшить скорость выполнения запросов.
    3. Обеспечение конфиденциальности: Логи могут содержать чувствительную информацию. Их регулярная очистка помогает защитить конфиденциальные данные от несанкционированного доступа.
    4. Соответствие нормативным требованиям: Некоторые отраслевые стандарты и законодательные акты требуют удаления старых логов для соответствия политикам хранения данных.

Важно отметить, что перед очисткой логов следует убедиться в наличии всех необходимых резервных копий и понимании последствий удаления данных. Также стоит рассмотреть возможность архивации важных логов перед их удалением.

Скрипт с минимальной зависимостью от SQL*Plus. Годится только для таблиц логов, которые никем не блокируются:

create table xprocess_log_bak as select * from xprocess_log where LOG_DATE between trunc(sysdate,'yyyy') and trunc(sysdate);
select count ( * ) from  xprocess_log_bak;
accept dummy prompt "Press enter"
insert into xprocess_log_bak select * from xprocess_log where LOG_DATE> trunc(sysdate);
commit;
truncate  table xprocess_log;
insert into xprocess_log select * from xprocess_log_bak;
 commit;
drop table xprocess_log_bak;

Нужно указывать нужную таблицу, поле даты и период.
Сперва долго копируется выбранный период за исключением сегодня. Затем быстро копируется сегодня и очищается таблица. Потом скопированные данные восстанавливаются. Потеря логов возможна за доли секунды.

Последние две команды лучше делать вручную, видя, что всё нормально.

Этот SQL-скрипт выполняет следующие действия:

  1. Создает новую таблицу xprocess_log_bak как копию данных из таблицы xprocess_log, где дата лога (LOG_DATE) находится в пределах текущего года.
    2. Выполняет подсчет количества записей в новой таблице xprocess_log_bak.
    3. Запрашивает у пользователя нажать Enter (это может быть частью скрипта, который выполняется в интерактивном режиме).
    4. Вставляет в таблицу xprocess_log_bak данные из xprocess_log, где дата лога больше текущей даты.
    5. Фиксирует изменения в базе данных (commit).
    6. Очищает (truncate) таблицу xprocess_log, удаляя все ее содержимое без возможности восстановления.
    7. Вставляет обратно данные из xprocess_log_bak в xprocess_log.
    8. Закомментированные строки с commit и drop table указывают на то, что эти действия были временно отключены, но могут быть включены при необходимости.

Важно отметить, что такие операции как truncate и drop могут быть рискованными, так как они необратимо удаляют данные. Поэтому перед их использованием всегда следует убедиться в наличии резервных копий и понимании всех последствий. Кроме того, использование commit фиксирует все изменения, делая их постоянными. Пожалуйста, убедитесь, что вы полностью понимаете логику и последствия выполнения этого скрипта перед его запуском.