|
|
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Срабатывает триггер на DML, и инсертится измененная инфа на новую созданную таблицу. Нужно чтобы в таблицы сохранялось инфа не больше count= 10000 например если превысилось количество , срабатывает еще один триггер и удаляет инду Вот только как удалить последние 5000 добавленные стоблцы ? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Заранее спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 17:06 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
я извиняюсь удалялись 1-ые 5000 добавленные и оставались последние 5000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 17:10 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Goofy122, в триггере сложно (придется перейти почти в однопользовательский режим) удаляйте лишнее, напр, каждый час ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 18:00 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Обычно критерием является срок хранения, а не количество записей (или баланс между количество и сроком, но срок хранения всё равно остаётся планкой). Imho, но попробуйте рассмотреть этот вариант, тем более, что его легко реализовать непосрественно в триггере. Но если уж никак, то тогда вариант Stax-a - интервальный джоб (count при каждой вставке в триггере довольно дорогое удовольствие, тем более что удалять придётся, кроме условия count, всё равно с учётом insert_time) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 18:51 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Goofy122, create sequence start with 1 maxvalue 5000 cycle; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 20:16 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
-2-Goofy122, create sequence start with 1 maxvalue 5000 cycle; однако... мне это нравится..очень.. Дёшево и сердито ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 20:34 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Спасибо , решил таким путем ROWID <= 1 даже не пробовал применять при удалении , но он действует и удаляет самый 1-ую добавленную строку , при превышении планки 5000 он будет оставлять самые последние 5000 значений и тем самым строк в таблице будет не больше 5000 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 21:59 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Goofy122, "ROWID <= 1 .... удаляет самый 1-ую добавленную строку" - совпадение и самообман Рассмотрите предложение -2- . Суррогатный ключ, на основе которого строится остальная логика... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 22:47 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
ViewerРассмотрите предложение -2- . Суррогатный ключ, на основе которого строится остальная логика...Интересно было бы взглянуть на дальнейшую логику ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 07:23 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровViewerРассмотрите предложение -2- . Суррогатный ключ, на основе которого строится остальная логика...Интересно было бы взглянуть на дальнейшую логику -2-Goofy122, create sequence start with 1 maxvalue 5000 cycle; Ключ генерится по кругу и новая запись заменяет существующую с таким же ключём. Если я ошибся, и уважаемый -2- имел ввиду несколько иное, прошу поправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 07:42 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудровдальнейшую логику x := seq.nextval; merge ... using (select x, ... from dual) ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 08:09 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Viewer-2-Goofy122, create sequence start with 1 maxvalue 5000 cycle; однако... мне это нравится..очень.. Дёшево и сердито как оставлять последние? ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 09:49 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Goofy122Спасибо , решил таким путем ROWID <= 1 даже не пробовал применять при удалении , но он действует и удаляет самый 1-ую добавленную строку , при превышении планки 5000 он будет оставлять самые последние 5000 значений и тем самым строк в таблице будет не больше 5000 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. есть два философских вопроса 1) работа в многопользовательском режиме 2) что считать последним шаблон удаления (оставить 10 "последних") имхо, так делать нельзя Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 09:56 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Станислав, у меня создалось впечатление, что у вас не отрефрешилась страничка с топиком и вы не видели 2 поста перед вашими.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 10:12 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
ViewerСтанислав, у меня создалось впечатление, что у вас не отрефрешилась страничка с топиком и вы не видели 2 поста перед вашими.. спасибо, посмотрел но здесь решение (красивое) с заменой инсерт на мерже а задача авторСрабатывает триггер на DML, и инсертится измененная инфа на новую созданную таблицу. с помощую триггера, причем инсертится на новую созданную таблицу имхо, на новую табличку мерже и циклическая последователтность не отработает ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 10:54 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Брат наш Goofy, поясните пожалуйста выражение "на новую созданную таблицу", или это просто "фигура речи"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 11:41 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудровпропущено... Интересно было бы взглянуть на дальнейшую логику -2-Goofy122, create sequence start with 1 maxvalue 5000 cycle; Ключ генерится по кругу и новая запись заменяет существующую с таким же ключём. Если я ошибся, и уважаемый -2- имел ввиду несколько иное, прошу поправить.[/quot]-2-Вячеслав Любомудровдальнейшую логику x := seq.nextval; merge ... using (select x, ... from dual) ...Т.е. предлагается менять саму процедуру вставки? Как насчет пропущенных значений в последовательности? (откат или вылет из кеша) Чем это лучше чем просто значение из безразмерной последовательности или таймстампа (default) и периодической поддиркой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 12:53 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровТ.е. предлагается менять саму процедуру вставки? Как насчет пропущенных значений в последовательности? (откат или вылет из кеша) Чем это лучше чем просто значение из безразмерной последовательности или таймстампа (default) и периодической поддиркой? идея красивая (не надо улалять) токо я навскидку не пойму как отработает, если вставляется за раз больше maxvalue ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 13:18 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Условие было хранить не более 10 000 записей, и единовременно удалять 5 000 при достижении порога. Т.е. количество актуальных записей аудита колеблется от 5 000 до 10 000. Имеем возможность держать практически 10 000 актуальных записей аудита постоянно (при sequence с maxvalue 10000 cycle). Возможное количество пропущенных значения последовательности, imho, явно значительно меньше 5000, т.е. актуальных записей аудита, за вычетом перестарков, будет практически в 2 раза больше, с редкими колебаниями от верхней границы на незначительные и допустимые величины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 13:46 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
ViewerУсловие было хранить не более 10 000 записей, и единовременно удалять 5 000 при достижении порога. Т.е. количество актуальных записей аудита колеблется от 5 000 до 10 000. Имеем возможность держать практически 10 000 актуальных записей аудита постоянно (при sequence с maxvalue 10000 cycle). Возможное количество пропущенных значения последовательности, imho, явно значительно меньше 5000, т.е. актуальных записей аудита, за вычетом перестарков, будет практически в 2 раза больше, с редкими колебаниями от верхней границы на незначительные и допустимые величины. постановка для меня несколько туманная в таблице 10000 записей, вставляется 3 записи кто удалит 5003 старых? зы триггером в "однопользовательском" режиме запросто .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 13:55 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
StaxВячеслав ЛюбомудровТ.е. предлагается менять саму процедуру вставки? Как насчет пропущенных значений в последовательности? (откат или вылет из кеша) Чем это лучше чем просто значение из безразмерной последовательности или таймстампа (default) и периодической поддиркой? идея красивая (не надо улалять) токо я навскидку не пойму как отработает, если вставляется за раз больше maxvalue ..... staxДа я не спорю, идея красивая, смелая и т.д. Вопрос, что дальше с этой красотой делать Мне правда интересно -- люблю красивые решения Я тут даже сначала подумал, что это предлагается в триггере -- циклическая последовательность до 10000, как только последовательность равна 5000 -- удаляем все с номерами 5001-10000, как только 10000 -- удаляем с номерами 1-5000. Но это for each rows (slow), непонятно, что делать при пропуске значения последовательности. Если не for each rows -- обработка существенно сложней особенно при одновременной вставке. И действительно непонятно что делать, когда несколько сессий вставляют пачками (да еще и по 5000 штук)... Как известно, триггерные решения в многопользовательской работе слабо помогают Если меняется сам процесс вставки -- то, собственно, все те же вопросы остаются, только у нас тут разнообразие типа MERGE, UPDATE, но в multiuser оно один фиг -- либо сериализация (если ключ из последовательности уникальный, либо куча дублей) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 14:07 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудровв multiuser оно один фиг -- либо сериализация (если ключ из последовательности уникальный, либо куча дублей)Последовательности разве не глобальны (внетранзакционны)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 14:11 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Ну, мы же говорим про циклическую последовательность Если она вставляется в уникальное поле -- будет точка сериализации, если последовательность провернется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 14:15 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровЕсли она вставляется в уникальное поле -- будет точка сериализации, если последовательность провернется... и merge сделает update, если не будет других мешающих факторов. Ну т.е. проблемы, наверное, будут, но вряд ли эти проблемы будут напрямую связаны с цикличностью последовательности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 14:18 |
|
||
|
Триггер на удаление
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovВячеслав ЛюбомудровЕсли она вставляется в уникальное поле -- будет точка сериализации, если последовательность провернется... и merge сделает update, если не будет других мешающих факторов. Ну т.е. проблемы, наверное, будут, но вряд ли эти проблемы будут напрямую связаны с цикличностью последовательности.Имеется ввиду что вставляют разные сессии большие пачки одновременно Возможно, все надуманно но к чему это все, когда есть простое решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2018, 14:21 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39613930&tid=1884301]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 399ms |

| 0 / 0 |
