Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - 100 Datenbank verbindungen gleichzeitig
thas11 - Do 17.03.11 17:37
Titel: 100 Datenbank verbindungen gleichzeitig
Hallo!
Ich muss in ca.100 unterschiedliche AcessDatenbanken "gleichzeitig" Daten reinschreiben
Zum Verbindungsaufbau nehm ich eine OleDBConnection... Nun ist leider bei ca. 70 Verbindungen schluss und ich ich bekomm als Fehlermeldung "Unknown Error"
Scheinbar gibt es hier irgendeine Limitierung ...
Hat jemand eine Idee?
Danke im voraus & lg,
Wolfi
thas11 - Do 17.03.11 19:32
Hallo!
Hab inzwischen ziemlich fleißig gegoogelt und die Info gefunden, das Jet.OleDB ein Limit von maximal 64 Connections hat...
Kann man hier noch etwas machen oder ist bei 64 Connections für mich schluss ?
Danke & lg
Yogu - Do 17.03.11 20:17
Warum müssen die Daten denn gleichzeitig geschrieben werden? Du könntest sie doch auch zwischenspeichern und dann abwechselnd in die einzelnen Datenbanken übertragen.
stendate - Do 17.03.11 22:57
thas11 hat folgendes geschrieben : |
Hallo!
Hab inzwischen ziemlich fleißig gegoogelt und die Info gefunden, das Jet.OleDB ein Limit von maximal 64 Connections hat...
Kann man hier noch etwas machen oder ist bei 64 Connections für mich schluss ?
|
Ich gehe schon davon aus dass da irgendwo ein Limit existiert, im Normalfall reicht das ja auch mehr als aus.
Man könnte vieleicht ein bischen mit dem Connection-Pooling und einer Pool Size von 1 experimentieren, aber die Chancen stehen da ehr schlecht.
Müssen die Daten im Rahmen einer Transaktion verarbeitet werden? Wenn nein, dann könnte man versuchen dass über 2 Hosts zu lösen. Also die Quelle Schreibt in eine Datenbank A.mdb (Zwischenspeicher) auf Host A. Host A baut je eine Connection zu 50 Zieldatenbanken auf, und auf einem zweiten Client B wird A.mdb gelesen und in die restlichen 50 Zieldatenbanken geschrieben.
Alles in Allem klingt das Szenario aber schon "übel", in vielerlei Hinsicht. :)
thas11 - Fr 18.03.11 00:38
Hi!
Erstmal danke für die Antwort!
Yogu hat folgendes geschrieben : |
Warum müssen die Daten denn gleichzeitig geschrieben werden? Du könntest sie doch auch zwischenspeichern und dann abwechselnd in die einzelnen Datenbanken übertragen. |
Nein, geht leider nicht, da es sich wirklich um sehr viele Daten handelt daher auch die 100 mdb's ...
Ich glaub ich werd mich einfach mit dem Limit abfinden...
Danke & lg
IsNull - Fr 18.03.11 16:11
Access DBs sind alles andere als empfehlenswert (Ich hatte bei einem Projekt das wir übernommen hatten auch so nette Konstrukte, i.d.R kann man aber relativ gut von Access DBs auf MS SQL wechseln). Gibt es also keine Möglichkeit auf was gescheites auszuweichen? 100MDBs tönt jedenfalls nach einem falschen Ansatz, egal um was es geht :)
Ich hab eigentlich auch noch nie das Argument "weil es soo viele Daten sind braucht es mehere DBs" im MY/MS/SQL Umfeld gehört. Dann wären wir beim Thema Cluster, aber das wird wohl kaum der Fall sein wenn es aktuell mdbs sind
thas11 - Sa 19.03.11 12:11
Hi IsNull!
Gebe dir zu 100% recht, aber ist leider wie du schon richtig vermutet hat ein übernommenes projekt und im moment wird noch auf access bestanden :(
stendate - Sa 19.03.11 16:02
thas11 hat folgendes geschrieben : |
Hallo!
Hab inzwischen ziemlich fleißig gegoogelt und die Info gefunden, das Jet.OleDB ein Limit von maximal 64 Connections hat...
Kann man hier noch etwas machen oder ist bei 64 Connections für mich schluss ?
|
Mir ist noch was eingefallen, Du könntest versuchen eine leere Datenbank (z.B. A.mdb) zu erstellen, und darin alle Zieltabellen der Zieldatenbanken als verknüpfte Tabellen anzulegen. Die Connection aus dem .NET-Programm würde dann nur auf A.mdb zeigen.
Die über 100 Links kann man sicherlich auch von .NET aus per Schleife anlegen lassen (hab ich aber noch nie versucht). Die andere Variante wäre in A.mdb ein VBA-Modul und eine Config-Tabelle anzulegen, welches dann z.B. in einer Schleife durch eine Config-Tabelle folgendes abfreuert:
Quelltext
1: 2: 3:
| ... DoCmd.TransferDatabase acLink, "Microsoft Access", "C:\FOO\BAR\DB001.mdb", 0, "tblTabelle001", "tblTabelle001", False, False ... |
(Oder aber 100 Verknüpfungen her Hand mit Access selbst anlegen, ginge natürlich auch)
Ich bin mir nicht ganz sicher ob das das "64-Connection-Problem" wirksam umgehen kann, aber da ich nicht glaube dass wirklich in 100 Tabellen gleichzeitig geschrieben werden soll *und* da JET hierbei die nicht benötigten Connections auch wieder automatisch schließt, könnte das funktionieren.
Die Pfade zu den Ziel-MDBs können im übrigen auch UNC-Pfade sein, falls das im Netz liegen sollte. Dann leidet nur die Performance, aber laufen tut es.
thas11 - So 20.03.11 17:52
Danke für die Hilfe!
Mein problem ist, dass ich natürlich nicht wirklich "gleichzeitig" in 100 Datenbanken schreiben muss. Da hab ich mich schlecht ausgedrücht.
Aber wenn ich beim schreiben immer eine Connection aufbauen bzw. abbauen muss ist dies ENORM zeitintensiv und daher wollte ich die 100 Connection glecihzeitig geöffnet
lassen damit ich mit das ständige öffnen/schließen sparen kann...
@stendate: Danke für den Hinweis!
Ich werds in den nächsten Tagen ausprobieren und geb euch dann bescheid wie es mir dabei ergangen ist! ;)
Danke & lg,
Wolfi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!