Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird Transaction lange offen (https://www.delphipraxis.net/186853-firebird-transaction-lange-offen.html)

Gruber_Hans_12345 6. Okt 2015 18:39

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX

Firebird Transaction lange offen
 
Hallo

Ich wollte mal fragen, mit welchen Parametern ist es sinnvoll eine Transaktion zu starten die nur lesen ist, aber dafür sehr lange offen sein kann.
Speziell für Auswertungen eben (Reports, Pivot usw)

Ich möchte damit eben mein System nicht verlangsamen, meine schreibenden und sonstigen Transactionen sind immer extrem kurz, nur eben diese können teils auch mal tage offen beleiben (sollte nicht sein, aber es kann passieren)

Zugriff ist noch per IBX

besten danke

mkinzler 6. Okt 2015 19:00

AW: Firebird Transaction lange offen
 
Warum muss dann die Transaktion tagelang offen bleiben?

Gruber_Hans_12345 7. Okt 2015 05:37

AW: Firebird Transaction lange offen
 
müssen nicht aber es passiert halt

Das sind zum teil fremdkomponenten die auf die Datenbank zugreifen, und eben die Daten direkt aus der TIBQuery auslesen, und es muss bei IBX die Transaktion offen bleiben, sonst sind ja die Daten weg.

Daher müsste ich entweder eine zwischenschicht einführen, die die daten kopiert, oder die Komponente müsste sich die Daten selber kopieren.

Es handelt sich hier im Report Builder, und eine Pivot Komponente - und wenn der user eben die Fenster offen lässt bleibt auch die Transaktion offen.

Perlsau 7. Okt 2015 06:37

AW: Firebird Transaction lange offen
 
Ich vermute stark, du verwechselst hier was: Nicht die Transaktion bleibt offen, sondern das Query bleibt aktiv (Active = True). Die Transaktion kann gar nicht offenbleiben, nachdem die Daten via select von der Datenbank angefordert wurden und eingetroffen sind. Wäre die Transaktion noch offen, würde der Select-Befehl noch auf seine Ausführung warten.

Eine Query- oder Table-Komponente muß aktiv bleiben, solange die Daten angezeigt oder sonstwie verarbeitet werden sollen. Anders ausgedrückt: Wenn das Property Active der Datenmenge nicht mehr den Status True aufweist, besteht keine Möglichkeit, die Datenmenge zu verarbeiten. Erst das Setzen von Active auf True bzw. der Open-Befehl führt den Select-Befehl aus und beendet damit die Transaktion.

hstreicher 7. Okt 2015 06:50

AW: Firebird Transaction lange offen
 
Die Antwort lautet :

Firebird hat dafür die "Read Only" Transaction

http://www.firebirdsql.org/refdocs/l...set-trans.html

http://de.slideshare.net/ibsurgeon/3...ansactionswork

mfg Hannes

mkinzler 7. Okt 2015 06:52

AW: Firebird Transaction lange offen
 
Ich würde die Daten clientseitig cachen.

Gruber_Hans_12345 7. Okt 2015 07:07

AW: Firebird Transaction lange offen
 
Zitat:

Zitat von Perlsau (Beitrag 1317842)
Ich vermute stark, du verwechselst hier was: Nicht die Transaktion bleibt offen, sondern das Query bleibt aktiv (Active = True). Die Transaktion kann gar nicht offenbleiben, nachdem die Daten via select von der Datenbank angefordert wurden und eingetroffen sind. Wäre die Transaktion noch offen, würde der Select-Befehl noch auf seine Ausführung warten.

Eine Query- oder Table-Komponente muß aktiv bleiben, solange die Daten angezeigt oder sonstwie verarbeitet werden sollen. Anders ausgedrückt: Wenn das Property Active der Datenmenge nicht mehr den Status True aufweist, besteht keine Möglichkeit, die Datenmenge zu verarbeiten. Erst das Setzen von Active auf True bzw. der Open-Befehl führt den Select-Befehl aus und beendet damit die Transaktion.

Meines wissens nicht

denn ich habe ja ne TIBQuery und ne TIBTransaction, und sobald ich die TIBTransaction schleiße sind auch die daten aller zugehörigen IBQuerys oder IBTables weg.
Und auch am Firebird Server kann ich mir ja die offenen Transaction anschauen und sehe, das es eigentlich so ist.

@mkinzler
Ja Clientseitig cachen ist ne möglichkeit, und mache ich bei meinen eigenen Sachen auch, nur für die Drittanbieter Software wird es halt um einige schwieriger, und aufwändiger, und ich erhoffte mir eine schneller und fast genau so gute lösung.

@hstreicher
Aber wenn eine Transaction READ ONLY ist, dann beudetet das ja nicht, das die Records nicht trotzdem Versioniert werden müssen solange die Transaction offen ist oder?
eventuell eine kombination mit READ COMMITTED oder [NO] RECORD_VERSION

nur ich will auf keinen Fall etwas verschlimmbessern

mkinzler 7. Okt 2015 07:11

AW: Firebird Transaction lange offen
 
Mit einem Clientdataset o.ä. sollte das kein Problem sein.

Perlsau 7. Okt 2015 07:17

AW: Firebird Transaction lange offen
 
Zitat:

Zitat von Gruber_Hans_12345 (Beitrag 1317854)
Meines wissens nicht, denn ich habe ja ne TIBQuery und ne TIBTransaction, und sobald ich die TIBTransaction schleiße sind auch die daten aller zugehörigen IBQuerys oder IBTables weg.

Mit "sobald ich die TIBTransaction schleiße" meinst du vermutlich, das Property Active der TIBTransaction auf False setzen? Die Komponente TIBTransaction ist nicht die Transaction, sondern verwaltet Transaktionen. Natürlich muß die Transaktions-Komponente so lange aktiv bleiben, wie die von ihr abhängigen Queries aktiv sind, damit sie auf Anforderungen reagieren kann.

Zitat:

Zitat von Gruber_Hans_12345 (Beitrag 1317854)
Und auch am Firebird Server kann ich mir ja die offenen Transaction anschauen und sehe, das es eigentlich so ist.

Das würde mich jetzt interessieren: Wo genau siehst du am Firebird-Server die offenen Transaktionen?

Gruber_Hans_12345 7. Okt 2015 07:20

AW: Firebird Transaction lange offen
 
Zitat:

Zitat von Perlsau (Beitrag 1317858)
Zitat:

Zitat von Gruber_Hans_12345 (Beitrag 1317854)
Meines wissens nicht, denn ich habe ja ne TIBQuery und ne TIBTransaction, und sobald ich die TIBTransaction schleiße sind auch die daten aller zugehörigen IBQuerys oder IBTables weg.

Mit "sobald ich die TIBTransaction schleiße" meinst du vermutlich, das Property Active der TIBTransaction auf False setzen? Die Komponente TIBTransaction ist nicht die Transaction, sondern verwaltet Transaktionen. Natürlich muß die Transaktions-Komponente so lange aktiv bleiben, wie die von ihr abhängigen Queries aktiv sind, damit sie auf Anforderungen reagieren kann.

Zitat:

Zitat von Gruber_Hans_12345 (Beitrag 1317854)
Und auch am Firebird Server kann ich mir ja die offenen Transaction anschauen und sehe, das es eigentlich so ist.

Das würde mich jetzt interessieren: Wo genau siehst du am Firebird-Server die offenen Transaktionen?

primitv so, (halt noch paar links dazu ... )

Code:
SELECT * FROM MON$TRANSACTIONS
ja meine wenn ich die TIBTransaktion.Active auf False setzte bzw. mit einem Transaction.Commit oder so, wenn ich ein CommitRetaining mache, dann bleiben daten erhalten, aber die Transaktion auch offen


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 Uhr.
Seite 1 von 3  1 23      

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