Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird: Constraint enable/disable? (https://www.delphipraxis.net/126678-firebird-constraint-enable-disable.html)

omata 30. Dez 2008 23:26

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.

Wunni 30. Dez 2008 23:38

Re: Firebird: Constraint enable/disable?
 
SQL-Code:
alter index <Indexname> inactive;

omata 30. Dez 2008 23:46

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.

Wunni 30. Dez 2008 23:54

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.

hoika 31. Dez 2008 00:03

Re: Firebird: Constraint enable/disable?
 
Hallo,

zuerst doch mal die Frage, wozu ?


Heiko

omata 31. Dez 2008 01:49

Re: Firebird: Constraint enable/disable?
 
Hallo Heiko,

ich möchte zwei Datenbanken synchronisieren.

mkinzler 31. Dez 2008 11:28

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;

omata 31. Dez 2008 17:08

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

mkinzler 31. Dez 2008 17:17

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.

shadowman 2. Mär 2010 16:33

Re: Firebird: Constraint enable/disable?
 
Zitat:

Zitat von mkinzler
Das geht m.W. nur wenn man die Datenbank in den singelusermodus versetzt
SQL-Code:
alter constraint <constraint> disable;
...
alter constraint <constraint> enable;

Hallo,
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:
< 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>."
Das erste Vorkommen von constraint führt shcon zum Problem.

Was läuft schief? Wie sonst kann man die constraints deaktivieren / aktivieren?

hoika 2. Mär 2010 18:54

Re: Firebird: Constraint enable/disable?
 
Hallo,

welche Firebird-Version hast du denn ?
Das läuft wohl erst ab der 2.1er.


Heiko

shadowman 2. Mär 2010 19:16

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:
http://www.firebirdfaq.org/faq20/

Zitat:

Alternatively, you can disable the constraints during the import and turn them back on later.
Dummerweise kein Wort darüber, wie man es machen soll.

mschaefer 3. Mär 2010 09:27

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

shadowman 3. Mär 2010 13:12

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.

mschaefer 3. Mär 2010 15:09

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

shadowman 3. Mär 2010 15:46

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