|
|
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
Итак имеется огромная партиционированная табличка. Партиции создаются джобом каждый месяц в новом таблспейсе. Джоб запускается 10 числа и создаёт партицию на следующий месяц. Индексы тоже партиционированные, локальные. В прошлом месяце (июне) джоб по каким-то причинам не отработал. Соответственно, данные за 01.07-10.07 заливались в последний таблспейс (который LESS THEN MAXVALUE ). В этом месяце (июле) джоб создаёт свой таблспейс( августовский ). Оракл видит что при создании августовской партиции, все данные ( июльские ) из партиции( Less than maxvalue ) можно перенести в августовский таблспейс. И ДЕЛАЕТ ЭТО ! Никто бы ничего и не заметил, но попутно, он сделал августовские локальные индексы инвалидными. Это я всё понял из логов и своих домыслов. Вопрос : верно ли, что при создании партиции, она сама, без команды, в момент создания, может наполниться данными? Если это так, почему при массовом делении последней партиции, оракл делает инвалидными индексы затронутых партиций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 12:08 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
[quot mercatorСоответственно, данные за 01.07-10.07 заливались в последний таблспейс (который LESS THEN MAXVALUE ). В этом месяце (июле) джоб создаёт свой таблспейс( августовский ). Оракл видит что при создании августовской партиции, все данные ( июльские ) из партиции( Less than maxvalue ) можно перенести в августовский таблспейс. И ДЕЛАЕТ ЭТО ! [/quot]Командочки приведи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 12:21 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
были бы у него командочки он бы всякие глупости не спрашивал ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 12:52 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
Ситуацию я описал. А джоб, создающий августовскую партицию, делал так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 13:15 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
mercator[b]Оракл видит что при создании августовской партиции, все данные ( июльские ) из партиции( Less than maxvalue ) можно перенести в августовский таблспейс. И ДЕЛАЕТ ЭТО ! Простите великодушно, а как он должен был поступить, если "июльской" секции, согласно вашим же показаниям, не существует, зато, опять-таки, согласно Вашим показаниям, из MAXVALUE-секции выделена секция июль-август, размещенная в "августовском" табличном пространстве? Я действительно не понимаю Вашего вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 13:26 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousmercator[b]Оракл видит что при создании августовской партиции, все данные ( июльские ) из партиции( Less than maxvalue ) можно перенести в августовский таблспейс. И ДЕЛАЕТ ЭТО ! Простите великодушно, а как он должен был поступить, если "июльской" секции, согласно вашим же показаниям, не существует, зато, опять-таки, согласно Вашим показаниям, из MAXVALUE-секции выделена секция июль-август, размещенная в "августовском" табличном пространстве? Тоже не понял. Я считал, что если строки УЖЕ попали в последнюю партицию (LESS THAN MAXVALUE), то сами они никуда переезжать не должны. Я же делаю команду SPLIT и строчки переносятся. Ну, видимо, я ошибался и оракл просеивает строки при SPLIT'e. А вот почему он сделал инвалидными августовские индексы при этом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 13:34 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
а что именно вы ожидали от команды split? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 13:38 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
mercatorЯ считал, что если строки УЖЕ попали в последнюю партицию (LESS THAN MAXVALUE), то сами они никуда переезжать не должны. partition подразумевает partition pruning по формальным критериям. Нарисуйте на бумажке размещение ключей Вашей таблицы по секциям до и после расщепления. Объясните сами себе как должен происходить pruning при Вашей схеме размещения. Потом прочтите доку и достигнете просветления mercatorА вот почему он сделал инвалидными августовские индексы при этом? Потому что Вы об этом не позаботились. А не позаботились, поскольку split нарисовали с интернетов, а не с оф. документации, где эти (и не только эти) темы достаточно подробно разжеваны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 13:39 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
так это не он нарисовал а тот кто нарисовал, расчитывал что сплит будет с пустой партиции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 13:45 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
[quot andrey_anonymous]mercatorПотом прочтите доку и достигнете просветления Андрей, конечно я могу искать ответ в доке, но этот форум, для более быстрой помощи, чем дока. Разве нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 13:46 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
DВАрасчитывал что сплит будет с пустой партиции Значит при сплите непустой партиции локальные индексы всегда ломаются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 13:48 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
Вот дока, действительно нужно было писать UPDATE INDEXES https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1008028 Джоб работал годами, не ломаясь, стоило возникнуть одному пропуску - сломал индексы..Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 13:55 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
[quot mercator]andrey_anonymousпропущено... Андрей, конечно я могу искать ответ в доке, но этот форум, для более быстрой помощи, чем дока. Разве нет? этот форум логично использовать, если кто чего в доке не понял а когда напрочь доку игноришь , то и от форума толку мало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 13:55 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
mercatorDВАрасчитывал что сплит будет с пустой партиции Значит при сплите непустой партиции локальные индексы всегда ломаются?Не обязательно Так как ты описал:mercatorОракл видит что при создании августовской партиции, все данные ( июльские ) из партиции( Less than maxvalue ) можно перенести в августовский таблспейс. И ДЕЛАЕТ ЭТО ! Т.е. если все данные это действительно все данные, то сломаться не должно А если все данные -- это не совсем все, а только июльские (там есть еще и другие), то сломаются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 14:08 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровА если все данные -- это не совсем все, а только июльские (там есть еще и другие), то сломаются В данном случае данные-то все, но двигаются в другое табличное пространство, а не лежат на месте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 14:17 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровТак как ты описал:mercatorОракл видит что при создании августовской партиции, все данные ( июльские ) из партиции( Less than maxvalue ) можно перенести в августовский таблспейс. И ДЕЛАЕТ ЭТО ! Т.е. если все данные это действительно все данные, то сломаться не должно А если все данные -- это не совсем все, а только июльские (там есть еще и другие), то сломаются В последней партиции были именно все данные июльские. Других там не было. И при сплите последняя партиция опустела. Индексы даже так сломались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 15:18 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
mercatorИндексы даже так сломались. Незнание матчасти - путь к многочисленным удивлениям. Индекс в листовом блоке содержит что? Праальна, rowid. Что есть Rowid? Так точно, адрес физического места хранения искомой записи. Если запись уехала храниться в другое физическое место (в Вашем случае в другое табличное пространство), то что надо сделать с указателем на старое место? Праальна, заменить на новый. А если случилась массовая депортация? В этом случае проще и дешевле выбросить старый индекс и построить новый. Собственно, об этом и вся история - rdbms отмечает недействительный индекс как недействительный. С глобальными индексами интереснее - в свежих версиях rdbms научили отмечать указатели на переехавшие записи как подвисшие (orphanned), и сделали спец. джобик, который время от времени по таким указателям пробегается и подчищает хвосты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 15:39 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
по моим наблюдениям, SPLIT PARTITION и MERGE PARTITION работают одинаково -- если переехала хоть одна строка, соответствующие индексы ломаются. Если ни одна строка не переехала -- индексы не ломаются. 11.2.0.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2018, 22:30 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
Дык вот нихрена не понятно, почему они поехали Ты забыл разделить в июне и добавить секцию с данными которые больше 1 июля, в результате в последней секции остаются данные за июнь, июль и далее Разделяешь в июле и добавляешь секцию для данных, которые больше 1 августа -- но, по идее у тебя еще не должно быть таких данных, а данные за июль просто не подходят по условию Другой вопрос, что ты все-таки разделил и по границе 1 июля (вот тут данные поедут и сломают индексы на обоих секциях) и по границе 1 августа (здесь ничего не поедет) Вообще, Fast-Split Partition (с 9.2) работает так -- если можно данные сегмента не переносить (ничего не переезжает по условию разбиения или переезжает все, но в том же ТП), то сегмент просто переименовываются на уровне словаря и никакие индексы не ломаются. Если поехало в другое ТП, то таки да, rowid меняются, индексы становятся недействительными andrey_anonymousС глобальными индексами интереснее - в свежих версиях rdbms научили отмечать указатели на переехавшие записи как подвисшие (orphanned), и сделали спец. джобик, который время от времени по таким указателям пробегается и подчищает хвосты.А это что за зверь? Где можно почитать? С 18? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2018, 01:52 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровА это что за зверь? Где можно почитать? С 18?Вроде вот - Asynchronous Global Index Maintenance for Dropping and Truncating Partitions , с 12.1. Эта скотина немало крови попила, особенно накануне запланированных работ с вовлечением TTS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2018, 10:51 |
|
||
|
Создание партиции, когда часть данных уже в последней партиции
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровДык вот нихрена не понятно, почему они поехали потому что ему сказали переложить в новый тп, который для каждой партиции свой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2018, 14:25 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39672416&tid=1883737]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
138ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 437ms |

| 0 / 0 |
