Страница 1 из 1
Object is in use
Добавлено: 14 ноя 2005, 12:16
Naidenov
Добрый день, ув. корифеи.
Известно, что для того, чтобы добавить к БД ограничение внешнего ключа, нужно открыть её в монопользовательском режиме.
Вопрос: почему при попытке добавить вышеуказанное ограничение для некоторой таблицы (БД открыта в монопользовательском режиме и никаких обращений к таблице не выполняется) возникает ошибка Object is in use? Однако, если выполнить B/R всё проходит исключительно. Чем это объясняется?
Добавлено: 14 ноя 2005, 12:26
Merlin
Чем всегда.
а) не указанной версией сервера
б) наличием ещё одного забытого соединения (например из среды Дельфи)
в) наличием открытых транзакций в том же соединении
г) отсутствием коммита перед попыткой создания FK (т.е. она не является первым оператором в транзакции)
b/r тут ни при чём абсолютно. Просто при попытке после него были выполнены все условия б-г. Ну и на некоторых версиях сервера без переконнекта не получается.
Добавлено: 14 ноя 2005, 13:09
Naidenov
Merlin писал(а):
а) не указанной версией сервера
FB SuperServer 1.5.2.4731
Merlin писал(а):б) наличием ещё одного забытого соединения (например из среды Дельфи)
Исключено. Перед тем, как локально открыть файл БД Expert(ом), все приложения, работавшие с БД корректно завершаются.
Merlin писал(а):в) наличием открытых транзакций в том же соединении
Если после соединения с файлом БД с помощью Expert(а) никаких обращений к объекту (таблице) не производилось вообще, то я так понимаю, что в рамках данного соединения по отношению к этому объекту таких транзакций просто НЕТ.
Merlin писал(а):г) отсутствием коммита перед попыткой создания FK (т.е. она не является первым оператором в транзакции)
Если по отношению к этому объекту выполняется попытка добавить ТОЛЬКО внешний ключ, и НИЧЕГО БОЛЕЕ, то о каких "первых операторах" идёт речь?
Добавлено: 14 ноя 2005, 13:58
Merlin
Naidenov писал(а):
FB SuperServer 1.5.2.4731
Значит, сомнение про необходимость реконнекта исключается.
Naidenov писал(а):
Merlin писал(а):в) наличием открытых транзакций в том же соединении
Если после соединения с файлом БД с помощью Expert(а) никаких обращений к объекту (таблице) не производилось вообще, то я так понимаю, что в рамках данного соединения по отношению к этому объекту таких транзакций просто НЕТ.
А плевать к какому объекту. Сколько окон открывается в Эксперте при данном соединении с БД? У объектов, которые в этих окнах, есть зависимости, порой неочевидные. Информация о мастере или детали, на которых собираемся создавать FK, попала, скажем, при подгрузке триггеров других таблиц или других FK в кеш метаданных - всё, привет.
Naidenov писал(а):
Merlin писал(а):г) отсутствием коммита перед попыткой создания FK (т.е. она не является первым оператором в транзакции)
Если по отношению к этому объекту выполняется попытка добавить ТОЛЬКО внешний ключ, и НИЧЕГО БОЛЕЕ, то о каких "первых операторах" идёт речь?
Если уверенность в отсутствии других коннектов 100% и при соединении Экспертом не открываются никакие окна кроме SQL Editor и тем не менее первым же запросом в нём FK не создать - то это вопрос к автору Эксперта о его внутренних, служебных транзакциях, дополнительных соединениях и запросах. Негуёвые инструменты или гуёвые, но однокоонные этим не страдают. Лично я им вообще редко пользуюсь по этой причине.