Foreign key trouble 2 :)

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

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

Ответить
Juice
Сообщения: 23
Зарегистрирован: 16 фев 2005, 11:54

Foreign key trouble 2 :)

Сообщение Juice » 05 май 2005, 15:57

Доброго дня всем. Использую БД 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-копия этой базы (использую для отладки), у себя изменения вносятся без проблем. Как в таком случае сделать внешний ключ ? И хочу задать попутный вопрос - где можно почитать обьяснение ошибок интербейса ? ИМХО, разработчики их так пообзывали что смысла уловить вообще невозможно

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 05 май 2005, 16:07

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.

Juice
Сообщения: 23
Зарегистрирован: 16 фев 2005, 11:54

Сообщение Juice » 06 май 2005, 11:21

что за порнография с segment size? faq читал?

Это я выдернул DDL таблицы из IB Experta. Вот глянул в скрипт создания этой таблицы (был написан не мною): REPORT BLOB SUB_TYPE 0 SEGMENT SIZE 65536. Ради интереса пересоздал таблицу - так он снова -1 стал. Короче убрал я этот SEGMENT SIZE вообще, зачем он нужен ?
Мне подумалось что может в этом была причина проблемы, однако не помогло. Я выполняю все 6 шагов - опять возникает ошибка! Я от безнадеги даже после п.2 пробовал перезагружаться :)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 06 май 2005, 12:49

еще раз прочитай мое предыдущее сообщение. ВНИМАТЕЛЬНО. на segment size забей.

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

Сообщение Merlin » 06 май 2005, 12:59

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 06 май 2005, 13:14

короче, вы меня ОБА одолели :)

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

И НИКАКИХ, БЛИН, ОШИБОК.

Все в одном коннекте, непрерывно, один оператор за другим.
Какие будут ВОПРОСЫ? :lol:

p.s. Кстати, Juice, по поводу скрипта. Создавать
домен ID INT NOT NULL а потом втыкать его везде - это изврат. Я не знаю, чего ты там экономишь, но... а в принципе, пофигу.

Juice
Сообщения: 23
Зарегистрирован: 16 фев 2005, 11:54

Сообщение Juice » 06 май 2005, 15:18

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

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

Сообщение Merlin » 06 май 2005, 15:57

Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Монопольный режим
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных
Серверный кеш метаданных

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 07 май 2005, 00:37

ребят, вы лучше выпейте водки, а после праздников - с вопросами.
как отрубить всех пользователей не делая database shutdown ?
я не знаю. потому что перевод БД в shutdown - это отрубание пользователей. Я не знаю как отрубить всех пользователей их не отрубая.

Juice
Сообщения: 23
Зарегистрирован: 16 фев 2005, 11:54

Сообщение Juice » 10 май 2005, 15:08

Праздничная водка подействовала - помог shutdown :)

Ответить