У меня есть очень простая таблица на Oracle 10g, которая хранит сообщения журнала от процесса. Эта таблица генерирует около 1 ГБ в день. Я хотел бы сохранить только 1 неделю данных.

Каков наилучший подход для достижения этой цели? Создать процедуру, которая постоянно удаляет старые данные? Нужно ли использовать разделы?

Я могу удалить / усечь / удалить всю таблицу, если это необходимо.

Это таблица:

CREATE TABLE "TABLE_LOGS" 
   (    
    "TABLE_ID" VARCHAR2(200 BYTE), 
    "TABLE_NUMBER" NUMBER(19,0), 
    "DESCRIPTION" VARCHAR2(2000 BYTE), 
    "DATE" TIMESTAMP (6), 
    "TYPE" VARCHAR2(100 BYTE), 
    "LEVEL" NUMBER(*,0)
   )
0
Rodrick 1 Мар 2017 в 00:18

2 ответа

Лучший ответ

Это не обязательно, но разделение может быть эффективной стратегией. Термин Управление жизненным циклом информации (ILM) часто используется. Если вы создаете диапазон таблиц, разделенных по дням, вы можете просто обрезать / удалить самый старый раздел, чтобы у вас было только 7 (или 8) активных разделов. Преимущества этого

  • Обрезать / удалить раздел будет быстрее, чем удалить
  • У вас будет лучшее управление пространством.
2
BobC 28 Фев 2017 в 21:26
  1. Создайте индекс по вашему столбцу дат (если его там еще нет).
  2. Ночная работа должна выполнить следующий SQL:

Удалить table_logs, где date> sysdate - 7;

Совершить ;

Это должно занять менее 1 минуты, если ваша БД хорошо настроена.

2
Sam 1 Мар 2017 в 05:30