Oracle OSWatcher Aracı

OSWatcher aracı belirli aralıklarla top, iostat,vmstat, netstat gibi komutlar ile üretilen verilerin analiz edilip saklanılıp raporlanması için geliştirilmiş bir araçtır.İçinde barındırdığı OSWg aracı ile analiz edilen verileri grafik olarak sunar.

OSWatcher aracı Oracle tarafından geliştirilmiştir ve metalink üzerinden (support.oracle.com) ücretsiz indirip kullanabilirsiniz. Metalink üzerinden (https://support.oracle.com) “OS Watcher Black Box User Guide [ID 301137.1]” isimli dokümanda bulunan oswbb733.tar isimli dosyayı indirelim.

1.Bu dosyayı WinSCP tarzı bir program ile Linux sunucumuza “oracle” kullanıcısı ile kopyalayalım.

2.tar dosyasını “oracle” kullanıcısı ile açalım.

[oracle@test-rac1 oswatcher]$ tar xvf /home/oracle/oswatcher/oswbb733.tar
oswbb/
oswbb/docs/
oswbb/docs/The_Analyzer/
oswbb/docs/The_Analyzer/OSWatcherAnalyzerOverview.pdf
oswbb/docs/The_Analyzer/oswbbaUserGuide.pdf
oswbb/docs/The_Analyzer/oswbba_README.txt
oswbb/docs/OSWatcher/
oswbb/docs/OSWatcher/oswbb_README.txt
oswbb/docs/OSWatcher/OSWatcherUserGuide.pdf
oswbb/Exampleprivate.net
oswbb/nfssub.sh
oswbb/stopOSWbb.sh
oswbb/call_du.sh
oswbb/iosub.sh
oswbb/OSWatcherFM.sh
oswbb/ifconfigsub.sh
oswbb/ltop.sh
oswbb/mpsub.sh
owbb/call_uptime.sh
oswbb/psmemsub.sh
oswbb/tar_up_partial_archive.sh
oswbb/oswnet.sh
oswbb/vmsub.sh
oswbb/call_sar.sh
oswbb/oswib.sh
oswbb/startOSWbb.sh
oswbb/Example_extras.txt
oswbb/oswsub.sh
oswbb/oswbba.jar
oswbb/OSWatcher.sh
oswbb/tarupfiles.sh
oswbb/xtop.sh
oswbb/src/
oswbb/src/Thumbs.db
oswbb/src/OSW_profile.htm
oswbb/src/tombody.gif
oswbb/src/missing_graphic.gif
oswbb/src/coe_logo.gif
oswbb/src/watch.gif
oswbb/src/oswbba_input.txt
oswbb/oswrds.sh
[oracle@test-rac1 oswatcher]$

NOT : OSWatcher ksh kabuğunda(shell) yazıldığı için sistemimizde ksh olması gerekmektedir. ksh olup olmadıgını anlamak için aşagıdaki komutdan yararlanabiliriz.

[root@test-rac1 ~]# rpm -qa | grep ksh
ksh-20100621-19.el6.x86_64

(devamı..)

1,170 total views, no views today


PL/SQL Transactions

Bir transaction; birden çok SQL sorgularının çalıştırıldığı ama Oracle’ın, bu sorguların tamamını bir ünite(set) olarak algıladığı mantıksal sorgu bloğudur. Bu blok rollback ya da commit ile parçalanabilir veya sonlandırılabilir. Yani begin yada herhangi bir SQL cümlesi ile başladığımız ve COMMIT, ROLLBACK veya işlemleri sonlandıracak bir söz deyimi ile karşılaşmamız arasında yapılan tüm aksiyonlardır. Transaction işlemi başlar ve bitirilir. Transaction’nın başlaması için;

  • Veri tabanına bağlanıp ilk SQL cümlesinin çalışması
  • Her transaction bitiminden sonra sonra yeni bir SQL’in çalışması ile

Bir transaction’ın  bitmesi için aşağıdaki işlemlerden birinin olması yeterlidir.

  • COMMIT veya ROLLBACK işlemlerinden birinin yapılması
  • DDL işlemlerinden birinin(CREATE ,DROP,ALTER ve RENAME) yapılıyor olması. Bunun nedeni ise hatırlayacağınız gibi DDL işlemleri AUTO COMMIT ‘dir. Yani sizin commit etmenize gerek yoktur direk commitler.
  • DCL işlemlerininden birinin yapılması GRANT,REVOKE gibi. Bunun nedeni de yine AUTO COMMIT olmasıdır.
  • Kullanıcının veri tabanından bağlantısının kesilmesi.

COMMIT :  Çalışmasını dışardan vereceğimiz komut ile tetiklebilmek için 2 farklı komut çalıştırabiliriz. Bunlar COMMIT ve COMMIT WORK’tür. Commit transaction’ı sonlandırarak tüm yapılan değişikliklerin kalıcı olmasını sağlamaktadır. Bu sayede yapılan tüm değişiklikler tüm sessionlar tarafından görünür olabilecektir.Örneşin aşağıdaki işlem bir transactiondır ve işlemin sonunda herhangi bir problem olmadığında  COMMIT işlemi ile transactionımız son bulur.

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );
COMMIT;

(devamı..)

1,892 total views, no views today


PL/SQL Collections

Collection koleksiyon veya bir topluluk olarak çevrilebilir. Collection’lar içerlerinde aynı tip bir yada birden çok data bulundururlar. PL/SQL ‘de üç tip collectiondan söz edebiliriz.

  • Index-by tables or Associative array
  • Nested Table
  • Variable-size array or Varray

Associative Array

Associative Array’ler PL/SQL ‘de dinamik array yapılarıdır. Programlama dillerinden hatırladığımız üzere arraylerin başlangıçta initiliaze edilme ve eleman sayısının belirlenme durumu söz konusudur. Associative array’lerde böyle zorunluluklar söz konusu değildir. Array’i doğrudan içine tutacağı eleman sayısını belirlemeden ve initiliaze etmeden  yaratıp istediğimiz indisine eleman ekleyebilme olanağına sahibiz. Bunun yanı sıra klasik array mantığımızda var olan indis’in yalnızca sayısal değer olabilme kısıtı Associative Array yapısında yoktur. Bu durumu açıcak olursak, array’in içerisinde hareket etmemizi sağlan indis string veya integer olabilmekte. İndis tipini “index by” söz deyimi ile tanımlayabilmekteyiz

PL/SQL’de collection yaratabilmemiz için öncelikle TYPE söz deyimi ile bir tip tanımlayı daha sonra bu tip üzerinden bir değişken tanımlamamız gerekmektedir.

Yaratmak istediğimiz tipin array olacağını ise “is table of”  söz deyimi ile gerçekleştirmekteyiz.

DECLARE
   TYPE salary IS TABLE OF NUMBER INDEX BY VARCHAR2(20);
   salary_list salary;
   name   VARCHAR2(20);
BEGIN
   -- adding elements to the table
   salary_list('Rajnish')  := 62000;
   salary_list('Minakshi')  := 75000;
   salary_list('Martin') := 100000;
   salary_list('James') := 78000;

   -- printing the table
   name := salary_list.FIRST;
   WHILE name IS NOT null LOOP
      dbms_output.put_line
      ('Salary of ' || name || ' is ' || TO_CHAR(salary_list(name)));
      name := salary_list.NEXT(name);
   END LOOP;
END;
/
DECLARE
   CURSOR c_customers is select  name from customers;

   TYPE c_list IS TABLE of customers.name%type INDEX BY binary_integer;
   name_list c_list;

   counter integer :=0;
BEGIN
   FOR n IN c_customers LOOP
      counter := counter +1;
      name_list(counter)  := n.name;
      dbms_output.put_line('Customer('||counter|| '):'||name_list(counter));
  END LOOP;
END;
/

(devamı..)

857 total views, no views today


PL/SQL PACKAGES

Package olarak bahsettiğimiz yapılar çeşitli PL\SQL tiplerinin, fonksiyonların, procedure’leriin ve alt programcıkların toplandığı object’lerdir. Peki neden package ihtiyaç duyarız mesela küçük sistemlerde oluşturduğunuz procedure ve function yapılarının kontrolü çok büyük bir problem çıkarmayacaktır fakat büyük sistemlerde belki yüzlerce,binlerce function ,procedure ,varray ,record vs bulunabilir, bu tür büyük sistemlerde kodları mantıksal olarak bir araya toplamak ve kolay erişimi sağlamak amacı ile paketler kullanılır. Örnek vermek gerekirse bir bankada core finans için bir package, CRM için bir package, emeklilik sistemi için bir package gibi düşünebiliriz. Bu bilgilerden yola çıkarak package’ın avantajları olarak aşağıdakileri düşünebiliriz;

  • Kullanım kolaylığını sağlar.
  • Uygulama dizaynını kolaylaştırır.
  • Modülerliği sağlar.
  • Performansı artırır.

Paket yapılarının zorunlu olan iki alanı vardır.

  1. Specification
  2. Body

Specification : Package’in interface(arayüz)’i olarak düşünebilirsiniz. Paket içerisinde bulunan fonksiyon ve prosedürlerin içerik bilgisi haricinde sadece tipi ve aldığı parametreleri gördüğümüz kısımdır. Paket oluştururken ilk önce Spec kısmı oluşturulur.

CREATE PACKAGE cust_sal AS
   PROCEDURE find_sal(v_id hr.employees.employee_id%type);
END cust_sal;
/

Body : Paketin gövdesidir. Tüm tanımlamalar, fonksiyonlar ,prosedürler bu kısımda yazılır. Spec içerisinde tanımlanan yapıların içerikleri burada bulunur. Spec kısmı oluşturulan paketin body içeriğini aşağıdaki gibi oluştururuz.

CREATE OR REPLACE PACKAGE BODY cust_sal AS
   PROCEDURE find_sal(v_id hr.employees.employee_id%TYPE) IS
   v_sal hr.employees.salary%TYPE;
   BEGIN
      SELECT salary INTO v_sal FROM hr.employees WHERE id = v_id;
      dbms_output.put_line('Salary : '|| v_sal);
   END find_sal;
END v_sal;
/

(devamı..)

979 total views, no views today


PL/SQL TRIGGERS

Trigger’ın türkçe karşılığı tetikleyici’dir. PL/SQL’de yazılıp saklanan yapılardır. Triggerlar yazılır ve yazılma aşamasında belirtilen koşullarda otomatik olarak çalışır. Örnek olarak tabloya bir kayıt eklediğimizde otomatik olarak kayıt tarihi olarak sistem tarihinin atması ya da tabloda bir güncelleme veya silme yaptığımızda ilgili kayıt için başka bir tabloya log kaydı atması gibi çeşitli sebepler ve kontroller için triggerlara ihtiaç duyarız.

Triggerlar aslında bir prosedürdür fakat prosedürlerden farkı Oracle tarafından çağrılmasıdır. Prosedürler bir trigger ,bir uygulama ya da kullanıcı tarafından çağrılan yapılardır. Yani trigger’lar SQL ve PL\SQL ifadelerini içerebilirler ve diğer PL\SQL birimlerini çağırabilirler, veritabanında saklanırlar, belirli durumlarda çağırılırlar.

Trigger’lar veritabanında tablolardan farklı bir yerde tutulurlar. Ayrıca triggerlar  sadece tablolar üzerinde tanımlanabilirler ve tanımlandıktan sonra tabloya eklenecek veriler ile ilgilenir öncesi için bir kontrol yapmaz. View’lar üzerine tanımlanamasalarda, view’ların üzerinde bir değişiklik yapılmaya çalışıldığında view’ın üzerine tanımlandığı tablolarda kaydedilmiş trigger’lar çalıştırılır.

Trigger’ın Tetiklendiği Durum Tipleri ;

  • Herhangi bir DML ifadesi : INSERT, UPDATE, DELETE
  • Herhangi bir DDLifadesi: CREATE, ALTER, DROP
  • Herhagi bir veritabanı işleminde: Örnek olarak Logon, Logoff, Startup, Shutdown işleminde.

Trigger’in Faydaları ;

  • Sütunlar için otomatik olarak değerler üretmesi
  • Güvenlik katmanı oluşturmak için
  • Loglama
  • Yapılan işlemlerle ilgili kayıt oluşturmak için
  • Tablolar arasında eşleme ve eşitleme yapmak için
  • Tablo erişimiyle ilgili bilgiler toplamak için
  • Uygun olmayan transaction’ları engellemek için

(devamı..)

1,871 total views, no views today


PL/SQL EXCEPTIONS

Exception kelimesinin Türkçe karşılığı istisna demektir ve PL/SQL ‘de hataları yakalamak için kullanılan yapıya bu ad verilir. Exception blokları sayesinde kod içerisinde karşılaşılması öngörülen hatalar yakalanıp gerekli işlemler yapılabilir.

Eğer programımızda hata kontrolü yoksa programın çalışması durur ve programın kontrolü işletim sistemine döner. Hata kontrolü varsa da program hatalara rağmen devam edebilir.

Exception iki türlü tanımlanabilir :

  1. Sistem Tanımlı Exceptionlar(System Defined Exceptions)
  2. Kullanıcı Tanımlı Exceptionlar(User Defined Exceptions)

Kullanıcı Tanımlı Exceptionlar(User Defined Exceptions)

Bir uygulama yazıyorsunuz ve bu uygulamaya özel bazı hatalarınız oluşuyor ve bunları yakalamak ,ekrana bilgi vermek ya da loglamak istiyorsunuz. Bu gibi durumlarda PL/SQL sadece sistem tanımlı olan exceptionları değil kendi tanımladığınız hatalarınızı da yakalama şansı veriyor.

PL/SQL de hata tanımlaması yaparken aşağıdaki sintaksisi kullanıyoruz ;

DECLARE
   my-exception EXCEPTION;

Aşagıdaki örnekte bir exception tanımlıyoruz id’yi sıfır’ın altında girersek ex_invalid_id  exceptionu çalışacak.Başka bir hata durumunda ise tanımlı gelen exceptionlardan birisi çalışacak.

NOT :  Exception’ı hata olarak yakalaması için RAISE ifadesini kullandık. Raise’in karşılığı ‘uyandırmak’ olarak düşünülebilir ve burada ‘git ve oluşturduğum hatayı uyandır cevabını versin’ diyorsunuz

DECLARE
   v_id hr.employees.employee_id%type := &cc_id;
   v_name  hr.employees.first_name%type;
   v_surn hr.employees.last_name%type;

   -- exception tanimlariz
   ex_invalid_id  EXCEPTION;
BEGIN
   --exception sartini belirtiriz
   IF v_id <= 0 THEN
      RAISE ex_invalid_id;
   ELSE
      SELECT  first_name, last_name INTO  v_name, v_surn
      FROM hr.employees
      WHERE employee_id = v_id;

      DBMS_OUTPUT.PUT_LINE ('Name: '||  v_name);
      DBMS_OUTPUT.PUT_LINE ('Surname: ' || v_surn);
   END IF;
EXCEPTION
   --tanimladigimiz exception ise
   WHEN ex_invalid_id THEN
      dbms_output.put_line('ID must be greater than zero!');
   WHEN no_data_found THEN
      dbms_output.put_line('No such customer!');
   WHEN others THEN
      dbms_output.put_line('Error!');
END;
/

(devamı..)

963 total views, no views today


  • Sertifikasyon



  • Etiketler

  • Topluluklar

                     
                     
  • Live Traffic Feed

    Feedjit Widget
  • Copyright © 1996-2010 Mustafa Bektaş Tepe. All rights reserved.
    Türkçeleştirme Blogizma | AltyapıWordPress
    Takip Et

    Her yeni yazı için posta kutunuza gönderim alın.

    Diğer takipçilere katılın: