Foreign key trouble 2 :)
Foreign key trouble 2 :)
Доброго дня всем. Использую БД 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-копия этой базы (использую для отладки), у себя изменения вносятся без проблем. Как в таком случае сделать внешний ключ ? И хочу задать попутный вопрос - где можно почитать обьяснение ошибок интербейса ? ИМХО, разработчики их так пообзывали что смысла уловить вообще невозможно
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-копия этой базы (использую для отладки), у себя изменения вносятся без проблем. Как в таком случае сделать внешний ключ ? И хочу задать попутный вопрос - где можно почитать обьяснение ошибок интербейса ? ИМХО, разработчики их так пообзывали что смысла уловить вообще невозможно
что за порнография с segment size? faq читал?REPORT BLOB SUB_TYPE 0 SEGMENT SIZE -1
в переводе с английского это означает, что объект ИСПОЛЬЗУЕТСЯ в данный момент. А FK строятся только в монопольном режиме.object REPORTTYPE is in use.
То есть. Если ты в IBExpert, то делать надо так:
1. позакрывать все открытые таблицы
2. закрыть коннект
3. открыть коннект
4. открыть SQL Editor
5. в SQL Editor написать alter table .... add constraint .. foreign key...
6. нажать Commit.
что за порнография с segment size? faq читал?
Это я выдернул DDL таблицы из IB Experta. Вот глянул в скрипт создания этой таблицы (был написан не мною): REPORT BLOB SUB_TYPE 0 SEGMENT SIZE 65536. Ради интереса пересоздал таблицу - так он снова -1 стал. Короче убрал я этот SEGMENT SIZE вообще, зачем он нужен ?
Мне подумалось что может в этом была причина проблемы, однако не помогло. Я выполняю все 6 шагов - опять возникает ошибка! Я от безнадеги даже после п.2 пробовал перезагружаться

Ты ему там не объяснил, что монопольный - значит монопольный
То есть, надо не только вокруг Эксперта прыгать, но и поразогнать юзеров если таковые есть, коннект в Дельфе закрыть и т.п. А вообще-то Эксперт порой умеет сам себе очень плотно наступать на гениталии с кешированием метаданных на входе, служебными транзакциями и т.п. Слава богу, я на первом диалекте - им пользуюсь только на посмотреть когда много чего надо одновременно, да процедуры поотлаживать, а модификации метаданных имею возможность делать в своём любимом WISQL от 5-ки.

короче, вы меня ОБА одолели
Беру, открываю IBExpert. Первую попавшуюся базу.
Открываю SQL Editor. ПООЧЕРЕДНО, каждый оператор из исходного сообщения, вплоть до создания FK кидаю в SQL Editor, жму Execute и Commit.
И НИКАКИХ, БЛИН, ОШИБОК.
Все в одном коннекте, непрерывно, один оператор за другим.
Какие будут ВОПРОСЫ?
p.s. Кстати, Juice, по поводу скрипта. Создавать
домен ID INT NOT NULL а потом втыкать его везде - это изврат. Я не знаю, чего ты там экономишь, но... а в принципе, пофигу.

Беру, открываю IBExpert. Первую попавшуюся базу.
Открываю SQL Editor. ПООЧЕРЕДНО, каждый оператор из исходного сообщения, вплоть до создания FK кидаю в SQL Editor, жму Execute и Commit.
И НИКАКИХ, БЛИН, ОШИБОК.
Все в одном коннекте, непрерывно, один оператор за другим.
Какие будут ВОПРОСЫ?

p.s. Кстати, Juice, по поводу скрипта. Создавать
домен ID INT NOT NULL а потом втыкать его везде - это изврат. Я не знаю, чего ты там экономишь, но... а в принципе, пофигу.
Kdv, спасибо за проделаную работу, но я и так бы тебе поверил ! Я ведь писал что на локальной копии базы все отлично срабатывает.
Пробовал как альтернативой воспользоваться IBAdmin'ом -
. Хорошо, если дело не во мне, то тогда причина в удаленных пользователях юзающих табл.ReportType, правильно ? Но я знаю что никто не использует эту таблицу и вообще я беру ее и без проблем делаю ей drop! И вот теперь становится совсем непонятно, кем или чем object REPORTTYPE is in use ???
И попутно поинтересуюсь: можно ли, и если да то как, отрубить всех пользователей не делая database shutdown ?
Пробовал как альтернативой воспользоваться IBAdmin'ом -

И попутно поинтересуюсь: можно ли, и если да то как, отрубить всех пользователей не делая database shutdown ?
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных