Probleme durch das Windows "2020-05 Security Update" - Lösungsbericht

Im Update für Version 4.1.2 / 3.9.3 (Juni 2020) fanden die Systemadministratoren einen Hinweis (siehe Ende dieses Beitrags), der zur Deinstallation eines Windows Betriebssystemupdates riet.

Diese Warnung ist jetzt (16.06.2020) hinfällig. Das Windows-Update (bzw. die Folgeupdates) können wieder eingespielt werden, wenn cardo auf dem Stand 3.9.3.43995 (13.06.2020) oder höher ist (bzw. cardo4: 4.1.2.44000).


Problem


Nach kurzer Benutzungsdauer von cardo trat der Fehler "Beim Öffnen der user.mdb ... unbekannter Fehler" sporadisch an verschiedenen Stellen der Anwendung auf. Kurzfristige Lösung war ein IIS-Reset (bzw. recyceln des Anwendungs-Pools).

Der Fehler trat eindeutig nach der Installation des Windows-Update "2020-05 Security Update" bzw. "2020-06 Security Update" auf.

Durch die unspezifische Meldung "unbekannter Fehler" (engl.: "unknown error"), sowie der Tatsache, dass es in ASP.Net und Classic-ASP auftrat und ohne weitere Kenntniss der Änderungen durch das Windows-Update hat die Problemanalyse hier sehr viel Zeit in Anspruch genommen.


Ursache


Es scheint mit dem Windows-Update eine Veränderung bei der Bereinigung von COM-Objektinstanzen in Classic-ASP gegeben zu haben.

Zudem scheint der OLEDB-Treiber ein Problem zu haben, dass beim Überschreiten der maximalen möglichen Anzahl offener Verbindungen ein undefiniertes Programmverhalten auftreten kann.


Lösung


Anpassungen im ASP-Classic Code von cardo:

  • Sicherstellten, dass nur genau ein ADODB-Connection Objekt erstellt wird und dieses im Transaction-End der ASP-Seite bereinigt wird.

  • Überarbeitung aller Codestellen, wo ein ADODB-Recordset mit einer Verbindungszeichenfolge als Connection-Argument erstellt wurde und Verwendung des zentral verwalteten Connection-Objektes.

Diese Anpassungen sind im Update vom 13.06.2020 enthalten (3.9.3.43995).


Analyse (12.06.2020)


Der Schlüssel zur Lösung war irgendwann die Fehlermeldung eines testweise eingesetzten ODBC-Treibers "Zu viele Client-Tasks".

Hier unsere Beobachtungen im Detail:

Auf allen Servern mit dem Mai oder Juni Security Update bleiben die ADO-Connections mehr oder weniger lange stehen. Interessant ist, dass die Dauer, die diese Connection-Objekte noch existieren recht unterschiedlich ist.

In einem Testfall auf Server A blieb die hohe Connection-Zahl viele Minuten (20-30) bestehen und ging nur langsam in kleinen Schritten zurück. Zu einem anderen Testzeitpunkt auf dem gleichen Server (Folgetag, keine Code-Änderungen) war die Dauer, die die Connections noch bestanden nur in der Spanne von 10-20 Sekunden. Es ist anzunehmen, dass dies ein weiterer Umstand ist, der die Beobachtung des Problems maßgeblich beeinflusste und Schlussfolgerungen erschwerte.

Auf Servern ohne den Mai oder Juni Patch bleiben die nicht entsprechend gemanagten Connections niemals stehen und sind praktisch sofort bereinigt. Nach Installation des Windows-Updates auf Server B war das Verhalten genau so wie auf Server A, womit sich der Zusammenhang zu den Windows-Updates auch noch mal bestätigte.

Offenbar gab es eine Änderung seitens Microsoft, was die Lebensdauer der COM-Objekte im Kontext des Lebenszyklus eines Web-Requests (ASP-Classic) betrifft.

Im Kontext der Problemsuche rückten auch die technischen Eckdaten bzgl. der Datenbankverbindungen in den Fokus, die wie folgt sind:

  • Es können max. 64 gleichzeitige Connections (mit einem OLE DB Provider) von einem Prozess aus geöffnet werden. Das ist der Faktor, der für uns zählt.

  • Es können max. 255 gleichzeitige Connections auf eine MDB geöffnet werden, was jedoch im Kontext cardo keine Rolle spielt, da wir in diese Größenordnung gar nicht kommen.


Ursprünglicher Text zum cardo Update 4.1.2:

  • Es wurden kürzlich vermehrt Probleme gemeldet, dass Fehler der Art "Beim Öffnen der user.mdb ... unbekannter Fehler"* sporadisch auftraten.


    Update 29.05.2020: Das Problem wird nicht durch die Verwendung der ACE (siehe unten) gelöst. Verursacher ist das Windows Update "2020-05 – Monatliches Sicherheitsqualitätsrollup" (Windows 2012R2: KB4556846, Windows 2016: KB4556813, Windows 2019: KB4551853). Wir empfehlen vorerst dieses Update zu deinstallieren.


    Wir verwenden jetzt nicht mehr "Microsoft.Jet.OLEDB.4.0", sondern "Microsoft.ACE.OLEDB.12.0". Der Updater installiert die Microsoft Access Database Engine 2010 in der 32 Bit Version. Sollte der Download fehlschlagen, installieren Sie die Version bitte manuell, der Download ist hier zu finden (wählen Sie dort die 32 Bit Version).
    Die 32 Bit Version kann wohl nicht gleichzeitg mit der 64 Bit Version installiert werden, sollte es hier zu Problemen kommen, melden Sie sich bitte bei uns.

    Sollte das Setup den Treiber nicht installieren, da dieser bereits vorhanden ist und es beim Start von cardo3 ein Problem gibt (Seite kann nicht angezeigt werden), dann prüfen Sie, ob im Eventlog System ein Eintrag mit der Quelle "WAS" und der Meldung Schwerwiegender Kommunikationsfehler im Windows-Prozessaktivierungsdienst zu finden ist.
    Hier half eine Reparaturinstallation der aktuellen Version der Microsoft Access Database Engine 2010


Zuletzt geändert: 13.07.2020 21:09:14 (erstmals erstellt 16.06.2020)