23 Mayıs 2011 Pazartesi

Oracle için database trigger

Trigger 'ların database seviyesinde kullanımı da mümkündür.
Aşağıdaki trigger; database içerisindeki 'SCHEMA_ADI'.'TABLO_ADI'
üzerinde her "alter" işlemi yapan DDL statement 'i çalıştığında tetiklenecek
ve hata görüntüleyerek yapılmaya çalışılan alter işlemini iptal edecektir.

CREATE OR REPLACE TRIGGER SYS.BENIM_TRIGGER
BEFORE ALTER
ON DATABASE
DECLARE
tmpVar NUMBER;
BEGIN
IF ora_dict_obj_owner = 'SCHEMA_ADI' and ora_dict_obj_name='TABLO_ADI' THEN
raise_application_error(-20100,ora_dict_obj_name||' uzerinde Alter operasyonu yasak.');
END IF;
END ;

Burada kullanılan trigger attribute 'ları ile ilgili açıklama aşağıdaki gibidir.

ora_dict_obj_owner : DDL hedefindeki object hangi user' a ait?
ora_dict_obj_name : DDL hedefindeki object ismi ne?

Daha fazla bilgi için aşağıdaki bağlantıyı ziyaret edebilirsiniz.

http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/triggers.htm#CHDCFDJG

4 Mayıs 2011 Çarşamba

Oracle parametre dosyası hakkında

Parametre dosyası, Oracle başlangıç parametrelerini set eden dosyadır.
Parametre dosyası olmadan database başlatılamaz.

Database oluşturulduğunda, database oluşturma işleminin bir parçası olarak,
otomatik olarak oluşturulurlar. Genellikle çok az sayıda parametre değişikliği gerekli olur.
Verilen ilk değerler (default değerler) çoğu parametre için yeterlidir.
Değişikliğe gerek olmaz.

Parametre dosyası iki türlü olabilir. SPFILE ve PFILE.
Default olarak gelen ve tavsiye edilen parametre dosyası türü SPFILE 'dir.

PFILE
---------------------------
Genellikle init(SID).ora şeklinde isimlendirilir. Burada SID(Oracle system ID), database ismi anlamına

gelmektedir. PFILE sadece database başlatılırken okunur. Sonrasında PFILE üzerinde
yapılan değişiklikler, bir sonraki database yeniden başlatma işlemine kadar yeniden okunmaz.

Dezavantajları;
- PFILE dosyası file system içerisinde tutulur. Text editör kullanarak
değişiklik yapmak için file system erişimi zorunludur. Bu erişim bazı durumlarda güvenlik nedeniyle uygun bulunmayabilir.

- Dinamik değişikliklerin kalıcı olması isteniyorsa ,bu dosyaların da edit edilmesi zorunludur.

- RMAN, pfile dosyasının yedeğini almaz, dolayısıyla backup için bir ek prosedür gereklidir.


SPFILE
---------------------------
Genellikle spfile(SID).ora şeklinde isimlendirilir.
Oracle 9.0.1 ve sonrasında parametre dosyası olarak SPFILE kullanımı seçeneği eklenmiştir. Bu dosya binary bir dosyadır ve sadece SQL cümlecikleri ile üzerinde değişiklik yapılabilir.



EM (Oracle Enterprise Manager) veya ALTER SYSTEM deyimi kullanılarak
SPFILE üzerinde değişiklik yapılabilir. Bu şekilde sadece çalışan database, sadece SPFILE veya hem çalışan database hem SPFILE üzerinde aynı anda değişikli yapılabilir.
Örneğin;

- Sadece çalışan database instance için
ALTER SYSTEM SET open_cursors=300 SCOPE=MEMORY;

- Sadece SPFILE için
ALTER SYSTEM SET open_cursors=300 SCOPE=SPFILE;

- Hem çalışan database hem de SPFILE için
ALTER SYSTEM SET open_cursors=300 SCOPE=BOTH;

şeklinde SQL deyimleri çalıştırılabilir.

SPFILE türündeki parametre dosyaları pek çok avantaja sahiptir.

- ALTER SYSTEM deyimi kullanarak değişiklik yapılabilir. İşletim sistemine ulaşıp, ilgili dosyayı edit etme gerekliliği yoktur.

- İstenen bir parametre değeri, tek satılık SQL deyimi ile hem çalışan database için kullanılmak üzere, hem de SPFILE dosyasına kaydedilerek bir sonraki database start işleminde devreye alınmak üzere SPFILE dosyasına kaydedilebilir.

- RMAN, SPFILE dosyasının yedeğini alabilir. Ayrıca bu konunun takibi gerekli olmaz.

Database başlatma anı ve Parametre dosyası ilişkisi
----------------------------------------------------
Oracle, başlatma anında, SPFILE türü parametre dosyasını öncelikli olarak aramaktadır. Parametre dosyasının bulunduğu klasör aksi belirtilmedikçe aşağıda gösterilen yerdedir.

- Windows : $ORACLE_HOME/database
- Linux : $ORACLE_HOME/dbs

Database başlatma anında parametre klasöründeki dosyalar, parametre dosyasını bulmak için aşağıdaki sırayla taranır.

1) spfileSID.ora

2) spfile.ora

3) initSID.ora

4) init.ora

Eğer yukarıda dosyaların herhangibirisi bulunamadı ise database başlatılamaz ve
bu konuda hata görüntülenir.

Alternatif olarak, "startup" komutuna PFILE dosya yerini parametre olarak verebilirsiniz.

SQL> startup pfile=/path/to/pfile/inittestdb.ora

Kaynak
--------------------------
http://www.orafaq.com/node/5
http://www.dba-oracle.com/concepts/pfile_spfile.htm