FirebirdSQL

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen

Zur Datenhaltung verwendet OrgaMon den freien Datenbank Server firebird SQL.

Installation

(für Mehrprozessor-Systeme:) CS- Classic Server unter Linux

 rpm -vv -i Firebird..CS.rpm
 chkconfig --add xinetd
 rcxinetd restart

(für Einprozessor-Systeme) SS- Super Server unter Linux

 rpm -vv -i Firebird..SS.rpm
 chkconfig --add firebird
 rcfirebird restart
  • Sicherheitseinstellungen

Zunächst muss dem firebird SQL Server erlaubt werden auf die typischen Dienstbereiche der Platte zuzugreifen: /srv Dort können dann auch verschiedene Volumes eingehängt werden. Dazu muss jedoch der schreibende Zugriff erst mal ermöglicht werden:

joe /opt/firebird/firebird.conf
DatabaseAccess = Restrict /srv

Bedeutung: dem FirebirdSQL Server ist der Datenbankzugriff nur in /srv und allen weiteren Unterverzeichnissen möglich.

  • SYSDBA Passwort

die Zeiten, dass masterkey das Out-off-the-box Passwort für firebird war sind lange vorbei. Vielmehr befindet sich das im Rahmen der Installation frisch erzuegte Passwort des Datenbank Administrator in der Datei

  /opt/firebird/SYSDBA.password

Shell Befehle

netstat --numeric -p | grep fb_inet   // anzeigen aller an firebird connectierten
                                      // (eigentlich fb_inet_server, jedoch wird der volle Name oft durch 
                                      //  netstat abgeschnitten)
ps -A | grep fb                       // anzeigen aller firebird - Prozesse
lsof <firebirddatenbankdatei>                // anzeigen aller User auf einer firebird Datenbank
lsof -p <PID eines fb_inet_servers>          // anzeigen der Dateien, die der Prozess offen hat
                                             // es wird auch angegeben wer (welcher remote) connectiert ist.
   /opt/interbase/bin/ibmgr -shut -user "SYSDBA" -password "masterkey"
   /opt/interbase/bin/ibmgr -start -forever

Hintergrundinfo

Im Moment setze ich auf SMP Systemen den "Classic Server (CS)" ein. Es bedeutet, es läuft kein einzelner Dämmon, sondern pro Verbindung wird ein Server-Prozess neu gestartet (fb_inet_server). Die Synchronisation erfolgt über Datei-Locks der jeweiligen Datenbank-Datei mit Hilfe eines monolitischen Prozesses (fb_lock_mgr). Bei dem Hochstarten der einzelnen Server-Prozesse hilft xinetd (ehemals inetd). Dies ist ein Programm, das dabei Hilft auf einzelnen Ports eines Linux-Systems Dienste anzubieten. Man beschreibt seinen Dienst in einer config-Datei, wenn dann ein Verbindungsversuch auf dem angegebenen (und von xinetd angebotenen) Port stattfindet startet xinetd das angegebene Programm und leitet die Anfrage an dieses Programm weiter.

SMP Regeln

  1. verwende den Classic Server
  2. stelle die DefaultDbCachePages auf eine KLEINE Zahl (=75)

Probleme mit Windows XP SP 2

Langsamer Applikationsstart seit Installation des Windows XP Service Pack 2

Voraussetzung: (Ursächlich ist das Service Pack 2 von Windows XP)

Problem:

Bis zu 10 Sekunden längerer Verbindungsaufbau bei Konnektierung auf den Linux Firebird Classic Server.

Lösung:

Die Firewall des Service-Pack 2 blockiert alle eingehenden Verbindungsversuche von aussen. xinetd versucht bei aktiviertem log_on_success = USERID den erfolgreichen Verbindungsaufbau zum firebird-dienst zu protokollieren. Dazu läuft ein Protokoll ab zur Verifizierung der Benutzer Identiät auf Port 113.

mehr Info auf http://grc.com/port_113.htm RFC auf http://www.faqs.org/rfcs/rfc1413.html

Dieser ist geblockt, xinetd gibt nach 3 maligem Versuch auf. log_on_success und log_on_fail sollte entfernt werden, oder auf HOST umgestellt werden:

joe /etc/xinetd.d/firebird       
//
// Folgende beide Zeile so verändern oder ganz auskommentieren 
// 
 log_on_success = HOST
 log_on_fail = HOST
//

ps -A | grep xinetd              
// merke Dir den PID des xinetd

kill -SIGUSR2 <PID des xinetd>
//
// dadurch wird xinetd gezwungen seine konfiguration neu einzulesen.
//

Alternative: öffnen des Port 113 auf den Windows XP Clients (von mir nicht empfohlen)

sollten Sie schon Windows XP Serivce Pack 2 erhalten haben, so deaktivieren Sie bitte die Anti-Virus Warnung:

Deaktivieren der Virenschutz-Warnmeldung

Start->Systemsteuerung->Sicherheitscenter->Empfehlungen->unteren Haken ankreuzen

es sollte sich folgendes Bild ergeben:

Firewall: aktiv. Automatische Updates: aktiv. Virenschutz: nicht überwacht.

OrgaMon wird geblockt: (wegen Webshop XML-RPC-Port)

siehe Installation.Arbeitsplatz

Firebird : Linux-Server

siehe Installation.Arbeitsplatz

Verwendung mit Delphi

Verwendung mit PHP

Verwendung mit Java Server Pages

Client Install

C:\WINDOWS\system32, GDS32.dll MSVC8.0 Manifest usw.

Parallele Dienstverarbeitung

Beispiele: eMail VErsenden, oder an einem ARTIKEL Datensatz eine Zelle Updaten! Dazu muss eine Abfrage das Arbeitsvolumen ausgeben können, dieses wird pollend ausgeführt. Es sollten schon die "in Arbeit befindlichen" ausgeklammert werden. Entscheidet sich ein Arbeiter für einen Datensatz muss er diesen Datensatz für sich verlässlich exclusiv reservieren können, dabei wird seine eindeutige Arbeiter-ID UND ein Reservierungsdatum eingetragen. Für jede Arbeits wird ein verfallsdatum angegeben an der diese Reservierung wieder verfällt, die Aufhebung von Reservierungen macht ein globaler Arbeiter. Nach dem ERFOLGREICHEN setzen des Exclusiven Abstecken des Claim kann die Arbeit beginnen. Um den Streit (der immer eindeutig entschieden werden muss) zwischen den Arbeitern zu vermeinden soll jedem Arbeiter eine "Prämisse" mitgegeebn werden, z.B. von "oben nach unten", oder "immer das Mittlere Element", oder von "unten nach oben" oder "RID DIV 5 = 3" usw. Ist die Arbeit erledigt so wird ja eh ein gewisser "Erledigt" Status verbucht, so dass die "offene" Selektion diesen Datensatz nicht mehr sieht. Als aller letzter Schritt wird die REservierung entfernt.

Lösung

# reserviere einen oder mehrere JOBS für dich
update first 1 from JOBS set
 WORKER = ~ME~,
 ARBEITS_BEGINN = CURRENT_TIMESTAMP
where
 WORKER is null

# Sehe nun nach JOBs für Dich und arbeitet im Fall,
# dass etwas da ist
select RID from JOBS where
 (WORKER=ME) and (ARBEITS_BEGINN<TIME_OUT)

GHOST - Attachements

Ich habe offene Verbindungen beobachtet, die Transaktionen offen halten, und dadurch zahlreiche versions generieren. Ein Sweep blockiert dann die ARTIKEL Tabelle. Der Sweep ist sehr langsam.

firebird 3.0

Erste Tests

  • http://libtom.org/ compilieren
  • danach libtommath.a in eigenes verzeichnis kopieren
  • ar x libtommath.a
  • gcc -shared -o libtommath.so.1 *.o