Wiki source code of Скрипт для очищения логов
Last modified by Александр Таболин on 2024/04/30 09:27
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 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 фиксирует все изменения, делая их постоянными. Пожалуйста, убедитесь, что вы полностью понимаете логику и последствия выполнения этого скрипта перед его запуском. |