ORA-07445 [pfrb1_assign_aad2var()+1084] Frequently Reported
(Doc ID 1590026.1)
Last updated on SEPTEMBER 11, 2023
Applies to:
Oracle Database - Enterprise Edition - Version 11.2.0.3 and laterOracle Database Cloud Schema Service - Version N/A and later
Oracle Database Exadata Express Cloud Service - Version N/A and later
Gen 1 Exadata Cloud at Customer (Oracle Exadata Database Cloud Machine) - Version N/A and later
Oracle Cloud Infrastructure - Database Service - Version N/A and later
Information in this document applies to any platform.
Symptoms
Frequent ORA-07445 [pfrb1_assign_aad2var()+1084] errors are filling up the file system. The trace file generated for this error contains the following information:
INSERT INTO TC.TC_TABLE (...........
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
object line object
handle number name
3f1a776f8 20 TC.TC_INSERT_TRIG ---> this is a trigger
3f1b7a3c0 1 anonymous block
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedst1 <- ksedst <- dbkedDefDump <- ssexhd <- sighndlr <- call_user_handler <- sigacthandler <- pfrb1_assign_aad2va <- pevm_GBVAR <- pfrinstr_GBVAR <- pfrrun_no_tool <- pfrrun <- plsql_run <- peicnt <- peiet_execute_trigger <- kkxtexe <- kxtExecuteTriggerRecursive <- rpiswu2 <- kxtExecuteTriggerRecursive <- insExecExtraPostStm <- qerltcPostInsertProcessing <- qerltcFetch <- insexe <- opiexe <- opipls<- opiodr <- rpidrus <- skgmstack <- rpidru <- rpiswu2 <- rpidrv <- psddr0 <- psdnal <- pevm_EXECC <- pfrinstr_EXECC <- pfrrun_no_tool <- pfrrun <- plsql_run <- peicnt <- kkxexe<- opiexe <- kpoal8 <- opiodr <- ttcpip <- opitsk <- opiino <- opiodr <- opidrv <- sou2o <- opimai_real <- ssthrdmain <- main <- start
The presence of the functions 'peiet_execute_trigger and 'kxtExecuteTriggerRecursive' in the call stack in the trace file confirms that the error is generated during trigger execution.
Changes
- The crash occurs because the after statement part of the compound trigger calls a procedure which tries to reference :old and :new.
Example:
FOR UPDATE ON TC.TC_TABLE
Compound Trigger
col1 CHAR(1);
col2 CHAR(1);
ret_val PLS_INTEGER;
Procedure update_tc_table is
Begin
col1:= null;
col2:= 'N';
if ((:NEW.ENAME <> :OLD.ENAME)) THEN
col2:= 'S';
col1:= :OLD.ENAME;
END IF;
End update_tc_table;
After Each Row is
Begin
null;
End After Each Row;
After Statement is
Begin
update_tc_table();
End After Statement;
End TC_TRIGGER;
/
NOTE: In the SQL statements above, the user information and metadata used represents fictitious data.
Any similarity to actual persons, living or dead, is purely coincidental and not intended in any manner.
However this functionality is only applicable to row level trigger operations, not statement level. If I write a simple after statement trigger with the same code then
the trigger fails to create in the first place with: ORA-4082: NEW or OLD references not allowed in table level triggers
Cause
To view full details, sign in with your My Oracle Support account. |
|
Don't have a My Oracle Support account? Click to get started! |
In this Document
Symptoms |
Changes |
Cause |
Solution |
References |