Merhaba arkadaşlar bu yazımda recycle bin ’den bahsedecegim.Recyle bin düşürülmüş(silinmiş) olan tabloları ve ona baglı bazı objelerin bilgilerini tutan bir tablodur.Biraz açacak olursak eger recycle bin ‘imiz on(açık) modda ise sildigimiz tablolar ve ona baglı objeler hemen veritabanımızdan silinmez.Biz silmek istedigimiz tabloyu DROP ettigimiz zaman tablonun ve ona baglı objelerin bilgileri Recycle bin ‘e düşer tablo ve ona baglı objeler de hangi tablespace de iseler orada kalmaya devam ederler yani yerlerini korurlar ta ki biz recycle bin ‘den de verileri silene kadar veya tablespace ‘imiz dolana kadar veritabanımızdan silinmezler.
Recycle bin bu kayıtları geri getirebilmek adına tutmaktadır.Yani recycle bin drop edilen tabloyu ve ona baglı objeleri düşmeden(silinmeden) önceki eski haline getirebilir.
Her kullanıcının recyclebin tablosu sadece kendi ait verileri barındırır yani x kullanıcısı y kullanıcısının recycle bin ‘nindeki verileri göremez ve geri de getiremez.(NOT : sysdba rolunde ki user(kullanıcılar) bütün userlerin recycle binnindeki verileri görebilir ve geri getirebilir)Drop edilip de recycle bin’e düşen tabloları ve objeleri görmek için aşagıda ki sorguları kullanabiliriz.
Select * from recyclebin ; |
veya
Show recyclebin ; |
- Dba rolünde iseniz aşagıda ki kod ile de bütün userlerin recycle bin’nindeki verileri görebilirsiniz ;
Select * from dba_recyclebin ; |
- Sadece kendi user’nızın recycle bin’nindeki bilgileri görmek istiyorsanız aşagıda ki kodu kullanabiliriz.
Select * from user_recyclebın ; |
Drop edilmiş tablolarımzı ve ona baglı objelerimizi geri getirebilmek için recycle bin ‘imizin on(açık) modda olması gerekiyor. Recycle bin Oracla database 11g ‘de varsayılan olarak ON modda geliyor zaten.Recyclebin’imizin modunu ögrenmek için aşagıda ki sorguyu çalıştıtabiliriz ;
Select value from V$PARAMETER where name like ‘%recyclebin%’ ; |
- Recycle bin’imiz off(kapalı) modda ise on(açık) moda almak için aşagıda ki sorguyu çalıştıtabiliriz.
Alter session set recyclebin=ON ; |
veya
Alter system set recyclebin=ON scope spfile ; |
- Recycle bin’imiz ON(açık) modda ise OFF(kapalı) moda almak için aşagıda ki sorguyu çalıştıtabiliriz.
Alter session set recyclebin=OFF ; |
veya
Alter system set recyclebin=OFF scope spfile ; |
NOT : Alter system komutu ile mod degişikligi yapılırsa bu parametrenin dinamik olmamasından dolayı,degişikligin etki etmesi için veritabanı yeniden başlatılmalıdır.
NOT : Recycle bin ON moddayken silip de recycle bin’e düşürdügümüz tablolar recycle bin OFF moda geçtiginde silinmezler sadece yeni silinen tablolar recyclebin’e gitmezler ve direk silinirler.
RECYLEBIN NAME-OBJECT_NAME
Farklı zamanlarda aynı isme sahip birden fazla tablonun veya ona baglı objelerin silinmesi sonucu recycle bin’de aynı isimde birden fazla tablolar veya ona baglı objeler olabilir ve bu da karışıklıga neden olabilir düşüncesiyle Oracle her düşürülen tabloya veya ona baglı objelere birbirinin benzeri olmayan bir isim takar.
Bu isme “Select * from recyclebin ; ” ile bakarsak “object_name” altında yazar ;
Bu isme ”show recyclebin ; ” ile sqlplus’tan bakarsak “recyclebin name” altında yazar ;
NOT : Oracle bu objelere isim verirken “BIN$tekil_id$versiyon” böyle bir şablon kullanır.tekil_id 26 karakter uzunlugunda GUID numarasıdır ve ismi tüm veritabanında tek yapar,versiyon numarası ise Oracle tarafından atanan versiyon numarasını temsil eder.
SİLİNEN TABLO VE OBJELERİNİ REYCLEBIN İLE GERİ KURTARMAK
- Geri dönüşüm kutusundan objeleri geri almak için aşagıda ki söz dizimi kullanılır ;
FLASHBACK TABLE table_name TO BEFORE DROP ; |
- Geri dönüşüm kutusundan tabloyu tekrar getirirken tablomuzun isminide degişebiliriz ;
FLASHBACK TABLE table_name TO BEFORE DROP RENAME TO new_table_name ; |
- Geri dönüşüm kutusundan objeleri getirirken tablo adı yerine istersek oracle’ın verdigi object_name ‘ide kullanabiliriz.Bunun için de aşagıda ki söz dizimini kullanırız ;
FLASHBACK TABLE ‘object_name’ TO BEFORE DROP ; |
- Geri dönüşüm kutusundan tabloyu object_name ile tekrar getirirken de tablomuzun ismini degişebiliriz. Bunun için de aşagıda ki söz dizimini kullanırız ;
FLASHBACK TABLE ‘object_name’ TO BEFORE DROP RENAME TO new_table_name ; |
NOT : Bir tablo geri dönüşüm kutusundan kurtarıldıgında bu tabloya baglı objeler de otomatikman geri kurtarılmış olur ama tabloya baglı bu objeler geri dönüşüm kutusuna gitmeden önce ki ismini kaybeder ve geri dönüşüm kutusundan tekrar kurtarıldıgında objenin ismi object_name deki ismini alır.Bu ismi de DDL ifadelerle degiştirebiliriz.Örnegin x isimli tablomuzu sildigimizde ve ona baglı y isimli indeximiz de silinecekdir,biz bu x isimli tablomuzu kurtardıgımız da index’imizde kurtarılır ama y isimli indeximizin ismi artık oracle’ın verdigi object_name deki ismini alır bunu da index için aşagıda ki kodla degiştirebiliriz ;
ALTER INDEX ‘object_name’ RENAME TO index_name ; |
Şimdi örnek olması açısından bir deneme tablo yaratalım,sonra silelim,sonrada tekrardan kurtaralım.
- İlk başta bir deneme isimli bir tablo oluşturalım ;
CREATE TABLE deneme( id NUMBER, name VARCHAR2(20) ); |
2.Sonra oluşturudugumuz tabloyu silelim ;
DROP TABLE deneme ; |
3.Sonra recyclebin tablomuza bakalım geri dönüşüm kutusunda hangi silinen objelerimiz oldugunu görelim ve geri kurtarmak istedigimiz tablonun ismini veya object_name’ini bir yere kaydedelim.
Tablo ismi : deneme
Object_name : BIN$blOIW+h3RfqrfEwzGr7+dg==$0
SELECT * FROM recyclebin ; |
4.Şimdi tablomuzu geri dönüşüm kutusundan kurtaralım.
Eger ismini degiştirmeden kurtarmak istiyorsak aşagıda ki sorgulardan herhangi birini yazarak kurtarabiliriz.
FLASHBACK TABLE deneme TO BEFORE DROP ; |
veya
FLASHBACK TABLE ‘BIN$blOIW+h3RfqrfEwzGr7+dg==$0’ TO BEFORE DROP ; |
Eger kurtaracagımız tablonun ismini degiştirerek kurtarmak istiyorsak da aşagıda ki sorgulardan birini kullanırız.
FLASHBACK TABLE deneme TO BEFORE DROP RENAME TO new_deneme ; |
veya
FLASHBACK TABLE ‘BIN$blOIW+h3RfqrfEwzGr7+dg==$0’ TO BEFORE DROP RENAME TO new_deneme ; |
RECYCLEBIN DEKİ TABLO ve ONA BAGLI OBJELERİ KALICI OLARAK SİLMEK
Geri dönüşüm kutusunda ki tablolarımız ve ona baglı objelerimiz biz silene kadar kadar ya da tablespace’imiz dolana kadar silinmez.(tablespace doldugunda extent aracılıgı ile yeni yer açılmadan hemen önce öncelikle tabloya baglı objelerden başlanarak en sona da tablo olmak üzere silinirler)
Geri dönüşüm kutusundan kendimiz verileri silmek istedigimiz zaman da aşagıda ki PURGE komutunu kullanarak kalıcı olarak tablo veya ona baglı objeleri silebiliriz.
PURGE TABLE table_name ; |
PURGE TABLE ‘object_name’ ; |
İstersek geri dönüşüm kutusunda belirli bir tablespace’e ait olan tüm objeleri aşagıda ki komut ile silebiliriz.
PURGE TABLE tablespace_name ; |
Hatta tablespace birden fazla kişi tarafından kullanılmaktaysa ilgili kullanıcı ismi belirtilerek o tablespace’de olan o kullanıcıya ait tüm objeler geri dönüşüm kutusundan kalıcı olarak silinir.
PURGE TABLE tablespace_name USER user_name ; |
Kullanıcılar kendilerine ait tüm objeleri aşagıda ki kodla kalıcı olarak silebilir.
PURGE RECYCLEBIN ; |
DBA rolüne sahip kullanıcılar da aşagıda ki komut ile bütün userların geri dönüşüm kutusunda ki verilerini silebilir.
PURGE DBA_RECYCLEBIN ; |
NOT : Geri dönüşüm kutusu etkin iken ve sildigimiz tablonun geri dönüşüm kutusuna gitmeden kalıcı olarak silmek istiyorsak aşagıda ki komut ile silebiliriz.
DROP TABLE table_name PURGE ; |
NOT : Bazı durumlarda recyclebin objelerimizi silmesek de kendiliginden silinebilir ;
- Bir tablespace düşürüldügünde(silindiginde) bu tablespace ait tüm objeler recycle bin den silinir.
- Bir user(kullanıcı) düşürüldügünde(silindiginde) bu user’a ait tüm objeler recycle bin den de silinir.
- Bir küme(cluster) düşürüldügünde(silindiginde) bu kümeye ait tüm objeler recycle bin den de silinir.
Yazar : Mustafa Bektaş Tepe
Java && Oracle