Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Lesen aus einer Oracle Datenbank (https://www.delphipraxis.net/164290-lesen-aus-einer-oracle-datenbank.html)

msickel 7. Nov 2011 07:09

Datenbank: Oracle • Version: 10 • Zugriff über: ADO

Lesen aus einer Oracle Datenbank
 
Hallo liebe Datenbank Spezialisten,

Ich suche für folgendes eine Lösung.

Ich greife auf eine Datenbanktabelle zu welche alle 5 Sekunden Truncated wird und anschließend wieder neu geschrieben, der Schreibvorgang dauert dann alles in allem ca 2,5 - 3,5 Sekunden.
Wie kann ich nun vermeiden, das die Tabelle während ich alle 7 Sekunden am lesen bin gelöscht wird?

Vielen Dank für eure Hilfe
Martin

s.h.a.r.k 7. Nov 2011 07:18

AW: Lesen aus einer Oracle Datenbank
 
Hätte jetzt mal behauptet, dass du mit LOCK TABLE weiter kommst.

Aber warum zum Teufel wird die Tabelle alle 5 Sekunden geleert? Was steckt denn da für ein System dahinter?

sirius 7. Nov 2011 07:41

AW: Lesen aus einer Oracle Datenbank
 
Du solltest vielleicht mit einem Ereignis arbeiten und nicht pauschal alle 7 Sekunden lesen.

Bummi 7. Nov 2011 07:45

AW: Lesen aus einer Oracle Datenbank
 
Klingt nach Konzeptionsfehler, eine Spalte TimeStamp mit aufnehmen, nach dem Füllen auf aktuellen Zeit setzen und über eine Sicht zugreifen mit der Bedingung TimeStamp=(Select Max(Timestamp) from Tabelle).
Vor dem nächsten Füllen die älteren Sätze löschen, ohne TimeStamp füllen, anch dem Füllen TimeStamp setzen.
Wenn Delete zu lange dauert, dann mit 2 Tabellen und Truncate arbeiten, über eine UNION VIEW zugreifen, wieder mit TimeStampeinschränkung.

sx2008 7. Nov 2011 08:55

AW: Lesen aus einer Oracle Datenbank
 
Zitat:

Zitat von Bummi (Beitrag 1134768)
Klingt nach Konzeptionsfehler...

Und zwar ganz grundsätzlicher Art.
Wenn ein Prozess A Daten in eine Tabelle einer Datenbank schreibt und gleichzeitig ein Prozess B im Polling-Betrieb
in periodischen Abständen die Daten ausliest, dann ist das ein Mißbrauch der Datenbank.
Datenbanken sind nicht geeignet als ein Weg zur Interprozesskommunikation.

jobo 7. Nov 2011 09:10

AW: Lesen aus einer Oracle Datenbank
 
Das Verfahren ist äußerst fragwürdig-wie schon von allen gesagt-, aber in einem Sonderfall sollte es funktionieren.
Bei einem einmaligen Vollselect auf die (gerade) gefüllte Tabelle ohne erneuten Zugriff (mit der Erwartung, dass noch was da ist).
Nebenbedingung, kein(!) Table Lock, updates, usw.

Wenn dieses merkwürdige Zugriffsverfahren aber in Deinen Händen liegt, solltest Du es schleunigst umbauen.

msickel 7. Nov 2011 10:32

AW: Lesen aus einer Oracle Datenbank
 
Zitat:

Zitat von jobo (Beitrag 1134777)
Das Verfahren ist äußerst fragwürdig-wie schon von allen gesagt-, aber in einem Sonderfall sollte es funktionieren.
Bei einem einmaligen Vollselect auf die (gerade) gefüllte Tabelle ohne erneuten Zugriff (mit der Erwartung, dass noch was da ist).
Nebenbedingung, kein(!) Table Lock, updates, usw.

Wenn dieses merkwürdige Zugriffsverfahren aber in Deinen Händen liegt, solltest Du es schleunigst umbauen.

Leider liegt nur das auslesen in meinen Händen, das schreiben nicht.

Martin

jobo 7. Nov 2011 11:08

AW: Lesen aus einer Oracle Datenbank
 
In dem von mir geschilderten Fall könntest Du durchkommen. Ein einmaliges Befüllen des Dataset sollte durch Oracle Transaktionsmechnismen abgedeckt sein, selbst wenn das Backend bereits wieder löscht/ gelöscht hat. Im schlechtesten Fall bekommst Du eine leere Menge.
Wenn Du beim Auslesen mit locks und Transaktionen anfängst, brichst Du (unnötiger Weise) dem anderen Prozess die Knochen. Wenn die Truncate/Insert Aktion zu umfangreich für das Zeitfenster ist, gehts ebenso schief.
Du solltest das Verfahren jedenfalls reklamieren, wofür immer das auch gedacht ist oder war.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 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