Seite 1 von 1

maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 10:01
von mini990
Hallo,
wo liegt die Beschränkung bei DBF/NTX
Habe hier bei einem Kunden eine Datei mit Memofeldern.
Aktuell 1.678.595 Datensätze
Belegter Platz
DBF: 372 MB (381.646 KB)
DBT: 2.0 GB (2.097.154 KB)

Denke ich stoße mit der DBT an eine Grenze.....

Gruß Stefan

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 10:09
von Jan
Hallo Stefan,

lt. Doku der 2.0 gibt es folgende Angaben bei der DBFDBE:
Größe dbf: max. 1 GB
Feldzahl: Not limited
Anzahl Sätze: (Offset for record locks - Header() - 1) / RecSize()
Größe Memo-Datei: Limited only by system resources

Bei der FOXDBE sieht das anders aus:
Größe dbf: max. 2 GB
Feldzahl: 2038 (bis 1.90 nur 255 Felder)
Anzahl Sätze: (2^31 - Header() - 1) / RecSize()
Größe Memo-Datei: Theoretical limit is 16 Terabyte or 2^31 blocks. Default block size of 64 bytes leads to a maximum memo file size of 128GB

Wobei ich im ADS inzwsichen eine DBF als FOXCDX habe, die größer als 2 GB ist. Nach diversen Aussagen kann die da bis zu 4 GB groß sein, oder bis 16 TB. Aber der ADS verwaltet die Dateien ja auch anders.

Jan

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 10:22
von brandelh
Auch eine DBF kann etwas über 2 GB groß werden, man muss dann nur den LOCK-Offset erhöhen:
Hilfe zu 1.90 SL1 hat geschrieben: DBFDBE_LOCKOFFSET

Mit dieser Konstante läßt sich der Offset für Satzsperren abfragen oder ändern. Der Offset bestimmt die maximale Größe der DBF-Tabelle. Der voreingestellte Wert für den Offset für Satzsperren ist 1.000.000.000 oder ca. 1GB. Dies entspricht der maximalen Größe einer Clipper-kompatiblen DBF-Tabelle.
Mit Hilfe der Konstante DBFDBE_LOCKOFFSET kann die maximale Größe einer DBF-Dateien vergrößert werden. Um den Maximalwert von derzeit ca. 2,4GB einzustellen, muß ein Wert von 0x80000000 für DBFDBE_LOCKOFFSET gewählt werden. Wird die Einstellung DBFDBE_LOCKOFFSET auf einen Wert größer als den von Clipper unterstützten Maximalwert geändert, können die DBF-Dateien nicht mehr im konkurrierenden Betrieb mit Clipper verwendet werden. Da sich die verwendeten Offset für Satzsperren unterscheiden, ist ein wechselseitiger Ausschluß in diesem Fall nicht mehr gewährleistet.
Die Größe der DBT hängt von der Version ab und vom Dateisystem !
Früher war die auf 2 GB begrenzt, angeblich wurde das seit 1.90.355 aufgehoben.
DBFDBE (DATA-Komponente)
...
Spezifikation für DBF-Dateien
...
Element Spezifikation
...
Größe einer Memo-Datei: Limitiert auf Systemresourcen

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 10:37
von Manfred
also bei der DBT kann ich aus Erfahrung sagen, über 2 GB knallt es. 1.90 SL1

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 13:44
von brandelh
auf welchem Dateisystem denn ?

Ich persönlich meide DBTs seit da mal unter Clipper was schief ging, aber mit NTFS sollten größere kein Problem sein, solange die 10 Stellen für Zeiger ausreichen ;-)

Ich könnte es ja mal probieren ... ;-)

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 14:46
von brandelh
Ich muss Manfred zustimmen, bei meinem Versuch mit der aktuellen 2.00 und der DBFDBE gibt es einen Laufzeitfehler wenn die 2 GB Grenze erreicht wird (trotz exclusivem Zugriff)

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 15:55
von mini990
Mein Problem ist folgendes...
die DBT hat exakt 2.0GB, also Maximum denke ich.
ich versuche nun die Datei in eine neue zu kopieren ---> irgendwann Lesefehler
Die Sätze einzeln in eine neue Datenbank kopieren ---> bricht irgendwann ab Lesefehler

Gibt es eine Möglichkeit die Datei noch irgendwie zu lesen?

Gruß Stefan

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 16:07
von HaPe
Hallo Stefan !
Mein Problem ist folgendes...
die DBT hat exakt 2.0GB, also Maximum denke ich.
- Mehrfache Sicherung anlegen
- hat deine DBF 1.000.000 Datensätze, dann in einer der Dateien mit DELETE NEXT 500.000 die erste Häfte löschen und dann mit PACK packen, gegebenenfalls auch mit PACK MEMO probieren.
- in der zweiten Datei dann mit GOTO 500.000 und DELETE REST die zweiten Hälfte löschen und dann mit PACK packen, gegebenenfalls auch mit PACK MEMO probieren.

Jetzt hast du zwei Tabellen mit deinen Daten ...

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 16:08
von nightcrawler
mini990 hat geschrieben:Gibt es eine Möglichkeit die Datei noch irgendwie zu lesen?
Versuchs mal im Advantage Data Architect. Dann kannst Du auch Teile per SQL in eine andere Tabelle verschieben.

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 16:19
von mini990
PACK MEMO ?

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mi, 11. Jan 2017 16:31
von HaPe
Hallo Stefan !
PACK MEMO ?
Ich bin erst mit Xbase 2.0 zur Gemeinde hinzugestoßen und hatte kurz in der Hilfe geschaut (ist dort aufgelistet)

In VFP kann man damit explizit die Memo-Datei packen (vermutlich) durch löschen nicht mehr vorhanderer Einträge im MEMO-Feld.
Wie es aussieht unterstützt das die Xbase-Engine (gar) nicht weil diese Option ignoriert oder automatisch mit einem PACK der Tabelle ausgeführt wird.

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Do, 12. Jan 2017 2:10
von AUGE_OHR
mini990 hat geschrieben:Mein Problem ist folgendes...
die DBT hat exakt 2.0GB, also Maximum denke ich.
ich versuche nun die Datei in eine neue zu kopieren ---> irgendwann Lesefehler
Die Sätze einzeln in eine neue Datenbank kopieren ---> bricht irgendwann ab Lesefehler

Gibt es eine Möglichkeit die Datei noch irgendwie zu lesen?
ich würde mal behaupten das deine DBT "Kaputt" ist ...

Frage : was/wie viel ist den in der neue DBF ?

versuche es mal so

Code: Alles auswählen

// Dummy Code um eine DBT zu retten
LOCAL nRec := 1   
LOCAL aLeer := {}
   ...
   SELECT 1
   USE AAA EXCLUSIVE   // ohne Index
   SELECT 2
   USE BBB1 EXCLUSIVE  // leer
   SELECT 1
   DO WHILE !EOF()
      aLeer()      // leeres Array anlegen 
      BEGIN SEQUENCE 
         GOTO (nRec) 
         Scatter() // in ein Array übertragen
      RECOVER
      END SEQUENCE         

      SELECT 2
      APPEND BLANK
      Gather()    // aus dem Array

      nRec++
      IF nRec > 500000 
          // splitten und neue BBBx verwenden
          EXIT
      ENDIF
      SELECT 1
   ENDDO
  
   SELECT 2
   CLOSE BBB1 
   USE BBB2 EXCLUSIVE  // leer
   SELECT 1
   DO WHILE !EOF()
      aLeer()      // leeres Array anlegen 
      BEGIN SEQUENCE 
         GOTO (nRec) 
         Scatter() // in ein Array übertragen
      RECOVER
      END SEQUENCE         

      SELECT 2
      APPEND BLANK
      Gather()    // aus dem Array

      nRec++
      SELECT 1
   ENDDO
das GOTO(nRec) hat gegenüber dem SKIP ggf. ein andere Fehlermeldung die du abfangen kannst

Re: maximale Anzahl Datensätze bei DBF/NTX?

Verfasst: Mo, 16. Jan 2017 13:37
von mini990
@Jimmy: Danke. hat so funktioniert!

Gruß Stefan