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