powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интервальное секционирование и "проблемы" связанные с ним
6 сообщений из 6, страница 1 из 1
Интервальное секционирование и "проблемы" связанные с ним
    #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
Интервальное секционирование и "проблемы" связанные с ним
    #40093429
stil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще как автоматизируются сценарии типа:
"Удаляем весь прошлый год, даты кроме первых чисел текущего года, а текущий месяц вообще не чистим" - если секции нарезаны например по дню

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

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

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

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


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


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