PDA

View Full Version : Too many open databases. Alias. (Mentor 877.01)



dmoldovan
04 January 2020, 23:56
La verificare structuri am intalnit de mai multe ori aceasta eroare.

Aveti vreo idee cum se rezolva ?
Daca sunt mai multe calculatoare client conectate la baza de date, se blocheaza TOTI clientii conectati


Multumesc anticipat pentru raspunsuri

Dan

dmoldovan
05 January 2020, 02:06
Tocmai am inlocuit captura din attachment cu cea corecta.

Irina
07 January 2020, 14:29
Utilizatorii conectati lucreaza pe firma pe care se incearca verificarea de structuri? Pentru ca nu ar fi ok, firma care urmeaza o verificare de structuri nu trebuie accesata de nimeni

alexadi
07 January 2020, 16:49
Am intanlit si eu de 2 ori aceasta eroare, la mine era generata de la faptul ca rulasem mai multe firme (peste 15-20 ) si fiecare firma avea 6-7 ani de cand era deschisa in baza, dar inchiderea si deschiderea mentorului a rezolvat problema, deci era un fisier temporar prea mare.

PS: am intanlit aceasta eroare la una din ultimele 2-3 actualizari, nu mai stiu exact ce versiune

dmoldovan
11 January 2020, 16:27
Utilizatorii conectati lucreaza pe firma pe care se incearca verificarea de structuri? Pentru ca nu ar fi ok, firma care urmeaza o verificare de structuri nu trebuie accesata de nimeni

Eram doar eu, logat direct pe server, si faceam acolo verificari de structuri dupa upgrade la 877.01.
Nu mai era nimeni logat la baza de date.
Nu facusem upgrade de vreo 3 versiuni.
In total sunt vreo 90 de firme, si pe parcursul acelor 90 de verificari de structuri cred ca mi-a dat eroarea de cel putin 10 ori

alexadi
20 January 2020, 09:59
Cred ca e o un bug in wimentor, dar si in declaratii, referitoare la acesta eroare. Aseara am rulat structuri din declaratii si am creeat in tabela de nomenclator pentru declaratia 100 impozitul, iar la penultima firma imi zicea ca nu gaseste o declaratie sa restaurez, am zis lasa ca ma deloghez dupa ce termin si ultiam firma si pe urma reincerc, insa la ultima firma am primit aceeasi eroare ca si colegul, am iesit din declaratii am reintrat in declaratii si am putut rula verificare structuri si pe firma care imi dadea eroare ca nu gaseste o decalratie si pe firma care imi dadea eroare cu: prea multe tabele deschise. Cred ca ruland asa mai multe firme ii raman deschise ceva tabele pe care programul nu le inchide si e necesar un restart de program pentru a golii memoria tampon. Imi pare rau ca nu am avut instalat un fisier de debug ca sa vedem ce anume se intampla, insa 110% sunt sigur ca e bug de programare ca apare la rulare structuri cand verifica multe tabele si mai multe firme si cred ca raman acolo rezidente in memorie.

alexadi
03 February 2020, 15:26
Oare cate versiuni mai o sa apara acest mesaj cu prea multe tabele deschise. Ieri am facut actualizarea la baza de date fara verificare structuri si azi am rulat eu verificare structuri, dupa care am inchis luna decembrie daca nu era inchisa si am modificat si constantele din presonal salarizare si la un moment dat ma trezesc cu eroarea de "too many opens database". atasat alaturat622

Deci sigur e o problema de cateva versiuni cu faptul ca winmentor nu inchide fisierele si raman udeva deschise si nu mai stie sa le gestioneze

alexadi
03 February 2020, 17:04
Am mai incasat o data aceeasi eroare. Timpul scurs intre mesajul de mai sus si cel la care scriu acuma a insemnat rularea de verificare structuri la cateva firme, insa intre timp am activat si un debug.pas la nivel de mentor (rulat cu master si iar utilizatorul de wind era administrator deci fara limitari) si la cateva firme aceeasi eroare ca mai sus o atasez mai jos putin precum si un extras cu ultimele randuri din debug pas. poate asa reusim sa scapam si noi de aceste erori, daca e nevoie am fisierul de debug salvat..
* Init: Citesc constante... <TIMP 15:42:04.935 >
* activare <TIMP 15:48:13.044 >
* GetEditMode DoFirme <TIMP 15:48:16.185 >
* GetEditMode DoFirme <TIMP 15:48:16.200 >
* GetEditMode DoFirme <TIMP 15:48:16.216 >
* Init: Citesc constante... <TIMP 15:48:22.060 >
* belea...Too many open databases.
Alias <TIMP 15:51:57.091 >
* activare <TIMP 15:51:59.466 >
* belea...Too many open databases.623

adaniel
03 February 2020, 19:35
Mesajul este Too many open databases, cu totul altul decat open tables...

Pentru open tables, puteti pune la nivel de exe fisierul cursoare.dbg
Cu nici o fereastra deschisa nu trebuie sa fie mai mult de 9 table deschise.

Pentru databases, e cu totul altceva. database-ul este practic orice director care a deschis un tabel la un moment dat.
De aici efectul, cu cat mai multe luni si firme accesate, cu atat mai multe baze de date.

Se pare ca raman cumva database-uri deschise fara cursoare active... incerc sa vad care e cauza.

alexadi
03 February 2020, 20:09
Daca ajuta am logoul din fisierul debug.pas pentru a 2 oara cand a aparut eroarea, e strict creeat inainte de a intra in mentor si oprit exact cand am iesit din mentor dupa cea am primit eroarea, si se vede acolo tot ce s-a rulat. Tot timpul eroarea a fost too many open databases.

adaniel
04 February 2020, 11:52
O mica precizare tehnica.
BDE-ul cu idapi32.dll precum stiti el se incarca in memorie odata cu accesul unei table paradox si ramane rezident pana cand nu mai exista nici o tabla deschisa DE NICI O APLICATIE. De aia daca a crapat mentor, a crapat si tot ce era bde deschis (bdeadmin, dbd64, declaratii, etc...)
Vroiam sa reprezint ierarhia BDE, un arbore cu relartii de la 1 la n, unde n are o limita (256, 4096, per caz, etc.)

1. DLL (Ce controleaza in mod unic NETDIR-ul)
2. ---> Sesiuni (se creeaza o sesiune implicita pentru fiecare aplicatie. daca se vrea, pot exista mai multe sesiuni pe aplicatie, se izoleaza cumva lucrul. permite utilizarea de aliasuri temporare cu nume identice.
3. ------> Databases (baze de date care pot avea aliasuri temporare - denumiri interne la fel ca cele permanente [mentor, lunaalias, firmaalias..]) Ele se crează automat in momentul accesarii unei table dintr-un folder,
si se pare ramane creat, pana la inchiderea sesiunii, pentru a nu se creea de fiecare data cand accesezi din nou acel folder. Aici intervin LCK-urile. Ele spun ca o baza de date exista pe folderul respectiv.
Particularitate: PrivateDatabase - ce noi am setat acum cativa ani folderul Private, ofera acces exclusiv unei aplicatii, viteza creste, deoarece astfel nu e nevoie sa tina evidenta prin lck-uri si netdir a accesului
concurent.
4. ---------> Cursoare. A se diferentia de tabelele fizice. Ele sunt practic legaturi pe memorie catre tabela fizica de pe disk, din directoare. Pentru ca pot exista mai multe cursoare la aceeasi tabla, pe aceeasi baza de date, dar chiar si pe sesiuni diferite.
Si aici a aparut nebunia Windows 10/ Windows Defender. BDE-ul se asteapta ca atunci cand face o cerere de obtinere adresa (HANDLE) de la Windows catre o tabla (pentru ca pana la urma windowsul e cel ce gestioneaza accesul la
partitia de fisiere, nu altcineva) sa primeasca raspunsul imediat cu un numar intreg reprezentand un identificator temporar unic catre acea tabla. Dar Windowsul s-a decis mai intai, din motive de securitate, sa verifice cine face cererea,
are drepturi pe acel director, la acel fisier, este sigura aplicatia, dupa care cine este fisierul? nu cumva e un virus? sa-i facem un diagnostic complet. Si pana se decide el sa trimita raspunsul cu acel numar, a plecat trenul... De aia
reparatia facuta e cat se poate de prosteasca, in sensul ca efectiv, daca primeste numarul cu valoarea 0 (invalid), sa nu presupun ca nu am acces sau nu exista, ci sa mai intre o data, si inca o data, si inca o data...
Ca pana la urma poate voi primi raspuns, bazandu-ma pe faptul ca la a 2-a sau a 5-a verificare, windowsul are totul proaspat si o face mai repede. Nu pot nici sa repet intrebarea la nesfarsit, pentru ca e posibil ca
tabla chiar sa nu existe. Sau sa nu am drepturi de utilizare a ei.

Oricum. In mare am reusit sa intervin si sa inchid bazele alea de date ce nu sunt folosite, punand verificare de fiecare data cand inchid un cursor. Incerc sa studiez si cauza pentru care lucrul acesta nu se face automat, dar e posibil sa fie iar o chestie a BDE-ului. Nu stiu daca a existat din totdeauna sau e iar o latenta de windows 10 ce trimite prea tarziu raspunsul ca nu mai exista table active...