Con più domande
Microsoft JET Database Engine: Unspecified error

Domanda
-
Salve a tutti, ho un errore molto strano, e vorrei avere un aiuto.
Ho un server windows 2008 R2, che fa da iis7.5 server, e alcuni clienti si sono lamentati che dai loro scipt ASP non riescono a fare la compressione dei db access (.mdb), tutte le altre operazioni sono ok ma la compressione da questo errore:
Microsoft JET Database Engine error '80004005'
Unspecified errorAllora per capire se era un problema di asp o di altro ho fatto un vbscript e anche in questo modo mi da il solito errore.
Per rendere la cosa ancora piu curiosa non tutti i miei server 200R2 lo fanno, ma solo 10 di 30, e i server sono stati tutti configurati con la stessa proceduraVi faccio l'elenco delle cose che ho già controllato e che potevano creare questa situazione:
1) cartella TEMP e TMP, i permessi sono ok, sia l'utente dell'app-pool nel caso dello script hanno full control (poi lo script lo eseguo con il mio user che è entAdmin)
2) Confrontando il procmon di 2 server 1 che fa e uno che non va, è tutto identico, tranne che in quello che non va, ad un certo punto dopo la lettura del mdb e ldb esce, senza errori
3) l'event viewer non segnala nulla
4) i software installati sono gli stessi e delle stesse versioniVi viene in mente qualcosa che possa aiutarmi? grazie
Alexmela
Tutte le risposte
-
Ho un server windows 2008 R2, che fa da iis7.5 server, e alcuni
clienti si sono lamentati che dai loro scipt ASP non riescono a fare
la compressione dei db access (.mdb), tutte le altre operazioni sono
ok ma la compressione da questo errore:Un consiglio spassionato; togli di mezzo tutti gli MDB e convinci i
tuoi utenti ad usare SQL server, potrai installarlo sullo stesso server
o su un altro o installare SQL server "full" o "express" ma... se vuoi
vivere tranquillo, lascia perdere i database "mdb" :)Microsoft JET Database Engine error '80004005'
Unspecified errorhttp://support.microsoft.com/kb/306269
il problema, per come la vedo è che probabilmente il database è
ancora in uso (aperto) magari da qualche altro utente della stessa
applicazione web e questo ovviamente causa il fallimento delle
operazioni di compressione dato che queste richiedono l'accesso
esclusivo al database -
noi siamo un hosting provider, e la disponibilità di sql la diamo ai clienti, e anche con piu DB, ma purtroppo, poi ognuno scegliela sua strada nella programmazione web.
La segnalazione l'avevo già vista e non è il mio caso, io tutte le cose che suggerisce le ho controllate e sono ok.
Per quanto riguarda del file esclusivo, ti dico che lo è, nel caso dello vbscript, è un file a se, che viene usato al momento, quindi non è condiviso con nessuno.
Altre idee, grazie mile
Alexmela
-
noi siamo un hosting provider, e la disponibilità di sql la diamo ai
clienti, e anche con piu DB, ma purtroppo, poi ognuno scegliela
sua strada nella programmazione web.Credo fareste meglio a dissuadere i clienti dall'insana abitudine
di usare DB "access" per applicazioni web; tale tipo di DB è nato
come desktop DB e non è mai stato pensato per l'uso web; il
fatto che poi "funzioni" non implica che sia corretto utilizzarlo.. ma
del resto, ognuno è libero di farsi del male come preferiscePer quanto riguarda del file esclusivo, ti dico che lo è, nel
caso dello vbscript, è un file a se, che viene usato al
momento, quindi non è condiviso con nessuno.Forse non sono stato chiaro; supponiamo che ci sia un sito
scritto in (es.) ASP; all'apertura di varie pagine, il sito apre il
DB access e carica da questo varie informazioni; ora... in un
dato momento "x" puoi avere "n" utenti che richiedono pagine
al sito causando l'uso del database che quindi NON può
essere aperto in modalità esclusiva. Per verificare la cosa
ti basta riuscire a riprodurre il problema (errore in questione)
quindi, dalla console di IIS arrestare il sito in questione e poi
dopo qualche secondo... diciamo un paio di minuti tanto per
stare tranquilli, tentare l'operazione di compattamento (sempre
con il sito "spento") -
Per quanto rigurda la parte dell'uso esclusivo, io ho capito perfettamente quello che te mi suggerivi, ma forse io non mi sono spiegato, io per fare un test, ed escludere il problema dell'esclusività, ho fatto un vbscript e l'ho lanciato da dos con il mio utente che è un Admin, e mi da lo stesso errore, e qui non c'è ne problemi di permessi, ne problemi di uso da parte di altre app.........
hai altre idee?
Alexmela
-
Hai già letto questi articoli ?
http://forums.iis.net/t/1144494.aspx
http://tutorials.aspfaq.com/8000xxxxx-errors/80004005-errors.html
Fabrizio Volpe
MVP Directory Services
MCSE (NT4)(2000)(2003) - MCSA (2003)
MCTS (SQL 2005)(Exchange 2007)(Windows 2008)
Fortinet Certified Network Security Professional (FCNSP)
Fabrizio[_dot_]Volpe[_at_]GMX[_dot_]com -
Per quanto rigurda la parte dell'uso esclusivo, io ho capito
perfettamente quello che te mi suggerivi, ma forse io non
mi sono spiegato, io per fare un test, ed escludere il
problema dell'esclusività, ho fatto un vbscript e l'ho lanciato
da dos con il mio utente che è un Admin, e mi da lo stesso
errore, e qui non c'è ne problemi di permessi, ne problemi
di uso da parte di altre app.........Un momento; il database che hai cercato di usare con quello
script è un DB posto nella cartella di un sito o un DB posto in
una cartella a se stante, non pubblicata ed usato soltanto per
testare lo script ? -
Un momento; il database che hai cercato di usare con quello
script è un DB posto nella cartella di un sito o un DB posto in
una cartella a se stante, non pubblicata ed usato soltanto per
testare lo script ?Io sto usando un db creato da me in access. Il db è stato fatto con access 2003 e ha una tabella.
Ho creato tutto ex-nuovo, perchè inizialmente pernsavo fosse un problema dei dati del cliente.Grazie
-
Io sto usando un db creato da me in access. Il db è stato fatto con
access 2003 e ha una tabella. Ho creato tutto ex-nuovo, perchè
inizialmente pernsavo fosse un problema dei dati del cliente.Ok, scusa la pignoleria ma volevo essere certo che si trattasse
di un database "di test" con accesso esclusivo da parte del tuo
script; appurato ciò, direi che il problema potrebbe esser dovuto
ad una delle cause elencate nei due documenti linkati al post di
Fabrizio, quindi ti suggerirei di verificare in tal senso, inoltre, già
che ci sei potresti provare a forzare una (re)installazione delle
varie componenti di Jet 4.0 e di MDAC; al proposito, ti consiglio
di leggere quanto seguehttp://www.microsoft.com/downloads/en/details.aspx?FamilyID=8F0A8DF6-4A21-4B43-BF53-14332EF092C9
http://support.microsoft.com/kb/q239114/
http://support.microsoft.com/kb/271908
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=78cac895-efc2-4f8e-a9e0-3a1afbd5922e
-
Io tutte queste cose non le posso applicare perchè purtroppo ho windows 2008 R2, i cui componenti non sono intallati a parte ma sono compresi nel sistema operativo, infatti si chiamano WDAC.
E non sono piu aggiornabili o reinstallabili, ma si può fare solo se escono agg con windows update.
Se poi mi sbagliio correggetemi
grazie
-
E non sono piu aggiornabili o reinstallabili, ma si può
fare solo se escono agg con windows update.Beh, non soltanto
:) - ad ogni modo, visto che hai parlato di uno script
che stai usando per fare i vari tests; potresti anche
postare qui il codice dello script dato che potrebbe
fornire qualche ulteriore indicazione -
Ho provato anche ad installare questi componenti, che te mi hai suggerito ma l'errore è smpre lo stesso,
La cosa che non mi torna, è che io nella mia AD, ho 30 server tutti 2008R2, e 15 di questi sono dei FE IIS7.5
E di questi solo 10 mi danno errore gli altri funzionano regolarmente (mi sembra ovvio ricordarti che sono tutti uguali essendo un cluster).
Non solo se faccio girare lo script anche su altre macchine, esempio FTP, DC o SQL o il mio pc win7 lo script va, quindi convieni con me che non è una mancanza di librerie o librerie non aggiornate o di script.CMQ questo è il codice dello script:
' Compact Access DBs in the system DB directory
' 12-21-2001 Paul R. Sadowski
Const strDBDir = "w:\temp\Database"
Dim arrDBs()
Dim idx, tmpext
Randomize
tmpext = "." & Int((999 - 100 + 1) * Rnd + lowerbound) & ".tmp"
idx = 0
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
GetFiles(strDBDir)
GetSubFolders(strDBDir)
for x = 0 to idx -1
CompactDB(arrDBs(x))
next
Set WshShell = Nothing
Set fso = Nothing
Function GetSubFolders(strFld)
Set objDBs = fso.GetFolder(strFld)
Set objDBFolders = objDBs.SubFolders
for each x in objDBFolders
GetFiles(x)
GetSubFolders(x)
next
Set objDBFolders = Nothing
Set objDBs = Nothing
end function
Function GetFiles(strPath)
Set objDBs = fso.GetFolder(strPath)
Set objFiles = objDBs.Files
for each f in objFiles
if Ucase(FileExt(f)) = "MDB" then
redim preserve arrDBs(idx+1)
arrDBs(idx) = f
idx = idx + 1
end if
next
Set objDBs = Nothing
Set objFiles = Nothing
end function
'Return the filename extension portion of a path/filename
function FileExt(FullPath)
dim x
dim tmpstring
x = Len(FullPath)
for y = x to 1 step -1
if mid(FullPath, y, 1) = "." then
tmpstring = mid(Fullpath, y+1)
exit for
end if
next
FileExt = tmpstring
end function
'Compact an access Database
Function CompactDB(dbPath)
wscript.echo "Compacting " & dbPath
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set jro = CreateObject("Jro.JetEngine")
jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath & ";Jet OLEDB:Database Password=", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath & tmpext & ";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Password="
fso1.DeleteFile(DBpath)
fso1.MoveFile dbpath & tmpext, dbpath
set jro = Nothing
set fso1 = Nothing
End Functionciao
-
-
Ah... uno degli script del povero Paul (R.I.P. 8-2-2011)
se fosse qui ti consiglierebbe di mollare "mdb" per
uno scopo del genere e passare a SQLexpress...
ma ok... fammi controllare un paio di cose...Potresti per cortesia verificare se il file seguente esista
e, nel caso, quale sia la versione dello stesso ?C:\Program Files (x86)\Common Files\System\ado\msjro.dll
-
-
Il file c'è e questa è la versione:
Questa ?!?
Comunque; potresti per favore provare quanto segue ?
Scarica questo http://support.microsoft.com/kb/295334 - avvia l'eseguibile ed estrai i files in una cartella (es. "c:\jetcu") quindi copia il tuo database di test nella cartella stessa ed avvia l'eseguibile (jetcomp.exe); immetti il nome del tuo DB (quello da "compattare") in "source" ed un altro nome (es. c:\jetcu\test.mdb) relativo ad un file mdb NON esistente in "destination", lascia il valore relativo al "locale" al default ed assicurati che sia selezionata la versione 4.x, quindi clicca il bottone compact e fammi sapere cosa succederà; anzi, nel caso in cui NON si verifichino errori, prova ad aprire il database specificato come destinazione verificando che sia integro e leggibile
-