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)?

War es hilfreich?

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.

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