Seite 1 von 1

Base schmiert mir dauernd ab

Verfasst: Do, 14.03.2013 00:37
von owenstone
Hallo liebe Community,

finde es mittlerweile echt zum .....!
Mir schmiert immer wieder meine Datenbank während der Arbeit ab. Und wenn ich diese dann wieder aufrufe, gelingt dies in 9 Fällen von 10 überhaupt nicht - und die gesamten Daten sind futsch.

Ich arbeite mit Base seit einem Jahr, und diese Probleme hatte ich eigentlich schon von Anfang an. Dies führte bei mir dazu, dass ich ständig während der Arbeit aus OOo ausstieg, und manuell Sicherung angelegt habe. Mittlerweile habe ich deswegen sogar ein batch angelegt.

Aber in letzter Zeit haben die Abstürze enorm zugelegt. Länger als eine 1/4 Stunde schaffe ich es mittlerweile nicht mehr, ohne dass mir Base abstürzt.
Und dies betrifft nur Base, die anderen Anwendungen von OOo laufen alle einwandfrei.

Hat jemand da eine Idee, wie ich die Sache in den Griff bekommen könnte.

Re: Base schmiert mir dauernd ab

Verfasst: Do, 14.03.2013 06:25
von F3K Total
Hi,
es kann viele Gründe geben.

Erster Versuch (an einer Kopie):
  • Schalte unter Extras/Optionen/OpenOffice/Arbeitsspeicher "OpenOffice bei Systemstart starten" aus.
  • Gib unter Extras/SQL ... diesen Befehl ein und führe ihn ggf. mehrfach (2-3x) aus:

    Code: Alles auswählen

    Checkpoint defrag
    Dann DB schliessen, OOo schließen, alles neu öffnen.
Gruß R

Re: Base schmiert mir dauernd ab

Verfasst: Do, 14.03.2013 07:22
von RobertG
Hallo owenstone,

ich würde zusätzlich noch einmal nachsehen, mit welcher Java-Version Du denn arbeitest. Vielleicht ist das immer noch ein Java-7-Problem?

Wenn es um eine schnelle Sicherung während des Datenbankbetriebes geht habe ich aus einer der Beispieldatenbanken ein Makro, das die Daten auf Buttondruck sichert und immer maximal 5 Versionen im Sicherungsordner von Base bereit hält:

Code: Alles auswählen

SUB Datenbankbackup
	REM Von der Datenbankdatei *.odb wird eine Kopie in das Backup-Verzeichnis erstellt. 
	REM Die Maximalzahl an Kopien ist auf 5 Kopien eingestellt. Anschließend wird die älteste Kopie ersetzt.
	REM Dieses Verfahren deckt nicht ab:
	REM - Dateneingaben, die bei bereits geöffneter Datenbank gemacht werden, da die Daten erst beim Schließen der Datei in die *.odb-Datei geschrieben werden.
	REM Siehe dazu die Prozedur "Daten_aus_Cache_schreiben"
	DIM oPath AS OBJECT
	DIM oDoc AS OBJECT
	DIM sTitel AS STRING
	DIM sUrl_Ziel AS STRING
	DIM sUrl_Start AS STRING
	DIM i AS INTEGER
	DIM k AS INTEGER
	oDoc = ThisComponent
	sTitel = oDoc.Title	'Name des Dokumentes, z.B. Medien_mit_Makros.odb'
	sUrl_Start = oDoc.URL	'Pfad zu dem Titel'
	oPath = createUnoService("com.sun.star.util.PathSettings")
	FOR i = 1 TO 6
		IF NOT FileExists(oPath.Backup & "/" & i & "_" & sTitel) THEN
		REM Im Backup-Verzeichnis des Datenbanknutzers von LO wird gespeichert, und zwar beginnend mit der Nummer, gefolgt durch einen Unterstrich und weiter mit dem ursprünglichen Titel.
			IF i > 5 THEN	
			REM Wenn i größer als 5 wird existieren bereits 5 Sicherheitskopien. Jetzt muss nachgesehen werden, welche Kopie die älteste ist, um diese zu ersetzen.
				FOR k = 4 TO 1 STEP -1
					IF FileDateTime(oPath.Backup & "/" & k & "_" & sTitel) <=  FileDateTime(oPath.Backup & "/" & k+1 & "_" & sTitel) THEN
					REM Die Datei mit der Nummer 4 muss auf vor der mit der Nummer 5 erstellt worden sein. Ist dies der Fall, so wird weiter gesucht.
					REM Die Suche beginnt also bei 4 und wird abwärts fortgesetzt, immer im direkten Vergleich mit der nächst höheren Ziffer.
					REM Ist 1 erreicht und immer noch vor 2 erstellt worden, so wird 1 ersetzt.
						IF k = 1 THEN
							i = k
							EXIT FOR
						END IF
					ELSE
					REM ist eine Zahl erreicht worden, bei der die Datei mit der höheren Nummer älter ist als die Datei mit der niedrigeren Nummer, so wird die Datei mit der höheren Nummer ersetzt.
						i = k+1
						EXIT FOR
					END IF
				NEXT
			END IF
			EXIT FOR
		END IF
	NEXT
	sUrl_Ziel = oPath.Backup & "/" & i &"_" & sTitel
	REM Der Pfad für die Zieldatei wird festgelegt und das Dokument zur Zieldatei hin kopiert.
	FileCopy(sUrl_Start,sUrl_Ziel)
END SUB

SUB Daten_aus_Cache_schreiben
	REM Schreibt die Daten aus der Tabelle auch während der Laufzeit von Base direkt auf die Platte.
	DIM oDaten AS OBJECT
	DIM oDataSource AS OBJECT
	oDaten = ThisDatabaseDocument.CurrentController
	IF NOT ( oDaten.isConnected() ) THEN oDaten.connect()
	oDataSource = oDaten.DataSource
	oDataSource.flush
END SUB

SUB Backup_sofort
	Daten_aus_Cache_schreiben
	Datenbankbackup
END SUB
Mit Backup_sofort hast Du auch bei geöffneter Datenbank die Daten direkt in der Sicherungsdatei.

Gruß

Robert

Re: Base schmiert mir dauernd ab

Verfasst: Sa, 16.03.2013 00:48
von owenstone
Hallo F3K Total,

vielen Dank für Deine Hilfe, habe es heute einmal durchgeführt, aber leider noch nicht mit meiner DB richtig gearbeitet. Werde es aber bestimmt in den nächsten Tagen tun und werde dann davon berichten.

Re: Base schmiert mir dauernd ab

Verfasst: Sa, 16.03.2013 01:14
von owenstone
Hallo RoberG,

vielen Dank für Dein Makro.

Nun bin ich aber leider voll der Computer Laie. Ich habe mich zwar, nachdem ich obigen Tip von F3K Total durchgeführt habe, auch an Dein Makro mich gewagt,
aber (oh, welch Wunder) es hat leider nicht gefunzzt. Und dies lag bestimmt bei mir.

Folgende Dinge habe ich getan.

Das Makro selbst habe ich in unter folgdendem Schritt angelegt:
EXTRAS>Makros verwalten>OOo.Basic>Meine Makros>Standard>Module1


Folgende Änderungen am Text, habe ich dann vorgenommen:

SUB Datenbankbackup
REM Von der Datenbankdatei *.odb wird eine Kopie in das Backup-Verzeichnis erstellt.
(hier habe ich den Namen meiner DB eingefügt, dies sieht dann so aus)

REM Von der KD.odb wird eine Kopie in das Backup-Verzeichnis erstellt.


sTitel = oDoc.Title 'Name des Dokumentes, z.B. Medien_mit_Makros.odb'
(hier habe ich den Namen meiner DB eingefügt, dies sieht dann so aus)

sTitel = oDoc.Title 'KD.odb'

diese führte aber anscheinend zu der folgenden Fehlermeldung: "BASIC-Laufzeitfehler Eigenschaft oder Methode nicht gefunden: Title"

und hier habe ich den Pfad eingefügt, der zu meine DB führt:
sUrl_Start = oDoc.URL 'Pfad zu dem Titel'



So, jetzt bin ich mal auf Deine Schelte gespannt :wink:

Re: Base schmiert mir dauernd ab

Verfasst: Sa, 16.03.2013 08:14
von RobertG
Hallo owenstone,
owenstone hat geschrieben: Das Makro selbst habe ich in unter folgdendem Schritt angelegt:
EXTRAS>Makros verwalten>OOo.Basic>Meine Makros>Standard>Module1
Nein, nicht bei "Meine Makros" ablagern, sondern in der Datenbank. Da müsste der Dateiname der Datenbank auftauchen, und da sollte das Makro liegen.
owenstone hat geschrieben: Folgende Änderungen am Text, habe ich dann vorgenommen:
SUB Datenbankbackup
REM Von der Datenbankdatei *.odb wird eine Kopie in das Backup-Verzeichnis erstellt.
(hier habe ich den Namen meiner DB eingefügt, dies sieht dann so aus)
REM Von der KD.odb wird eine Kopie in das Backup-Verzeichnis erstellt.
Bis hierhin völlig ungefährlich, weil REM nur ein Reminder, also eine Erinnerung, ein Kommentar ist. Das wird nicht als Code ausgelesen.
owenstone hat geschrieben: sTitel = oDoc.Title 'Name des Dokumentes, z.B. Medien_mit_Makros.odb'
(hier habe ich den Namen meiner DB eingefügt, dies sieht dann so aus)
sTitel = oDoc.Title 'KD.odb'
oDoc.Title ließt bereits den Namen des Dokumentes. Du musst da gar nichts eintragen. Wenn etwas nach einem ' steht, dann erscheint dies grau - ist also ein Kommentar.
owenstone hat geschrieben: diese führte aber anscheinend zu der folgenden Fehlermeldung: "BASIC-Laufzeitfehler Eigenschaft oder Methode nicht gefunden: Title"
Du hast vermutlich das Makro nicht aus dem Base-Dokument heraus gestartet. Am Anfang steht

Code: Alles auswählen

oDoc = ThisComponent
- das weißt darauf hin, dass das geöffnete Dokument gemeint ist, von dem aus das Makro gestartet wird.
owenstone hat geschrieben: und hier habe ich den Pfad eingefügt, der zu meine DB führt:
sUrl_Start = oDoc.URL 'Pfad zu dem Titel'
Ebenfalls keine Änderungen erforderlich. URL liest den Pfad zu dem Titel aus. Da musst Du nichts einfügen.

Ich hoffe, dass Du Deine Experimente erst einmal mit einer Kopie Deiner Datenbank machst. Die drei Prozeduren, die ich da angegeben habe, kannst Du eigentlich so in eine Datei einbauen. Sie müssten dafür sorgen, dass eine Kopie Deiner Datenbank ins Backup-Verzeichnis von LO geschoben wird.

Gruß

Robert

Re: Base schmiert mir dauernd ab

Verfasst: Mo, 18.03.2013 08:34
von owenstone
Hallo liebe Community,

gestern hatte ich wieder einmal das Vergnügen, mich den gesamten Sonntag mit Datenerfassung zu befassen.

Und da hatte ich leider über die gesamte Zeit, das gleiche Spiel, dass mir dauernd das Base mitsamt der OOo Anwendung abschmierte. Manchmal hatte ich Glück, und es war alles gespeichert, oder ich merkte, dass dies bald geschehen würde und ich stieg vorher aus dem Programm aus und dann wieder ein.
Natürlich habe ich den Tipp von F3K Total schon ausgeführt gehabt. Hat aber leider letzt endlich nicht gefunzzt.

Hat jemand noch eine Idee, an was es liegen könnte?

Läuft Base in OOo überhaupt stabil, wie es die anderen Anwendungen Calc und Writer tun?

Oder soll ich die DB auslagern, wie es RoberG in einem anderen Beitrag empohlen hatte.
Dann würde ich aber gerne wissen, ob sich die ganze Mühe dann wirklich lohnt und alles wirklich stabil läuft.

Zu guter Letzt noch ein paar Daten zu meinem System.

Betriebssystem Windows XP; wird durch automatisches Update immer auf den Laufenden gehalten
Java 7.0.170; (weiß nicht ob relevant: OS_Version = 5.1 und OS_Arch = i586
OOo 3.4
MS VisualC + + 2010 x86 Redistributable - 10.0.30319

Re: Base schmiert mir dauernd ab

Verfasst: Mo, 18.03.2013 12:34
von F3K Total
Hi,
owenstone hat geschrieben:Dann würde ich aber gerne wissen, ob sich die ganze Mühe dann wirklich lohnt und alles wirklich stabil läuft.
Wer soll dir das sagen können?
Es hängt vom Aufbau der DB ab, ob Base stabil läuft.
Wie groß ist die DB? Verarbeitest Du viele Bilder? Kann es sein das der Speicher nicht aussreicht, den kann man in den Properties erweitern.
Hast Du Makros am Laufen? Verursachen diese ggf. Fehler? usw.

Das Auslagern bewirkt auf jeden Fall, dass der Datenverlust beim Absturz deutlich kleiner, wenn nicht sogar null, ist.
Denn: Wenn die DB ausgelagert ist, wird ein Datensatz genau beim Speichern des Datensatzes "auf Platte" geschrieben.
In der embedded Version normalerweise erst dann, wenn AOO geschlossen wird.
Vorher ist die gesamte DB im Arbeitsspeicher und sonst nirgendwo. Also beim Absturz alles weg.
Es gibt einen Workaround per Makro, mit dem man auch die embedded DB zwischenzeitlich speichern kann, z.B. beim Datensatzwechsel.
Suche mal hier oder im LO-Forum nach

Code: Alles auswählen

.flush
(Ein Beitrag von RobertG)

Gruß R

Re: Base schmiert mir dauernd ab

Verfasst: Mi, 27.03.2013 02:14
von owenstone
Hi, do bin i wieder.

RobertG habe jetzt das Makro in der DB eingefügt und gleich mol getestet. :oops:
In dem Backup-Verzeichnis tauchen zwar die Sicherungen auf, aber was ich net versteh', is das die dortigen Dateien, Backups 0 KB anzeigen?!
Wenn i die dann öffne, erscheint natürlich nicht meine DB - weil der Wert ja Null ist.

Re: Base schmiert mir dauernd ab

Verfasst: Mi, 27.03.2013 08:09
von RobertG
Hallo owenstone,

ich habe gerade eine Testdatenbank genommen, das Makro komplett aus dem Thread genommen, dort eingefügt und laufen gelassen: Aufruf Backup_sofort. Ging problemlos.

Wenn eine Datei keinen Inhalt hat, dann sieht mir das nach einer Frage der Schreibrechte aus. Ich kann mich an Konstruktionen in Windows-Netzwerkumgebungen erinnern, wo dann wohl die Dateinamen gegründet wurde, die Dateien selbst aber keinen Inhalt hatten. Wie sehen die Rechte in dem Ordner "backup" aus?

Gruß

Robert

Re: Base schmiert mir dauernd ab

Verfasst: Mi, 27.03.2013 13:29
von owenstone
Hi RobertG,

habe daraus mal ein neues Thema gemacht.
Backups
http://www.oooforum.de/viewtopic.php?f=8&t=61492

Re: Base schmiert mir dauernd ab

Verfasst: Do, 04.04.2013 00:34
von owenstone
Hallo liebe Community,

da sich niemand mehr meldet zu diesem Thema, denke ich mal, dass sich anscheinend keine Lösung für mein Problem finden lässt.

So werde ich wohl oder übel dran machen und meine DB auszulagern, hoffe dann, dass dies dann besser wird.