Wie überprüfe ich die maximal zulässige Anzahl von Verbindungen zu einer Oracle-Datenbank?
89
Wie kann mit SQL am besten die maximale Anzahl von Verbindungen überprüft werden, die für eine Oracle-Datenbank zulässig sind? Am Ende möchte ich die aktuelle Anzahl der Sitzungen und die zulässige Gesamtzahl anzeigen, z. B. "Derzeit werden 23 von 80 Verbindungen verwendet".
Bei der Bestimmung der Anzahl der von einer Oracle-Datenbank unterstützten Verbindungen können verschiedene Einschränkungen auftreten. Der einfachste Ansatz wäre die Verwendung des SESSIONS-Parameters und von V $ SESSION, d. H.
Die Anzahl der Sitzungen, für die die Datenbank konfiguriert wurde
SELECT name, value FROM v$parameterWHERE name ='sessions'
Die Anzahl der aktuell aktiven Sitzungen
SELECT COUNT(*)FROM v$session
Wie ich bereits sagte, gibt es jedoch sowohl auf Datenbankebene als auch auf Betriebssystemebene und abhängig davon, ob ein gemeinsam genutzter Server konfiguriert wurde, andere potenzielle Einschränkungen. Wenn der gemeinsam genutzte Server ignoriert wird, können Sie möglicherweise das Limit des Parameters PROCESSES erreichen, bevor Sie das Limit des Parameters SESSIONS erreichen. Möglicherweise stoßen Sie an die Betriebssystemgrenzen, da für jede Sitzung eine bestimmte Menge RAM erforderlich ist.
Entschuldigung, wie können wir diese Abfrage ausführen? Ich erhalte "Tabelle oder Ansicht nicht vorhanden" für "SELECT COUNT (*) FROM v $ session"
Dorfbewohner
3
@ yin03 - Dies bedeutet, dass der von Ihnen verwendete Oracle-Benutzer keine Berechtigungen für die v$sessionAnsicht hat. Sie müssen Ihren DBA bitten, Ihnen dieses Privileg zu gewähren. Höchstwahrscheinlich möchten Sie das select any dictionaryPrivileg, obwohl die select_catalog_roleRolle oder eine direkte Gewährung nur für dieses Objekt ebenfalls funktionieren würde.
Justin Cave
35
Die Sitzungen Parameter aus der abgeleitet Prozesse Parameter und ändert sich entsprechend , wenn Sie die Anzahl der max Prozesse ändern. Weitere Informationen finden Sie in den Oracle-Dokumenten .
So erhalten Sie nur die Informationen zu den Sitzungen:
select current_utilization, limit_value from v$resource_limit where resource_name='sessions';
Ich dachte, das würde funktionieren, basierend auf dieser Quelle .
SELECT'Currently, '||(SELECT COUNT(*)FROM V$SESSION)||' out of '|| DECODE(VL.SESSIONS_MAX,0,'unlimited',VL.SESSIONS_MAX)||' connections are used.'AS USAGE_MESSAGEFROM
V$LICENSE VL
Justin Cave hat jedoch recht. Diese Abfrage liefert bessere Ergebnisse:
SELECT'Currently, '||(SELECT COUNT(*)FROM V$SESSION)||' out of '|| VP.VALUE ||' connections are used.'AS USAGE_MESSAGEFROM
V$PARAMETER VPWHERE VP.NAME ='sessions'
v$session
Ansicht hat. Sie müssen Ihren DBA bitten, Ihnen dieses Privileg zu gewähren. Höchstwahrscheinlich möchten Sie dasselect any dictionary
Privileg, obwohl dieselect_catalog_role
Rolle oder eine direkte Gewährung nur für dieses Objekt ebenfalls funktionieren würde.Die Sitzungen Parameter aus der abgeleitet Prozesse Parameter und ändert sich entsprechend , wenn Sie die Anzahl der max Prozesse ändern. Weitere Informationen finden Sie in den Oracle-Dokumenten .
So erhalten Sie nur die Informationen zu den Sitzungen:
Versuchen Sie dies, um Informationen zu beiden anzuzeigen:
quelle
Ich dachte, das würde funktionieren, basierend auf dieser Quelle .
Justin Cave hat jedoch recht. Diese Abfrage liefert bessere Ergebnisse:
quelle
Hinweis: Dies beantwortet nur einen Teil der Frage.
Wenn Sie nur die maximal zulässige Anzahl von Sitzungen wissen möchten, können Sie in sqlplus Folgendes ausführen: sysdba:
Dies gibt Ihnen eine Ausgabe wie:
Der Sitzungsparameter ist derjenige, den Sie möchten.
quelle
Verwenden Sie gv $ session für RAC, wenn Sie die Gesamtzahl der Sitzungen im Cluster ermitteln möchten.
quelle
Die Ansicht v $ resource_limit ist für mich so interessant, um einen Blick auf Orakelsitzungen und -prozesse zu werfen.
https://bbdd-error.blogspot.com.es/2017/09/check-sessions-and-processes-limit-in.html
quelle
quelle