FireBird, Delphi nem létező adatbázis

FireBird, Delphi nem létező adatbázis
2014-03-04T12:46:05+01:00
2014-04-24T12:34:10+02:00
2022-11-30T23:42:00+01:00
bluediam
Van egy FB2.1-est használó szoftverem.
Az adatbázist az exe mellé teszi db.fdb névvel és mindig az exe fájl alapján keresi meg.
A jelenség egészen félelmetes:
- Telepítés után a c:\program files\programnév mappába került minden. Ügyfél feltöltögette adatokkal.
- Majd fogta az egész mappát és átmásolta egy pendrive-ra.
- Ott elindította és üres volt az adatbázis. (üres=pl csak az alap kategóriák voltak benne amit telepítés közben rak bele a szoftver).

A gépen egyetlen fdb kiterjesztésű fájl van mégis a telepített helyről a rendes feltöltött adatbázist látja az ügyfél, de ugyanazt a fájlt kimásolva egy másik mappába az üres mappát látja.

Sőt olyan is volt, hogy letöröltem a fájlt és mégis tudott kapcsolódni az adatbázishoz.
Átküldte nekem az egyetlen fdb fájlt a gépről és nekem üres volt, de amikor ő belépett a programba akkor látta az adatokat.


A programban kiírja az adatbázis elérési útját ez minden esetben jó. Az ikonról indítva a c:\program files stb...., a Pendrive-ról indítva pedig az E:\......

Ahova a c:\program files-ből lett átmásolva az adatbázis

Szóval olyan mintha lenne valahol elrejtve egy adatbázis amihez nem férünk hozzá, de a program tud kapcsolódni és úgy látja mintha a helyén lenne.

Win 8.1 alatt
Mutasd a teljes hozzászólást!
Szia! Itt nézz körül: C:\Users\<userid>\AppData\Local\VirtualStore\Program Files
Mutasd a teljes hozzászólást!

  • Win 8.1 alatt

    Másik gép, másik op. rendszer (win7, winXP) alatt mi a helyzet?
    Én megnézném a helyedben...

    Másrészt!
    Ezen új vindózok alatt ellenjavallott bármit is a program files könyvtárba telepíteni!
    Mutasd a teljes hozzászólást!
  • mintha lenne valahol elrejtve egy adatbázis

    Rendszergazdaként indított Windows Intézővel keresd.
    Mutasd a teljes hozzászólást!
  • Na meg persze a firebird adatbázisok file szintű másolása sem javallott. Erre való a backup/restore.
    Mutasd a teljes hozzászólást!
  • Ez is igaz! MAXIMÁLISAN igazad van.

    Azért én megnézném más windows-okon is...
    Mutasd a teljes hozzászólást!
  • Elvileg nincs is szükség telepítésre minden egy mappában van szóval akár pendrive-ról is simán elmegy a program. (XP-n biztosan).

    A Firebird adatbázist miért nem szabad másolni? Nem DB szerveres változatban működik vagyis nincs szüksége semmire elvileg csak pár dll-re meg az adatbázisra.
    Ráadásul eddig nem volt vele gond.

    Rendszergazdaként futtatva pl egy total commanderrel szintén csak egy fájl van, de az igaz, hogy akkor máshogy viselkedik. Akkor sincs meg a tartalom. Mintha user-hez kötné a dolgot amit nem értek. Szóval 1 fájl van csak az egész gépen, de kétféle adatbázis tartalmat látok.&nbsp;

    A probléma ott van, hogy látjuk a programban a felvitt adatokat, de nem tudjuk kinyerni belőle vagyis hiába küldi át az FDB fájlt nekem üres.
    És nincs másik ilyen nevű fájl az egész gépen, nincs hálózat sőt az egész gépen csak a win8.1 meg ez a program van még csak felrakva.
    Mutasd a teljes hozzászólást!
  • Gondolom az Embedded Firebird Server-t használod. Nekem eddig még nem vol rá szükségem (úgyhogy részleteiben nem is ismerem). Mindenesetre szerintem az adatok rögzítésekor ne felejtsd ki a commit-ot! A pendrive-ra másoláskor pedig ne fusson az alkalmazás. Ellenőrizd az aliases.conf file-okat mind a két helyen!
    Mutasd a teljes hozzászólást!
  • És localhost?  És ha már itt tartunk hogy másolgatod, akkor ha elmásolod onnan és teszel helyére egy eredeti, valóban üres adatbázist, akkor is látod benne a rögzített adatokat?
    Mutasd a teljes hozzászólást!
  • Igen azt használom.
    Mivel az egyik adatbázis (amit nem tudunk hol foglal helyet) teljesen jól működik a commit ha minden igaz megfelelő.
    Reset után másoltuk az adatbázist.
    Aliases.conf fájlom viszont nincs.

    Holnap leírok egy komplett folyamatot.
    Mutasd a teljes hozzászólást!
  • "A Firebird adatbázist miért nem szabad másolni?"

    Ez egy közkeletű tévedés

    Már miért is ne lehetne másolni?
    Persze ésszel (mint ebben a szakmában mindent!)

    Pl. az MSSQL-el ellentétben nincs becsatolva az adatbázis állomány!

    [megjegyzem nekem jobban tetszik így.]

    Amíg nem nyitja meg az adatbázis kezelő az adott állományt, addig az csak egy bitkupac... mint az xls, doc vagy pdf is.

    Vagyis észnél kell lenni! de ha ez megvan (és garantáltan nem nyitott az adatbázis állomány) és nincs platform függés a másolásban (ami ritka azért), akkor miért is ne?
    Ennél garantáltabb(!) mentés-másolat-tükör nem is létezhet.

    Ha meg "nyitott" az adatbázis állomány (szerver üzemmód), akkor ott az nbackup

    Akár filemásolás is történhet!

    Csak megint ismerni kell az eszközt (jelen esetben a delta filet)

    "Lock the database with the -L (lock) switch:
    nbackup [-U <user> -P <password>] -L <database>

    Now copy/backup/zip the database file to your heart's content, with your own choice of tools. A simple file copy is also possible.

    Unlock the database with -N (uNlock):
    nbackup [-U <user> -P <password>] -N <database>"
    Mutasd a teljes hozzászólást!
  • Hogyan csatlakozol az adatbázishoz? Honnan veszed a csatlakozáshoz az elérést? (Path)

    Ha az adatbázis az exe mappájában van, akkor az útvonal meghatározásához használd a ...

    IncludeTrailingBackslash(ExtractFilePath(Application.ExeName)) + 'dbneve.fdb'; ChangeFileExt(Application.ExeName, '.fdb')
    Mutasd a teljes hozzászólást!
  • És hogyan lehet ésszel?
    Mondjuk van egy 15 felhasználós fél gigás adatbázisod egy szerveren.
    Felhívod őket, hogy most lépjetek ki vagy megbeszéled velük hogy a mentés déli 12 órakor fut fél 1-ig, addig mindig lépjenek ki?
    Az embedded verzió abban más, hogy ott legalább egyedül van benne.
    Egy backup sokszor gyorsabb is, ráadásul nem egy fél gigás adatbázist fogsz cipelni/tárolni a backup szerverre/szereveren. Ha tömöríted, akkor is a "backupolt" fájl kisebb lesz. És lehet hogy csak nálunk bénák a programozók, de pár havonta jót tesz egy backup/restore is. Úgy lesz megint a 1,5 gigás adatbázisból fél gigás.
    Mutasd a teljes hozzászólást!
  • Talán olvasd végig. nbackup

    A gbak szép és jó és nagyon lassú.
    Sőt volt már olyan hogy nem lehetett visszatölteni a mentést (mondjuk nálam soha, és persze ennek is volt oka, rossz programozó sémaváltása és talán 2.1 óta a gond alapja is megszűnt)

    Valóban jó a restore, néha érdemes, de ez a havi/féléves/éves (adatbázis méret és írási tranzakció száma alapján) kategória nálam.

    Mindenesetre én a mentéseket nem merem csak gbak-ra alapozni máig sem. Szeretem ha van egy "bithelyes" adatbázisfile másolatom is ;)
    Nagy adatállományok esetén meg örülök ha éjszaka lefut a gbak és nem fut bele a másnapi múszakba.
    Mindenesetre hallottam olyan nagy adatbázisról, ahol a napi mentés több mint 24 óra lenne gbak-al

    Ha meg egy "tükör adatbázis" kell, mert valamit ki akarok próbálni vagy megcsinálni, de nem merem az éles adatbázison, akkor az nbackup (pontosabban delta használatba átkapcsolás) lehetősége óta akár éles használatú adatbázisról is lehet nagyon gyors filecopy-t csinálni

    De ugyanez "Windows Shadow Copy"-val is megvalósítható (más adatbázisok esetén is), pont a backupok miatt a MS is csinált egy "file pillanatkép" funkciót (talán a win7 óta él).

    Én erre a Cobian Backup-ot használom, de gondolom vannak rá más tool-ok is.
    Mondjuk ezt nem merném DB mentésre használni, mert az adatbázis státusza bizonytalan (tranzakció közepén állapotú lapok).
    Mutasd a teljes hozzászólást!
  • Egy felhasználós üzemmód és nincs megnyitva a program. Itt viszont nem az a kérdés, hanem ,hogy honnan a fenéből lát két adatbázist egy olyan gépen ahol fizikailag csak egyetlen FDB fájl van.
    Mutasd a teljes hozzászólást!
  • "Úgy lesz megint a 1,5 gigás adatbázisból fél gigás."

    Mondjuk nem ez az igazi cél a restorral

    Tranzakció ID tábla felszabadítása illetve filetöredezettség megszüntetése (egybefübbő file foglalása). [esetleg pl. page méret változtatás]
    A helyet (a lapokat) újra lefoglalja hamar, mert azok ugye szükségesek a napi munkához.
    Mutasd a teljes hozzászólást!
  • Én debugolnám az adatbázis filenevet.
    Másrészt teljes nevet (drive+path+file) adnák meg, mert ha csak a filenevet adod meg, akkor lehet, hogy valamelyik firebird rendszer mappába teszi.
    Ha emlékeim nem csalnak, a firebird.conf DatabaseAccess = Restrict C:\DataBase;D:\Mirror bejegyzés listájának első alkönyvtárába, vagy ilyesmi.
    De lehet, hogy van valamilyen default a RootDirectory bejegyzéshez képest.

    Én mindenesetre mindig alias-t és teljes filenevet használok.
    Szeretem, ha jól kézbentartott a dolog.
    ...és a Firebird-öt pont azért szeretem, mert általában nagyon egyértelmű, hogy mit miért és hogyan csinál

    [hasonló a helyzet mint a Win ini filekkel, ha nem adsz nekik útvonalat (ha mást nem legalább egy '.\EzAzInim.ini'-t), akkor a win rendszermappáiba teszi]
    Mutasd a teljes hozzászólást!
  • Én is erre gondoltam egészen addig amíg rá nem kerestettem az egész gépen a *.fdb fájlokra.
    Egyetlen egyet adott ki.
    Mégis két adatbázis tartalom van a gépen :D
    Mutasd a teljes hozzászólást!
  • Próbálj meg *.gdb-re keresni.
    Egyébként sem biztos a kiterjesztése jó.
    Mutasd a teljes hozzászólást!
  • Csak tudod, hogy milyen nevű állományt nyitsz?

    Egyébként talán nézd meg, milyen állományok vannak nyitva a program futtatása alatt.

    pl. sysinternals
    Mutasd a teljes hozzászólást!
  • sysinternals / handle.exe
    Mutasd a teljes hozzászólást!
  • Szia! Itt nézz körül: C:\Users\<userid>\AppData\Local\VirtualStore\Program Files
    Mutasd a teljes hozzászólást!
  • 1. Véletlenül nem fut az AVAST vagy más olyan víruskereső, aminek be van kapcsolva a "Virtuális futtatókörnyezet" illetve "Zárt környezet" opciója? Nálam már okozott ez is gondot !
    A leírásodból nekem teljesen ez következik, én is jártam már így.

    2. Legvalószínűbbnek egyébként én is Loerinc kolléga által említett, a Windows saját "fájlvédelmi" technológiájából adódó fenomént tartom.
    Érdekes olvasmány ez... ahol valaki ugyanígy járt az Access adatbázisával, és sehogyan sem sikerült "felülírnia", pedig csak olvasásra használta.

    3. Nálam a Win7 Admin módban fut, ezért a VirtualStore könyvtáram üres.
    __________________-
    4. az FDB fájl másolást illetően:
    - a minap hívott fel egy firebird-es kolléga, és derítettük ki, hogy azért sérült az adatbázis, mert ő "sima" másolással mentette az adatbázist, MIKÖZBEN használták a felhasználók.
    Ilyet SOHA nem szabad.

    Személy szerint én is szoktam másolgatni ide-oda, sőt, olyankor meghagyom az eredetit, hogy ezzel új területre kerüljön a merevlemezen, mielőtt az túlhasználódik és sérül a szektor.
    DE!
     - előtte mindig csinálok egy szabályos backup -ot (.fbk)
     - és a másolás után egy restore-t !!

    Szóval lehet másolgatni, de csak ésszel, ahogy itt már többen is tanácsolták!

    Ha nem vagyok benne biztos, hogy mások is használják-e közben az adatbázist, (Pl. egy nem szabályosan lezáródott, háttérben beragadt program,) akkor inkább leállítom addig a Firebird szolgáltatást a gépen.

    5. De mindenképpen én is a szabályos backup-ot javaslom, amit le tudsz menteni egy pendrájvra és onnan visszaállítani.

    (FONTOS: a Firebird készítői erősen ellenzik a fájlmásolással történő "átvitelt".
    Hosszas cikkek és fórum-bejegyzések szólnak arról, mi minden mehet ilyenkor tönkre. Valami olyasmihez van köze, hogy ők közvetlenül, kvázi "szektor-specifikus módon" írnak/olvasnak az adatbázis fájlba, amely sorrend egy ilyen másolással megváltozhat!
    Jó példa erre, hogy elvileg a FB képes formázatlan partíción is dolgozni.
    Mutasd a teljes hozzászólást!
  • Csak még annyit, hogy azt is érdemes lenne kipróbálni, mi van, ha NEM a ProgramFiles mappába másolod a programot, hanem direktben a gyökérbe? Ott is produkálja ugyanezt?
    Mutasd a teljes hozzászólást!
  • Megvan a probléma ezer hála és köszönet!!!

    Na szóval a probléma az, hogy ez a gyökér Windows csinál egy másolatot felhasználóként az adatbázisról és ott futtatja oda írja a változtatásokat stb....

    Na ez az amit nem tudom hogy a *-ba lehet kikapcsolni vagy megoldni, hogy ne így legyen.
    A programnak pontosan az az egyik FŐ vonzereje, hogy egy helyen van minden és így ha mozgatni kell csak másolgatják ide-oda. 
    De ezt most a Win7 kinyírta rendesen, mert önhatalmúlag belenyúl a programom helyes működésébe.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd