Hurriyet

3 Nisan 2014 Perşembe

Oracle E-Business Suite: Web Sayfaları - Web Pages

Oracle E-Business Suite Web Sayfaları aşağıdaki gibi bulunabilinir.

find . -name *AppsLocalLogin.jsp  
 ./$SID/apps/apps_st/appl/fnd/12.0.0/html/AppsLocalLogin.jsp  
 ./$SID/apps/apps_st/comn/webapps/oacore/html/AppsLocalLogin.jsp

Web sayfaları aşağıdaki klasör içinde listelenir.

 /orappl/$SID/apps/apps_st/comn/webapps/oacore/html  

Giriş sayfasında bir değişiklik yapacaksak AppsLocalLogin.jsp sayfasını değiştirebiliriz. Bu sayfanın kodları aşağıdaki gibidir.

more AppsLocalLogin.jsp   
 <%-- $Header: AppsLocalLogin.jsp 120.9.12010000.2 2011/08/16 19:41:12 ctilley ship $ --%>  
   
 <%@ page import='oracle.apps.fnd.sso.SessionMgr'%>  
 <%@ page import='oracle.apps.fnd.sso.SSOUtil'%>  
 <%@ page import='oracle.apps.fnd.sso.SecureHttpRequest'%>  
 <%@ page import='oracle.apps.fnd.common.WebAppsContext'%>  
 <%@ page import='oracle.apps.fnd.common.LangInfo'%>  
 <%@ page import='oracle.apps.fnd.sso.Utils'%>  
 <%@ page import='oracle.apps.fnd.login.LoginPage'%>  
 <%@ page import='oracle.apps.fnd.util.URLEncoder'%>  
 <%@ page import='java.util.Enumeration'%>  
 <%@ page import='java.sql.Connection'%>  
 <%@ page session="false" %>  
   
 <%  
  Utils.setRequestCharacterEncoding(request);  
   
   WebAppsContext wctx = null;  
   boolean alreadySet = false;  
     
   Connection conn = null;  
   if (Utils.isAppsContextAvailable()) {  
    wctx = Utils.getAppsContext();  
    alreadySet = true;  
  } else {  
    wctx = Utils.getAppsContext();  
  }  
  request = SecureHttpRequest.check(request,wctx);  
  String requestUrl = request.getParameter("requestUrl");  
  try {  
     String params;  
     StringBuffer tmp = new StringBuffer();  
     tmp.append("requestUrl=");  
     if( requestUrl != null && !requestUrl.equals(""))  
      tmp.append(URLEncoder.encode(requestUrl,SessionMgr.getCharSet()));  
       
     Enumeration paramNames = request.getParameterNames();  
     while (paramNames != null && paramNames.hasMoreElements()) {  
      String name = (String) paramNames.nextElement();  
      if (!(name.equals("requestUrl")))  
      {  
       String value = request.getParameter(name);  
       tmp.append("&");  
       // Restoring original encoding  
       tmp.append(oracle.apps.fnd.util.URLEncoder.encode(name,SessionMgr.getCharSet()));  
       tmp.append("=");  
       tmp.append(oracle.apps.fnd.util.URLEncoder.encode(value,SessionMgr.getCharSet()));  
      }  
     }      
       
       
     conn = Utils.getConnection();  
     boolean getIcxLang = false;  
     String langCode = request.getParameter("langCode");  
     String sessionLang = null;  
     if ( langCode != null)  
     {  
       // This is from language selection bean  
       if (SessionMgr.isInstalledLanguage(langCode))  
       {  
         sessionLang = langCode;  
         Utils.writeToLog("sso/html", "Language: "+langCode+" is installed", wctx);  
       }  
       else  
       {  
         getIcxLang = true;  
         Utils.writeToLog("sso/html", "Language: "+langCode+" is not installed in apps", wctx);  
       }  
       
     }  
     else  
     {  
       // try getting language from browser  
       Utils.writeToLog("sso/html", "trying to get browser's Language", wctx);  
   
       String browserLanguages = request.getHeader("Accept-Language");  
       Utils.writeToLog("sso/html", "Browser Language:"+browserLanguages, wctx);  
      
       sessionLang = LoginPage.getAppsLangFromBrowser(browserLanguages, wctx);  
       getIcxLang = (sessionLang == null || sessionLang.equals(""));  
     }  
       
     String cval = SessionMgr.getAppsCookie(request);   
     String pNlsLanguage = null;  
     if(cval!= null && !cval.equals("-1") && !cval.equals("") )  
     {   
       
       Utils.writeToLog("sso/html", "Session exists:: "+cval+" setting lang :: "+langCode, wctx);   
       LangInfo info = wctx.getLangInfo(sessionLang , null, conn);  
       pNlsLanguage = info.getNLSLanguage();  
       wctx.validateSession(cval);   
       boolean check = wctx.setLanguageContext(pNlsLanguage, null, null, null, null, null, null);   
     } else {  
         SessionMgr.createGuestSession(request, response, false, sessionLang);  
     }  
   
     String returnUrl = SSOUtil.getLocalLoginRFUrl(tmp.toString());  
     response.sendRedirect(returnUrl );  
  }   
  catch(Exception e)  
  {  
   Utils.writeToLog("sso/html", "Exception occurred"+e.toString(), wctx);   
   throw new Exception(e.toString());  
  }  
  finally {  
      if (alreadySet == false) {  
          Utils.releaseAppsContext();  
      }  
  }  
 %>



Oracle E-Business Suite: Increasing Patch Level - Patch Seviyesini Yükseltmek - Upgrading to 12.1.3.+

Patch seviyesini yükseltme ihtiyacımız en son çıkan 12.1.3. RPC'isinden sonra ortaya çıktı. (Recommended Patch Collection). Bu RPC R12.1.3. için bir ilk olarak çıkartılmıştır.(RPC1) RPC1 12.1.3 versiyonu için tavsiye edilen patch'lerin bir araya getirilmiş halidir. İlgili metalink notu aşağıdaki linktedir.

Oracle E-Business Suite Release 12.1.3+ Recommended Patch Collection 1 (RPC1) (Doc ID 1638535.1)

Bunu yüklemek için versiyonumuz 12.1.3. olmaldır. 12.1.3. versiyonunda bireysel patch'ler olduğu gibi RUP yani Release Update Pack'ler ve ürüne özel RPC (Recommended Patch Collection)'lar bulunmaktadır. Normal versiyonumuzun üzerine patch çıkmak, gerekli patch'leri aramak zaman aldığı için böyle patch'lerin bir araya getirilip sunulması bizim için büyük bir kolaylık sağlar.  Bu RPC'nin birleştirildiği patch numarası ise Patch 17774755:12.1.0'dır.


Patch Seviyesini Yükseltmek:

RPC1 patch'i için bulunan ihtiyaçlar listesine baktığımızda versiyonumuzun 12.1.3 olması gerektiğini , AD'nin de delta 4 versiyonunda olması gerekir. (AD=Applications DBA)

  • 12.1.3
  • R12.AD.B.delta.3
  • R12.AD.B.delta.4
  • R12.ADO.B.delta.4
Kısaltmaların ne demek olduğunu aşağıdaki sorguyla görebiliriz.

 select fa.application_id,  
 fa.application_short_name,  
 fpi.status,  
 fatl.application_name,fpi.patch_level  
 from  
 fnd_product_installations fpi,  
 fnd_application fa,  
 fnd_application_tl fatl  
 where  
 (  
 fa.application_id = fpi.application_id and  
 fa.application_id = fatl.application_id and  
 fatl.language = 'US'  
 and fa.application_short_name like '%AD%'  
 )  
 order by fa.application_short_name;  
   

Yukarıdaki programlardan Applications DBA dışındaki programlarının herbirinin yüklü olması gerekmez. Eğer program yüklü değilse doğal olarak patch içinde prerequisite olarak gösterilmesinin bir anlamı olmaz. Bu patch yüklendiğinde de, o program ile ilgili patch'lerin bir anlamı olmaz.

Bizdeki Applications DBA yani AD patch'i R12.AD.B.delta 3 olduğu için, bunu yükseltmek için


Oracle Support sayfasına gidip aşağıdaki gibi patch'imizi indirebiliriz.


İndirdikten sonra patch seviyemiz prerequisite'leri karşılamış hale gelir. Yani versiyonumuz zaten 12.1.3.'tü Şimdi de AD  delta 4 seviyesine gelmiş olduk.


Referanslar:

http://www.dba-oracle.com/t_oracle_applications_modules.htm
https://blogs.oracle.com/stevenChan/entry/ebs_12_1_3_rpc1

1 Nisan 2014 Salı

Oracle E-Business Suite: Concurrent Program İle İlgili Genel Bilgilerin Bulunması

Çalıştırılan concurrent programların özet bilgiler:

 select * from apps.fnd_conc_req_summary_v;  

Çalıştırılan concurrent'ların bilgileri:


  /* Formatted on 4/1/2014 2:00:33 PM (QP5 v5.215.12089.38647) */   
  SELECT b.user_name, c.user_concurrent_program_name,e.concurrent_queue_name, d.responsibility_name,a.*   
   FROM apps.fnd_concurrent_requests a,   
    apps.fnd_user b,   
    apps.fnd_concurrent_programs_tl c,   
    applsys.fnd_responsibility_tl d,   
    apps.fnd_concurrent_queues e,    
    apps.fnd_concurrent_processes f   
   WHERE  a.requested_by = b.user_id   
    AND a.concurrent_program_id = c.concurrent_program_id   
    AND a.responsibility_id = d.responsibility_id   
    and d.language='TR'   
    and c.language='TR'   
    AND f.concurrent_queue_id = e.concurrent_queue_id    
    and f.queue_application_id = e.application_id    
    and a.controlling_manager = f.concurrent_process_id    
  -- and b.user_name='&x'   
  -- and a.request_date>&request_date   
  -- and a.phase_code'&y'   
  -- and a.status_code='&z'   
  ORDER BY a.request_date DESC;   
     
  /*   
  İstenen concurrent programın logunu   
  concurrent programın ismini    
  concurrent programın ne zaman çalıştırıldığı    
  concurrent programın hangi state de çalıştığı    
  concurrent programın başarılı çalışıp çalışmadığını   
  concurrent programın hangi dilde olduğu   
  concurrent programın output dosyası   
  concurrent programın logfile dosyası   
  concurrent programın ne zaman bittiği   
  concurrent programın bağlı olduğu process_id   
  concurrent programın bağlı olduğu os process id   
  hangi concurrent manager tarafından çalıştırıldığı   
  */   



31 Mart 2014 Pazartesi

Oracle Veritabanı: Regular Expressions - Düzenli İfadeler

Regular Expression'lar Nedir?

Regular expression'lar  string ifadeler içerisinde aramak oluşturulan şablonlardır. Bu şekilde kompleks şablonlar oluşturulabilinir.

Örnek:

 select * from apps.fnd_user where regexp_like(user_name,'B');

İçinde B harfi bulunan kullanıcıları görmek için regexp_like fonksiyonunda user_name sütununda B harfini aratabiliriz.

select * from apps.fnd_user where regexp_like(user_name,'B(E|C)');

İçerisinde B harfi olup da bu B harfini E veya C ile takip eden kullanıcıları görmek için 'B(E|C)'  ifadesini kullanırız. Böylece ismi içerisinde BE veya BC olan kullanıcıları görebiliriz.

Veritabanındaki Regexp SQL Fonksiyonları:

Regexp_like: Bir tablonun kolonunda bir karakter dizisi aramak için where ifadesinden sonra kullanılır. Yukarıdaki örnekteki gibi regexp içerisinde şartlar sıralandıktan sonra kullanılır.

Syntax:http://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions018.htm#SQLRF00501

Regexp_replace: Regexp_like gibi çalışan ama karşılaştığı her ifadeyi fonksiyon içerisinde belirtilen başka bir ifadeyle değiştirir.

Syntax:http://docs.oracle.com/cd/B12037_01/server.101/b10759/functions115.htm#SQLRF06302

Regexp_instr:  Aranacak karakter şablonunun nereden itibaren aranmaya başlanacağını gösterir.

Syntax:http://docs.oracle.com/cd/B12037_01/server.101/b10759/functions114.htm#SQLRF06300

Regexp_substr: Substr fonksiyonuyla karşılaşılan kelime dizilerini sütunların içindeki verilerden çıkarabiliriz.

Syntax:http://docs.oracle.com/cd/B12037_01/server.101/b10759/functions116.htm#SQLRF06303

Regular Expression Oluşturan Karakter Şablonları:


Syntax Operatör İsmi Tanımı:
. Nokta Herhangi bir karakter
+ Artı öncesinde gelen ifadeden bir veya birden fazla karşılaşılması
? Soru işareti Sıfır ya da bir kere öncesinde gelen ifadeyle karşılaşılması
* Yıldız Sıfır ya da birden fazla  öncesindeki ifadeyle karşılaşılması
{m} Aralık öncesinde gelen ifadeden m tane karşılaşılması durumu
{m,} Aralık öncesinde gelen ifadeden en az m tanesi ile karşılaşılması durumu
{m,n} Aralık öncesinde gelen ifadeden en az m en fazla n tanesi ile karşılaşılması durumu
[...] Köşeli parantez Parantezler içerisindeki kısımları eşler.
[^...] Köşeli parantez Parantezler içerisindekilerin dışındakileri eşler

Örnekler:

[a.z]: içinde a'dan z'ye kadar olaran bütün karakterler eşlenir.

[^0-9] :içinde sayı olmayanların örneği

Regular Expression'lar Oluşturmak:
Dizilerimizi oluşturmak için ihtiyaçlarımıza göre ifadelerimizi oluştururuz. Örneğin arayacağımız sütunda "abc" dizilerini bulmak istiyorsak "abc"  şeklinde arama yapabiliriz.

Nokta Karakteri:

Nokta karakteri arama dizisi içerisindeki herhangi bir  karakteri ifade eder. Yani  "a.c" ile ifade edilen bir dizi ile "aac","abc","acc" vb bütün diziler aranır. Kısaca a ile başlayıp c ile biten bütün diziler aranır.

+ Karakteri:

+ ile öncesinde gelen ifadeden bir veya birden fazla defa karşılaşılması durumunda o değeri geri döndürür. Örnek olarak "a+" şeklinde arama yaparsak içinde "a","aa","aaa",... gibi bütün örnekleri eşler.


? Karakteri:

? ile bir karakterin hiç olmadığı ya da bir kere karşılaşıldığı durumları ararız.
Örneğin "ab?c"  şeklinde arama yaptığımız aranacak olanlar kelime dizileri "ac" veya "abc"'dir.

* Karakteri:

* bize öncesinde gelen karakterin 0 ya da daha fazla karşılaşılma durumunu gösterir.


Referanslar:

http://psoug.org/reference/regexp.html
http://docs.oracle.com/cd/B12037_01/appdev.101/b10795/adfns_re.htm
http://turkceoracle.com/2011/03/oracle%E2%80%99da-duzenli-ifadeler-regular-expressions.html

28 Mart 2014 Cuma

Oracle E-Business Suite: Concurrent Request'in Bağlı Olduğu Sorumluluklar ve Request Group'lar

Concurrent Request'in Bağlı Olduğu Sorumluluklar ve Request Group'lar:

 SELECT fcp.concurrent_program_name "Prog Short Name",  
     fcpt.user_concurrent_program_name "Program Name",  
     fcpt.description "Program desc",  
     frg.request_group_name "Request Group",  
     frg.description "Request group desc",  
     frt.responsibility_name "Responsibility Name",  
     frt.description "Responsibility desc"  
  FROM fnd_responsibility fr,  
     fnd_responsibility_tl frt,  
     fnd_request_groups frg,  
     fnd_request_group_units frgu,  
     fnd_concurrent_programs_tl fcpt,  
     fnd_concurrent_programs fcp  
  WHERE frt.responsibility_id = fr.responsibility_id  
   AND fr.request_group_id = frg.request_group_id  
   AND frg.request_group_id = frgu.request_group_id  
   AND frgu.request_unit_id = fcpt.concurrent_program_id  
   AND fcpt.concurrent_program_id = fcp.concurrent_program_id  
   AND frgu.request_unit_type = 'P'  
   AND fcpt.LANGUAGE = frt.LANGUAGE  
   AND frt.LANGUAGE = 'US'  
   AND fcpt.user_concurrent_program_name = 'Active Users'  



Oracle Veritabanı: Storage Clauses - Depolama Seçenekleri

Veritabanı Yönetimi:

Veritabanının başlangıcından itibaren yaratılan nesnelerde nasıl depolama yapılacağının seçenekleri belirtilir. Bunu yarattığımız tablolarda, index'lerde, tablespace'lerde uygulayabiliriz. Ertesinde de, create ve alter komutlarıyla değişiklikler uygulanabilinir.

Storage İfadesi:

Storage ifadesinde değerlerin nasıl ve hangi değerlerle tutulacağını belirtiriz. Storage altında belirli parametreler vardır. Bu parametreleri aşağıdaki örnekte inceleyeceğiz.

 CREATE TABLE APPS.AMS_ACT_METRICS_MONTHLY_MV  
 (  
  TIME_ID    NUMBER             NOT NULL,  
  START_DATE  DATE,  
  END_DATE   DATE,  
  OBJECT_TYPE  VARCHAR2(30 BYTE),  
  OBJECT_ID   NUMBER,  
  METRIC_VALUE NUMBER,  
  METRIC_ID   NUMBER             NOT NULL  
 )  
 TABLESPACE APPS_TS_SUMMARY  
 RESULT_CACHE (MODE DEFAULT)  
 PCTUSED  0  
 PCTFREE  10  
 INITRANS  10  
 MAXTRANS  255  
 STORAGE  (  
       INITIAL     16K  
       NEXT       128K  
       MINEXTENTS    1  
       MAXEXTENTS    UNLIMITED  
       PCTINCREASE   0  
       BUFFER_POOL   DEFAULT  
       FLASH_CACHE   DEFAULT  
       CELL_FLASH_CACHE DEFAULT  
       )  
 LOGGING   
 NOCOMPRESS   
 NOCACHE  
 PARALLEL ( DEGREE DEFAULT INSTANCES DEFAULT )  
 MONITORING; 

Parametreler sırasıyla:

Initial: Yaratılacak nesnenin ilk  extent'inin ne kadar büyüklükte olacağını gösterir. Default değeri 5 Oracle block'udur. 8kb'lık blocksize'ı olan bir veritabanı için 40kb normal değerdir.

Next: Nesnenin initial block'tan sonraki ilk extent'inin boyutunu belirler. Bunun da default değeri 5  block'tur.
Bu değerin kullanılması için PCTINCREASE adlı parametre 0 olmalıdır. Eğer bu parametre 0'dan büyükse initial'dan sonraki extent Next ile belirlenen extent olur. Next ile belirlenen extent'den sonraki extent yani 3.extent Next ile belirlenen boyutun PCTINCREASE ile çarpılıp  Next ile toplanmış halidir. Yani PCTINCREASE 10 olsaydı 3. extent 128kb +(128*10)kb boyutunda olacaktı.

Minextents: Yaratılacak nesne için initial extent sayısını belirler.

Maxextents: Nesnenin sahip olabilieceği maksimum sayıdaki extent'i belirler. Unlimited olarak belirlenmesi tavsiye edilir.

Pctincrease: İnitial extent'den sonraki artış miktarını belirler.

Pctfree: Bir database bloğunda ileride gelebilecek update'ler için ne kadar boşluk bırakılması gerektiğini gösteren parametredir. Bu parametre sayesinde bir block belirtilen değere kadar doldurulur sonra da pctfree oranına göre yeni gelen datalar eklenmez. Ancak bu sütunlara yapılacak yeni değişiklikler(update'ler) bu alana yansıtılır.

select pct_free from dba_tables; sorgusuyla istenen tablonun alanı görülebilinir.


Referanslar:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses009.htm


Oracle E-Business Suite: Bir Kullanıcının Sahip Olduğu Request Set'ler - Var Olan Bütün Request Set'ler

Bir kullanıcıya ait bütün concurrent request'ler:

  SELECT frt.responsibility_name,  
      frg.request_group_name,  
      frgu.request_unit_type,  
      frgu.request_unit_id,  
      fcpt.user_request_set_name  
   FROM apps.fnd_Responsibility fr,  
      apps.fnd_responsibility_tl frt,  
      apps.fnd_request_groups frg,  
      apps.fnd_request_group_units frgu,  
      apps.fnd_request_Sets_tl fcpt  
   WHERE   frt.responsibility_id = fr.responsibility_id  
      AND frg.request_group_id = fr.request_group_id  
      AND frgu.request_group_id = frg.request_group_id  
      AND fcpt.request_set_id = frgu.request_unit_id  
      AND frt.LANGUAGE = USERENV ('LANG')  
      AND fcpt.LANGUAGE = USERENV ('LANG')  
      AND fcpt.user_request_set_name LIKE '%'  
      AND frt.responsibility_name IN  
         (SELECT b.responsibility_name NAME  
           FROM apps.fnd_user_resp_groups a,  
             apps.fnd_responsibility_vl b,  
             apps.fnd_user u  
          WHERE   a.user_id = u.user_id  
             AND u.user_id = (SELECT user_id  
                       FROM apps.FND_USER  
                      WHERE user_name = :User_name)  
             AND a.responsibility_id = b.responsibility_id  
             AND a.responsibility_application_id = b.application_id  
             AND SYSDATE BETWEEN a.start_date  
                     AND NVL (a.end_date, SYSDATE + 1)  
             AND b.end_date IS NULL  
             AND u.end_date IS NULL)  
 ORDER BY 1,  
      2,  
      3,  
      4; 

Uygulamada bulunan bütün concurrent request'ler:

  SELECT frt.responsibility_name, frg.request_group_name,  
   frgu.request_unit_type,frgu.request_unit_id,  
   fcpt.user_request_set_name  
   FROM apps.fnd_Responsibility fr, apps.fnd_responsibility_tl frt,  
   apps.fnd_request_groups frg, apps.fnd_request_group_units frgu,  
   apps.fnd_request_Sets_tl fcpt  
   WHERE frt.responsibility_id = fr.responsibility_id  
   AND frg.request_group_id = fr.request_group_id  
   AND frgu.request_group_id = frg.request_group_id  
   AND fcpt.request_set_id = frgu.request_unit_id  
   AND frt.LANGUAGE = USERENV('LANG')  
   AND fcpt.LANGUAGE = USERENV('LANG')  
   AND fcpt.user_request_set_name like '%'  
   ORDER BY 1,2,3,4