Schrift
[thread]10166[/thread]

DBM FLUSH bzw sync the Datenbank, aber wie ?

Leser: 1


<< >> 2 Einträge, 1 Seite
Mips
 2007-08-21 20:35
#98495 #98495
User since
2007-06-04
3 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo zusammen,

ich habe gerade ein kleines Programm geschrieben, dass Daten in einen Flate File DB abspeichert. Hier zu verwende ich das Paket DBM, das auf DBI aufbaut, und SQL.
Wenn nun das Programm unerwartet beendet wird und der Benutzer aber Änderungen an der DB vorgenommen hat, gehen diese leider verloren. Komischerweise ist AutoCommit auf 1 gesetzt, denn der befehl
$db->commit();

lieferte mir eine Warning:

Commit ineffective while AutoCommit is on-1 at /usr/local/lib/perl5/site_perl/5.8.8/mach/DBD/File.pm line 407.

Aber wenn mir mein kleines dump Scrript nach einem Absturz die Datei anzeigen soll:

#!/usr/bin/perl -w
use DBI;

$db = DBI->connect("dbi:DBM:");
$db->{RaiseError} = 1;
$sth = $db->prepare("SELECT * FROM ews");
$sth->execute();
$db->disconnect();

Zeigt es nix an, obwohl zuvor der user ein INSERT gemacht hat ... auch die Dateien sind leer:
ews% ls -lah ews.*
-rw-r--r-- 1 den wheel 0B Aug 21 16:24 ews.dir
-rw-r--r-- 1 den wheel 0B Aug 21 16:24 ews.lck
-rw-r--r-- 1 den wheel 1.0K Aug 21 17:28 ews.pag

Ich habe keine Ahnung, was ich machen kann. Von BerkeleyDB kenne ich den Befehl sync , aber diesen gibt es in DBI nicht :(

Hat einer von euch eine Idee, woran es liegen kann ???

Danke für jegliche Hilfe!

Bis denn dann,
Mips
ptk
 2007-08-25 00:20
#98645 #98645
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Versuch doch einfach mal, DB_File statt des Defaults SDBM_File zu verwenden. Vielleicht verhält es sich besser.
<< >> 2 Einträge, 1 Seite



View all threads created 2007-08-21 20:35.