Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интервальное секционирование и "проблемы" связанные с ним / 6 сообщений из 6, страница 1 из 1
27.08.2021, 12:28
    #40093428
stil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование и "проблемы" связанные с ним
Есть задача:

Удалить все из секционированной таблицы DATA (не через DELETE, а через TRUNCATE)
1) кроме последней секции
2) Кроме последнего дня/месяца/года

Таблица секционирована интервально по полю REP_DATE:
INTERVAL (INTERVAL '1' DAY) - по дню, а до недавнего времени INTERVAL (INTERVAL '1' MONTH) - по месяцу

Собственно в чем проблема:
1) как определить "последнюю" секцию? Можно выбрать MAX(REP_DATE). Так мы имеем КЛЮЧ последней секции, но не ее название.
А для того, чтобы сделать TRUNCATE (например в цикле по ALL_TAB_PARTITION по условию "все секции кроме нужной") - нужно название
2) по ключу секции транкейтить нельзя - так как в соответствующей секции могут быть значения как и за день, так и за несколько дней (так как заранее неизвестно в какую дату чистим - когда было порезано по дню или когда по месяцу)

Вопрос: можно ли как то получать гарантированный набор секций например по условию "все секции до такой то даты"?
v12
...
Рейтинг: 0 / 0
27.08.2021, 12:32
    #40093429
stil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование и "проблемы" связанные с ним
Вообще как автоматизируются сценарии типа:
"Удаляем весь прошлый год, даты кроме первых чисел текущего года, а текущий месяц вообще не чистим" - если секции нарезаны например по дню

Мне кроме перебора и усечения секций в цикле по представлению ALL_TAB_PARTITIONS ничего в голову не приходит - но в нем нет информации о границах соответствующей секции например
...
Рейтинг: 0 / 0
27.08.2021, 13:02
    #40093434
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование и "проблемы" связанные с ним
stil
1) как определить "последнюю" секцию? Можно выбрать MAX(REP_DATE). Так мы имеем КЛЮЧ последней секции,

И этого уже достаточно. Зная интервал, можно сделать цикл от MIN(REP_DATE) до MAX(REP_DATE) - PART_INTERVAL и использовать partition for (...)
...
Рейтинг: 0 / 0
27.08.2021, 13:06
    #40093438
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование и "проблемы" связанные с ним
А ответы из своей же прошлой темы Truncate секции не по названию, а как то еще? прошлый раз не читали?
...
Рейтинг: 0 / 0
27.08.2021, 13:08
    #40093439
stil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование и "проблемы" связанные с ним
env,
это решение в лоб, которое я и хотел сначала сделать. Проблема вот в чем:

секций может быть гораздо меньше, чем дат между MIN(REP_DATE) до MAX(REP_DATE)

Можно конечно перебрать вообще все даты - и давить ORA-02149 Partition not exists в цикле, но как то криво это выглядит
...
Рейтинг: 0 / 0
27.08.2021, 13:10
    #40093440
stil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование и "проблемы" связанные с ним
env
А ответы из своей же прошлой темы Truncate секции не по названию, а как то еще? прошлый раз не читали?


Читал конечно. Но чтоб решить вопрос выше мне их не хватило.. Там достаточно было в секцию попадать, а тут уже этого не хватает
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интервальное секционирование и "проблемы" связанные с ним / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]