Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehler bei Execute Block im Script (https://www.delphipraxis.net/158012-fehler-bei-execute-block-im-script.html)

Lemmy 2. Feb 2011 11:42

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBObjects

Fehler bei Execute Block im Script
 
Hallo,

habe das Problem, dass ein Änderungsscript bei der Ausführung in TIB_Script einen Fehler verursacht:

Code:
ISC ERROR CODE:335544333

ISC ERROR MESSAGE:
internal gds software consistency check (Too many savepoints (287), file: tra.cpp line: 2731)
Ursache ist ein Execute Block:
Code:
EXECUTE BLOCK AS BEGIN
if (not exists(select 1 from rdb$relations where rdb$relation_name = 'T_AQ_ASSQUARTAL')) then
execute statement
'CREATE TABLE T_AQ_ASSQUARTAL (
  T_AQ_PAT_ID DOM_ID,
  T_AQ_ASS_ID DOM_ID,
  T_AQ_CHIP_IK DOM_IK,
  T_AQ_QUARTAL DOM_ABR_CHECK,
  T_AQ_LEISTSUM DOM_INTEGER
);';
END
In Verbindung mit der Einstellung bei der Transaktion ServerAutoCommit=true - das bedeutet die Transaktion läuft mit dem Parameter "isc_tpb_autocommit" .

Folgendes habe ich auch noch herausgefunden:
Lass ich nur diesen Execute-Block im Script laufen geht alles. Lass ich das komplette Script laufen gehts nicht. Schmeiße ich den Execute Block raus und lass nur das reine Create Table gehts auch (komplettes Script). Und noch was: die Position an der ich den Execute Block im Script ausführe ist auch egal - sprich, am restlichen Script sollte es daher nicht liegen.

Kennt jemand das Problem? Oder hat jemand einen Tipp für mich? ServerAutoCommit darf ich leider nicht ändern....

Grüße

tsteinmaurer 2. Feb 2011 13:14

AW: Fehler bei Execute Block im Script
 
Ist das EXECUTE BLOCK von dir das, was tatsächlich ausgeführt wird oder ist da vielleicht noch ein Exception Handling mit drin? Ich frage deshalb, weil es zu einem ähnlichen Thema im November 2010 einen Bugfix in der Engine gegeben hat.

Too many savepoints kann auch ganz allgemein das Ergebnis sein, wenn über die Zeit zu viele "Soft Commits" (aka COMMIT RETAINING) ausgeführt werden ohne von Zeit zu Zeit mal ein "echtes" Commit zu machen. Generell werden bei jeglichen AutoCommit = True Einstellungen diese Soft Commits verwendet, d.h. könnte auch ein Grund sein.

Ich würde einfach mal im Skript auch explizite COMMITs reingeben.

Welche 2.1er Version verwendest du genau?

lg,
Thomas

Lemmy 2. Feb 2011 17:03

AW: Fehler bei Execute Block im Script
 
Hallo Thomas,

das ist das reale Statement, ExceptionHandling lediglich das was IBObjects rund herum bietet - oder meinst Du was anderes?

Soft Commits: Ja die eigentliche Anwendung arbeitet mit AutoCommit=true (leider schon vor meiner Zeit damit begonnen), da haben wir aber keinerlei Probleme damit. Innerhalb des Scripts sind auch div. COMMITS drin. Aber bzgl. Soft Commits - müssten diese Probleme denn nicht durch einen Backup-Restore Prozess mit eingeschalteter GarbageCollection behoben werden?

Ich habe die 2.1.1.17910 am laufen - dann lade ich mir mal die aktuelle 2.1.3er herunter und schau was die sagt....


Grüße

tsteinmaurer 2. Feb 2011 19:02

AW: Fehler bei Execute Block im Script
 
Hallo,

dass ein Backup/Restore das Problem mit Soft Commits behebt ist eine andere Geschichte.

Sofern es sich um den erwähnten Bugfix handelt, dann wird dir ein Upgrade auf 2.1.3 nichts helfen, weil, so weit ich das sehe, der Bugfix nur im 2.5er Zweig enthalten ist.

Ich würde mal folgendes versuchen:

- Dein Skript mit isql und Firebird 2.1 ausführen. Dann weisst, ob es ein allgemeines Problem ist oder etwas mit IBO zu tun hat.
- Das Ganze mal mit 2.5 ausprobieren. D.h. einfach ein Backup mit 2.1 ziehen und unter 2.5 restoren.

lg,
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz