Below, I will try to explain, a particular case for the general error : ORA-01555 snapshot too old error..
Normally, when we have this error, we are trying to adapt the retention parameters or to tune our queries.
SQL> show parameter undo; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ temp_undo_enabled boolean FALSE undo_management string AUTO undo_retention integer 3600 --extended from 900, undo_tablespace string UNDOTBS1
But, are some scenarios where the above rule is not working .
We got from the alert log file of the DB the sql id which caused the issue : pmrbk5fdfd665
But, when you want to search for it, in V$SQL/V$SQLAREA is not there
SQL> select sql_fulltext from v$sql where sql_id like '%pmrbk5fdfd665%'; no rows selected
Why?
Seems that, sql_id is present in V$OPEN_CURSOR, with an input into the sqltext column.
The issue is coming from the fact that the statement is accessing a LOB column, which causes to Oracle to generate a new sql id.
The execution part related to the LOBs will not appear into V$SQL/V$SQLAREA and is not captured into the AWR reports.
SQL> select distinct * from v$open_cursor 2 where rownum < 25 3 and sql_id like '%pmrbk5fdfd665%'; SADDR SID USER_NAME ADDRESS HASH_VALUE SQL_ID SQL_TEXT LAST_SQL SQL_EXEC_ID CURSOR_TYPE ---------------- ---------- ------------------------------ ---------------- ---------- ------------- ------------------------------------------------------------ -------- ----------- --------------- 0000000670A19780 74 my_user 00000002EB91F1F0 3831220380 pmrbk5fdfd665 table_104_11_XYZT_0_0_0 00000006747F0478 131 my_user 00000002EB91F1F0 3831220380 pmrbk5fdfd665 table_104_11_XYZT_0_0_0
Apparently, the string into the sql_text column is a HEX representation of the object_id that is being accessed.
In our case is :XYZT
SQL> select owner, object_name, object_type 2 from dba_objects 3 where object_id = (select to_number('&hex_value','XXXXXX') from dual); Enter value for hex_value: XYZT old 3: where object_id = (select to_number('&hex_value','XXXXXX') from dual) new 3: where object_id = (select to_number('XYZT','XXXXXX') from dual) OWNER OBJECT_TYPE OBJECT_NAME ---------------------- -------------------------------------------------------------------------- my_user TABLE my_table SQL> desc my_user.my_table; Name Type ------------------- ---------------- EXPERIMENT_ID VARCHAR2(20) DOCUMENT BLOB ............….
If we are looking for the retention on the ” DOCUMENT ” column, we will see :
SQL> select table_name, pctversion, retention,segment_name from dba_lobs where table_name in ('my_table'); TABLE_NAME PCTVERSION RETENTION SEGMENT_NAME ---------------------------------------------------------------------------------------- ------------------------------------ my_table 900 SYS_LOB0000027039C00002$$
In order to fix it , try to run this column to adapt the retention of the blob column, related to the new value of the UNDO_RETENTION parameter,
ALTER TABLE my_table MODIFY LOB (DOCUMENT) (3600);
Cet article When you change the UNDO_RETENTION parameter, the LOB segment’s retention value is not modified est apparu en premier sur Blog dbi services.