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

Show last authors
1 ^^[[Информационные материалы проекта UNA>>http://xwiki.una.md/bin/view/UNA/WebHome]] (% class="separator" %)»(%%) [[Регламенты Unisim-Soft>>http://xwiki.una.md/bin/view/UNA/Reglament_docs]] (% class="separator" %)»(%%) [[IT>>http://xwiki.una.md/bin/view/UNA/IT]]^^
2
3 Очистка логов в базах данных обычно выполняется по нескольким причинам:
4
5 1. Управление размером: Логи могут занимать значительное дисковое пространство, особенно в системах с высокой нагрузкой. Очистка помогает контролировать размер базы данных и предотвращает ее переполнение.
6 2. Повышение производительности: С течением времени большое количество логов может замедлить процесс поиска и обработки данных. Очистка старых записей может улучшить скорость выполнения запросов.
7 3. Обеспечение конфиденциальности: Логи могут содержать чувствительную информацию. Их регулярная очистка помогает защитить конфиденциальные данные от несанкционированного доступа.
8 4. Соответствие нормативным требованиям: Некоторые отраслевые стандарты и законодательные акты требуют удаления старых логов для соответствия политикам хранения данных.
9
10 Важно отметить, что перед очисткой логов следует убедиться в наличии всех необходимых резервных копий и понимании последствий удаления данных. Также стоит рассмотреть возможность архивации важных логов перед их удалением.
11
12 Скрипт с минимальной зависимостью от SQL*Plus. Годится только для таблиц логов, которые никем не блокируются:
13
14 (% style="font-size: 14px; font-family: Consolas; background-color:#fbfdff" %)
15 create table xprocess_log_bak as select * from xprocess_log where LOG_DATE between trunc(sysdate,'yyyy') and trunc(sysdate);
16 select count ( * ) from xprocess_log_bak;
17 accept dummy prompt "Press enter"
18 insert into xprocess_log_bak select * from xprocess_log where LOG_DATE> trunc(sysdate);
19 commit;
20 truncate table xprocess_log;
21 insert into xprocess_log select * from xprocess_log_bak;
22 -- commit;
23 -- drop table xprocess_log_bak;
24
25 Нужно указывать нужную таблицу, поле даты и период.
26 Сперва долго копируется выбранный период за исключением сегодня. Затем быстро копируется сегодня и очищается таблица. Потом скопированные данные восстанавливаются. Потеря логов возможна за доли секунды.
27
28 Последние две команды лучше делать вручную, видя, что всё нормально.
29
30 Этот SQL-скрипт выполняет следующие действия:
31
32 1. Создает новую таблицу xprocess_log_bak как копию данных из таблицы xprocess_log, где дата лога (LOG_DATE) находится в пределах текущего года.
33 2. Выполняет подсчет количества записей в новой таблице xprocess_log_bak.
34 3. Запрашивает у пользователя нажать Enter (это может быть частью скрипта, который выполняется в интерактивном режиме).
35 4. Вставляет в таблицу xprocess_log_bak данные из xprocess_log, где дата лога больше текущей даты.
36 5. Фиксирует изменения в базе данных (commit).
37 6. Очищает (truncate) таблицу xprocess_log, удаляя все ее содержимое без возможности восстановления.
38 7. Вставляет обратно данные из xprocess_log_bak в xprocess_log.
39 8. Закомментированные строки с commit и drop table указывают на то, что эти действия были временно отключены, но могут быть включены при необходимости.
40
41 Важно отметить, что такие операции как truncate и drop могут быть рискованными, так как они необратимо удаляют данные. Поэтому перед их использованием всегда следует убедиться в наличии резервных копий и понимании всех последствий. Кроме того, использование commit фиксирует все изменения, делая их постоянными. Пожалуйста, убедитесь, что вы полностью понимаете логику и последствия выполнения этого скрипта перед его запуском.