|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Прочёл эти две древние темы: Получение имени "сработавшего" FK при INSERT'е в ХП http://sql.ru/forum/actualthread.aspx?tid=409862&hl=%ee%ef%f0%e5%e4%e5%eb%e8%f2%fc+%e8%ec%ff+%f2%e0%e1%eb%e8%f6%fb#3928894 Может ли триггер узнать имя или номер таблицы для которой он вызывается? http://sql.ru/forum/actualthread.aspx?tid=60592&hl=%ee%ef%f0%e5%e4%e5%eb%e8%f2%fc+%e8%ec%ff+%f2%e0%e1%eb%e8%f6%fb#430223 Вопрос в следующем. Может спустя столько лет появилась возможность узнать имя таблицы для которой срабатывает триггер? Может это будет в версии 2.х или 3.х? Просто когда ведёшь логи, например, то код для всех таблиц одинаковый, а если таблиц 50-100, то тратиться достаточно много времени на копирование кода для всех таблиц, а если потом нужно этот код коректировать, да ещё и на боевой базе... то опять же уходит достаточно много времени. Было бы вообще здорово, если бы была возможно создать один триггер для всех таблиц, в котором можно было бы определять значения контекстных переменных типа CURRENT_TABLE, CURRENT_TRIGGER, или что-то вроде этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 14:04 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Разве бывают тригерры сразу на несколько таблиц? По-любому триггер нацеливается лишь на одну. Другое дело, что логику логирования можно не помещать в триггер, а лишь вызывать из него например ХП, аргументом которой передавать имя таблицы. В ХП по этому аргументу можно через обращение к системным таблицам узнать поля, составить текст select'а, исполнять его через execute statement и далее уже логировать как душе удобно. При такой схеме, триггеров будет много, но они будут состоять лишь из вызыва хранимки. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 14:15 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arniРазве бывают тригерры сразу на несколько таблиц? вот я и про тоже, я имел ввиду, что хорошо бы, если бы они были ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 14:24 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arni Другое дело, что логику логирования можно не помещать в триггер, а лишь вызывать из него например ХП, аргументом которой передавать имя таблицы. Ну да, сейчас так и делаю. Просто таблиц многовато. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 14:25 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11 arniРазве бывают тригерры сразу на несколько таблиц? X> вот я и про тоже, я имел ввиду, что хорошо бы, если бы они былиочередной всплеск гиперактивности мутантов... -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 14:28 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arni Другое дело, что логику логирования можно не помещать в триггер, а лишь вызывать из него например ХП, аргументом которой передавать имя таблицы. В ХП по этому аргументу можно через обращение к системным таблицам узнать поля, составить текст select'а, исполнять его через execute statement и далее уже логировать как душе удобно. При такой схеме, триггеров будет много, но они будут состоять лишь из вызыва хранимки. да, но вызываю хранимку, ей нужно передать имя триггера или имя таблицы, что на данный момент прописывается ручками. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 14:30 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Мимопроходящий X11 arniРазве бывают тригерры сразу на несколько таблиц? X> вот я и про тоже, я имел ввиду, что хорошо бы, если бы они былиочередной всплеск гиперактивности мутантов... -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.4 мерси за комплимент )))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 14:33 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Напиши программу, которая будет вытаскивать список таблиц и для выбранных из списка по шаблону генерировать нужный текст триггера. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 14:38 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11 по-моему всякие "КОММУНИКАЦИИ", "ДОБАВЛЕНИЕ", "ИЗМЕНЕНИЕ" и "УДАЛЕНИЕ" - слишком жирно для и без того сумашедшим образом распухающих таблиц логгов. Все эти рюшки можно и при просмотре добавить. Приведу кусок из своих закромов: Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 14:47 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
ЛентяйНапиши программу, которая будет вытаскивать список таблиц и для выбранных из списка по шаблону генерировать нужный текст триггера. можно даже SP =) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 14:52 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arni, спасибо. Переделаю, как у тебя. А то у меня немного не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 15:11 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arni, я смотрю, что ты не хранишь в логах имя пользователя, какой смысл логов? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 15:32 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arni Код: plaintext
Вот это вот - зачем? Не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 15:35 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11arni, я смотрю, что ты не хранишь в логах имя пользователя, какой смысл логов? есть такое поле с default user или в тригере через current_user цепляется - сейчас не помню, но вобщем автоматом садится ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 15:44 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
WildSery arni Код: plaintext
Вот это вот - зачем? Не понял. Лог - это одно поле, куда в текстовом виде складываются все поля. Перевод строки нужен, чтобы при просмотре было удобочитабеельнее. Например: Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 15:50 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Лог глазами прямо из таблицы читаешь? Я вот для этого отдельные процедуры/формы сделал. Зря старался? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 15:58 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arni по-моему всякие "КОММУНИКАЦИИ", "ДОБАВЛЕНИЕ", "ИЗМЕНЕНИЕ" и "УДАЛЕНИЕ" - слишком жирно для и без того сумашедшим образом распухающих таблиц логгов. Все эти рюшки можно и при просмотре добавить. ага, особенно с полем, размер которого 10К. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 16:13 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arni CREATE OR ALTER trigger SP_COLOR_LOG_U0 for SP_COLOR active before update position 1 AS begin --логгируем изменение строки (фиксация старого состояния) execute procedure SYS_LOG_METADATA('SP_COLOR', old.ID, '<'); end CREATE OR ALTER trigger SP_COLOR_LOG_U1 for SP_COLOR active after update position 1 AS begin --логгируем изменение строки (фиксация нового состояния) execute procedure SYS_LOG_METADATA('SP_COLOR', new.ID, '>'); Не понятно, что даёт фиксация старого и нового состояния, тем более что значение ID, как правило не меняется. т.е. в таблице будет две записи: > ID = 12 < ID = 12 что из этого можно понять? или в лог записываются старые и новые значения, так ля понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 16:22 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11Не понятно, что даёт фиксация старого и нового состояния, тем более что значение ID, как правило не меняется. т.е. в таблице будет две записи: > ID = 12 < ID = 12 что из этого можно понять? или в лог записываются старые и новые значения, так ля понял? Нет. Там у него идет вызов ХР, которая в свою очередь селектит нужные поля по указанному ID и записывает их в таблицу-лог (ну и таймштамп, думаю, добавляет). "Ошибка" у arni в другом - нет смысла использовать два триггера, когда можно обойтись одним (и фактически даже одним вызовом ХР). Единственное "но" - это если у него сложная логика и цепочка триггеров - тогда ставить before-триггер первым в цепочке, after-триггер - последним в цепочке. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 16:42 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11Не понятно, что даёт фиксация старого и нового состояния, тем более что значение ID, как правило не меняется. т.е. в таблице будет две записи: > ID = 12 < ID = 12 что из этого можно понять? или в лог записываются старые и новые значения, так ля понял? Разве плохо наблюдать в двух соседних строках состояние строки ДО и ПОСЛЕ правки? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 16:48 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам "Ошибка" у arni в другом - нет смысла использовать два триггера, когда можно обойтись одним (и фактически даже одним вызовом ХР). Единственное "но" - это если у него сложная логика и цепочка триггеров - тогда ставить before-триггер первым в цепочке, after-триггер - последним в цепочке. Если бы логирование происходило в триггере, то действительно подтавляя сначала old.* значения, а потом new.* значения можно сохранить состояние и до и после. Перенося же логику в XП мы теряем все зацепки new.* и old.*. Остается только сканировать текущее значение. Поэтому вызов идет из двух триггеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 16:52 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arniЕсли бы логирование происходило в триггере, то действительно подтавляя сначала old.* значения, а потом new.* значения можно сохранить состояние и до и после. Перенося же логику в XП мы теряем все зацепки new.* и old.*. Остается только сканировать текущее значение. Поэтому вызов идет из двух триггеров. Отмазка не принята. Ничто (ну, кроме вышеназванных проблем с цепочками триггеров) не мешает в одном триггере вызывать ХР два раза (один раз с OLD, другой раз с New). В принципе, можно даже в ХР добавить еще один параметр, чтобы передавать old и new одновременно, но это уже спорно - лучше / хуже. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 16:56 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамОтмазка не принята. Ничто (ну, кроме вышеназванных проблем с цепочками триггеров) не мешает в одном триггере вызывать ХР два раза (один раз с OLD, другой раз с New). В принципе, можно даже в ХР добавить еще один параметр, чтобы передавать old и new одновременно, но это уже спорно - лучше / хуже Рустам, подумай: в хранимку я не передаю никаких реальных данных, только ID изменяемой строки. Сама хранимка уже выбирает данные из рабочих таблиц по этому ID. Она ничего не знает про new.* и old.*. Она может только прочитать ТЕКУЩЕЕ значение. Текущим значением в фазе BEFORE за пределами самого триггера будет еще не измененная строка. Текущим значением в фазе AFTER за пределами самого триггера будет уже измененная строка. Т.о. перенося логиrу логирования за пределы триггера (в ХП) мы вынуждены дергать её дважды в двух тригерах на два состояния. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 17:04 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Странно на строку Код: plaintext
Invalid argument in EXECUTE STATEMENT - cannot convert to string. At procedure 'SP_SYS_LOG' line: 34, col: 3. влияет ли то, что база в кодировке UTF8? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 17:05 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11Странно на строку Код: plaintext
Invalid argument in EXECUTE STATEMENT - cannot convert to string. At procedure 'SP_SYS_LOG' line: 34, col: 3. глянь, что осаждается в переменной STATM. Может там переполнение, либо с парностью кавычек напутал или еще чего... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 17:10 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arni> Рустам, подумай: в хранимку я не передаю никаких реальных данных, только ID изменяемой строки. arni> Сама хранимка уже выбирает данные из рабочих таблиц по этому ID. Она ничего не знает про new.* и old.*. Ну, так я и сказал выше. arni> Она может только прочитать ТЕКУЩЕЕ значение. А вот тут попутал :) Как-то не подумал об этом. Тогда да, в текущем раскладе все верно. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 17:13 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6.
stam2 почему то NULL ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 17:41 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Дошло, я передавал имя таблицы маленькими буквами. теперь Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 17:44 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11 Вопрос в следующем. Может спустя столько лет появилась возможность узнать имя таблицы для которой срабатывает триггер? Может это будет в версии 2.х или 3.х? В 2.5 будет можно. Примерно так: Код: plaintext 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.
Правда на данной стадии разработки на данном запросе Firebird-2.5.0.20542-0_Win32 валится ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 18:11 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам arniЕсли бы логирование происходило в триггере, то действительно подтавляя сначала old.* значения, а потом new.* значения можно сохранить состояние и до и после. Перенося же логику в XП мы теряем все зацепки new.* и old.*. Остается только сканировать текущее значение. Поэтому вызов идет из двух триггеров. Отмазка не принята. Ничто (ну, кроме вышеназванных проблем с цепочками триггеров) не мешает в одном триггере вызывать ХР два раза (один раз с OLD, другой раз с New). В принципе, можно даже в ХР добавить еще один параметр, чтобы передавать old и new одновременно, но это уже спорно - лучше / хуже. Posted via ActualForum NNTP Server 1.4 А какой-нибудь "buffer-compare old new to different-field-list" в триггре нельзя вызвать? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 18:25 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
afgmПравда на данной стадии разработки на данном запросе Firebird-2.5.0.20542-0_Win32 валитсяВ трекер внесёшь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 18:48 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
hvlad afgmПравда на данной стадии разработки на данном запросе Firebird-2.5.0.20542-0_Win32 валитсяВ трекер внесёшь ? В англицком не силён :( С другой стороны когда то начинать надо... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2008, 21:18 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Николай1> А какой-нибудь "buffer-compare old new to different-field-list" в триггре нельзя вызвать? Ответил был, если бы понял о чем ты. Но в ситуации arni (когда логирует отдельная процедура) - нельзя. 2 afgm - из-за автономной транзакции чтоль? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 18:26 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
to arni: вставлю 5 копеек можно и так! :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 18:41 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
mkrto arni: вставлю 5 копеек Оставляю от 5 копеек 2 Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 18:50 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
5 копеек, 2 копейки... Как будто что-то улучшилось... :) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 19:11 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Меньше буков ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 19:34 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Николай1> А какой-нибудь "buffer-compare old new to different-field-list" в триггре нельзя вызвать? Ответил был, если бы понял о чем ты. Но в ситуации arni (когда логирует отдельная процедура) - нельзя. 2 afgm - из-за автономной транзакции чтоль? Posted via ActualForum NNTP Server 1.4 У меня есть "buffer-compare" - это оператор языка, который (оператор), после сравнения двух буферов, выдает список полей которые отличаются. Остается извлечь значения этих полей их каждого буфера и сложить куда надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 19:38 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Николай1> У меня есть "buffer-compare" - это оператор языка "У меня" - это в где? И оператор какого языка? Николай1> Остается извлечь значения этих полей их каждого буфера и сложить куда надо. Зачем? Сравнивать, извлекать... они итак уже "извлечены" в new и old. ;) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 21:55 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам 2 afgm - из-за автономной транзакции чтоль? Скорее всего, потому как без неё работает. Причём валится именно в момент коммита. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 22:53 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
afgm> Скорее всего, потому как без неё работает. Эт хорошо. :) А нафиг она там сдалась, кстати? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 22:56 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
- Больной перед смертью потел? - Потел, батюшка. - Это хорошо... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 23:17 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Хорошо, что сдох от не заразной болезни, ПВП. :) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 23:27 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам afgm> Скорее всего, потому как без неё работает. Эт хорошо. :) А нафиг она там сдалась, кстати? doc\README.monitoring_tables.txt При первом обращении данные в мониторинговых таблицах "замораживаются". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2008, 23:47 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
А, ты про снапшотность. Да, если процедура будет вызываться несколько раз. Логично. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 01:32 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
2 ДЕ Кстати, интересно, почему они снапшотны, а не RC-шны. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 02:01 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
WildSery mkrto arni: вставлю 5 копеек Оставляю от 5 копеек 2 Недождетесь! Наглядность и интуитивность кода на уровне "взглянул - понял" - тоже чего-то стоит, пусть и в ущерб кол-ву строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 06:39 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам 2 ДЕ Кстати, интересно, почему они снапшотны, а не RC-шны. Дима уже как-то отвечал на этот вопрос: "Чтобы данные в связанных мониторинговых таблицах были валидны между собой" (не дословно). Иначе обращение к ним в разное время даст неверные результаты по связям. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 07:16 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
кстати, последнее время я все больше склоняюсь к тому, чтобы имитировать уровень изоляции рабочей транзакции. Т.е. для read-committed делать "снапшотность" мониторинга на уровне клиентского запроса, а не транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 07:26 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
dimitrкстати, последнее время я все больше склоняюсь к тому, чтобы имитировать уровень изоляции рабочей транзакции. Т.е. для read-committed делать "снапшотность" мониторинга на уровне клиентского запроса, а не транзакции. В целом логично. Хотя для приведённых выше изворотов кроме как автономкой не получится. Более того: захотел тут получать снимок таблицы использования памяти без старта новой транзакции, так пришлось вообще через новый EXECUTE STATEMENT делать, т.к. SUSPEND из автономного блока не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 07:47 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
dimitrкстати, последнее время я все больше склоняюсь к тому, чтобы имитировать уровень изоляции рабочей транзакции. Т.е. для read-committed делать "снапшотность" мониторинга на уровне клиентского запроса, а не транзакции. мб стоит добавить дополнительный параметр для RC транзакции, чтобы контролировать это поведение? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 09:42 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
dimitrТ.е. для read-committed делать "снапшотность" мониторинга на уровне клиентского запроса, а не транзакции. и что тебя подталкивает сделать этот сомнительный шаг? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 09:49 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
kdvи что тебя подталкивает сделать этот сомнительный шаг? :-) как минимум мониторить можно будет одной "вечной" RC read-only транзакцией, не терзая понапрасну счетчик. Да и в целом, более логично будет поведение выглядеть. А если по уму сделать, то еще и в процедурах станет возможным использование "живых" данных мониторинга, а не "замороженных". альтернатива - оставить все как есть и реализовать явный "сброс" мониторинга (через SQL) для текущей транзакции. Правда, меня пугают возможные извраты типа: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 10:26 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
kdv dimitrТ.е. для read-committed делать "снапшотность" мониторинга на уровне клиентского запроса, а не транзакции. и что тебя подталкивает сделать этот сомнительный шаг? :-)Сомнительно сделали как раз в ИБ, мы пока что только скопировали эту особенность. Но она нам не нравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 11:03 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
авторНо она нам не нравится. вообще мне тоже не нравится что для получения обновленной информации надо рестартовать транзакцию. Но с другой стороны имеющиеся тулзы, да и вообще, ориентированы на получение связанной информации - БД-коннекты-транзакции-запросы. То есть, логически было бы хорошо стартовать RC read only, и перечитыванием запроса получать обновления, но тогда не будет консистентности таблиц. А раз надо - придется стартовать снапшот-транзакцию, и все равно рестартовать ее когда надо обновить инфу. Тогда, по большому счету, вычитка данных таблиц мониторинга в RC read only теряет смысл. Так что я за совместимость. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 11:22 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
arniНаглядность и интуитивность кода на уровне "взглянул - понял" - тоже чего-то стоит, пусть и в ущерб кол-ву строк. Наглядность и интуитивность - вещи весьма субъективные. А длина - она и в Африке длина ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 11:23 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
я бы пока за ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 11:24 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
моб ять. так вот. я бы пока за isc_refresh_mon_info проголосовал. Т.е. за вызов api. а дальше можно поглядеть. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 11:25 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
dimitr Код: plaintext 1.
Если всё будет в автомате, то получить стабильный снимок мониторинга можно будет только "правильной" транзакцией. Если дать возможность управлять, то это может быть лучше в плане контроля разработчиком. например: процедура_1 прочитала некоторые мониторинговые данные и вызвала процедуру_2 процедура_2 сделала DROP MONITORING SNAPSHOT и вернула управление процедуре_1 процедура_1 запросила другие таблицы мониторинга и "налетела" на несогласованность. Если кого такой вариант не устроит могут использовать автономки. Минус действительно видится один - счётчик дёргается с вытекающими. 2kdv Добавление вызова API мне нравится. Но процедуркам оно разобраться между собой не поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 11:30 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Николай1> У меня есть "buffer-compare" - это оператор языка "У меня" - это в где? И оператор какого языка? Николай1> Остается извлечь значения этих полей их каждого буфера и сложить куда надо. Зачем? Сравнивать, извлекать... они итак уже "извлечены" в new и old. ;) Posted via ActualForum NNTP Server 1.4 4GL В смысле "извлечены" ? Буферы содержат все поля, а сохранить в аудите надо только те, которые изменились. buffer-compare и дает их список. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 11:51 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
авторМинус действительно видится один - счётчик дёргается с вытекающими. у нас в IBTM (Transaction Monitor) идет считывание состояния транзакций (OIT, OST, OAT, Next) каждую минуту. Если делать через services api - старта транзакций нет, но нет и инфы о реальном числе активных транзакций. Firebird API - увеличивает счетчик Next +1 Firebird mon$ и IB tmp$ - требуется старт транзакции, т.е. тоже Next +1 Так вот. Даже если с БД ничего не делают, Next+1 за сутки (!) растет всего на 1440 отсчетов (минут в сутках). На мой взгляд это полная фигня по сравнению с любой минимально активной системой, в которой нынче количество транзакций за рабочие сутки начинается минимум от 15000. В среднем - 200к транзакций в сутки. У "гигантов" - 500к и более. Так что рестарт транзакции для снятия инфы каждую минуту - фигня. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 12:24 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
и еще - отсчет для tmp$ (пока mon$ не поддерживается) делается так: коннект старт транзакции получение данных из tmp$ коммит дисконнект для этой задачи держать открытым коннект, да еще транзакцию активной, пусть даже и rc read only - считаю моветоном. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 12:32 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
kdvи еще - отсчет для tmp$ (пока mon$ не поддерживается) делается так: коннект старт транзакции получение данных из tmp$ коммит дисконнект для этой задачи держать открытым коннект, да еще транзакцию активной, пусть даже и rc read only - считаю моветоном.Для этой задачи - может быть. Но не в общем случае. Когда сервер загружен так, что мыша не проползает, и нужно быстро прибить виновника, ты не сможешь даже получить коннект в приемлемое время. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 13:01 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
kdvТак что рестарт транзакции для снятия инфы каждую минуту - фигня. Согласен. Для снятия статистики - фигня. Но для предложенного варианта получения имени текущего объекта, совсем не фигня. Если хотя бы половина объектов, задействованных в пользовательском запросе, будут порождать автономки, то это минимум рост счётчика в разы, а реально и в десятки раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 13:32 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
dimitrкстати, последнее время я все больше склоняюсь к тому, чтобы имитировать уровень изоляции рабочей транзакции. Т.е. для read-committed делать "снапшотность" мониторинга на уровне клиентского запроса, а не транзакции.+1 Я бы даже предложил забить на эту согласованность данных (это же не реальные данные, а данные мониторинга), хотя это кому-то покажется крамолой. Нехай будет RC-read (хотя это больше похоже на dirty read ;-) ). А различные "DROP MONITORING" считаю ненужным извращением. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 18:11 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Николай1В смысле "извлечены" ?Находятся в этой структуре. Николай1Буферы содержат все поля, а сохранить в аудите надо только те, которые изменились. buffer-compare и дает их список.Решать, что сохранять, а что нет должен не компарер, а автор механизма логирования. Это, во-первых. Во-вторых, все эти сравнения и "выборка только измененных" по времени, очень вероятн, что уступят простому копированию (правда выиграет по занимаемому месту). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2008, 18:14 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
afgmX11 Вопрос в следующем. Может спустя столько лет появилась возможность узнать имя таблицы для которой срабатывает триггер? Может это будет в версии 2.х или 3.х? В 2.5 будет можно. Примерно так: ... Правда на данной стадии разработки на данном запросе Firebird-2.5.0.20542-0_Win32 валится Сейчас попробовал (версия 2.5.0.22796) - все работает! Так что если добавить преддложенную товарищем KiLLun строчку Код: plaintext 1.
C уважением Александр ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2009, 12:18 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
dedRasta[quot afgm][quot X11] Сейчас попробовал (версия 2.5.0.22796) - все работает! Не могу найти 2.5.0. 22796 или выше для Windows. Не подскажите ли? Уже минут сорок в гугле и в гугл-группах ищу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 14:48 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11Не могу найти 2.5.0. 22796 или выше для Windows. Не подскажите ли? Уже минут сорок в гугле и в гугл-группах ищу. http://firebirdsql.org/download/snapshot_builds/win/ http://193.110.114.157/firebird/ ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 14:55 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11 , а на официальном сайте смотреть не пробовал?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 14:58 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Ура, нашёл http://firebirdsql.org/downloads/snapshot_builds/win/ ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 15:26 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
zirra, Искал конечно же. Но там только альфа 1, не знаю, где твоя ссылка живёт на офиц. сайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 15:27 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
И на офиц. сайте тоже нашёл, спасибо. Windows 32-bit / 64-bit v.2.1.x and v.2.5 (HEAD) Просто меня смутило слово HEAD в названии ссылки. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 15:30 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Код нерабочий, ругается на procname Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 15:34 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
автор can't format message 13:794 -- message system code -4. Dynamic SQL Error. SQL error code = -206. Column unknown. PROCNAME. At line 10, column 76. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 15:35 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Может мне нужно сделать бэкап/рестор? База создавалась под FB 2.1, потом сделал бэкап и восстановил под FB 2.5 alfa1. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 15:36 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11Код нерабочий, ругается на procname Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 15:38 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
а что это за procname, где её брать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 15:40 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11а что это за procname, где её брать? Смотри 4-й топик в этом топике ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 16:31 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
А 4ый это как Вы имеете ввиду? У меня 4ый - это мой - вот он: X11arni Другое дело, что логику логирования можно не помещать в триггер, а лишь вызывать из него например ХП, аргументом которой передавать имя таблицы. Ну да, сейчас так и делаю. Просто таблиц многовато. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 16:44 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11А 4ый это как Вы имеете ввиду? У меня 4ый - это мой - вот он: Имел ввиду 4-й пост в топике, и забыл что на 2-й странице Имелся ввиду пример: /topic/574720&pg=2#5911453 Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 17:23 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
По теме топика. Именно табличку и именно из триггера (FB2.5): Код: plaintext 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.
Далее смотрим содержимое PROTOCOL_TABLE_NAME ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 17:52 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2009, 18:29 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
afgmПо теме топика. Именно табличку и именно из триггера (FB2.5): Код: sql 1. 2. 3. 4. 5.
Это работает только в тригге BEFOR? Потому, как в триггере AFTER UPDATING имя таблицы не вылавливается ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2017, 16:04 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11, имя таблицы в триггере вообще никак не вылавливается, совсем. потому что триггер создается для конкретной таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2017, 16:51 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Это я понял. Вылавливается в процедуре GET_TABLE_NAME_FOR_TRIGGER 6980844 Не могу понять, почему имя таблицы может не вылавливаться, в каких случаях. Оно то вылавливается, то вдруг не вылавливается. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2017, 16:54 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
21.12.2017 16:54, X11 пишет: > Оно то вылавливается, то вдруг не вылавливается. оно так потому, что через жопу. решение - говно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2017, 17:03 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
X11Не могу понять, почему имя таблицы может не вылавливаться, в каких случаях. Оно то вылавливается, то вдруг не вылавливается. боже ж ты мой... 1. имя таблице в триггере узнать невозможно, никак и никогда, потому что еще раз повторяю - триггер создается для конкретной таблицы, поэтому идея узнавать имя таблицы, для которой создан триггер, это ахинея какая-то. Таблица УЖЕ известна при создании триггера. Если триггеры создаются каким-то конструктором, то этот конструктор УЖЕ знает имя триггера, и может его воткнуть в текст триггера как константу. 2. в процедуре данные берутся из таблиц mon$. что весьма чревато при определенной нагрузке на сервер, вообще. т.е. это решение может и будет работать, но при 100 и больше пользователях оно будет безбожно тормозить, причем в геометрической прогрессии. 3. данные берутся из mon$call_stack, видимо в after update там уже не те данные. Не вижу никакого смысла в этом "решении" afgm, совсем. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2017, 17:08 |
|
Узнать имя таблицы из триггера
|
|||
---|---|---|---|
#18+
Непонятно, почему при INSERTING определятся имя таблицы, а при UPDATING - нет. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2017, 17:09 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561295]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
125ms |
get tp. blocked users: |
1ms |
others: | 339ms |
total: | 547ms |
0 / 0 |