Häufige Selbstreparatur-Probleme
MySQL-Fremdschlüssel-Beschränkung schlägt fehl
Dies ist ein Datenintegritätsfehler, der durch einen Vorgang verursacht wird, der in der Vergangenheit ausgeführt wurde, wobei MySQL-Fremdschlüsselprüfungen vorübergehend deaktiviert waren. Diese können Datensätze in der Datenbank zurücklassen, die Referenzwerte haben, die auf andere Datensätze verweisen und die nicht mehr vorhanden sind. Wenn die Selbstreparatur versucht, eine Fremdschlüssel-Beschränkungsdefinition auf die Datenbank (erneut) anzuwenden, blockieren diese fehlerhaften Zeilen den Vorgang.
1) Extrahieren Sie dry-run-SQL-Skriptausgabe
Suchen Sie im ersten Schritt die Ausgabe der Integritätsprüfung im Anwendungsprotokoll (Ausgabe der Integritätsprüfung untersuchen) und fügen Sie das SQL-Skript in eine neue Datei ein.
Fahren Sie entweder mit Schritten 1a) oder 1b) fort.
1a) Korrigieren Sie durch Entfernen von fehlerhaften Datensätzen
Korrigieren Sie diese manuell, indem Sie verwaiste Datensätze aus der Datenbank entfernen, wenn der Fremdschlüssel mit DELETE CASCADE definiert wurde. Hierzu kann die Definition der Fremdschlüssel-Einschränkung untersucht und in die erforderliche DELETE-Anweisung umgeschrieben werden.
* 
Dies ist ein sachkundiger Schritt und führt zu einer Veränderung der Daten in der Datenbank, die nicht rückgängig gemacht werden kann. Erstellen Sie eine Sicherung, bevor Sie fortfahren! Wenn Sie sich nicht sicher sind, welche Auswirkungen diese Schritte haben, wenden Sie sich an den Codebeamer Support!
Für eine Fremdschlüssel-Einschränkung befindet sich ihre Definition in der cb.jar-Datei (die als.zip-Datei geöffnet werden kann) in der installierten Codebeamer Instanz. Es gibt eine <dialect>-database.sql-Datei, in der sich die entsprechende ALTER TABLE-Anweisung befindet.
Beispiel für die activity_log_proj_fk- und activity_log_user_fk-Fremdschlüssel-Einschränkungen:
ALTER TABLE project_activity_log ADD CONSTRAINT activity_log_proj_fk FOREIGN KEY (proj_id) REFERENCES existing(proj_id) ON DELETE CASCADE;
ALTER TABLE project_activity_log ADD CONSTRAINT activity_log_user_fk FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
Sie können mit den folgenden DELETE-Anweisungen für verwaiste Datensätze bereinigt werden:
DELETE FROM project_activity_log WHERE proj_id NOT IN (SELECT proj_id FROM existing);
DELETE FROM project_activity_log WHERE user_id NOT IN (SELECT id FROM users);
1b) Korrigieren Sie durch vorübergehendes Deaktivieren der Fremdschlüsselprüfungen
Dies wird nicht empfohlen, und tun Sie es nur, wenn 1a) keine durchführbare Lösung ist.
Das Selbstreparatur-Skript kann Fremdschlüsselprüfungen ignorieren, indem es vor SET FOREIGN_KEY_CHECKS=0; dem Skript und die SET FOREIGN_KEY_CHECKS=1;-Zeile nach dem Skript einfügt.
Fahren Sie dann mit Schritt 2 fort.
2) Selbstreparatur-Skript manuell ausführen
Öffnen Sie eine Datenbankkonsole in der Zieldatenbank mit dem JDBC-Benutzer von Codebeamer. Führen Sie das extrahierte (und in Schritt 1b optional geänderte Selbstreparatur-Skript) aus.
Sobald der Vorgang abgeschlossen ist, führen Sie die Integritätsprüfung manuell aus (Integritätsprüfung auslösen); der Fehler-Pin sollte nicht vorhanden sein.
War dies hilfreich?