Wie alle Trigger in einer Firebird 1.5 Datenbank löschen
-
02-10-2019 - |
Frage
Für Debug-Zwecke muss ich jemand 1 Tisch einer vorhandenen Firebird 1.5 Datenbank senden.
Statt die ganzen db senden, mag ich nur mit dieser Tabelle nur die DB senden - keine Trigger, keine Einschränkungen. Ich kann die Daten an einem anderen db nicht kopieren, weil es ist nur, dass wir überprüfen wollen -., Warum diese eine Tabelle Probleme gegeben ist
Ich frage mich nur, ob es einen Weg gibt, alle Trigger fallen, alle Einschränkungen und alle bis auf einen Tisch (einige clevere Trick mit den Systemtabellen oder so)?
Lösung
Mit GUI-Tool (ich persönlich IBExpert bevorzugen) ausführen folgenden Befehl ein:
select 'DROP TRIGGER ' || rdb$trigger_name || ';' from rdb$triggers
where (rdb$system_flag = 0 or rdb$system_flag is null)
Kopieren in die Zwischenablage führen dann innerhalb Skriptausführung einfügen und ausführen Fenster.
Andere Tipps
Wenn Sie Ihre Datenbank-Backup Firebird 2.1 wechseln kann, gibt es einige Schalter in gbak und isql .
Einige Firebird Kommandozeilen-Tools haben mit neuen Schalter zuzuführenden unterdrücken der automatische Zündung Datenbank-Trigger:
gbak -nodbtriggers isql -nodbtriggers nbackup -T
Diese Optionen können nur durch die verwendet werden, Datenbank-Besitzer und SYSDBA.
Sie können alle Trigger fallen, indem sie direkt aus der Systemtabelle zu löschen, etwa so:
delete from rdb$triggers
where (rdb$system_flag = 0 or rdb$system_flag is null);
Beachten Sie, dass der normale Weg drop trigger
der Verwendung ist sicherlich wünschenswert, aber es kann getan werden.
Sie können auch Einschränkungen fallen durch DDL-Anweisungen ausgeführt wird, aber Einschränkungen aufzuzählen und sie in einer SQL-Skript fallen würden Sie die execute block
Funktionalität benötigen, dass Firebird 1.5 nicht hat.
Es gibt ähnliche Aussagen andere Datenbankobjekte zu löschen, aber tatsächlich diese läuft erfolgreich kann viel schwieriger sein, da Abhängigkeiten zwischen Objekten. Sie können nicht jedes Objekt so lange fallen, da ein anderes Ziel davon abhängt. Dies kann wirklich schwierig aufgrund zirkuläre Referenzen werden, wo zwei (oder sogar mehr) Objekte voneinander abhängig, einen Zyklus bilden, so dass es nicht eine einzige ist, die erste fallen gelassen werden kann.
Der Weg, um dies ist eine der Abhängigkeiten zu brechen. Ein Verfahren, zum Beispiel, die Abhängigkeiten zu anderen Objekten hat, kann geändert werden, um einen leeren Körper zu haben, wonach sie länger ist nicht auf diesen anderen Objekten abhängen, so dass sie dann fallen gelassen werden. Dropping Fremdschlüssel ist eine andere Art von Abhängigkeiten zwischen den Tabellen entfällt.
Ich weiß nicht, jedes Werkzeug, wie ein teilweise löscht von Datenbankobjekten Implementierung Ihres Anwendungsfall ist IMO weit von gemeinsam. Sie könnten jedoch einen Blick auf die Flamerobin Quellcode , die eine bestimmte Menge hat von Abhängigkeitserfassung in dem Code, der verwendet wird DDL-Scripts oder Änderungsanweisungen für Datenbankobjekte zu erstellen. Ausgerüstet mit diesen Informationen können Sie Ihr eigenes Werkzeug schreiben konnten, es zu tun.
Wenn es eine einmalige Sache ist es genug sein, kann dies manuell tun, wenn. Verwenden Sie einen beliebigen Firebird Management-Tool Ihrer Wahl für das.