Hurriyet

28 Şubat 2014 Cuma

Linux / Unix : Shell Scripting Parametreler ve Değişkenler - Shell Scripting Parameters and Variables

Değişkenler ve parametreler programlama dillerinin datayı gösterme şekilleridir. Değişkenler birer etiket gibidirler. Bilgsayarın memory'sine atanmış bir alanı temsil ederler. Değişkenler aritmetik işlemler de ve string(yazı) işlenmesinde kullanılırlar.

Burada  değişkenin değerini görebilmek için $ ifadesi kullanmamız gerekir. Eğer kullanmazsak direk olduğu gibi kullanılır.

 >variable1=23  
 >echo variable1  
 variable1  
 > echo $variable1  
 23 

Değişkenin çift tırnak işareti içinde kullanılması önemli değildir; ancak tek tırnak içinde kullanılırsa o zaman değişken referansı kaldırılır.

> echo '$variable'  
 $variable 

Bir komutun sonuçlarının bir parametreye yüklenmesi için de aşağıdaki gibi yapılır.

 >a=$(ls -l)  
   
 veya  
   
 >a=`ls -l` 

Çift tırnak konmaz ise çıktı yan yana gösterilir.
echo $a  
 total 2720 drwx--x--x 2 oracle oinstall 256 Aug 13 2013 Mail -rwxr-x--- 1 oracle oinstall 73 Feb 28 15:22 a.sh -rw-r--r-- 1 oracle oinstall 605169 Feb 21 11:29 abc.html -rwxrwxrwx 1 oracle oinstall 2466 Feb 28 16:15 abc.log -rw-r--r-- 1 oracle oinstall 3116 Feb 25 2013 adstats.sql -rw-r--r-- 1 oracle oinstall 705299 Feb 05 09:31 awrrpt.html drwxr-xr-x 4 oracle oinstall 4096 Feb 28 09:27 control_scripts -rw-r--r-- 1 oracle oinstall 40224 Feb 14 2013 core drwxr-xr-x 3 oracle oinstall 256 Jan 08 2013 oradiag_oracle -rw-r--r-- 1 oracle oinstall 304 Jan 08 2013 profile.11g.db -rw-r--r-- 1 oracle oinstall 3200 May 03 2013 smit.log -rw-r--r-- 1 oracle oinstall 1357 Jan 09 2013 smit.script -rw-r--r-- 1 oracle oinstall 1756 Jan 09 2013 smit.transaction -rw------- 1 oracle oinstall 183 Aug 16 2013 tdpoerror.log 

Boşlukların korunması için çift tırnak kullanırız.
>echo "$a"  
 total 2720  
 drwx--x--x  2 oracle  oinstall    256 Aug 13 2013 Mail  
 -rwxr-x---  1 oracle  oinstall     73 Feb 28 15:22 a.sh  
 -rw-r--r--  1 oracle  oinstall   605169 Feb 21 11:29 abc.html  
 -rwxrwxrwx  1 oracle  oinstall    2466 Feb 28 16:15 abc.log  
 -rw-r--r--  1 oracle  oinstall    3116 Feb 25 2013 adstats.sql  
 -rw-r--r--  1 oracle  oinstall   705299 Feb 05 09:31 awrrpt.html  
 drwxr-xr-x  4 oracle  oinstall    4096 Feb 28 09:27 control_scripts  
 -rw-r--r--  1 oracle  oinstall   40224 Feb 14 2013 core  
 drwxr-xr-x  3 oracle  oinstall    256 Jan 08 2013 oradiag_oracle  
 -rw-r--r--  1 oracle  oinstall    304 Jan 08 2013 profile.11g.db  
 -rw-r--r--  1 oracle  oinstall    3200 May 03 2013 smit.log  
 -rw-r--r--  1 oracle  oinstall    1357 Jan 09 2013 smit.script  
 -rw-r--r--  1 oracle  oinstall    1756 Jan 09 2013 smit.transaction  
 -rw-------  1 oracle  oinstall    183 Aug 16 2013 tdpoerror.log  

Değişken Tipleri:

Shell script'lerinde değişkenlerin tipleri bulunmamaktadır. Bu değişkenler özetle karakter string'leridir. Sadece duruma göre bu parametreler üzerinde aritmetik operasyonlar yapılabilmektedir.

 #!/bin/bash  
 a=100        #integer  
 let "a += 1"  
 echo "a = $a " # a = 101  

Null değişkenlerin tanımlanması aşağıdaki gibi olabilir. Sonrasında bununla ilgili işlem yapabiliriz.

 a=''           # .veya a="" ... veya a=  
 echo "a = $a"      # a =  
 let "a += 1"       # Null değişkenler üzerine aritmetik operasyonlar yapılabilmektedir.  
 echo "a = $a"      # a = 1  
 echo  

Bir değişken oluşturulması programın herhangi bir aşamasında aşağıdaki şekildeki gibi olabilir; ancak bu kodun okunulabilirliğini bozar.

 echo "a = $a"      # a =  
 let "a += 1"         
 echo "a = $a"      # a = 1  
 echo


Özel Değişkenler:

Script içerisinde scriptin adını değişkenlerini ve bulunduğu klasörü gösteren parametre ifadeleri bulunur. Aşağıda bununla ilgili bir örnek görebiliriz.

 #!/bin/bash  
   
 MINPARAMS=10  
   
 echo  
   
 echo "Scriptimizin bulunduğu klasör adıyla birlikte \"$0\"."  
   
 echo " Scriptimizin adı \"`basename $0`\"."  
   
   
 echo  
   
 if [ -n "$1" ]         
 then  
  echo "Parametre #1 is $1" # diyez işaretinden kaçmak için tırnak işaretleri kullanılır.  
 fi   
   
 if [ -n "$2" ]  
 then  
  echo "Parametre #2 is $2"  
 fi   
   
 if [ -n "$3" ]  
 then  
  echo "Parametre #3 is $3"  
 fi   
   
 # ...  
   
   
 if [ -n "${10}" ] # 9. parametreden sonrakiler {} işaretleriyle belirtilmelidirler..  
 then  
  echo "Parametre #10 is ${10}"  
 fi   
   
 echo "-----------------------------------"  
 echo "Bütün parametreler sırasıyla: "$*""  
   
 if [ $# -lt "$MINPARAMS" ]  
 then  
  echo  
  echo "Bu script'e en az $MINPARAM kadar argüman gerekmektedir."  
 fi   
   
 echo  
   
 exit 0  

Bu örneğimizde  $# ifadesiyle parametre sayısını,  $* ile bütün parametrelerimizi, $0 ile script'imizin adını, $1 $2 $3 ...${10} değişkenleriyle de script'imize parametre olarak eklediğimiz değerleri görebiliriz. 9. parametreden sonrasını {} işaretleri arasına almalıyız.





Oracle E-Business Suite: Error - Workflow Mailer Will Not Start Stays In Starting Status - Workflow Mailer'ın Starting Mode'da Kalması

Workflow Mailer'da karşılaştığım bir hataya göre workflow notification mailer starting mode'da kalıyordu. Bunun için yaptığımız workflow container'ını restart etme ve uygulamayı açıp kapama işe yaramadı. Bunun üzerine yaptığım araştırmalara "notification mailer"'ın logunda bağlantıyla ilgili bir sorun olduğunu gördüm. Buna istinaden System Administrator>Workflow Manager>Edit>Advanced seçeneklerini seçip ayarları doğruladım. Buradan da gördüğüme göre uygulamanın mail sunucusuna bağlantısı sorunluydu.

Özetle workflow notification'daki sorunu görmek için ayarları doğruladım. Sonrasındaki bağlantı sorununu uygulama sununcusu adminleriyle çözebildik.

Referanslar:
Workflow Mailer Will Not Start Stays In Starting Status [ID 837893.1]
Unable To Start Workflow Notification Mailer [ID 418329.1]
Unable To Start Notification Mailer After Upgrade To 10.2.0.3 [ID 725852.1]
Unable To Connect To The Mail Account. Check The Host, User Name And Password [ID 1123684.1]
How to Troubleshoot 'Validation failed' Errors when Starting the Mailer [ID 463354.1]
Cannot Start Workflow Notification Mailer. 'System Deactivated' [ID 602624.1]
Unable To Perform The Workflow Mailer Configuration As It Keeps Giving "Validation Error Occured" [ID 603954.1]
SvcComponentException:Validation failed for the following parameters "PROCESSOR_READ_TIMEOUT' Causing Workflow Deferred Agent Listener to be Down. [ID 604775.1]
Java Mailer not Starting Error in Handling Component Event [ID 297725.1]

25 Şubat 2014 Salı

Oracle E-Business Suite: Concurrent Programı Çalıştıran Application'ın Bulunması

Concurrent programı çalıştıran application'ının bulunması:

SELECT application_name, application_short_name, fa.application_id  
 FROM fnd_application fa, fnd_application_tl fat  
 WHERE application_short_name LIKE '%'  
 AND fa.application_id = fat.application_id  
 ORDER BY fa.application_id  

19 Şubat 2014 Çarşamba

Oracle: Pearson Vue`dan Oracle Sinavi Nasil Satin Alinir? - How To Buy An Oracle Exam From Pearson Vue?

Oracle sinavlarina girmek icin once Pearson Vue sitesinde bir hesap acariz.  Sitemizin adi: http://www.pearsonvue.com/

Burada hesabimizi actiktan sonra ornek olarak SQL Fundamentals sinavinin nasil alindigini gosterecegiz.

Ilk adimda sitemize gireriz ve burada `Sign In` secenegini seceriz.
   


`Sign in` secenegini sectikten sonra istedigimiz sinavin alanini ve markasini seceriz. Bizim icin bu sol tarafta IT ve sag tarafta da Oracle secenegidir.



Bu islemi de gerceklestirince karsimiza asagidaki ekran gelir. Buradan da istegimize gore `non-proctered` veya `proctered` secenegini tiklariz. `non-proctered` olan gozlemlenmeyen olandir.


Secimimizi yaptigimizda da hesap bilgileri bizden istenir. Bu bilgileri girdikten sonra  asagidaki gibi 1Z0-051-ENU-ONLINE opsiyonunu secerekten sinav satin alinma yolunda ilerlenir.




















PL/SQL: Dynamic SQL - Dinamik SQL

Dinamik SQL Nedir?

Dinamik SQL'ler; içerlerindeki sütun dataları değişen, ya da farklı koşullar altında veriler çıkartan SQL'lerdir. Bunlar çalıştırıldığında sütun içerisindeki değişikliklere göre sonuçları yansıtmaktadır. 

Dinamik SQL ile DDL,DCL veya DML ifadeleri yazılabilir ve PL/SQL'den çalıştırılabilinirler. 

PL/SQL içerisinde izin verilen SQL ifadeleri  SELECT; INSERT, UPDATE, DELETE, MERGE, COMMIT ve ROLLBACK'tir. 

Programda içerisinde bulunmayan ve çalıştırılma zamanında oluşturulan SQL'lere dinamik SQL'ler deriz. Bunlar çalışma anında oluşturulduğu için PL/SQL değişkenleri kullanabilirler ve çalıştırabilirler. Dinamik SQL'lerin text'leri çalıştırılma anlarına kadar bilinmeyebilirler. O yüzden PL/SQL programının çalıştırılması beklenir. Yani programın derlenmesini değil çalıştırılmasını beklerler. 

Program içerisinde oluşturduğumuz dinamik SQL'leri "execute immediate" ile hemen çalıştırabiliriz. 

Dinamik SQL Örneği:

 CREATE OR REPLACE PROCEDURE create_table(  
  p_table_name VARCHAR2, p_col_specs VARCHAR2) IS  
 BEGIN  
  EXECUTE IMMEDIATE 'CREATE TABLE ' || p_table_name ||  
           ' (' || p_col_specs || ')';  
 END;  
 /  

Bu örnekte prosedürümüzle bir tablo yaratmaktayız. Prosedürün derlenmesi sırasında gerekli veriler belirli olmadığı için dinamik SQL kullanırız.

 BEGIN  
  create_table('EMPLOYEE_NAMES',  
    'id NUMBER(4) PRIMARY KEY, name VARCHAR2(40)');  
 END;  
 /  

Prosedür tanımlandıktan sonra da çalıştırdığımız içindeki veriler çalıştırılma anında kullanılır. Çalıştırılma anında o veriler ile istediğimiz SQL tanımlanır. Dinamik SQL'imizin içine tablo adını ve sütunlarla ilgili bilgileri göndeririz. SQL oluşturulunca da hemen "execute immediate" ifadesi ile çalıştırılır.


18 Şubat 2014 Salı

PL/SQL: Stored Functions - Fonksiyonlar

Stored Function dediğimiz nesneler aslında değer döndüren adlandırılmış PL/SQL fonksyionlarıdır. Fonksiyonlarla genelde bir değer hesaplanmaktadır.

Procedure ile Function  Arasındaki Farklar:
Procedure’lar PL/SQL ifadesi olarak çalıştırılırlar.
Function’lar bir ifadenin bir parçası olarak çalıştırılırlar.
Procedure’lar başlık kısımlarında bir return ifadesi taşımazlar.
Function’lar başluık kısımlarında mutlaka bir return ifadesi içermelidirler.
İstenirse output değerleri taşıyabilirler.
Sadece bir değer geri döndürebilirler.
İçerlerinde bir return ifadesi bulunsada bir değer döndürmek zorunda değildirler.
İçerisinde mutlaka return ifadesi bulunmalıdır.

Not:Procedure'larda bir out ifadesi bulunuyorsa bu procedure'ın fonksiyona çevrilerek yazılması Oracle tarafından tavsiye edilmektedir.

Fonksiyon Örneği:

 create or replace function deneme(x int)  
 return int as a int;  
 begin  
   
 a:=x+5;  
 return a;  
 end deneme;  
 /  

Bu fonksiyon örneğimizde tek değişken alan ve yine tek değişken döndüren bir program yazmış durumdayız.

declare   
 c int;  
 begin   
 c:=deneme(10);  
 dbms_output.put_line(c);  
 end;  

Bu fonksiyonumuzu sonra yukarıdaki gibi bir PL/SQL bloğu içerisinde çağırdığımızda, fonksiyonun geri döndürdüğü değeri bir değişkene atıp onu bastırırız. Sonuç olarak fonksiyonumuzun içerisine 10 sayısını gönderip, bu c değişkenine 15 değeri atanıp geri döndürülür.

PL/SQL'de Direkt Olarak Fonksiyonun Kullanılması:

 variable maas number;  
 execute :maas := deneme(100);  

Burada maas diye bir değişken tanımladıktan sonra deneme fonksiyonumuza bir değer gönderip bu fonksiyonumuzu çalıştırtabiliriz. Sonrasında çıkacak sonucu görmek için "Print maas" diyebiliriz.

Fonksiyonun Avantajları:

1-Fonksiyonlarla SQL ifadelerinin yapabileceği şeyler arttırılabilinir.
2-Data değerleri değiştirilebilinir.
3-Çok karışık işlemler halledilebilinir.

Fonksiyonun SQL İfadesinde Kullanılmasıyla İlgili Bir Örnek:

 CREATE OR REPLACE FUNCTION vergi(x NUMBER)  
  RETURN NUMBER IS  
 BEGIN  
   RETURN (x * 0.08);  
 END tax;  
 /  
 SELECT id,isim,maas, vergi(maas)  
 FROM  calisanlar  
 WHERE dep_no = 100; 

Burada calisanlar adlı tablomuzu sorgularken vergi hesaplaması yapmak için yukarıda yazdığımız fonksyionu kullanırız. Bu şekilde hem modülerliğimizi arttırmış oluruz, hem de kompleksliği azaltmış oluruz.

Fonksiyon Silmek İçin:

 drop function fonksiyon_ismi  



Oracle E-Business Suite: Belirli Bir Süreden Uzun Süren Concurrent'lar - Concurrents Lasting More Than X Minutes

Buradaki sorgumuzu çalıştırdığımızda bizden bir değer istenir. Bu değer ile belirli bir süreden uzun çalışan concurrentlar bulunur. 45 değerini girersek eğer 45 dakika ve üzerinde bir süre çalışan concurrent programları gösterilir.

 SELECT  
   fcr.request_id request_id,  
   TRUNC(((fcr.actual_completion_date-fcr.actual_start_date)/(1/24))*60) exec_time,  
   fcr.actual_start_date start_date,  
   fcp.concurrent_program_name conc_prog,  
   fcpt.user_concurrent_program_name user_conc_prog  
 FROM  
  fnd_concurrent_programs fcp,  
  fnd_concurrent_programs_tl fcpt,  
  fnd_concurrent_requests fcr  
 WHERE  
   TRUNC(((fcr.actual_completion_date-fcr.actual_start_date)/(1/24))*60) > NVL('&min',45)  
 and  
   fcr.concurrent_program_id = fcp.concurrent_program_id  
 and  
   fcr.program_application_id = fcp.application_id  
 and  
   fcr.concurrent_program_id = fcpt.concurrent_program_id  
 and  
   fcr.program_application_id = fcpt.application_id  
 and  
   fcpt.language = USERENV('Lang')  
 ORDER BY  
   TRUNC(((fcr.actual_completion_date-fcr.actual_start_date)/(1/24))*60) desc;  



PL/SQL: Parametre Modları - Parameter Modes

PL/SQL prosedürlerinde veya programlarında parametreler 3 tipte olabilirler. Bunlar

1-IN
2-OUT
3-IN OUT

IN: parametre tipi programımıza bir değer göndermektedir. Standart parametre modudur.. Parametre tipi herhangi bir ifade, değer veya sabit olabilir.

OUT: parametre tipi programımızdan bir değeri ortama geri döndürmektedir.  Özellikle belirtilmesi gerekir. Bir değişken olmalıdır.

IN OUT: parametre tipi programa bir değer gönderirken bu değerin değiştirilme ihtimali ve geri döndürülme ihtimali bulunur.  Özellikle belirtilmesi gerekir. Bir değişken tipinde olmalıdır.

Prosedürler çağırılırken içerisindeki değerler direk in tipi parametre olarak kabul edilirler. Eğer prosedürümüzün bir değer döndüreceğini belirtmek istiyorsak özellikle out veya in out diye belirtmemiz gerekir.

Standart bir PL/SQL blok örneği:

 create or replace procedure (id int,x number)  
 begin  
 ......  
 end;  
 / 

Yukarıdaki örneğimizde de görüldüğü gibi id ve x parametreleri direk olarak in tipi parametre modunda yaratılır. Özellikle belirtmemiz gerekmez.

Basit Örnek:

 create or replace procedure deneme( x int, y int)  
 is  
   
 begin  
 dbms_output.put_line(sysdate);  
 end;  
 /  
   
 execute deneme(5,10); 

Yukarıdaki örnekte parametrelerimizi verdikten sonra prosedürümüzün çalıştırılmasını gösterdik. Sonuçlarını Toad kullanıyorsak eğer DBMS OUTPUT tabından görebiliriz.


OUT Parametre Tipinin Kullanımına Örnek:

 create or replace procedure deneme( x int, y int,z out int)  
 is  
 begin  
 z:=x*y;  
 end;  
 /  

Yukarıdaki örneğimizde bir parametre tipimizin değerini out olarak belirlemiş durumdayız. Bu prosedürümüzde sadece verilen ilk 2 değeri çarpıp  z değişkenine eşitliyoruz. Sonrasında bu prosedürümüzü çalıştıran programımızı yazıyoruz.

 declare   
 a int;  
 begin  
 deneme(5,10,a);  
  dbms_output.put_line(a);  
  end;/

Bu programımızda ise yukarıda yazdğımız prosedür çağrılmaktadır. İlk 2 değer sabit olarak verilmiş olup, 3. değer değişken olarak verilmiştir. O değişkene ilk 2 değerin çarpımı atandıktan sonrada bu değer dbms_output.put_line ile yazdırılmıştır.

IN OUT Parametre Tipinin Kullanımına Örnek:

 create or replace procedure deneme( x int, y int,z in out int)  
 is  
 begin  
 z:=(x*y)+z;  
 end; 

Bu prosedürümüzde de z değişkenimizi in out olarak belirtmekteyiz. Bu şekilde prosedürümüzün içerisine belirli bir değer koyup bu değeri program içinde değiştirip geri alabiliriz.

 declare   
 a int ;  
 begin  
 a:=5;  
 deneme(5,10,a);  
  dbms_output.put_line(a);  
  end;/  

Bu programımızda da prosedürümüzün içine gönderdiği a değişkenin değeri 5 iken , program içerisinde bunu a=5*10+5 olarak görürüz."a"'nını değeri artık 55'tir. Bu şekilde de görmüş olduğumuzu üzere parametremizin değerini içeride değiştirip almış olduk.

SQL*Plus'ta Değişken Tanımlamak:

Yukarıdaki gibi eğer program yazmıyıp, sadece prosedürümüzü execute edip sonuçlarını görmek istersek aşağıdaki gibi değişken tanımlayabiliriz.

 create or replace procedure deneme( x out int)  
 is  
 begin  
 x:=5;  
   
 end;  
 /  

Prosedürümüzü yukarıdaki gibi tanımladıktan sonra değişkenimizi "VARIABLE" ifadesiyle tanımlayıp "PRINT" ifadesiyle sonucunu görebiliriz.

 variable a number  
  execute deneme(:a);  
  print a; 

Prosedürlerin İçerisindeki Değerleri Direkt Olarak Göndermek:

 create or replace procedure deneme( x int, y int)  
 is  
   
 begin  
 dbms_output.put_line(x*y);  
 end;  
 /  
   
 execute deneme(5,10); 

Yukarıdaki örneğimizi düşündüğümüzde "Execute deneme(5,10)"  dediğimizde, 5 sayısı x'e atanırken, y sayısına 10 değeri atanmaktadır. Eğer biz bunu değiştirmek istersek "execute deneme(y=>5,x=>10) şeklinde bir değer atama işlemi yapabiliriz.

Linux / Unix Komutu: Date - Date Komutu Nedir? - Date Komutu Nasıl Kullanılır?

Linux / Unix sistemlerde tarih bilgisini görmek için kullanılan komut "Date" komutudur. Date komutunu çalıştırdığımızda aşağıdaki gibi günün tarih bilgisini elde ederiz

 date  
 Tue Feb 18 09:59:03 MEST 2014  

Date komutu genelde tek başına kullanıldığı gibi yanına çeşitli formatlarda alabilir. Format olarak bahsettiğimiz birimlerde tarih komutunda bulunan çeşitli verilerdir. Yani tarih komutundan sadece ayı almak istiyorsak %m veya sadece günü almak istiyorsak sadece %d formatını alabiliriz.

 date +FORMAT  
 date +"%FORMAT" 
 date +"%FORMAT%FORMAT"  
 date +"%FORMAT-%FORMAT"  

Tarihi sadece ay gün yıl olmak görmek istersek:
>date +"%m-%d-%y"  
 02-18-14  

Sadece tarih görmek istersek:
>date +"%T"  
 10:10:22 

Tarihi bir değişkene aktarmak istersek:
 >NOW=$(date +"%m-%d-%Y")  
 >echo $NOW  
 02-18-2014 

Bütün formatların listesi:

%FORMAT StringDescription
%%a literal %
%alocale's abbreviated weekday name (e.g., Sun)
%Alocale's full weekday name (e.g., Sunday)
%blocale's abbreviated month name (e.g., Jan)
%Blocale's full month name (e.g., January)
%clocale's date and time (e.g., Thu Mar 3 23:05:25 2005)
%Ccentury; like %Y, except omit last two digits (e.g., 21)
%dday of month (e.g, 01)
%Ddate; same as %m/%d/%y
%eday of month, space padded; same as %_d
%Ffull date; same as %Y-%m-%d
%glast two digits of year of ISO week number (see %G)
%Gyear of ISO week number (see %V); normally useful only with %V
%hsame as %b
%Hhour (00..23)
%Ihour (01..12)
%jday of year (001..366)
%khour ( 0..23)
%lhour ( 1..12)
%mmonth (01..12)
%Mminute (00..59)
%na newline
%Nnanoseconds (000000000..999999999)
%plocale's equivalent of either AM or PM; blank if not known
%Plike %p, but lower case
%rlocale's 12-hour clock time (e.g., 11:11:04 PM)
%R24-hour hour and minute; same as %H:%M
%sseconds since 1970-01-01 00:00:00 UTC
%Ssecond (00..60)
%ta tab
%Ttime; same as %H:%M:%S
%uday of week (1..7); 1 is Monday
%Uweek number of year, with Sunday as first day of week (00..53)
%VISO week number, with Monday as first day of week (01..53)
%wday of week (0..6); 0 is Sunday
%Wweek number of year, with Monday as first day of week (00..53)
%xlocale's date representation (e.g., 12/31/99)
%Xlocale's time representation (e.g., 23:13:48)
%ylast two digits of year (00..99)
%Yyear
%z+hhmm numeric timezone (e.g., -0400)
%:z+hh:mm numeric timezone (e.g., -04:00)
%::z+hh:mm:ss numeric time zone (e.g., -04:00:00)
%:::znumeric time zone with : to necessary precision (e.g., -04, +05:30)
%Zalphabetic time zone abbreviation (e.g., EDT)



Referans:
http://unixhelp.ed.ac.uk/CGI/man-cgi?date


11 Şubat 2014 Salı

Oracle E-Business Suite: Error - Beyaz Ekran Hatası - Blank Login Page Screen - Unable To Access Login Page in Oracle Apps R12

Oracle E-Business Suite'de giriş yapıldığında beyaz ekran gözüküpde de ekranda hiçbir şey yüklenmezse yapabileceğimiz ilk işlerden biri cache dosyalarını temizlemek olacaktır. Bunun için ilk önce:

1- Uygulama kapatılır.

2- Jsp dosyaları elle derlenir.
 perl $FND_TOP/patch/115/bin/ojspCompile.pl –compile –flush -p 2 

3- Jsp dosyalari derlendikten sonra uygulama tekrar çalıştırılır.

4- Tarayıcının cache'i de temizlenir. Bunu yapmak için ctrl+f5 yapmamız yeterlidir.


Alternatif Yöntem:

Bununla ilgili başka bir çözümde bazı parametrelerin değiştirilmesi önerilmektedir.

1- Uygulamayı kapatırız. Ertesinde parametre olarak "s_jsp_main_mode"'dir. Parametre dosyamızda  $CONTEXT_FILE değişikliklerini yaparız.

Eski hali:

justrun

Yeni hali:

recompile
2- Sonrada autoconfig çalıştırılır. Autoconfig çalıştırdıktan sonra da mutlaka afterconfig.sh çalıştırırız.

3- Uygulama bunun ertesinde uygulama tekrar açılır.


Referanslar:
Oracle E-Business Suite R12 - Login Page showing a blank page Occuring Intermittently (Doc ID 1491845.1)
http://oraclepitstop.wordpress.com/2008/09/12/blank-appslogin-appslocallogin-page-in-r12/
http://appsdbatechstuff.blogspot.com.tr/2010/10/getting-blank-page-when-accessing.html
http://oracleappstechnology.blogspot.com.tr/2009/02/appslocalloginjsp-page-takes-forever-to.html
https://community.oracle.com/thread/2262815?tstart=0

4 Şubat 2014 Salı

Oracle Veritabanı: Initialization Parameters - Başlangıç Parametreleri - Pfile - Spfile

Oracle instance'ı başladığında ilk önce initialization parametreleri ve parametre dosyası okunur. Bu dosyada en azından DB_NAME ifadesi bulunmalıdır. Diğer bütün parametrelerin kendi default standart değerleri bulunmaktadır.

Parametre dosyası bir text dosyası olabilir, pfile olabilir ya da spfile dosyası olabilir. Spfile dosyası bir binary dosyadır. Text dosyası şeklinde editlenemez. Veritabanının okuyacağı bir dosyadır. Kendimiz yaratabileceğimiz gibi DBCA aracı ile de yaratabiliriz. Yarattıktan sonra da buradaki parametreleri "alter system"  komutlarıyla düzeltebiliriz.

Oracle instance'ı başladığında ilk aranan şey binary parametre dosyasıdır. Bu binary parametre dosyasını bulamazsa, düzenlenebilir text dosyasını arar. Aradığı lokasyon ise $ORACLE_HOME/dbs altındadır. Pfile, yani text dosyasının ismi init$ORACLE_SID.ora şeklinde olur. Aynı şekilde spfile dosyasının adı da spfile$ORACLE_SID.ora'dır.

Veritabanındaki Belli Başlı Parametreler:

DB_NAME:

DB_NAME parametresinin büyüklüğü en fazla 8 karakter olabilir. Veritabanı yaratılırken bu isim data file'larına, redolog dosyalarına, control file'lara yazılır.

DB_DOMAIN:

DB_DOMAIN değeri network domain'ini belirtir.

FRA(Fast Recovery Area)'nın Belirlenmesi:

FRA Oracle veritabanının backup'la ilgili dosyaları tutup sakladığı yerdir. Veritabanıyla ilgili dosyaların tutulduğu yerden farklıdır. Veritabanıyla ilgili dosyalar derken data file, control file ve online redo log dosyalarından bahsetmekteyiz. Oracle FRA alanının kullanılmasını tavsiye eder. Fast Recovery Area ile ilgili parametreler.:

1-DB_RECOVERY_FILE_DEST:  

FRA'nın yerinin belirlenmesi için bir parametre bulunmaktadır. Bu parametre bir klasörü gösteriyor olabilir, bir dosya sistemini işaret ediyor olabilir ya da ASM'de bir klasör olabilir.

2-DB_RECOVERY_FILE_DEST_SIZE:

FRA için korunacak toplam bytes cinsinden alanı gösterir.  DB_RECOVERY_FILE_DEST parametresinden önce set edilmelidir. Çünkü DB_RECOVERY_FILE_DEST'de yeterince yer olmayabilir. Buna göre yeterli alan olup olmadığı kontrol edilir.

Control Files'ların Belirlenmesi:

Control files parametresi veritabanının kullanacağı parametreleri göstermektedir. Oracle en az 2 tane control file kullanılmasını ve bunların ayrı yerlerde depolanmasını tavsiye etmektedir.

DB_BLOCK_SIZE:

DB_BLOCK_SIZE olarak en genel kullanılan block büyüklüğü kullanılmalıdır. Genelde 8k kullanılmaktadır. Block size'ın önemi, block'lar ne kadar büyük olursa tek block'ta o kadar fazla veri tutulabilinir. Bu da tek seferde daha fazla verinin okunmasına, disk ve memory I/O'sundan tasarruf edilmesini sağlar.

Block Size'ı farklı olan tablespace'ler yaratılabilse de bunlar için SGA'de daha küçük boyutlu block cache'leri yaratılması gerekir.

PROCESSES:

Processes parametresi işletim sisteminden bağlanabililinecek process sayısını ifade eder. Bunun için minimum değer herbir Oracle Veritabanı background process'i için en az bir tane ve user process'leri için de bir tane ayrılması gerekir.

DDL_LOCK_TIMEOUT:

DDL(Data Definition Language) ifadeleri veritabanında belirli yapılar üzerinde işlem yapılmasını engellemektedir. Bu yüzden yapıların üzerine lock koymaktadır. Eğer bu lock'ı koyamazsa DDL ifadesi fail eder. DDL ifadelerinin bu tür durumlara karşı korunması için DDL_LOCK_TIMEOUT parametresi set edilebilinir. Bu parametrede DDL ifadesinin bu lock'ları elde edenee kadar ne kadar bekleyeceğini gösterir.

Undo Space Yönetimi

1-UNDO_MANAGEMENT:

Undo_management ile sistemin automatic_undo_management kullanarak mı başlayacağını belirtmektedir. Undo tablespace'inde undo datalarıyla ilgili bilgiler bulunur. Çoğunlukla commit edilmemiş bilgiler yer alır. Bu parametre auto'ya çekilerekten sistem automatic undo management açılır.

2-UNDO_TABLESPACE:

Bir instance automatic_undo_management ile açıldığında otomatik olarak undo tablespace arayacaktır. Undo  data'ları bir yerde tutması gerektiği için undo tablespace veritabanı yaratılırken default olarak üretilen undo tablespace'idir. Bunun dışında ayrı bir yerde undo tablespace yaratmak için önemli bir parametredir.  

COMPATIBLE: 

Compatible parametresi ile veritabanının uygunluk seviyesi belirlenir. Eğer veritabanının versiyonu 11.2'yken 10.0.0 olarak belirlenirse 11.2 ile gelen yeni özellikler devredışı bırakılırlar. Veritabanının uygunluk parametresi yükseltilebilinirken daha düşük seviyeye çekilemez.

Parametrelerin SPFILE ile Saklanması:

Oracle veritabanı için parametreler genellikle text dosyalarında tutulmaktadır ancak parametreleri daha düzenli olarak tutmak istersek binary dosyalarda tutabiliriz. Burada parametreler veritabanının başlamasında ve kapanmasında sabi kalırken; text dosyasında yapılan değişiklikler instance bazındadır.

SPFILE Yaratılması:

Spfile yaratmak için var olan pfile dosyası yani text dosyamız kullanılır. Bunun için sysdba yetkisi gerekmektedir. Spfile'ı yaratmak için instance'ın açık veya kapalı olmasına gerek yoktur. Başta pfile ile açıldıysa instance, spfile yaratılıp restart edildikten sonra, veritabanı spfile dosyasını tekrar bulur.

create spfile from pfile;  

Parametre Değerlerinin Değiştirilmesi:

"Alter System" ifadesiyle parametreler değiştirilebilinir. Eğer text dosyasını parametre dosyası olarak kullanıyorsak "alter system" ifadesi parametrelerin sadece instance bazında değiştirilmesini sağlar; çünkü sistemden verilen komutun text dosyasını değiştirmesi gbi bir süreç yoktur. Bu yüzden eğer text dosyası kullanılıyorsa parametreler manuel olarak instance kapandığında değiştirilmelidir.

2 çeşit parametre sistemde bulunmaktadır. Dinamik parametreler, instance açıkken değiştirilebilinirler.
Statik parametreler ise değiştirildiklerinde hemen etki etmezler. Bunların etki etmesi için instance restart'ı gereklidir.

Parametreler değiştirilirken "alter system" ile birlikte "set" ifadesi kullanılır. "Scope" ile birlikte değişikliğin nerelerde etkili olacağını belirtebiliriz.

Scope=SPFILE; ile parametrenin değişikliğinin sadece spfile'a uygulanması sağlanır. Şu anki instance'a etkisi olmaz. Tekrar startup edildiğinde değişiklik etkisini gösterir. Statik parametrelerin değişikliğinde kullanılabilinir.

Scope=MEMORY'de değişiklik sadece  instance için geçerli olur. Anında etkisini görebiliriz. Statik parametrelerin değişikliğinde kullanılamaz.

Scope=BOTH'da değişiklik hem MEMORY'e yani anında instance için geçerli olacak şekilde değiştirilir. Hem de spfile'a yazılır. Statik parametrelerin değişikliğinde kullanılamaz.

Veritabanındaki Parametrelerin Hangilerinin Dinamik Hangilerinin Statik Olduğunun Bulunması:

Veritabanındaki parametreleri değiştirirken hangilerinin değişikliğinin hemen olabileceğini görmek için aşağıdaki tabloyu inceleyebiliriz.

 select NAME, ISSES_MODIFIABLE, ISSYS_MODIFIABLE from v$parameter where name like '%%';

Bu tabloya göre hangi parametrenin statik hangi parametrenin dinamik olduğunu bulabilir, sonrasında yaptığımız değişikliğin instance bazında mı yoksa session bazında mı olup olmadığını görebiliriz. Eğer bu yukarıdaki tabloda ISSES_MODIFIABLE kolonu belirtilen parametre için "True" ise o parametre hemen değiştirilebilinir.

SPFILE'dan PFILE Yaratılması:

"Create PFILE"  ile spfile dosyasında pfile yaratılabilinir. Spfile'da binary olarak depolanmaktan olan parametreleri raporlarmak için böyle bir işlemi gerçekleştirebiliriz. Bununla birlikte eğer spfile bir değişiklik yapmak istiyorsak spfile'dan pfile yaratıp tekrar spfile yaratabiliriz. Pfile yaratmak için de ayrıca sysdba yetkisine sahip olmamız gerekir.

Pfile'ın üretilmesi için alternatif bir yolda aşağıdaki ifadedir.

 CREATE PFILE FROM MEMORY;  

Aynı işlem spfile'ın yaratılması için de geçerlidir.

CREATE SPFILE FROM MEMEORY

SPFILE'ın Kaybolması Durumunda Ne Yapılabilinir?

1-Eğer instance açıksa spfile memory'den çıkartılabilinir.

CREATE SPFILE FROM MEMEORY

2-Aynı şekilde pfile'dan yaratılabilinir.

create spfile from pfile;

3-Backup'tan dönülebilinir. Her veritabanı backup'ında spfile'da backup'lanır.

4- Eğer yukarıdaki hiçbir yöntem gerçekleştirilemezse alert log'da bulunan dosyalardan yola çıkarak pfile yaratılabilinir ve sonrasında spfile yaratılabilinir.

SPFILE veya PFILE ile Veritabanının Başlatılması:

Pfile ile

startup pfile='/home/users/oracle/initabc.ora';  

Spfile ile

startup spfile='/home/users/oracle/spfile.ora';