Страница 1 из 1
Foreign key trouble 2 :)
Добавлено: 05 май 2005, 15:57
Juice
Доброго дня всем. Использую БД Firebird 1.0.3. Есть простенькая табличка:
CREATE TABLE REPORTTYPE (
REPORTTYPEID ID,
NAME VARCHAR(100) NOT NULL);
ALTER TABLE REPORTTYPE ADD PRIMARY KEY (REPORTTYPEID);
И есть еще таблица, которую я пытаюсь подчинить вышеуказанной:
CREATE TABLE SENTREPORTS (
REPORTID ID,
REPORTTYPEID ID,
REPORTDATE DATE,
REPORT BLOB SUB_TYPE 0 SEGMENT SIZE -1,
TRADERID ID);
/* Primary keys definition */
ALTER TABLE SENTREPORTS ADD PRIMARY KEY (REPORTID);
... Таким образом:
alter table SentReports add constraint FK_SentReportsType foreign key (ReportTypeId) references ReportType(ReportTypeID);
Выдается ошибка : This operation is not defined for system tables. unsuccessfull metadata update. object REPORTTYPE is in use. У меня есть зеркальная однако localhost-копия этой базы (использую для отладки), у себя изменения вносятся без проблем. Как в таком случае сделать внешний ключ ? И хочу задать попутный вопрос - где можно почитать обьяснение ошибок интербейса ? ИМХО, разработчики их так пообзывали что смысла уловить вообще невозможно
Добавлено: 05 май 2005, 16:07
kdv
REPORT BLOB SUB_TYPE 0 SEGMENT SIZE -1
что за порнография с segment size? faq читал?
object REPORTTYPE is in use.
в переводе с английского это означает, что объект ИСПОЛЬЗУЕТСЯ в данный момент. А FK строятся только в монопольном режиме.
То есть. Если ты в IBExpert, то делать надо так:
1. позакрывать все открытые таблицы
2. закрыть коннект
3. открыть коннект
4. открыть SQL Editor
5. в SQL Editor написать alter table .... add constraint .. foreign key...
6. нажать Commit.
Добавлено: 06 май 2005, 11:21
Juice
что за порнография с segment size? faq читал?
Это я выдернул DDL таблицы из IB Experta. Вот глянул в скрипт создания этой таблицы (был написан не мною): REPORT BLOB SUB_TYPE 0 SEGMENT SIZE 65536. Ради интереса пересоздал таблицу - так он снова -1 стал. Короче убрал я этот SEGMENT SIZE вообще, зачем он нужен ?
Мне подумалось что может в этом была причина проблемы, однако не помогло. Я выполняю все 6 шагов - опять возникает ошибка! Я от безнадеги даже после п.2 пробовал перезагружаться

Добавлено: 06 май 2005, 12:49
kdv
еще раз прочитай мое предыдущее сообщение. ВНИМАТЕЛЬНО. на segment size забей.
Добавлено: 06 май 2005, 12:59
Merlin
Ты ему там не объяснил, что монопольный - значит монопольный

То есть, надо не только вокруг Эксперта прыгать, но и поразогнать юзеров если таковые есть, коннект в Дельфе закрыть и т.п. А вообще-то Эксперт порой умеет сам себе очень плотно наступать на гениталии с кешированием метаданных на входе, служебными транзакциями и т.п. Слава богу, я на первом диалекте - им пользуюсь только на посмотреть когда много чего надо одновременно, да процедуры поотлаживать, а модификации метаданных имею возможность делать в своём любимом WISQL от 5-ки.
Добавлено: 06 май 2005, 13:14
kdv
короче, вы меня ОБА одолели
Беру, открываю IBExpert. Первую попавшуюся базу.
Открываю SQL Editor. ПООЧЕРЕДНО, каждый оператор из исходного сообщения, вплоть до создания FK кидаю в SQL Editor, жму Execute и Commit.
И НИКАКИХ, БЛИН, ОШИБОК.
Все в одном коннекте, непрерывно, один оператор за другим.
Какие будут ВОПРОСЫ?
p.s. Кстати, Juice, по поводу скрипта. Создавать
домен ID INT NOT NULL а потом втыкать его везде - это изврат. Я не знаю, чего ты там экономишь, но... а в принципе, пофигу.
Добавлено: 06 май 2005, 15:18
Juice
Kdv, спасибо за проделаную работу, но я и так бы тебе поверил ! Я ведь писал что на локальной копии базы все отлично срабатывает.
Пробовал как альтернативой воспользоваться IBAdmin'ом -

. Хорошо, если дело не во мне, то тогда причина в удаленных пользователях юзающих табл.ReportType, правильно ? Но я знаю что никто не использует эту таблицу и вообще я беру ее и без проблем делаю ей drop! И вот теперь становится совсем непонятно, кем или чем object REPORTTYPE is in use ???
И попутно поинтересуюсь: можно ли, и если да то как, отрубить всех пользователей не делая database shutdown ?
Добавлено: 06 май 2005, 15:57
Merlin
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Добавлено: 07 май 2005, 00:37
kdv
ребят, вы лучше выпейте водки, а после праздников - с вопросами.
как отрубить всех пользователей не делая database shutdown ?
я не знаю. потому что перевод БД в shutdown - это отрубание пользователей. Я не знаю как отрубить всех пользователей их не отрубая.
Добавлено: 10 май 2005, 15:08
Juice
Праздничная водка подействовала - помог shutdown
