Ich erhalte diesen Fehler in einer Entwicklungsdatenbank. Dies geschieht bei bestimmten Abfragen (einfaches Einfügen und Löschen über eine .NET-Anwendung). Die Datenbank wird von einem Benutzer verwendet, und es tritt ein Fehler auf, unabhängig davon, wie lange die Datenbank ausgeführt wurde.
Der einzige speicherbezogene Parameter, der eingestellt wird, ist: MEMORY_TARGET = 1.2G
Oracle 11.2 x64 Standard Edition Ein Windows Server 2008 R2
Die Antwort oben ist etwas alt.
Kann das Problem sofort lindern, aber nicht die Grundursache beheben. Der Parameter cursor_sharing nimmt jetzt zwei Werte an:
KRAFT oder GENAU. Mit EXACT muss Ihre Abfrage genau übereinstimmen, damit ein Cursor (SQL mit Ausführungsplan) wiederverwendet werden kann. Mit "FORCE" werden alle Werte in Ihren Abfragen geändert, um Variablen zu binden. Dies ist sehr praktisch, wenn Ihre Anwendung keine Bindevariablen verwendet. Die Datenbank erledigt das für Sie.
Wenn Sie bereits cursor_sharing = FORCE verwenden. Anschließend müssen Sie überlegen, ob Sie Ihre Speicherzuordnung anpassen möchten. Abhängig von den von Ihrem System verwendeten Speicherparametern können Sie mit den folgenden Abfragen eine Vorstellung davon erhalten, wo Sie diesen Wert festlegen sollten:
Wenn SGA_TARGET und SGA_MAX__SIZE / PGA_TARGET und PGA_MAX_SIZE verwendet werden (sie sollten übereinstimmen): Wählen Sie * aus v $ sga_target_advice; Wählen Sie * aus v $ pga_target_advice;
Es würde so aussehen: In meinem Fall ist dies ein Pre-Prod-System, es wird nicht lange so gut aussehen:
Dies ist der SGA_TARGET_ADVICE:
Die Zeile, in der SGA_SIZE_FACTOR 1 ist, ist die aktuelle Einstellung. In einem System, in dem der Speicher zu klein ist, sollte die Zunahme von SGA_SIZE und SGA_SIZE_FACTOR eine dramatische Abnahme von ESTD_DB_TIME und ESTD_DB_TIME_FACTOR zeigen. Erhöhen Sie den Speicher bis zu einem Punkt, an dem eine erneute Erhöhung die estd_db_time nicht mehr so stark ändert.
In meinem Fall könnte ich mit meiner aktuellen Last die Größe von SGA_TARGET leicht auf 80 G reduzieren, ohne einen großen Erfolg zu erleiden. Eine Reduzierung auf 57 G und weniger würde jedoch zu immer dramatischeren Leistungsproblemen führen.
Wenn MEMORY_TARGET verwendet wird:
quelle
Als Ergänzung zur vorherigen Antwort stellt sich heraus, dass
ALTER SESSION SET NLS_COMP=LINGUISTIC;ALTER SESSION SET NLS_SORT=GENERIC_M_CI;
aus irgendeinem Grund der Speicher schnell erschöpft ist. Das Problem verschwindet, wenn ein anderes NLS_SORT verwendet wird.quelle