|
Интервальное секционирование и "проблемы" связанные с ним
|
|||
---|---|---|---|
#18+
Есть задача: Удалить все из секционированной таблицы 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2021, 12:28 |
|
Интервальное секционирование и "проблемы" связанные с ним
|
|||
---|---|---|---|
#18+
Вообще как автоматизируются сценарии типа: "Удаляем весь прошлый год, даты кроме первых чисел текущего года, а текущий месяц вообще не чистим" - если секции нарезаны например по дню Мне кроме перебора и усечения секций в цикле по представлению ALL_TAB_PARTITIONS ничего в голову не приходит - но в нем нет информации о границах соответствующей секции например ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2021, 12:32 |
|
Интервальное секционирование и "проблемы" связанные с ним
|
|||
---|---|---|---|
#18+
stil 1) как определить "последнюю" секцию? Можно выбрать MAX(REP_DATE). Так мы имеем КЛЮЧ последней секции, И этого уже достаточно. Зная интервал, можно сделать цикл от MIN(REP_DATE) до MAX(REP_DATE) - PART_INTERVAL и использовать partition for (...) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2021, 13:02 |
|
Интервальное секционирование и "проблемы" связанные с ним
|
|||
---|---|---|---|
#18+
А ответы из своей же прошлой темы Truncate секции не по названию, а как то еще? прошлый раз не читали? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2021, 13:06 |
|
Интервальное секционирование и "проблемы" связанные с ним
|
|||
---|---|---|---|
#18+
env, это решение в лоб, которое я и хотел сначала сделать. Проблема вот в чем: секций может быть гораздо меньше, чем дат между MIN(REP_DATE) до MAX(REP_DATE) Можно конечно перебрать вообще все даты - и давить ORA-02149 Partition not exists в цикле, но как то криво это выглядит ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2021, 13:08 |
|
Интервальное секционирование и "проблемы" связанные с ним
|
|||
---|---|---|---|
#18+
env А ответы из своей же прошлой темы Truncate секции не по названию, а как то еще? прошлый раз не читали? Читал конечно. Но чтоб решить вопрос выше мне их не хватило.. Там достаточно было в секцию попадать, а тут уже этого не хватает ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2021, 13:10 |
|
|
start [/forum/topic.php?fid=52&msg=40093440&tid=1879951]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
185ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 290ms |
0 / 0 |