|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
Всем доброго дня, столкнулся в коде с ситуацией, когда в рамках одной транзакции удаление зависимости (в данном случае триггера) и попытка последующего удаления процедуры которая зависит от этого триггера заканчивается ошибкой что существует зависимость. Причём в куче других мест в этой же транзакции такие же зависимости удаляются и последующие удаления зависимых процедур проходит безпроблемно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 16:55 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
«Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит» (с) АБС ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 17:06 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hlopotun процедуры которая зависит от этого триггера ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 17:09 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hvlad hlopotun процедуры которая зависит от этого триггера сорри. устал наверное .... :) вопрос снят ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 17:23 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hlopotun, в данном случае процедура сидит в триггере. Сначала удаляется триггер а потом процедура которая в нём используется. Всё в одной транзакции. И при удалении процедуры возникает исключение что есть зависимость. Так правильно было написать ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 17:27 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
Обычно людям хватает прочитать в тексте ошибки от кого именно есть зависимость. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 17:37 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Обычно людям хватает прочитать в тексте ошибки от кого именно есть зависимость. в тексте ошибки просто количество зависимостей. Без указания от кого конкретно. В IBЕхперт уже потом подсмотрел от кого ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 17:40 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hlopotun, А мне вот интересно, что за код такой, который триггера и процедуры дропает. Причем не в одном месте, а "в куче других"? Это как бы не стук в подвале, это что-то другое.... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 18:18 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hlopotun, во-первых, В приставках БЕС/ БЕЗ согласная зависит от первой буквы корня слова. Если первая буква глухая, то и в приставке глухая С. А значит, "беспроблемно", а не "беЗпроблемно". во-вторых, обновление метаданных - сложная процедура, и разные метаданные по разному обрабатываются. В одном случае это просто изменение одной таблицы, в другом случае изменение нескольких системных таблиц, а в третьих случаях - обновление выполняется только по коммиту (создание индексов). в третьих, удаление процедуры может обломиться просто потому, что объект используется каким-то коннектом. Поэтому надо а) точное сообщение об ошибке б) воспроизводимый пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 18:45 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
DarkMaster hlopotun, А мне вот интересно, что за код такой, который триггера и процедуры дропает. Причем не в одном месте, а "в куче других"? Это как бы не стук в подвале, это что-то другое.... программа миграции базы с одной версии на другую ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 18:45 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hlopotun, в случае миграции я бы при необходимости удаления процедуры сначала бы ее альтерил до begin/end, а уже во втором обновлении делал бы drop procedure. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 18:47 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
kdv hlopotun, в случае миграции я бы при необходимости удаления процедуры сначала бы ее альтерил до begin/end, а уже во втором обновлении делал бы drop procedure. интересная идея, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 19:20 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
kdv hlopotun, в случае миграции я бы при необходимости удаления процедуры сначала бы ее альтерил до begin/end, а уже во втором обновлении делал бы drop procedure. кстати, если процедура принимает или возвращает параметры определённые через ... Type of Column .... (которые тоже делают её зависимой) и если её альтерить без параметров а гдето в другом коде она с парамерами вызывается пройдёт ли альтер или нет? (не начём в данный момент проверить а интересно). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 20:12 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
kdv в случае миграции я бы при необходимости удаления процедуры сначала бы ее альтерил до begin/end, а уже во втором обновлении делал бы drop procedure. Вообще, не знаю, что тут обсуждается уже несколько страниц. Очевидно ж из названия топика еще, что ТСу надо коммит вставить между своими дропами. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 20:15 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
YuRock kdv в случае миграции я бы при необходимости удаления процедуры сначала бы ее альтерил до begin/end, а уже во втором обновлении делал бы drop procedure. Вообще, не знаю, что тут обсуждается уже несколько страниц. Очевидно ж из названия топика еще, что ТСу надо коммит вставить между своими дропами. ну, это удобно в других местах тоже. При других зависимостях. По поводу промежуточного коммита непонятно только одно. В этой же транзакции в такой же ситуации есть ещё несколько триггеров и процедур и с ними этой проблеммы не возникает. По сути тут только обновление метаданных, правильной очерёдности дропов должно быть достаточно даже в рамках одной транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 21:26 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
А пресловутое сообщение о наличии зависимости - это, часом, не object in use? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 21:51 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка А пресловутое сообщение о наличии зависимости - это, часом, не object in use? нет, "cannot delete SP_..... there are 1 dependencies' ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 21:57 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hlopotun, я не понял - вопрос снят или где ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 23:17 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hlopotun правильной очерёдности дропов должно быть достаточно даже в рамках одной транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 23:23 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hlopotun По поводу промежуточного коммита непонятно только одно. В этой же транзакции в такой же ситуации есть ещё несколько триггеров и процедур и с ними этой проблеммы не возникает. После CREATE TABLE в одной транзакции делал ALTER TABLE ADD CONSTRAINT PK, я всегда так делаю. И на некоторых базах (больших) вылетело Table НазваниеТаблицы not found. Я к этой проблеме отнесся с пониманием, решил ее за секунду, без форума. Просто вставил коммит. Настоятельные рекомендации разработчиков делать коммит после любого изменения метаданных пишутся не просто так. Им виднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2021, 23:32 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
YuRock Просто вставил коммит. Плюсую ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2021, 09:25 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
YuRock hlopotun По поводу промежуточного коммита непонятно только одно. В этой же транзакции в такой же ситуации есть ещё несколько триггеров и процедур и с ними этой проблеммы не возникает. После CREATE TABLE в одной транзакции делал ALTER TABLE ADD CONSTRAINT PK, я всегда так делаю. И на некоторых базах (больших) вылетело Table НазваниеТаблицы not found. Я к этой проблеме отнесся с пониманием, решил ее за секунду, без форума. Просто вставил коммит. Настоятельные рекомендации разработчиков делать коммит после любого изменения метаданных пишутся не просто так. Им виднее. это может быть в маленькой программке это не проблема а в большой такой коммит тащит за собой кучу изменений во всём коде. К примеру если в фреймворке с которым работает эта программа такой коммит не предусмотрен и ломает остальную логику основанную на одной транзакции. Компонент в котором вызывается этот скрипт обновления и не предусматривает промежуточного коммита и используется ещё в куче других мест. А учитывая что программиста который когда то это всё наваял и след простыл всё ещё более усложняется. Поэтому сначала надо разобраться. Вот и разбираюсь :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2021, 10:05 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hvlad hlopotun, я не понял - вопрос снят или где ? сорри что отвлёк, наверное всётаки снят. Понятно что надо как то коммит втыкать. Единственное, на машинах разработкиков это обновление запускается ежедневно и скорее всего в базе накапливается мусор от частого удаления и создания метаданных. Можно попробовать сделать резервное копирование и восстановление подопытных баз. Возможно очистка как то ситуацию временно исправит. Но по любому проблемму походу надо решать кардинально. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2021, 10:13 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
hlopotun это может быть в маленькой программке это не проблема а в большой такой коммит тащит за собой кучу изменений во всём коде Это просто - скрипт обновления. hlopotun К примеру если в фреймворке с которым работает эта программа Твой "фреймворк" в процессе работы постоянно меняет метаданные? Тогда помочь, боюсь, не смогу. А моя "маленькая программа" работает с 2002 года. И подозреваю, по объему кода и баз не меньше твоей. Проблема с обновлением методанных была одна за всю историю - когда я не знал, что процедуры лучше альтерить в wait-транзакции , с какой-то версии ФБ, уже не помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2021, 10:26 |
|
Изменение метаданных в рамках одной транзакции
|
|||
---|---|---|---|
#18+
YuRock hlopotun это может быть в маленькой программке это не проблема а в большой такой коммит тащит за собой кучу изменений во всём коде Это просто - скрипт обновления. hlopotun К примеру если в фреймворке с которым работает эта программа Твой "фреймворк" в процессе работы постоянно меняет метаданные? Тогда помочь, боюсь, не смогу. А моя "маленькая программа" работает с 2002 года. И подозреваю, по объему кода и баз не меньше твоей. Проблема с обновлением методанных была одна за всю историю - когда я не знал, что процедуры лучше альтерить в wait-транзакции , с какой-то версии ФБ, уже не помню. согласен, всё плохо. Но это добро куча народа ваяло 25 с лишним лет. В таких проектах такое неизбежно. Надо постепенно переписывать. Проблема только что до следующего релиза не успеть всё переписать. Приходится латать дырки. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2021, 12:29 |
|
|
start [/forum/topic.php?fid=40&msg=40085641&tid=1559982]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 250ms |
total: | 394ms |
0 / 0 |