Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Durch Verbindungspooling kann die Leistung und Skalierbarkeit einer Anwendung deutlich verbessert werden. Der .NET Framework-Datenprovider für Oracle stellt für ADO.NET-Clientanwendungen automatisch das Verbindungspooling bereit. Sie können auch mehrere Modifizierer für Verbindungszeichenfolgen angeben, um das Verhalten des Verbindungspoolings zu steuern (siehe Abschnitt "Steuern des Verbindungspoolings mit Schlüsselwörtern für Verbindungszeichenfolgen" weiter unten in diesem Thema).
Hinweis Der .NET Framework-Datenprovider für Oracle ist in .NET Framework, Version 1.0, nicht enthalten. Wenn Sie den .NET Framework-Datenprovider für Oracle benötigen und .NET Framework, Version 1.0, verwenden, können Sie den .NET Framework-Datenprovider für Oracle unter https://msdn.microsoft.com/downloads downloaden.
Poolerstellung und -zuweisung
Wenn eine Verbindung hergestellt wird, wird ein Verbindungspool basierend auf einem exakt übereinstimmenden Algorithmus erstellt. Damit wird der Pool der Verbindungszeichenfolge in der Verbindung zugewiesen. Jeder Verbindungspool wird einer eindeutigen Verbindungszeichenfolge zugewiesen. Wenn eine neue Verbindung hergestellt wird und die Verbindungszeichenfolge nicht exakt mit einem vorhandenen Pool übereinstimmt, wird ein neuer Pool erstellt.
Erstellte Verbindungspools werden erst zerstört, wenn der aktive Prozess endet. Für die Pflege inaktiver oder leerer Pools ist ein minimaler Systemaufwand erforderlich.
Hinzufügen von Verbindungen
Für jede eindeutige Verbindungszeichenfolge wird ein Verbindungspool erstellt. Bei der Erstellung eines Pools werden mehrere Verbindungsobjekte erstellt und dem Pool hinzugefügt, damit die minimale Poolgröße erreicht wird. Den Anforderungen entsprechend werden Verbindungen bis zur maximalen Poolgröße hinzugefügt.
Wenn ein OracleConnection-Objekt angefordert wird, wird es aus dem Pool abgerufen, sofern eine verwendbare Verbindung verfügbar ist. Die Verbindung ist dann verwendbar, wenn sie derzeit nicht genutzt wird, einen übereinstimmenden Transaktionskontext besitzt oder keinem Transaktionskontext zugewiesen ist und einen gültigen Link zum Server besitzt.
Wenn die maximale Poolgröße erreicht ist und keine verwendbare Verbindung vorhanden ist, wird die Anforderung in die Warteschlange gestellt. Sobald Verbindungen wieder an den Pool zurückgegeben werden, weist der Verbindungspooler diese erneut zu und ermöglicht so die Ausführung dieser Anforderungen. Verbindungen werden in den Pool zurückgegeben, wenn Sie für das Connection-Objekt Close oder Dispose aufrufen.
**Vorsicht **Um die Verbindung an den Pool zurückzugeben, wird empfohlen, das Connection-Objekt stets zu schließen, wenn Sie es nicht mehr benötigen. Dazu verwenden Sie entweder die Close-Methode oder die Dispose-Methode des Connection-Objekts. Verbindungen, die nicht ausdrücklich beendet werden, werden u. U. nicht dem Pool hinzugefügt oder an ihn zurückgegeben. Eine aus dem Gültigkeitsbereich gefallene Verbindung, die nicht explizit geschlossen wurde, wird nur dann an den Verbindungspool zurückgegeben, wenn die maximale Poolgröße erreicht wurde und die Verbindung weiterhin gültig ist.
Hinweis Rufen Sie für ein Connection-Objekt, ein DataReader-Objekt oder ein beliebiges anderes in der Finalize-Methode einer Klasse verwaltetes Objekt nicht Close oder Dispose auf. Geben Sie in einem Finalizer nur nicht verwaltete Ressourcen frei, deren direkter Eigentümer die jeweilige Klasse ist. Wenn eine Klasse keine nicht verwalteten Ressourcen besitzt, fügen Sie in der Klassendefinition keine Finalize-Methode ein. Weitere Informationen finden Sie unter Programmieren für die Garbage Collection.
Entfernen von Verbindungen
Der Verbindungspooler entfernt eine Verbindung aus dem Pool, wenn die Lebensdauer der Verbindung abgelaufen ist oder der Pooler feststellt, dass die Verbindung zum Server unterbrochen wurde. Dies kann jedoch nur festgestellt werden, nachdem versucht wurde, mit dem Server zu kommunizieren. Wenn eine Verbindung gefunden wird, die nicht mehr mit dem Server verbunden ist, wird sie als ungültig markiert. Der Verbindungspooler durchsucht Verbindungspools in regelmäßigen Abständen nach Objekten, die dem Pool übergeben wurden und als ungültig markiert sind. Diese Verbindungen werden dann endgültig entfernt.
Wenn eine Verbindung zu einem nicht mehr vorhandenen Server besteht, kann diese Verbindung auch dann aus dem Pool genommen werden, wenn der Verbindungspooler die unterbrochene Verbindung nicht festgestellt und als ungültig markiert hat. In diesem Fall wird eine Ausnahme ausgelöst. Sie müssen die Verbindung dennoch trennen, um sie an den Pool zurückzugeben.
Transaktionsunterstützung
Verbindungen werden aus dem Pool entnommen und basierend auf dem Transaktionskontext zugewiesen. Der Kontext des anfordernden Threads und der zugewiesenen Verbindung müssen übereinstimmen. Daher wird jeder Verbindungspool unterteilt in Verbindungen, denen kein Transaktionskontext zugewiesen ist, und in N Teilbereiche, die Verbindungen mit einem bestimmten Transaktionskontext enthalten.
Wenn eine Verbindung getrennt wird, wird sie an den Pool und, basierend auf dem Transaktionskontext, in den richtigen Teilbereich zurückgegeben. Sie können die Verbindung daher trennen, ohne einen Fehler zu erzeugen, auch wenn eine verteilte Transaktion noch ausstehend ist. So haben Sie die Möglichkeit, die verteilte Transaktion zu einem späteren Zeitpunkt durchzuführen oder abzubrechen.
Steuern des Verbindungspoolings mit Schlüsselwörtern für Verbindungszeichenfolgen
Die ConnectionString-Eigenschaft des OracleConnection-Objekts unterstützt Schlüssel-/Wertepaare für Verbindungszeichenfolgen, mit denen das Verhalten der Logik des Verbindungspoolings angepasst werden kann.
In der folgenden Tabelle werden die ConnectionString-Werte genannt, mit denen Sie das Verhalten des Verbindungspoolings anpassen können.
| Name | Standard-wert | Beschreibung |
|---|---|---|
| Connection Lifetime | 0 | Wenn eine Verbindung an den Pool zurückgegeben wird, wird der Zeitpunkt der Erstellung mit dem aktuellen Zeitpunkt verglichen. Übersteigt diese Zeitspanne (in Sekunden) den mit Connection Lifetime festgelegten Wert, wird die Verbindung zerstört. Dies ist hilfreich in Gruppenkonfigurationen, um den Lastenausgleich zwischen einem bereits aktiven Server und einem Server zu erzwingen, der gerade erst online gegangen ist.
Der Wert Null (0) bewirkt, dass Poolverbindungen den maximalen Timeout besitzen. |
| Enlist | true | Mit dem Wert True listet der Pooler die Verbindung automatisch im aktuellen Transaktionskontext des Erstellungsthreads auf, wenn ein Transaktionskontext vorhanden ist. |
| Max Pool Size | 100 | Die maximale Anzahl von Verbindungen, die im Pool zulässig sind. |
| Min Pool Size | 0 | Die minimale Anzahl von Verbindungen, die im Pool verwaltet werden. |
| Pooling | true | Mit dem Wert True wird die Verbindung aus dem entsprechenden Pool genommen oder, falls erforderlich, erstellt und dem entsprechenden Pool hinzugefügt. |
Siehe auch
Herstellen einer Verbindung zu einer Datenquelle mit ADO.NET | Datenzugriff mit .NET Framework-Datenprovidern | OracleConnection-Klasse