Object is in use

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Naidenov
Сообщения: 59
Зарегистрирован: 18 янв 2005, 17:38

Object is in use

Сообщение Naidenov » 14 ноя 2005, 12:16

Добрый день, ув. корифеи.
Известно, что для того, чтобы добавить к БД ограничение внешнего ключа, нужно открыть её в монопользовательском режиме.
Вопрос: почему при попытке добавить вышеуказанное ограничение для некоторой таблицы (БД открыта в монопользовательском режиме и никаких обращений к таблице не выполняется) возникает ошибка Object is in use? Однако, если выполнить B/R всё проходит исключительно. Чем это объясняется?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 14 ноя 2005, 12:26

Чем всегда.

а) не указанной версией сервера
б) наличием ещё одного забытого соединения (например из среды Дельфи)
в) наличием открытых транзакций в том же соединении
г) отсутствием коммита перед попыткой создания FK (т.е. она не является первым оператором в транзакции)

b/r тут ни при чём абсолютно. Просто при попытке после него были выполнены все условия б-г. Ну и на некоторых версиях сервера без переконнекта не получается.

Naidenov
Сообщения: 59
Зарегистрирован: 18 янв 2005, 17:38

Сообщение Naidenov » 14 ноя 2005, 13:09

Merlin писал(а): а) не указанной версией сервера
FB SuperServer 1.5.2.4731
Merlin писал(а):б) наличием ещё одного забытого соединения (например из среды Дельфи)
Исключено. Перед тем, как локально открыть файл БД Expert(ом), все приложения, работавшие с БД корректно завершаются.
Merlin писал(а):в) наличием открытых транзакций в том же соединении
Если после соединения с файлом БД с помощью Expert(а) никаких обращений к объекту (таблице) не производилось вообще, то я так понимаю, что в рамках данного соединения по отношению к этому объекту таких транзакций просто НЕТ.
Merlin писал(а):г) отсутствием коммита перед попыткой создания FK (т.е. она не является первым оператором в транзакции)
Если по отношению к этому объекту выполняется попытка добавить ТОЛЬКО внешний ключ, и НИЧЕГО БОЛЕЕ, то о каких "первых операторах" идёт речь?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 14 ноя 2005, 13:58

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

Ответить