Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Изменение метаданных в рамках одной транзакции / 25 сообщений из 25, страница 1 из 1
22.07.2021, 16:55
    #40085473
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
Всем доброго дня,

столкнулся в коде с ситуацией, когда в рамках одной транзакции удаление зависимости (в данном случае триггера) и попытка последующего удаления процедуры которая зависит от этого триггера заканчивается ошибкой что существует зависимость.
Причём в куче других мест в этой же транзакции такие же зависимости удаляются и последующие удаления зависимых процедур проходит безпроблемно.
...
Рейтинг: 0 / 0
22.07.2021, 17:06
    #40085476
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
«Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит» (с) АБС
...
Рейтинг: 0 / 0
22.07.2021, 17:09
    #40085479
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hlopotun
процедуры которая зависит от этого триггера
Она его вызывает ? :)
...
Рейтинг: 0 / 0
22.07.2021, 17:23
    #40085495
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hvlad
hlopotun
процедуры которая зависит от этого триггера
Она его вызывает ? :)

сорри. устал наверное .... :)
вопрос снят
...
Рейтинг: 0 / 0
22.07.2021, 17:27
    #40085498
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hlopotun,

в данном случае процедура сидит в триггере.
Сначала удаляется триггер а потом процедура которая в нём используется.
Всё в одной транзакции.
И при удалении процедуры возникает исключение что есть зависимость.
Так правильно было написать
...
Рейтинг: 0 / 0
22.07.2021, 17:37
    #40085510
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
Обычно людям хватает прочитать в тексте ошибки от кого именно есть зависимость.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.07.2021, 17:40
    #40085514
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
Dimitry Sibiryakov

Обычно людям хватает прочитать в тексте ошибки от кого именно есть зависимость.

в тексте ошибки просто количество зависимостей. Без указания от кого конкретно. В IBЕхперт уже потом подсмотрел от кого
...
Рейтинг: 0 / 0
22.07.2021, 18:18
    #40085528
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hlopotun,

А мне вот интересно, что за код такой, который триггера и процедуры дропает. Причем не в одном месте, а "в куче других"? Это как бы не стук в подвале, это что-то другое....
...
Рейтинг: 0 / 0
22.07.2021, 18:45
    #40085536
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hlopotun,

во-первых,
В приставках БЕС/ БЕЗ согласная зависит от первой буквы корня слова. Если первая буква глухая, то и в приставке глухая С.
А значит, "беспроблемно", а не "беЗпроблемно".
во-вторых, обновление метаданных - сложная процедура, и разные метаданные по разному обрабатываются. В одном случае это просто изменение одной таблицы, в другом случае изменение нескольких системных таблиц, а в третьих случаях - обновление выполняется только по коммиту (создание индексов).
в третьих, удаление процедуры может обломиться просто потому, что объект используется каким-то коннектом.
Поэтому надо
а) точное сообщение об ошибке
б) воспроизводимый пример.
...
Рейтинг: 0 / 0
22.07.2021, 18:45
    #40085537
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
DarkMaster
hlopotun,

А мне вот интересно, что за код такой, который триггера и процедуры дропает. Причем не в одном месте, а "в куче других"? Это как бы не стук в подвале, это что-то другое....


программа миграции базы с одной версии на другую
...
Рейтинг: 0 / 0
22.07.2021, 18:47
    #40085538
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hlopotun,

в случае миграции я бы при необходимости удаления процедуры сначала бы ее альтерил до begin/end, а уже во втором обновлении делал бы drop procedure.
...
Рейтинг: 0 / 0
22.07.2021, 19:20
    #40085547
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
kdv
hlopotun,

в случае миграции я бы при необходимости удаления процедуры сначала бы ее альтерил до begin/end, а уже во втором обновлении делал бы drop procedure.

интересная идея, спасибо!
...
Рейтинг: 0 / 0
22.07.2021, 20:12
    #40085553
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
kdv
hlopotun,

в случае миграции я бы при необходимости удаления процедуры сначала бы ее альтерил до begin/end, а уже во втором обновлении делал бы drop procedure.


кстати, если процедура принимает или возвращает параметры определённые через ... Type of Column .... (которые тоже делают её зависимой) и если её альтерить без параметров а гдето в другом коде она с парамерами вызывается пройдёт ли альтер или нет? (не начём в данный момент проверить а интересно).
...
Рейтинг: 0 / 0
22.07.2021, 20:15
    #40085554
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
kdv
в случае миграции я бы при необходимости удаления процедуры сначала бы ее альтерил до begin/end, а уже во втором обновлении делал бы drop procedure.
А смысл? Это бывает полезно, чтобы убрать зависимость процедуры от других объектов. А тут же обратная ситуация.

Вообще, не знаю, что тут обсуждается уже несколько страниц. Очевидно ж из названия топика еще, что ТСу надо коммит вставить между своими дропами.
...
Рейтинг: 0 / 0
22.07.2021, 21:26
    #40085564
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
YuRock
kdv
в случае миграции я бы при необходимости удаления процедуры сначала бы ее альтерил до begin/end, а уже во втором обновлении делал бы drop procedure.
А смысл? Это бывает полезно, чтобы убрать зависимость процедуры от других объектов. А тут же обратная ситуация.

Вообще, не знаю, что тут обсуждается уже несколько страниц. Очевидно ж из названия топика еще, что ТСу надо коммит вставить между своими дропами.


ну, это удобно в других местах тоже. При других зависимостях.
По поводу промежуточного коммита непонятно только одно. В этой же транзакции в такой же ситуации есть ещё несколько триггеров и процедур и с ними этой проблеммы не возникает. По сути тут только обновление метаданных, правильной очерёдности дропов должно быть достаточно даже в рамках одной транзакции.
...
Рейтинг: 0 / 0
22.07.2021, 21:51
    #40085570
Старый плюшевый мишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
А пресловутое сообщение о наличии зависимости - это, часом, не object in use?
...
Рейтинг: 0 / 0
22.07.2021, 21:57
    #40085571
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
Старый плюшевый мишка
А пресловутое сообщение о наличии зависимости - это, часом, не object in use?

нет,
"cannot delete SP_..... there are 1 dependencies'
...
Рейтинг: 0 / 0
22.07.2021, 23:17
    #40085583
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hlopotun,

я не понял - вопрос снят или где ?
...
Рейтинг: 0 / 0
22.07.2021, 23:23
    #40085585
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hlopotun
правильной очерёдности дропов должно быть достаточно даже в рамках одной транзакции.
Кому должно и кем? Мне тоже что-то должны? Интересуюсь навсякий...
...
Рейтинг: 0 / 0
22.07.2021, 23:32
    #40085587
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hlopotun

По поводу промежуточного коммита непонятно только одно. В этой же транзакции в такой же ситуации есть ещё несколько триггеров и процедур и с ними этой проблеммы не возникает.
У меня похожая проблема возникла пару лет назад. Один раз, на одной таблице из сотен.
После CREATE TABLE в одной транзакции делал ALTER TABLE ADD CONSTRAINT PK, я всегда так делаю. И на некоторых базах (больших) вылетело Table НазваниеТаблицы not found.

Я к этой проблеме отнесся с пониманием, решил ее за секунду, без форума. Просто вставил коммит.
Настоятельные рекомендации разработчиков делать коммит после любого изменения метаданных пишутся не просто так. Им виднее.
...
Рейтинг: 0 / 0
23.07.2021, 09:25
    #40085634
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
YuRock
Просто вставил коммит.

Плюсую
...
Рейтинг: 0 / 0
23.07.2021, 10:05
    #40085641
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
YuRock
hlopotun

По поводу промежуточного коммита непонятно только одно. В этой же транзакции в такой же ситуации есть ещё несколько триггеров и процедур и с ними этой проблеммы не возникает.
У меня похожая проблема возникла пару лет назад. Один раз, на одной таблице из сотен.
После CREATE TABLE в одной транзакции делал ALTER TABLE ADD CONSTRAINT PK, я всегда так делаю. И на некоторых базах (больших) вылетело Table НазваниеТаблицы not found.

Я к этой проблеме отнесся с пониманием, решил ее за секунду, без форума. Просто вставил коммит.
Настоятельные рекомендации разработчиков делать коммит после любого изменения метаданных пишутся не просто так. Им виднее.


это может быть в маленькой программке это не проблема а в большой такой коммит тащит за собой кучу изменений во всём коде.
К примеру если в фреймворке с которым работает эта программа такой коммит не предусмотрен и ломает остальную логику основанную на одной транзакции. Компонент в котором вызывается этот скрипт обновления и не предусматривает промежуточного коммита и используется ещё в куче других мест. А учитывая что программиста который когда то это всё наваял и след простыл всё ещё более усложняется. Поэтому сначала надо разобраться. Вот и разбираюсь :)
...
Рейтинг: 0 / 0
23.07.2021, 10:13
    #40085647
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hvlad
hlopotun,

я не понял - вопрос снят или где ?

сорри что отвлёк, наверное всётаки снят. Понятно что надо как то коммит втыкать.
Единственное, на машинах разработкиков это обновление запускается ежедневно и скорее всего в базе накапливается мусор от частого удаления и создания метаданных. Можно попробовать сделать резервное копирование и восстановление подопытных баз. Возможно очистка как то ситуацию временно исправит. Но по любому проблемму походу надо решать кардинально.
...
Рейтинг: 0 / 0
23.07.2021, 10:26
    #40085649
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
hlopotun
это может быть в маленькой программке это не проблема а в большой такой коммит тащит за собой кучу изменений во всём коде
В каком коде, што за бред? Ты же сам уже признался, что задача - обновить версию.
Это просто - скрипт обновления.
hlopotun
К примеру если в фреймворке с которым работает эта программа

Твой "фреймворк" в процессе работы постоянно меняет метаданные? Тогда помочь, боюсь, не смогу.

А моя "маленькая программа" работает с 2002 года. И подозреваю, по объему кода и баз не меньше твоей.
Проблема с обновлением методанных была одна за всю историю - когда я не знал, что процедуры лучше альтерить в wait-транзакции , с какой-то версии ФБ, уже не помню.
...
Рейтинг: 0 / 0
23.07.2021, 12:29
    #40085687
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение метаданных в рамках одной транзакции
YuRock
hlopotun
это может быть в маленькой программке это не проблема а в большой такой коммит тащит за собой кучу изменений во всём коде
В каком коде, што за бред? Ты же сам уже признался, что задача - обновить версию.
Это просто - скрипт обновления.
hlopotun
К примеру если в фреймворке с которым работает эта программа

Твой "фреймворк" в процессе работы постоянно меняет метаданные? Тогда помочь, боюсь, не смогу.

А моя "маленькая программа" работает с 2002 года. И подозреваю, по объему кода и баз не меньше твоей.
Проблема с обновлением методанных была одна за всю историю - когда я не знал, что процедуры лучше альтерить в wait-транзакции , с какой-то версии ФБ, уже не помню.


согласен, всё плохо. Но это добро куча народа ваяло 25 с лишним лет. В таких проектах такое неизбежно.
Надо постепенно переписывать. Проблема только что до следующего релиза не успеть всё переписать. Приходится латать дырки.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Изменение метаданных в рамках одной транзакции / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]