Wie eine Tabelle auf iSeries zu ändern, die Einschränkungen hat? Erster „* FILE im Einsatz.“ Error

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

  •  01-10-2019
  •  | 
  •  

Frage

Ich habe eine Tabelle auf einem iSeries (IBM-i / AS400), die einige Einschränkungen hat. Die Tabelle mit SQL wie so erstellt wird, mit einer Handvoll von Fremdschlüssel Verknüpfung von anderen Tabellen zu dieser Tabelle (Ist-SQL ein bisschen hier verschleiert wurde):

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;

Nun, viel später, ich muß diese Tabelle ändern, ein Feld hinzufügen:

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

Welche Ergebnisse in dieser Meldung:

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

Ich habe überprüft, und es gibt definitiv keine Objektsperren auf dieser Tabelle zu diesem Zeitpunkt. Wenn ich die joblog überprüfen, sehe ich:

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.  

Nun, ich könnte natürlich entfernen und erneut hinzufügen die Zwänge in Frage, aber ich fühle mich wie dies nicht notwendig sein sollte. Die Spalte Ich füge hat nichts mit den Zwängen zu tun. Ich glaube, dies ist wahrscheinlich eine Folge der Tatsache ist, dass in der Tat OS400 (i5 / O) ist nicht wirklich die vorhandene Tabelle zu verändern, sondern stattdessen eine neue Tabelle erstellen und Kopieren von Daten in, und das ist wahrscheinlich, wo der Schmerz kommt.

Aber ist es eine Möglichkeit, um möglicherweise die Schlüssel auszusetzen und sie dann nach dem Alter wieder?

(Antworten, die mit SQL tun dies beinhalten oder empfehlen die Erstellung der Tabelle anders nicht in erster Linie sind nicht hilfreich, da sie hier nicht anwendbar sind ...)

War es hilfreich?

Lösung

Die Antwort lautet: vermisste ich die Tatsache, dass es eine Sperre auf einem des Tisches war, die einen Fremdschlüssel zu dieser Tabelle zeigen hatte. Oder, um es unverblümt: Ich bin ein Idiot

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top