Zugriff auf Firebird

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

Antworten
sal4u
Beiträge: 1
Registriert: Mo 9. Jul 2018, 23:53

Hallo!
Wir haben folgende Problemstellung:
Wir haben in unserem Netzwerk an mehreren Arbeitsplätzen eine Applikation laufen, die auf einen zentralen Firebird SQL Server (derzeit Version 2.5) zugreift (Zugriff über IP:Dateipfad, zb: 192.168.0.150:C:\Programme\etc.....) Nun benötigen wir die Applikation auch direkt am Server auf dem der Firebird SQL Server läuft (also Zugriff über den Pfad C:\Programme\etc.....). Wenn nun aber die zwei Applikationen zugreifen, scheinen Sie sich gegenseitig zu blockieren. Aber eben nur dann wenn eine Appliaktion direkt am Server läuft, die andere auf einem Client im Netzwerk. Wenn die Applikation auf verschiedenen Clients läuft und nicht direkt am Server, gabs eigentlich kein Problem. Sobald eine Applikation aber auch direkt am Server läuft, wird entweder der lokale Zugriff oder die Client-Zugriff blockiert (jenachdem, wer zuerst drankam). Wir verwenden keinen Ebedded-Firebird-Zugriff.
Kennt ihr das Problem? Habt Ihr einen Vorschlag wie man dieses Problem lösen kann?

Danke
Lg Klemens
SAL4U
Benutzeravatar
martin.koeditz
Beiträge: 443
Registriert: Sa 31. Mär 2018, 14:35

Guten Morgen Klemens,

wenn ich das nun richtig versteht, greifst du einmal direkt aus dem Netz über den Firebird-Dienst auf die DB zu und einmal lokal über den Verzeichnis-Pfad.

In diesem Falle arbeiten zwei Firebird-Instanzen (Server auf der einen Seite und embedded auf der anderen) gegeneinander und blockieren sich. Jede Instanz versucht den exklusiven Zugriff zu erhalten. Der bessere Weg wäre, den lokalen Zugriff ebenfalls über den Server-Dienst zu steuern. Auch hier kannst du mit den gleichen Daten wie auf den Clients arbeiten. Damit sollten die Probleme behoben sein.

Gruß
Martin
Martin Köditz
it & synergy GmbH
bfuerchau
Beiträge: 485
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Welche FBClient.dll wird denn verwendet?
Es gibt eine für embedded Datenbank und eine für den Serverdienst.
Die embedded DB lässt sich nicht parallel von der Anwendung öffenen.

Wie sieht also deine komplette Verbindungsfolge aus ?

Noch mal zur Installation der FBClient.dll.
Bei der Installation des Servers kann man diese in das System32-Verzeichnis übernehmen lassen. Alternativ kopiert man sich diese in das eigene Anwendungsverzeichnis.

Die FBClient.dll für den embedded Server sollte grundsätzlich im Anwendungsverzeichnis liegen.
Somit gibt man in der Verbindungsfolge nur den Namen der FBClient.dll sowie den Pfad und Namen der Datenbank an.
Wird die FBClient-embedded lokal gefunden und ist die DB ebenso lokal, ist es eine Standaloneanwendung.
Wird die normale FBCLient.dll gefunden (lokal, System32), so ist das immer eine Dienstverbindung und kann parallel betrieben werden.

Deshalb gibt es keinen Grund das Verzeichnis "C:\Programme..." in der Verbindungsfolge zu verwenden.
Benutzeravatar
joerg_b
Beiträge: 17
Registriert: Mi 26. Sep 2018, 19:15

Klemens

wenn die Appl am Server laufen greifst du via "c:\ordnerxy\datenbank.fdb" zu oder
mit "localhost:c:\ordnerxy\datenbank.fdb"

Ich nutze immer die IP Variante und am selben Rechner halt Localhost.

Vllt hilft dir das weiter.
Schöne Grüße aus dem Südharz
Jörg
bfuerchau
Beiträge: 485
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Trotzdem ist die gewählte FBClient.dll entscheidend.
Die embedded Version ist, wie gesagt, nicht parallel betreibbar.
Auch die Serverversion lässt sich mit der Pfadangabe ohne IP betreiben.
Bei der Angabe der IP sollte der Windows-Server dies selber merken und ggf. automatisch auf localhost umschwenken.
Somit kann immer dieselbe Verbindungsfolge gewählt werden.
Antworten