Как изменить таблицу на iSeries, которые имеют ограничения? Получение «* файл в использовании». ошибка
-
01-10-2019 - |
Вопрос
У меня есть стол на iSeries (IBM-I / AS400), который имеет некоторые ограничения. Таблица создана с помощью SQL, так, с горсткой иностранных клавиш, связывающих из других таблиц к этой таблице (фактический SQL был немного запутан здесь):
CREATE TABLE ABCLIB.ABCDE (
DEIDN INTEGER NOT NULL WITH DEFAULT,
DETTL VARGRAPHIC (50) ALLOCATE(25),
DETYP CHAR (1) NOT NULL WITH DEFAULT);
ALTER TABLE ABCLIB.ABCDE ADD PRIMARY KEY (DEIDN);
ALTER TABLE ABCLIB.ABCFG ADD FOREIGN KEY (FGDEK)
REFERENCES ABCLIB.ABCDE (DEIDN)
ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE ABCLIB.ABCHI ADD FOREIGN KEY (HIDEK)
REFERENCES ABCLIB.ABCDE (DEIDN)
ON DELETE RESTRICT ON UPDATE RESTRICT;
Теперь, намного позже мне нужно изменить этот стол, чтобы добавить поле:
ALTER TABLE ABCLIB.ABCDE ADD COLUMN DEICN VARGRAPHIC (100) ALLOCATE(50)
Который приводит к этому сообщению:
Row or object ABCDE in ABCLIB type *FILE in use.
Я проверил, и на данный момент определенно нет замков объекта. Когда я проверяю JoLog, я вижу это:
Constraint cannot be removed from file Q_AT000000.
Constraint(s) not removed from file Q_AT000000.
File ABCDE in ABCLIB not changed.
Row or object ABCDE in ABCLIB type *FILE in use.
Теперь я мог бы, конечно, удалить и повторно добавить под сомнение ограничения, но я чувствую, что это не должно быть необходимо. Колонка, которую я добавляю, не имеет ничего общего с ограничениями. Я считаю, что это, вероятно, является результатом того факта, что на самом деле OS400 (I5 / OS) на самом деле не изменяет существующую таблицу, но вместо этого создает новую таблицу и копирование данных, и это, вероятно, где приходит боль.
Но есть ли способ, возможно, приостановить ключи, а затем возобновить их после изменить?
(Ответы, которые не связаны с этим с SQL или предложить создание таблицы по-разному в первую очередь не полезно, поскольку они не применимы здесь ...)
Решение
Ответ: Я упустил тот факт, что на одной из таблиц был замок, указывающий на этот стол. Или положить более прямо: я идиот!
Другие советы
Делает Включение или отключение ссылочных ограничений помощь?