Wiki

Clone wiki

facile / informazioni_sviluppatori



Aggiornamento Firebird dalla versione 2.5.x alla 4.0.x

La nuova versione di Firebird è obbligatoria a partire dalla versione 204 di Facile.

Operazioni preliminari

Queste operazioni, vanno effettuate indipendentemente dalla tipologia di installazione:

  • aggiornare Facile fino alla versione v203;
  • effettuare un backup del database con la versione 2.5 di gbak.exe.

A questo punto bisogna distinguere fra l'installazione client/server e quella embedded.


Versione client/server

Sul server
  • Compilare la lista degli utenti attivi registrandone password e ruolo;
  • disinstallare la versione 2.5 di Firebird;
  • installare la versione 4.0.x di Firebird a 64 bit. Come password per l'utente SYSDBA utilizzare masterkey;
  • nel file databases.conf, presente nella cartella di installazione di Firebird, inserire la voce

    FACILE = c:\percorso del file fdb\nomedb.fdb

  • in caso sia installato FlameRobin, bisogna disinstallarlo e sostituirlo con una versione a 64bit uguale o superiore alla 0.9.7;

  • ripristinare gli utenti preesistenti con la stessa password e lo stesso ruolo (e.g. grant VENDITORE to rossi);
  • ripristinare, mediante la nuova versione di gbak.exe, la copia di sicurezza (punto 2 della procedura);
  • scaricare il file https://www.eosdev.it/download/facile/modifichefb4.sql.7z ed applicarlo al nuovo database.
Sui client

Versione embedded

  • Scaricare la versione .zip di Firebird 4.0.x a 32 bit. Estrarne il contenuto in una cartella temporanea;
  • copiare, dalla cartella temporanea, i file sotto indicati nella corrispondente cartella di Facile, sovrascrivendo i file già presenti:
  • intl/*.*
  • plugins/engine13.dll
  • fbclient.dll, firebird.conf, firebird.msg, gbak.exe, gfix.exe, ib_util.dll, icu*.*, isql.exe, msvcp140.dll, vcruntime140.dll, zlib1.dll
  • rinominare, se presente, il file aliases.conf in databases.conf
  • cancellare i vecchi file icu (del icu??30.*) e msvc (del msvc*30.dll)
  • ripristinare, mediante la nuova versione di gbak.exe, la copia di sicurezza (punto 2 della procedura);
  • scaricare il file https://www.eosdev.it/download/facile/modifichefb4.sql.7z ed applicarlo al nuovo database.
  • aggiornare il programma di teleaggiornamento (https://www.eosdev.it/download/facile/teleaggiornamento.7z) con la procedura manuale e lanciarlo per scaricare l'ultima versione di Facile disponibile.

Per semplificare le operazioni si può scaricare un archivio "maggiorato" (https://www.eosdev.it/download/facile/teleaggiornamento_embedded.7z) contenente tutti i file di Firebird necessari oltre al programma di aggiornamento.


Operazioni finali

Per concludere, indipendentemente dal tipo di installazione:

  • ripristinare, mediante la nuova versione di gbak.exe, la copia di sicurezza (punto 2 della procedura);
  • effettuare un teleaggiornamento.

Monitoraggio temporale una tabella

Per il debug può essere utile registrare come variano nel tempo i valori di una tabella. Un sistema rapido per questo genere di logging sfrutta le external table di Firebird.

Per esempio, per monitorare le esistenze di unpunto di carico/scarico, si può:

  1. creare un apposito file di testo

    create table EXT_LOG
      external file 'c:\firebird_log\punti.txt' (
      STAMP char(24),
      MESSAGE char(200),
      CRLF char(2) /* for a Windows context */
    )
    

    L'accesso alla cartella c:\firebird_log da parte del servizio Firebird richiede l'impostazione di un apposito permesso nel file firebird.conf:

    ExternalFileAccess = Restrict c:\firebird_log
    

    ed il successivo riavvio del servizio.

    Bisogna anche permettere l'accesso alla tabella EXT_LOG:

    grant all on table EXT_LOG to user PUBLIC
    
  2. creare un trigger per "di comodo" per l'inserimento automatico della della data di registrazione e dei caratteri di "a capo"

    create trigger BI_EXT_LOG for EXT_LOG active before insert position 0 as
    begin
      if (new.STAMP is null) then
        new.STAMP = cast(LOCALTIMESTAMP as char(24));
      new.CRLF = ASCII_CHAR(13) || ASCII_CHAR(10);
    end
    
  3. creare un trigger per la registrazione vera e propria

    create trigger PUNTI_INVENTARI_DEBUG for PUNTI_INVENTARI active before update position 0 as
    begin
      if (new.PUNTO = 1 and new.ESISTENZA <> old.ESISTENZA) then
      begin
        insert into EXT_LOG(MESSAGE)
        values(' old.PROD_SER: '||OLD.PROD_SER||' new.PROD_SER: '||new.PROD_SER
               ||'   da: '||cast(old.ESISTENZA as  varchar(10))||' a: '||cast(new.ESISTENZA as varchar(10)));
      end
    end
    

Questo approccio può esser rapidamente adattato a qualsiasi tabella.

Una volta terminata la necessità di monitorare la tabella bisogna ricordarsi di eliminare il codice di supporto:

DROP TRIGGER PUNTI_INVENTARI_DEBUG ^^
DROP TRIGGER BI_EXT_LOG ^^
DROP TABLE EXT_LOG ^^

la cartella contenente il file di log (c:\firebird_log) e ripristinare il file firebird.conf.

Updated