Cómo modificar una tabla en iSeries que tiene limitaciones? Conseguir “FILE * en uso.” Error

StackOverflow https://stackoverflow.com/questions/3588615

  •  01-10-2019
  •  | 
  •  

Pregunta

Tengo una tabla en un iSeries (IBM-i / AS400) que tiene algunas limitaciones. La tabla se crea con SQL como tal, con un puñado de claves externas que unen a otras tablas a esta tabla (SQL real ha sido un poco ofuscado aquí):

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;

Ahora, mucho más tarde, me tendrá que alterar esa tabla para agregar un campo:

ALTER TABLE ABCLIB.ABCDE ADD COLUMN DEICN VARGRAPHIC (100) ALLOCATE(50)     

¿Qué resultados en este mensaje:

Row or object ABCDE in ABCLIB type *FILE in use.

He comprobado y hay sin duda no hay bloqueos de objetos en esta tabla en este momento. Cuando compruebo las anotaciones de trabajo, veo esto:

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.  

Ahora, yo podría quitar del curso y volver a agregar las restricciones en cuestión, pero siento que esto no debería ser necesario. La columna Estoy añadiendo no tiene nada que ver con las restricciones. Creo que esto probablemente es el resultado del hecho de que, de hecho, OS400 (i5 / OS) no está realmente alterando la tabla existente, sino que está creando una nueva tabla y copiar datos en, y que es, probablemente, donde el dolor entra en acción.

Pero, ¿existe una manera de posiblemente suspender las teclas y luego reanudar después de la alter?

(Las respuestas que no implican hacer esto con SQL o sugerir la creación de la mesa de manera diferente en el primer lugar no son útiles, ya que no son aplicables aquí ...)

¿Fue útil?

Solución

La respuesta es: Me perdí el hecho de que había un bloqueo en una de las mesas que tenía una clave externa que apunta a esa mesa. O, dicho más claramente: yo soy un idiota

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top