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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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


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