Es ist zwar etwas pauschal, aber das Schliessen der Verbindung ist eigentlich immer eine gute Idee. Unseres Erachtens müsste ein "extravagantes" Szenario gegeben sein, um anders zu planen.
Sicherlich, aber der Zeitpunkt sollte mit Bedacht gewählt sein. Es gibt durchaus Datenbanken, bei denen der Verbindungsaufbau viel 'kostet', also relativ lange dauert. Hier nach dem Schema 'Verbindung öffnen, Abfrage/Modifikation durchführen, Verbindung schliessen' vorzugehen, ist meines Erachtens nach nicht zielführend.
Nun, das von uns ins Auge gefasste Standard-Szenario ist eine Niederlassung oder Zentrale mit typischerweise max. 100 Nutzern, transaktionaler Datenzugriff und max. einem Datenzugriff pro Sekunde.
Das ist eine Standardsituation und damit haben wir Erfahrung. Zudem kennen wir keine Datenbanksysteme "bei denen der Vebindungsaufbau viel kostet" (Frage: wieviel?).
Und in der o.g. Umgebung ist es nach unserer Erfahrung günstig eine Verbindung pro Nutzer zuzulassen und diese immer brav zu schliessen. Das ist eine vernünftige Vorgabe, die Gründe sind weiter unten aufgeführt.
Bei noch mehr Nutzern sollte noch klarer sein, dass die Verbindungen nicht gehalten werden sollten.
Man sollte auch wissen, dass - wenn man in keiner grossen Softwareschmiede wie SAP oder MS arbeitet - Applikations-Bugs selbstverständlich sind. Oft läuft bspw. noch COBOL-Code oder VB-Code ohne zentralem Fehlermanagement.
(Es gibt bspw. nichts schlimmeres als DBAnwendungen, die bspw. etliche Verbindungen aufmachen, dann noch abstürzen und Verbindungen aufechterhalten, da bestimmte Prozesse noch laufen.)
1.) Vernünftige Datenbanken erkennnen (vielleicht auch erst nach einer bestimmten Zeitspanne) nicht existente Verbidnungen und schliessen diese.
In der Zwischenzeit hat aber eine schlechtprogrammierte? ;) DB-Sperre (Stichwort:Transaktionen) die Nutzer veranlasst das "DB-Problem" weiterzumelden und Aufwände zu generieren.
2.) Halbewegs venünftig programmierte Anwendungen beinhalten auch ein Absturzszenario, bei dem zumindest alle geöffneten Resourcen (also auch Datenbankverbindungen) geschlossen bzw. freigegeben werden. Das ist imho eine Grundanforderung an jede Anwendung.
Ist aber in bestimmten Programmiersprachen kaum bzw. gar nicht realisierbar. In der Praxis läuft oft alter Code, zudem auch nicht besonders präziser Programmierer. Warum? Nun - wenn man sich nicht in den SAP-Gürtel pressen lassen möchte, hat man eben eigenentiwckelte SW oder stark angepasste SW.
Vielleicht, aber auch nur vielleicht, kann man schnelle Hacks oder Minimal-Prototypen davon ausnehmen, aber diesen Anwendungen ist ja naturgemäß eine kurze Lebensdauer beschert bzw., quasi als Ausgleich, sowieso etwas mehr Freiheit gewährt.
Wir wissen nicht wo Du consulting machst, aber Du arbeitest mit Idealbildern.
Das von Dir angesprochene Verhalten ist ein Bug, nichts weiter und deshalb auch kein Grund für eine (in meinen Augen) schlechte Designentscheidung.
Ähh, "schlechte Designentscheidung" ist ja in ihrer Pauschalität "völlig" unrichtig. ;)