Skip to Main Content

Breadcrumb

ORA-00600 qesrCopyOrigRowsetOpns:cnt

Beginnend mit Oracle 18.4 gibt es einen BUG das Oracle bei Statements die Views, Joins und Group by enthalten, einen der folgenden ORA-00600 liefert:

  • ORA-00600 [qesrAddRowFromOrig:row_ix]
  • ORA-00600 [qesrCopyOrigRowsetOpns:cnt]

Analyse

Der Fehler wird im der MOS Note Bug 30577100 - SQL Statement Involving Views, Joins and Group by Fails With ORA-00600 [qesrAddRowFromOrig:row_ix] (Doc ID 30577100.8) behandelt. Der Fehler ist erst ab 20.2 - somit ab Oracle 21c - behoben.

Workaround für den Bug

Der Workaround ist, in den Sessions, die davon betroffen sind, undokumentierte Parameter zu aktivieren. Dabei gibt es aber drei mögliche Varianten, je nachdem ob das Problem durch einen Hash Join, ein Rowset oder das Group By entsteht.

Detailanalyse des Fehlers

Auf Grund der Tracefiles zum ORA-00600 haben wir festgestellt, dass dieser nur in Sessions passiert, die mit APEX zu tun haben und vom Server apexserver.example.com gekommen sind. Damit die restlichen Datenbank Sessions auch weiterhin ohne setzen der undokumentierten Parameter funktionieren, wurde folgender Datenbank Logon Trigger implementiert. Im Anschluss wurde getestet, welche Kombination von undokumentierten Parametern den Fehler verschwinden lässt. Im Trigger ist auch die Information, welche Einstellungen bei welcher Variation den Bugs zu setzen sind, enthalten.

Beispiel Logon Trigger mit Workaround

CREATE OR REPLACE TRIGGER LOGON_BUG_WORKAROUND
 AFTER LOGON ON DATABASE
BEGIN
 FOR x IN (SELECT machine FROM SYS.v_$session WHERE audsid = USERENV ('sessionid'))
 LOOP
   IF trim(x.machine) = 'apexserver.example.com'
   THEN
        /* Enable Workaround for BUG 30577100 SQL Statement Involving Views, Joins and Group by Fails With ORA-00600
           found problem: [qesrCopyOrigRowsetOpns:cnt] --> ROWSETs
           Disable encoding-aware hash join: "_sqlexec_encoding_aware_hj_enabled" = false
           or
           Disable rowsets: "_rowsets_enabled" = false;
           or
           Disable group by placement and/or disable group by elimination
               "_optimizer_group_by_placement" = false;
               "_optimizer_aggr_groupby_elim" = false; */
        EXECUTE IMMEDIATE 'alter session set "_rowsets_enabled"=false';      
   END IF;
 END LOOP;
END;
/