Arşiv

Posts Tagged ‘program’

pl/sql de sessions kontrolü


Merhaba
sessionsPl/Sql ile program geliştirdiğmiz her bir program bir session(oturum) üzerinde çalışır. Bazen program yeni bir session üzerinde işlemine devam eder bazen de bulunduğu session üzerinde lock sebebi ile beklemeye başlar. Yağtığımız işlemlerde ihtiyaç olması durumunda session üzerindeki bazı alanlara veri ataması da(bu işlemi ayrı bir makale olarak anlatacağıım) yapabiliriz. Bu gibi durumlarda işlem yatığımız session üzerinde bizim programın durumu nedir, lock var mı, atadığımız değerler nedir gibi sorular olacaktır. İşte bu sebeple pl/sql de var olan sessions bilgilerinin bulunduğu view ile hazırlanan bir sql yardımı sayesinde işlemlerimizi kontrol edebiliriz. v$session ve gv$session bu viewler session bilgierini barındırır.
v$session database üzerinde login olduğumuz partition içindeki session bilgierini bize verir. Fakat çalıştığımız database rac bir yapıda ise diğer partition üzerindeki session bilgilerine v$session ile ulaşamayız. Bu durumda ise gv$session view ini kullanarak rac sistemdeki tüm partitionların session bilgierini görebiliriz. Artık hangi ortamda nasıl bir session view ini kullanacağımızı öğrendiğimize göre hazırladığım pratik sql yardımı ile istediğimiz kontrolümüzü yapabiliriz. Aşağıdaki sqllerini ihtiyaç doğrultusunda istediğiniz gibi değiştirebilirsiniz.

[Login olunan partitiondaki sessions bilgileri]

select vs.sid, vs.osuser, vs.machine, vs.terminal, vs.program, vs.module,
       vs.action, vs.client_info, vs.lockwait, vs.final_blocking_session,
       'alter system kill session ' || '''' ||
       vs.sid || ',' || vs.serial# || ''';' session_kill
  from v$session vs
 where vs.username = 'SMT';

[Rac olan sistemlerdeki tüm partitionların sessions bilgileri]

select gvs.sid, gvs.osuser, gvs.machine, gvs.terminal, gvs.program, gvs.module,
       gvs.action, gvs.client_info, gvs.lockwait, gvs.final_blocking_session,
       'alter system kill session ' || '''' ||
       gvs.sid || ',' || gvs.serial# || ''';' session_kill
  from gv$session gvs
 where gvs.username = 'SMT';

Bu sqllerde ençok işimize yarayacak noktalardan birkaçı;

  • SID: Her bir sessionun uniqe olarak sahip olduğu session id bilgisidir.
  • MODULE: Bu alanlar sistem tarafından doldurulur.Fakat bizde bu alanlara veri atayıp kullanabiliriz.
  • ACTION: Bu alanlar sistem tarafından doldurulur.Fakat bizde bu alanlara veri atayıp kullanabiliriz.
  • CLIENT_INFO: İlgili session bilgisinin hangi client tarafından oluşturulduğu bilgisidir.
  • LOCKWAIT: İşlem yapılan session üzerinde lock var ise hangi lock bilgisini beklediğini gösterir
  • FINAL_BLOCKING_SESSION: İşlem yapılan session üzerinde oluşan lock kim tarafından oluşturulduğunu sid olarak bize verir.
  • SESSION_KILL:Bu satır sqllerde görüldüğü üzere ihtiyaç anında ilgili sessionu kill etmek için ihtiyacımız olan komut bilgisini barındırır.

Yukarıdaki sqller yardımı ile herhangi bir editör üzerinden session bilgisine bakmaya gerek olmadan istediğiniz değeri sql sonucundan görebilirsiniz.
Kolay gelsin.

selected two variables that control whether the program from a fixed start and end


Hi;
This is my first English post.Sometimes we need a program for check the anything.Someday such a program was needed and I and my friend wrote this program.This program is checking the numbers between two numbers.If the number is between the start and end points of the two variables is terminating the process.If two values are given, but processing continues in the start and end values.
The syntax of program below.I hope it will be useful.

DECLARE
  begin_number     NUMBER := 8; --first number for time line
  end_number       NUMBER := 20; --last number for time line
  variable_number1 NUMBER := 22; --first variable for time line
  variable_number2 NUMBER := 5; --last variable for time line
  break            NUMBER := 0; -- value:1 break,value:0 continue
BEGIN
  --/*Condition 1*/
  IF variable_number1 < begin_number AND variable_number2 < end_number THEN
    IF variable_number1 < begin_number AND variable_number2 > begin_number THEN
      break := 1;
    END IF;
  END IF;

  --/*Condition 2*/
  IF variable_number1 < begin_number AND variable_number2 > end_number THEN
    break := 1;
  END IF;

  --/*Condition 3*/
  IF variable_number1 > begin_number AND variable_number2 > end_number THEN
    IF variable_number1 < end_number AND variable_number2 > end_number THEN
      break := 1;
    END IF;
  END IF;

  --/*Condition 4*/
  IF variable_number1 > begin_number AND variable_number2 < end_number THEN
    IF variable_number1 > end_number AND variable_number2 < begin_number THEN
      break := 0;
    ELSE
      IF variable_number1 = end_number AND variable_number2 < begin_number THEN
        break := 0;
      ELSE
        IF variable_number1 = end_number AND variable_number2 = begin_number THEN
          break := 0;
        ELSE
          IF variable_number1 > end_number AND variable_number2 = begin_number THEN
            break := 0;
          ELSE
            break := 1;
          END IF;
        END IF;
      END IF;
    END IF;
  END IF;

  --/*Condition 5*/
  IF variable_number1 = begin_number AND variable_number2 = end_number THEN
    break := 1;
  END IF;

  --/*Condition 6*/
  IF variable_number1 > begin_number AND variable_number2 = end_number THEN
    break := 1;
  END IF;

  --/*Condition 7*/
  IF variable_number1 = begin_number AND variable_number2 < end_number THEN
    break := 1;
  END IF;

  --/*Condition 8*/
  IF variable_number1 < begin_number AND variable_number2 = end_number THEN
    break := 1;
  END IF;

  --/*Condition 9*/
  IF variable_number1 = begin_number AND variable_number2 > end_number THEN
    break := 1;
  END IF;

  IF nvl(break, 0) = 1 THEN
    dbms_output.put_line('Result=' || break || ' Break the program.');
  ELSE
    dbms_output.put_line('Result=' || break || ' Continue the program.');
  END IF;

END;

Note:Please let me know if you have an error in my article.