![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: -
Firebird: Constraint enable/disable?
Gibt es eine Möglichkeit, in Firebird, Constraints abzuschalten? Ich möchte sie nicht löschen, sondern nur kurzzeitig außer Kraft setzen.
Hoffe ihr habt einen Tipp für mich. |
Re: Firebird: Constraint enable/disable?
SQL-Code:
alter index <Indexname> inactive;
|
Re: Firebird: Constraint enable/disable?
Hallo Wunni,
vielen Dank für deinen Hinweis. Ich möchte aber keinen Index deaktivieren, sondern alle Foreign-Keys und den Primary-Key einer Tabelle. Sorry, für die unpräzise Fragestellung. |
Re: Firebird: Constraint enable/disable?
Sorry, Deine Frage war schon klar formuliert. Ich habe mich von IBExpert täuschen lassen. Bei Interbase kann man den Foreign Key nicht deaktivieren. Man kann mit IBExpert aber bei einer Firebird 2.0 Datenbank den Foreign Key deaktivieren, erhält dann aber vom Firebird Server eine Exception.
|
Re: Firebird: Constraint enable/disable?
Hallo,
zuerst doch mal die Frage, wozu ? Heiko |
Re: Firebird: Constraint enable/disable?
Hallo Heiko,
ich möchte zwei Datenbanken synchronisieren. |
Re: Firebird: Constraint enable/disable?
Das geht m.W. nur wenn man die Datenbank in den singelusermodus versetzt
SQL-Code:
alter constraint <constraint> disable;
... alter constraint <constraint> enable; |
Re: Firebird: Constraint enable/disable?
Ok, danke schonmal für diese Infos.
Man kann also einen Constraint ein-/abschalten. Geht das auch bezogen auf eine Tabelle? Oder muss ich mir jetzt erstmal alle Constraints einer Tabelle raussuchen, um sie dann abzuschalten? Ich denke dabei an (mssql) folgendes...
Code:
ALTER TABLE tabelle NOCHECK CONSTRAINT ALL
|
Re: Firebird: Constraint enable/disable?
Keine Ahnung im Zweifel einfach eine Schleife über alle Constraints ( über Systemtabllen). Oder Schreibe Holger (User IBexpert) oder Thomas ( Steinmaurer) mal per PN oder Email an.
|
Re: Firebird: Constraint enable/disable?
Zitat:
ich such auch nach einer Möglichkeit, die Constraints vorübergehend zu deaktivieren und später zu aktivieren. Das Beispiel von oben scheint nicht (mehr) zu funktionieren. Habe es mit Database Workbench probiert und auch im Singleusermodus hat es nicht geklappt:
SQL-Code:
Das erste Vorkommen von constraint führt shcon zum Problem.
< ERROR:
ISC ERROR CODE:335544569 ISC ERROR MESSAGE: Dynamic SQL Error SQL error code = -104 Token unknown - line 1, column 7 constraint STATEMENT: TIB_DSQL: "<TIB_Script>.<TIB_DSQL>." Was läuft schief? Wie sonst kann man die constraints deaktivieren / aktivieren? |
Re: Firebird: Constraint enable/disable?
Hallo,
welche Firebird-Version hast du denn ? Das läuft wohl erst ab der 2.1er. Heiko |
Re: Firebird: Constraint enable/disable?
Hallo Heiko,
wir nutzen die Verison 2.1.1.1.790, also auf jeden Fall die 2.1er. Klappt aber trotzdem nicht, wie es aussieht. Generell soll es aber gehen, glaube ich. Steht hier klar drin: ![]() Zitat:
|
Re: Firebird: Constraint enable/disable?
Während der Constraint-Deaktivierung darf die Datenbank sicher nicht im Betrieb weitergenutzt werden.
Was würde jetzt eigentlich dagegen sprechen den Server zu stoppen und die DB einfach zu kopieren? Grüße // Martin |
Re: Firebird: Constraint enable/disable?
In unserem Fall geht es darum, dass wir während eines Updates einige Systemdatensätze in die DB einfügen wollen / müssen, die miteinander per Constraints zusammenhängen. Es sind zwar korrekte Datensätze und genauso würde man sie auch übers Programm erstellen können theoretisch, also Schritt für Schritt die entsprechenden IDs / Verweise eintragen etc.
Beim Einfügen soll das alles in einem Rutsch passieren und eben das Einfügen klappt nicht, weil die ID des Datensatzes A, die beim Datensatz B eingetragen ist, im selbern Schritt wie Datensatz B eingetragen werden soll. Ob es an sich richtig ist von der Idee her, sei mal dahingestellt, da es ja in einer Transaktion läuft, könnte man denken, das es geht... Deswegen die Suche nach einer Möglichkeit, die Consntraints zu deaktiveiren, die Daten einzufügen und dann wieder zu aktivieren. Wenn etwas mit den Daten nicht stimmt, soll beim Aktivieren der Constraints der Fehler kommen, was vollkommen ok wäre. |
Re: Firebird: Constraint enable/disable?
Da ich hier noch mit FB 1.5 arbeite würde ich das in 3 Schritten angehen:
1. Datenbankstruktur ohne Constraints viea SQL-DDL neu anlegen. 2. Daten einfügen (ohne constraints) via Insert-Statements 3. Constraints via SQL-DDL hinzufügen Grüße // Martin |
Re: Firebird: Constraint enable/disable?
Hi Martin,
für eine neue Datenbank machen wir das genauso und das klappt problemlos. Die Sache ist, dass wir sowas an bestehenden Datenbanken auch durchführen müssen, sprich die schon bei Kunden im Einsatz sind. Da ist sowas leider nicht mehr möglich, es sei denn man lösch erst alle Beziehungen, fügt die Daten ein und anschließend erneut die beziehungen, aber das ist keine Lösung, bei der man ein gutes Gefühl hat, glaube ich :) Danke für Deine Bemühungen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz