Wednesday, August 8, 2012

Modify retention period of workflow queues

Yesterday, there was a requirement to increase the retention period of WF_DEFERRED and WF_BPEL_Q so that the developers could troubleshoot issues involving business events.

This can be done this way:

1. Check the retention period of existing workqueues.

SQL> SELECT owner, name, retention FROM all_queues WHERE name LIKE 'WF%';


OWNER           NAME                                                RETENTION

--------------- --------------------------------------------- ------------------------------
APPS                 WF_BPEL_Q                                                0
APPLSYS         WF_INBOUND_QUEUE                             0
APPLSYS         WF_OUTBOUND_QUEUE                          0
APPLSYS         WF_SMTP_O_1_QUEUE                           0
APPLSYS         WF_DEFERRED_QUEUE_M                        0
APPLSYS         WF_DEFERRED                                            0
APPLSYS         WF_ERROR                                           0
APPLSYS         WF_REPLAY_OUT                                   604800
APPLSYS         WF_IN                                                 604800
APPLSYS         WF_OUT                                              604800
APPLSYS         WF_REPLAY_IN                                      604800
APPLSYS         WF_JMS_IN                                          0
APPLSYS         WF_CONTROL                                       0
APPLSYS         WF_NOTIFICATION_IN                            0
APPLSYS         WF_NOTIFICATION_OUT                         0
APPLSYS         WF_WS_JMS_IN                                    0
APPLSYS         WF_JAVA_DEFERRED                              0
APPLSYS         WF_JAVA_ERROR                                   0
APPLSYS         WF_WS_JMS_OUT                                 0
APPLSYS         WF_JMS_JMS_OUT                                0
APPLSYS         WF_WS_SAMPLE                                   0
APPLSYS         WF_JMS_OUT                                      0

22 rows selected.



Notice that the retention period for WF_BPEL_Q and WF_DEFERRED are set to 0.

2. Increase the retention period of both these queues as below:

exec dbms_aqadm.alter_queue
      (  queue_name => 'APPLSYS.WF_DEFERRED',
         retention_time => 86400  -- in seconds. So, it is for 1 day. 
      );

exec dbms_aqadm.alter_queue
      (  queue_name => 'APPLSYS.WF_BPEL_Q',
         retention_time => 86400 -- in seconds. So, it is for 1 day. 
      );

3. Again, check the retention period of existing workqueues.

SQL> SELECT owner, name, retention FROM all_queues WHERE name LIKE 'WF%';


OWNER           NAME                                                           RETENTION

--------------- ---------------------------------------------           ------------------------------
APPS                WF_BPEL_Q                                                              86400
APPLSYS         WF_INBOUND_QUEUE                                       0
APPLSYS         WF_OUTBOUND_QUEUE                                    0
APPLSYS         WF_SMTP_O_1_QUEUE                                     0
APPLSYS         WF_DEFERRED_QUEUE_M                                  0
APPLSYS         WF_DEFERRED                                                         86400
APPLSYS         WF_ERROR                                                     0
APPLSYS         WF_REPLAY_OUT                                             604800
APPLSYS         WF_IN                                                           604800
APPLSYS         WF_OUT                                                        604800
APPLSYS         WF_REPLAY_IN                                                604800
APPLSYS         WF_JMS_IN                                                     0
APPLSYS         WF_CONTROL                                                  0
APPLSYS         WF_NOTIFICATION_IN                                       0
APPLSYS         WF_NOTIFICATION_OUT                                    0
APPLSYS         WF_WS_JMS_IN                                               0
APPLSYS         WF_JAVA_DEFERRED                                         0
APPLSYS         WF_JAVA_ERROR                                              0
APPLSYS         WF_WS_JMS_OUT                                            0
APPLSYS         WF_JMS_JMS_OUT                                           0
APPLSYS         WF_WS_SAMPLE                                              0
APPLSYS         WF_JMS_OUT                                                 0

22 rows selected.


Notes:

1. Before increasing the retention period, do note that there will be a performance overhead because of this increase. This is because the queue is not cleared till one day and hence, the processing of BES events may become slow.


2. The default value of retention period is 1 day for all the queues.


Tuesday, August 7, 2012

Check if UTL_FILE and FND_FILE are working fine

Yesterday, while troubleshooting a vexing ORA-29280 error, I came across 2 useful PL/SQL anonymous blocks that can be used to test FND_FILE and UTL_FILE to find out whether they are indeed working fine.


UTL_FILE
set serveroutput on 
DECLARE 
  file_location VARCHAR2(256) := '<first entry on utl_file_dir>'; 
  file_name VARCHAR2(256) := 'utlfile1.lst'; 
  file_text VARCHAR2(256) := 'THIS IS A TEST'; 
  file_id UTL_FILE.file_type; 
BEGIN 
  file_id := UTL_FILE.fopen(file_Location, file_name, 'W'); 
  UTL_FILE.put_line(file_id, file_text); 
  UTL_FILE.fclose(file_id); 
EXCEPTION 
  WHEN UTL_FILE.INVALID_PATH 
  THEN dbms_output.put_line('Invalid path ' || SQLERRM); 
    WHEN OTHERS 
  THEN dbms_output.put_line('Others '|| SQLCODE || ' ' || SQLERRM); 
END; 
/



References: Metalink (MOS) Note ID: 261693.1


FND_FILE
set serveroutput on
exec FND_FILE.PUT_LINE(FND_FILE.LOG, 'THIS IS A TEST');

HTH.