Tuesday, June 2, 2009

RECYCLEBIN KULLANIMI

ORACLE'da herkesin bildiği gibi çop kutusu olayı var.Bir TABLE, NORMAL INDEX, BITMAP INDEX, NESTED TABLE, LOB,LOB INDEX,DOMAIN INDEX,IOT TOP INDEX, IOT OVERFLOW SEGMENT, IOT MAPPING TABLE, TRIGGER, CONSTRAINT, Table Partition, Table Composite Partition, Index Partition,Index Composite Partition, LOB Partition, LOB Composite Partition sildiğimizde kendi geridönüşüm kutusuna atar.
bu çöp kutusu (recyclebin) özelliklerine baktiğimizda
desc recyclebin;


*************************************************************************
SQL> SELECT OBJECT_NAME, ORiginal_name,space from recyclebin;

OBJECT_NAME ORIGINAL_NAME SPACE
------------------------------ -------------------------------- ----------
BIN$fyQIA0xPSFaUA15ChBk0OQ==$0 EMPLOYEE 65536
BIN$E7TLHYoRTg6L0PDtlg0xdg==$0 TEST 8

*************************************************************************
SQL> purge table test;

Tablo temizlendi.
*************************************************************************
OBJECT_NAME ORIGINAL_NAME SPACE
------------------------------ -------------------------------- ----------
BIN$fyQIA0xPSFaUA15ChBk0OQ==$0 EMPLOYEE 65536

**********************************************************************
burada space değeri max değerindedir. aslında daha büyük. Objenin kullandığı maximum block değerini veriyor.

SQL> show parameters block_size

NAME TYPE VALUE
------------------------------------ ----------- -------
db_block_size integer 8192
*************************************************************************

şimdi bir tane basit tablo oluşturalim ve bu tabloya bir satir ekleyelelim. daha sonra bu tabloyu drop edelim. trop edildikten sonra aynı isimde bir tablo daha oluşturup aynı işlemi yapalim.çöp kutusuna gidecek olan bu tabloların yeni isimlerini kullanarak tekrar çağırdığımız zaman içindeki verileri göreceğiz.
SQL> create table cop_kutusu ( deger varchar2(20), eklm_zamani date);
Tablo yaratıldı.
SQL> insert into cop_kutusu values('ilk deger', sysdate);
1 satır yaratıldı.
SQL> drop table cop_kutusu;
Tablo iptal edildi.
**************************************************************
SQL> create table cop_kutusu (deger varchar2(20) , eklm_zamani date);
Tablo yaratıldı.
SQL> insert into cop_kutusu values ('ikinci deger', sysdate);
1 satır yaratıldı.
SQL> drop table cop_kutusu;
Tablo iptal edildi.
**************************************************************
SQL> select object_name ,original_name, space , droptime from recyclebin;
OBJECT_NAME ORIGINAL_NAME DROPTIME
------------------------------ ------------------- -------------------
BIN$yVmjdT4aTVeOAqq/VrA23g==$0 COP_KUTUSU 2009-01-08:15:11:38
BIN$hwLX+acFSy+a7twvbaf8kA==$0 COP_KUTUSU 2009-01-08:15:13:41
**************************************************************

SQL> select * from "BIN$yVmjdT4aTVeOAqq/VrA23g==$0"; /*tırnak içinde olduğuna dikkat yoksa hata verir*/
DEGER EKLM_ZAMAN
-------------------- ----------
ilk deger 08/01/2009
SQL> select * from "BIN$hwLX+acFSy+a7twvbaf8kA==$0";
DEGER EKLM_ZAMAN
-------------------- ----------
ikinci deger 08/01/2009
*****************************************************************
SQL> flashback table cop_kutusu to before drop;
Gerisinyal tamamlandı.
SQL> select * from cop_kutusu;
DEGER EKLM_ZAMAN
-------------------- ----------
ikinci deger 08/01/2009
***************************************************************
SQL> flashback table cop_kutusu to before drop;
flashback table cop_kutusu to before drop
*
1 satırında HATA:
ORA-38312: esas ad, mevcut bir nesne tarafından kullanılıyor
**************************************************************
tabloyu geri getirme işleminde ismini değiştirebiliriz.
FLASHBACK TABLE cop_kutusu TO BEFORE DROP RENAME TO yeni_copo_kutusu;
**************************************************************
SQL> drop table cop_kutusu;
Tablo iptal edildi.
***************************************************************
SQL> flashback table "BIN$yVmjdT4aTVeOAqq/VrA23g==$0" to before drop;
Gerisinyal tamamlandı.
***************************************************************
SQL> select * from cop_kutusu;
DEGER EKLM_ZAMAN
-------------------- ----------
ilk deger 08/01/2009
*******************************************************************

- Birkaç not eklemek gerekirse yukaridaki kodlardan da anlaşilacaği gibi LIFO (last in first out) mantığı ile çalişiyor.
- Bir tablo geri donusum kutusuna geri konup daha sonra tekrar geri yuklendiğinde dier tablolarla olan ilişkisel kısıtlamaları koybolur.
- ALTER SESSION SET RECYCLEBIN=OFF komutu ile çöp kutusu özelliğini kapatabilirsiniz. Fakat bu işlem daha önce çöp kutusuna atilanlari silmez. Yani çöp kutusunda olanları hala kullanabilirsiniz ancak bu komuttan sonrakiler gidecektir. PURGE RECYCLEBIN komutunu kullanarak çöp kutusunu tamamen temizlemek mümkündür.

No comments: