Uživatelské nástroje

Nástroje pro tento web


firebird:sprava_databazi_-_gfix_gstat

Toto je starší verze dokumentu!


Správa databází

Kontrola a oprava struktury databáze

Kontrola struktury databáze

Kontrolu struktury databáze seprovede příkazem:

gfix -validate -full jméno_databáze

Přepínač -v[alidate]] specifikuje požadavek na kontrolu struktury, a přepínač -full je jeho rozšířením pro komplexnější analýzu struktury datových řádků a stránek.

Pokud gfix ohlásí velké množství chyb v kontrolních součtech databázových stránek, použijte přepínač -i[gnore], který způsobí ignorování chyb kontrolních součtů.

Oprava struktury databáze

Pokud byly ohlášeny chyby struktury, je potřeba spustit příkaz:

gfix -mend -full -ignore jméno_databáze

Po opravě struktury databáze je potřeba opět spustit kontrolu struktury.

Backup/restore databází pro aktualizaci ODS

Použití:

  1. skript se spouští se přímo v adresáři s FDB
  2. kontrola verze: upgrade_ods.sh *.fdb
  3. backup/restore - verzi ODS zadat dle aktuálně nainstalovaného firebird: upgrade_ods.sh -upgrade 11.2 *.fdb

Skript obis5/user/scripts/upgrade_ods.sh

#!/bin/sh
# upgrade_ods.sh [-upgrade 11.2]  *.fdb
 
FIREBIRD=/opt/firebird
 
if [ "$1" = "-upgrade" ]; then
  UPGRADE="true"
  DESTODS=$2
  shift
  shift
fi
 
for i in $*; do
  ODS=`echo 'show database;' | $FIREBIRD/bin/isql $i | grep ODS | cut -d " " -f 3`
  echo "$i : ODS $ODS"
  if [ "$UPGRADE" = "true" ]; then
    if [  "$ODS" != "$DESTODS"  ]; then
      echo backup /tmp/$i
      $FIREBIRD/bin/gbak $i /tmp/$i
      echo restore /tmp/$i
      mv $i $i.bk
      $FIREBIRD/bin/gbak -R /tmp/$i $i
      chown firebird:firebird $i
    fi
  fi
done

Kopírování DB na nový server

Použití:

  1. skript se spouští se přímo v adresáři s FDB
  2. nastavit heslo ve skriptu
  3. otestovat co se bude kopírovat: copy_to_server.sh ~/obis5/etc/obisrc.xml *.fdb
  4. soubory databáze NESMÍ na cílovém serveru existovat
  5. apt-get install pv
  6. kopírovani: copy_to_server.sh server:/mnt/obis-data ~/obis5/etc/obisrc.xml *.fdb

Skript obis5/user/scripts/copy_to_server.sh:

#!/bin/sh
#kopiruje vsechny FDB na novy server, pokud je databaze v obisrc.xml
#databaze NESMI v cilovem server:/path/to/fdb existovat, pokud exituje, tak se neprepise
#pouziti: copy_to_server.sh [-server server:/path/to/fdb] /path/to/obis/etc/obisrc.xml *.fdb
 
FIREBIRD=/opt/firebird
ISC_USER=sysdba
#ISC_PASSWORD=heslo #nastavit a odmarkovat pokud neni v nastaveno v prostredi
 
if [ "$1" = "-server" ]; then
  SERVER=$2
  shift
  shift
fi
 
OBISRC=$1
shift
 
echo OBISRC=$OBISRC
 
for i in $*; do   
  grep "$i" $OBISRC > /dev/null
  if [ $? -eq 1 ]; then
    echo "$i not in obisrc.xml"
  else
    ls -lh $i
    if [ -n "$SERVER" ]; then
     echo "$FIREBIRD/bin/gbak $i stdout | pv | $FIREBIRD/bin/gbak -R stdin $SERVER/$i"
     $FIREBIRD/bin/gbak $i stdout | pv | $FIREBIRD/bin/gbak -R stdin $SERVER/$i
    fi
  fi
done

Garbage Collection, Sweep, OIT, OAT

MGA architektura ponechává v databázi informace o předchozích verzích řádků, což časem může omezovat rychlost práce databáze. Pro čištění nepotřebných verzí se používá technika Garbage Collection a Sweep.

Práce Garbage Collection (GC) se liší dle architektury serveru a je prováděna průběžně. Kdykoli server načítá řádek, provádí u něho detekci nepotřebných verzí. U Classic se provádí odstraňování okamžitě po přečtení řádku, u Super se stará o GC samostatné vlákno.

Sweep prochází celým obsahem databáze a odstraní všechny nepotřebné verze. Zároveň aktualizuje tabulku transakcí.

Tabulka transakcí je od transakce OIT (Oldest Interested Transaction) – nejstarší nepotvrzená (např. nekorektně ukončený klient). Dále exituje transakce OAT (Oldest Active Transaction) – nejstarší doposud aktivní transakce (např. spuštěný klient nebo OBISCSERVER).

Rostoucí rozdíl mezi OIT a OAT znamená, že se zbytečně zvětšuje velikost tabulky transakcí a databáze pravděpodobně obsahuje značné množství nepotřebných verzí řádků. Každá databáze má nastaven tzv. Sweep Interval. Tato hodnota stanovuje práh rozdílu mezi OIT a OAT, kdy se v databázi automaticky spustí Sweep.

Sweep Interval lze zjistit:

  • v programu isql příkazem SHOW DATABASE
  • programem gstat příkazem gstat -h jméno_databáze (vyžaduje fyzický přístup k databázi)

Změna hodnoty parametru Sweep Interval

Změna sweep intervalu se provede příkazem:

gfix -housekeeping n jméno_databáze

Kde n je požadovaná hodnota parametru. Pokud je n=0, Sweep je vypnut. V případě vypnutí sweep intervalu je třeba sledovat rozdíl mezi OIT a OAT a sweep provádět v rámci údržby databáze mimo pracovní dobu.

Provedení sweep databáze lze přikázat pomocí programu GFIX:

 gfix -sweep cesta_k_databazi

GSTAT -- statistiky databáze

Výpis samotné hlavičky databáze: gstat -header jméno_databáze

Analýza uložení dat v tabulce rozpocty_cenik

gstat -data -r -user username -password password jméno_databáze -t rozpocty_cenik

Analýza struktury indexů v tabulce rozpocty_cenik gstat -index -user username -password password jméno_databáze -t rozpocty_cenik

Přístup k databázi zajišťuje systém dvěma způsoby.

První způsob se používá u Classic serveru a variantě přímého přístupu k databázi (bez uvedení adresy serveru) a je založen na přístupových právech k souboru databáze.

Druhý způsob se používá u obou architektur při připojení přes TCP/IP a jde o bezpečnostní databázi serveru (SECURITY.FDB). Tato databáze se spravuje programem GSEC:

gsec -user sysdba -pass heslo -database server:cesta_k_security.fdb

V interaktivním režimu lze pak zadávat tyto příkazy:

  • di[splay] - zobrazení seznamu uživatelů
  • a[dd] jmeno -pw heslo - vytvoření uživatele
  • mo[dify] jmeno -pw heslo - změna hesla
  • de[lete] jmeno - smazání uživatele
  • h[elp] - nápověda
  • q[uit] - ukončení

Program GFIX vyžaduje autentizaci pomocí parametrů -user a password nebo proměnnými prostředí ISC_USER a ISC_PASSWORD.

Nastavení velikosti vyrovnávací paměti se provede následujícím příkazem. gfix -buffers hodnota jmeno_database Hodnota je údávána v počtu stránek. Implicitně je tato hodnota 2048 pro Super Server a 75 stránek pro Classic. Implicitní velikost stránky je 4kB a lze ji zvětšit programem GBAK (parametr -page_size 8192 nebo 16384).

Nastavení způsobu zápisu do databáze se provede příkazem:

 gfix -write sync jmeno_database
 gfix -write async jmeno_database

Asynchronní způsob zápisu zvyšuje výkon databáze až o 50%. Lze jej ale použít POUZE pokud je server bezpečně zálohovaný pomocí UPS.

firebird/sprava_databazi_-_gfix_gstat.1429874354.txt.gz · Poslední úprava: 2015/04/24 11:19 autor: Karel Petrů