AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Lesen aus einer Oracle Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

Lesen aus einer Oracle Datenbank

Ein Thema von msickel · begonnen am 7. Nov 2011 · letzter Beitrag vom 7. Nov 2011
Antwort Antwort
msickel

Registriert seit: 14. Mai 2005
108 Beiträge
 
Delphi 2005 Professional
 
#1

Lesen aus einer Oracle Datenbank

  Alt 7. Nov 2011, 08:09
Datenbank: Oracle • Version: 10 • Zugriff über: ADO
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
ich weiss, das ich nichts weiss!
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Lesen aus einer Oracle Datenbank

  Alt 7. Nov 2011, 08:18
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?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Lesen aus einer Oracle Datenbank

  Alt 7. Nov 2011, 08:41
Du solltest vielleicht mit einem Ereignis arbeiten und nicht pauschal alle 7 Sekunden lesen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Lesen aus einer Oracle Datenbank

  Alt 7. Nov 2011, 08:45
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Lesen aus einer Oracle Datenbank

  Alt 7. Nov 2011, 09:55
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.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Lesen aus einer Oracle Datenbank

  Alt 7. Nov 2011, 10:10
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.
Gruß, Jo
  Mit Zitat antworten Zitat
msickel

Registriert seit: 14. Mai 2005
108 Beiträge
 
Delphi 2005 Professional
 
#7

AW: Lesen aus einer Oracle Datenbank

  Alt 7. Nov 2011, 11:32
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
ich weiss, das ich nichts weiss!
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Lesen aus einer Oracle Datenbank

  Alt 7. Nov 2011, 12:08
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 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