Ich glaube, es in ALTER...MODIFY
zu einer Inline-Option keine Option ist, um die noch vorhandene Zwang Kaskade zu machen; Ich denke, dass Sie in der Tat fallen und neu erstellen müssen, oder gleichwertig.
Ich stimme auch zu, es sieht so aus, als ob es keine saubere Möglichkeit gibt, eine Partition-Referenz-Einschränkung entweder zu löschen und neu zu erstellen; Ich glaube, du wirst einer Neudefinition gegenüberstehen, um dorthin zu gelangen.
Erschwerend kommt hinzu, es sieht aus wie die DBMS_REFEFINITION
Verbesserungen in 12c werden Sie nicht dort in einem netten Ein-Schritt-REDEF, als DBMS_REDEFINITION
doesn't support Referenz Partitionierung.
Ich denke, Sie müssen eine Old-School-Rede machen. (Es könnte immer noch wert sein, einige DBMS_REDEFINITION
mit einem handgefertigten Ersatz zu versuchen, aber ich wäre für mindestens ein bisschen Ausfallzeit bereit).
Ein Ansatz wie im folgenden Beispiel könnte Sie dorthin bringen (mit Ausfallzeiten). Abhängig von Ihren Verfügbarkeitsanforderungen können andere Ansätze die Ausfallzeit in diesem Beispiel minimieren.
eine Ersetzungstabelle Machen Sie mit dem gewünschten CASCADING FK
:
create table y_temp (a number not null,
constraint y_temp_x_fk foreign key(a) references x(a) ON DELETE CASCADE)
partition by reference(y_temp_x_fk);
Dann read-only gehen:
ALTER TABLE X READ ONLY;
ALTER TABLE Y READ ONLY;
synchronisieren Dann Y
und Y_TEMP
:
INSERT INTO Y_TEMP SELECT Y.A FROM Y;
COMMIT;
dann die Swap machen :
ALTER TABLE Y RENAME TO Y_OLD;
ALTER TABLE Y_TEMP RENAME TO Y;
DROP TABLE Y_OLD;
ALTER TABLE Y RENAME CONSTRAINT y_temp_x_fk TO y_x_fk;
Und bringen Sie Dinge sichern für WRITE
ALTER TABLE X READ WRITE;
es Dann testen:
INSERT INTO X VALUES (1);
INSERT INTO Y VALUES (1);
SELECT * FROM Y;
A
1
DELETE FROM X;
1 row deleted.
Und die Kaskade:
SELECT * FROM Y;
no rows selected
etwas, das ich nicht bekommen: Sie wollen die y_x_fk-Bedingung in die Delete-Kaskade zu ändern? Und Sie sagen, Sie können es nicht löschen? Bist du sicher? –
Ja, ich bekomme ORA-14650, wenn ich versuche, die Einschränkung zu löschen. Die Tabelle wird durch Verweis partitioniert, und dieser FK ist der Partitionsschlüssel, und Sie können eine solche Einschränkung nicht einfach löschen. – rattaman