среда, 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

пятница, 1 июля 2011 г.

Старт Admin и Managed-серверов с использованием Node Manager и WLST

Допущение: Node Manager сконфигурирован. Конфигурирование Node Manager описана здесь
  1. Запускаем Node Manager:
     $  nohup $MIDDLEWARE_HOME/wlserver_10.3/server/bin/startNodeManager.sh &  
    
  2. Открыть консоль и выполнить:
     $  $MIDDLEWARE_HOME/wlserver_10.3/common/bin/wlst.sh  
    
  3. Приконнектиться к Node Manager с помощью nmConnect(). Например:
     wls:/offline> nmConnect('weblogic','welcome1','localhost','5556','soa_domain')
    
    где weblogic - имя администратора WebLogic Server;
        welcome1 - пароль администратора WebLogic Server;
        localhost - имя хоста на котором запущен NodeManager;
        5556 - порт хоста на котором запущен NodeManager;
        soa_domain - имя домена.
  4. Стартовать AdminServer с помощью nmStart(). Например:
     wls:/nm/soa_domain> nmStart('AdminServer')  
    
  5. Стартовать ManagedServer с помощью nmStart(). Например SOA Server:
     wls:/nm/soa_domain> nmStart('soa_server1')  
    
  6. Выйти из консоли.
     wls:/nm/soa_domain> exit()  
    

четверг, 30 июня 2011 г.

Расшифровка пароля пользователя Apps в Oracle e-Business Suite R12.1.1

Допущения:
1. Пароль пользователя apps не известен.
2. Есть доступ к dbTier пользователем с привилегиями SYSDBA или DBA.


Последовательность шагов:
1. Сменить пароль пользователя apps на любой другой.
2. Залогиниться пользователем apps и выполнить следующее:
 CREATE OR REPLACE PACKAGE get_pwd AS   
 FUNCTION decrypt ( KEY IN VARCHAR2,VALUE IN VARCHAR2  
 )  
 RETURN VARCHAR2;  
 END get_pwd;  
 /  
 CREATE OR REPLACE PACKAGE BODY get_pwd AS  
 FUNCTION decrypt (KEY IN VARCHAR2,VALUE IN VARCHAR2  
 )  
 RETURN VARCHAR2  
 AS LANGUAGE JAVA  
 NAME 'oracle.apps.fnd.security.WebSessionManagerProc.decrypt  
 (java.lang.String,java.lang.String) return java.lang.String';  
 END get_pwd;  
 /  
3. Далее выполнить(пользователем apps):
 SELECT (SELECT get_pwd.decrypt(FND_WEB_SEC.GET_GUEST_USERNAME_PWD,   
 usertable.encrypted_foundation_password)FROM DUAL) AS apps_password  
 FROM fnd_user usertable  
 WHERE usertable.user_name = 
   (SELECT substr(FND_WEB_SEC.GET_GUEST_USERNAME_PWD,  
     1,instr(FND_WEB_SEC.GET_GUEST_USERNAME_PWD,'/')-1) from dual)  
4. Сменить пароль пользователя apps на результат выполнения запроса ш.3.

Ошибка "javax.net.ssl.SSLKeyException: BAD_CERTIFICATE alert was receive" и вариант её решения

  1. Проинициализировать переменные:
     $ $MIDDLEWARE_HOME/server/bin/setWLSEnv.sh 
    
  2. Выполнить следующую команду (изменить значение имени сервера - выделено красным):
     $ java utils.CertGen -cn server.domain.ru -keyfilepass DemoIdentityPassPhrase 
                          -certfile mycert -keyfile mykey
  3. Выполнить следующую команду:
     $ java utils.ImportPrivateKey -keystore DemoIdentity.jks 
                         -storepass DemoIdentityKeyStorePassPhrase 
                         -keyfile mykey.pem -keyfilepass DemoIdentityPassPhrase 
                         -certfile mycert.pem -alias demoidentity
    
  4. Сделать резервную копию следующего файла:
     $ cp $MIDDLEWARE_HOME/server/lib/DemoIdentity.jks 
          $MIDDLEWARE_HOME/server/lib/DemoIdentity.jks.bkp
    
  5. Заменить существующий файл на сгенерированный:
     $ cp DemoIdentity.jks $MIDDLEWARE_HOME/server/lib/DemoIdentity.jks
    
  6. Перезапустить все сервера и Node Manager

четверг, 23 июня 2011 г.

Конфигурирование Node Manager

  1. Перейти в директорию:
     $ cd $MIDDLEWARE_HOME/common/nodemanager  
    
  2. Если файл nodemanager не создан, то создать его или запустить Node Manager и файл будет сгенерирован автоматически, а затем изменить/проверить выделенные красным параметры:
    DomainsFile=/u01/ofm/wlserver_10.3/common/nodemanager/nodemanager.domains
    LogLimit=0
    PropertiesVersion=10.3
    DomainsDirRemoteSharingEnabled=false
    javaHome=/u01/jdk1.6.0_30
    AuthenticationEnabled=true
    NodeManagerHome=/u01/ofm/wlserver_10.3/common/nodemanager
    JavaHome=/u01/jdk1.6.0_30/jre
    LogLevel=INFO
    DomainsFileEnabled=true
    StartScriptName=startWebLogic.sh
    ListenAddress=
    NativeVersionEnabled=true
    ListenPort=5777
    LogToStderr=true
    SecureListener=true
    LogCount=1
    DomainRegistrationEnabled=false
    StopScriptEnabled=false
    QuitEnabled=false
    LogAppend=true
    StateCheckInterval=500
    CrashRecoveryEnabled=false
    StartScriptEnabled=true
    LogFile=/u01/ofm/wlserver_10.3/common/nodemanager/nodemanager.log
    LogFormatter=weblogic.nodemanager.server.LogFormatter
    ListenBacklog=50 
    
  3. Проверить, что в файле доменов Node Manager (имя файла - nodemanager.domains) прописаны все домены, например:
    soa_domain=/u01/user_projects/domains/soa_domain
    ucm_domain=/u01/user_projects/domains/ucm_domain
    
  4. Запустить Node Manager, например так:
     $ cd $MIDDLEWARE_HOME/server/bin
     $ nohup ./startNodeManager.sh &
    
    Или с помощью утилиты screen:
     $ cd $MIDDLEWARE_HOME/server/bin
     $ screen -S nodeManager -t nodeManager ./startNodeManager.sh
    

Если возникла ошибка вида "javax.net.ssl.SSLKeyException: BAD_CERTIFICATE alert was received", то вариант её решения описан здесь.