среда, 20 июля 2011 г.

Массовая отмена параллельных запросов (concurrent request) в Oracle e-Business Suite R12

Предыстория: в очереди к стандартному диспетчеру запросов было более 485тыс. одинаковых ресурсоёмких запросов. Возникла необходимость отменить их выполнение...

  1. Остановить appsTier (или как-минимум Concurrent Manager);
  2. Подключиться в базе данных пользователем apps
    1. Выполнить следующий SELECT:
       SELECT a.request_id,  
        a.oracle_process_id "SPID" ,  
        q.concurrent_queue_name ,  
        fu.user_name ,  
        fu.user_id ,  
        c.concurrent_program_id,  
        c.concurrent_program_name  
        || ': '  
        || ctl.user_concurrent_program_name concurrent_request,  
        a.description ,  
        a.ARGUMENT_TEXT ,  
        b.node_name ,  
        b.db_instance ,  
        a.logfile_name ,  
        a.logfile_node_name ,  
        a.outfile_name ,  
        a.phase_code,  
        a.status_code,  
        actual_start_date ,  
        actual_completion_date ,  
        ROUND((NVL(actual_completion_date,sysdate)  
             -actual_start_date)*1440,2) mins ,   
        ROUND((actual_completion_date   
           - requested_start_date),2) * 24 duration_in_hours  
       FROM APPLSYS.fnd_Concurrent_requests a,  
        APPLSYS.fnd_concurrent_processes b ,  
        applsys.fnd_concurrent_queues q ,  
        APPLSYS.fnd_concurrent_programs c ,  
        APPLSYS.fnd_concurrent_programs_tl ctl ,  
        apps.fnd_user fu  
       WHERE a.controlling_manager  = b.concurrent_process_id  
       AND a.concurrent_program_id  = c.concurrent_program_id  
       AND a.program_application_id = c.application_id  
       AND a.phase_code <> 'C'  
       AND b.queue_application_id = q.application_id  
       AND b.concurrent_queue_id = q.concurrent_queue_id  
       AND ctl.concurrent_program_id = c.concurrent_program_id  
       AND a.requested_by = fu.user_id  
       AND ctl.language = 'US'  
       ORDER BY a.actual_start_date DESC  
      
      По результатам выписываем user_id (по имени пользователя) и concurrent_program_id (по названию запроса) для отмены.
    2. Выполнить следующий UPDATE:
       UPDATE FND_CONCURRENT_REQUESTS c  
       SET c.phase_code = 'C', c.status_code = 'D'  
       WHERE c.phase_code in ('R','P')   
       AND c.requested_by = 1428
       AND c.concurrent_program_id = 57368
       AND TO_DATE(c.request_date) >=
           TO_DATE('19-07-2011','DD-MM-YYYY')  
      
      Пояснение: подставляем значения user_id и concurrent_program_id из предыдущего SELECT-а и дату в соответсвии с той когда были созданы параллельные запросы (вместо помеченных красным).
    3. Зафиксировать изменения (COMMIT)
  3. Запустить appsTier.

Полезная ссылка: расшифровка значений status_code и phase_code таблицы FND_CONCURRENT_REQUESTS


Комментариев нет:

Отправить комментарий