Veritabanında çöp kutusu (recyclebin) kavramı

7 Eki by Ahmet Duruöz

Veritabanında çöp kutusu (recyclebin) kavramı

Oracle 10g versiyonu ile gelen güzel özelliklerden biri olan çöp kutusu (recyclebin) ile bir tablonun PURGE ile drop edilmediği takdirde geri getirilebilmesini sağlanabilmektedir. Veritabanı parametrelerinden RECYCLEBIN ile yönetilen bu özellik ile birçok hatalı drop edilmiş tabloları geri alabiliriz.  

Recyclebin aktifleştirilmesi :

recyclebin parametresi off durumda ise on yapıp yeniden başlatmak gereklidir.

SQL> show parameter recyclebin

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
recyclebin                           string                            off


SQL> alter system set recyclebin=on scope=spfile sid='*';

System altered.

Çöp kutusundaki nesneleri RECYCLEBIN , USER_RECYCLEBIN ve DBA_RECYCLEBIN den sorgulayabiliriz. DBA_RECYCLEBIN için dba yetkisi gerekmektedir.

 

SQL> SELECT OBJECT_NAME,ORIGINAL_NAME,TYPE FROM RECYCLEBIN;

no rows selected

Örnek bir tablo ve index oluşturup drop edelim.

SQL> create table A(id number);

Table created.

SQL> create index AA on A(id);

Index created.

SQL> insert into A values(1);

1 row created.

SQL> select * from A;

        ID
----------
         1

SQL> drop table A;

Table dropped.

Tekrar çöp kutusuna baktığımızda tablo ve indeksi yer alacaktır.

SQL> SELECT OBJECT_NAME,ORIGINAL_NAME,TYPE FROM RECYCLEBIN;

OBJECT_NAME                      ORIGINAL_NAME                    TYPE
-------------------------------- -------------------------------- --------------------------------
BIN$Pkg9OFV8AtzgU6wSxRdguw==$0   A                                TABLE
BIN$Pkg9OFV7AtzgU6wSxRdguw==$0   AA				  INDEX

Aynı isimde yeni bir tablo oluşturup,drop edildiğinde çöp kutusunda versiyonlu bir şekilde tutulmaktadır.

SQL> SELECT OBJECT_NAME,ORIGINAL_NAME,TYPE FROM RECYCLEBIN;

OBJECT_NAME                      ORIGINAL_NAME                    TYPE
-------------------------------- -------------------------------- --------------------------------
BIN$Pkg9OFV8AtzgU6wSxRdguw==$0   A                                TABLE
BIN$Pkg9OFV8AtzgU6wSxRdguw==$0   A                                TABLE
BIN$Pkg9OFV7AtzgU6wSxRdguw==$0   AA			          INDEX

İki tablonun farklı olduğunu görmek için , birine insert yapıldı diğerine yapılmadı. Aşağıdkai gibi sorgulayıp farkı görebiliriz.

SQL>  select * from "BIN$Pkg9OFV9AtzgU6wSxRdguw==$0";

no rows selected

SQL> select * from "BIN$Pkg9OFV8AtzgU6wSxRdguw==$0";

        ID
----------
         1

Çöp kutusundaki tabloları geri almak için flashback komutunu kullanıyoruz.

SQL>  flashback table A to before drop;

Flashback complete.

SQL> select * from A;

no rows selected

Çöp kutusunda A isimde iki tablo vardı. Flashback ile geri getirdiğimizde yukarıdan da anlaşılacağı gibi , en son drop edilen tabloyu geri getirecektir.

Eğer başka bir zamandaki drop edilen tabloyu geri getirmek istersek , çöp kutusundaki ismiyle flashback yapılmalıdır.

SQL> flashback table "BIN$Pkg9OFV8AtzgU6wSxRdguw==$0" to before drop;

Flashback complete.

SQL> select * from A;

        ID
----------
         1

Recyclebin kullanımındaki kısıtlamalar :

  • Bitmap join indeks içeren tablolar drop edildiğinde bu indeksler çöp kutusuna alınmaz ve ilgili tablo flashback yapıldığında bu indeksler geri gelmez.
  • Aynı durum materialized view logları içinde geçerlidir. Bir tablo drop edildiğinde , bu tablo üzerinde tanımlı tüm mat. view logları kalıcı olarak silinir, çöp kutusuna alınmaz.
  • Bir tablo drop edilip , geri alındığında , tablodaki başka tabloları işaret eden referential integrity constraint’ler kaybedilir.

 

Recyclebin nasıl boşaltılır ? 

Çöp kutusunu boşaltmak için purge komutu kullanılır.

Kendi çöp kutumuzu boşaltmak için ;

SQL> PURGE RECYCLEBIN;

Recyclebin purged.

Tüm çöp kutusunu boşaltmak için (sys ile bağlanmak gerekli);

-bash-4.3$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Oct 7 17:58:46 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> PURGE DBA_RECYCLEBIN;

DBA Recyclebin purged.

 

Recyclebin özelliğini kapatmak :

Recyclebin özelliğini session bazlı yada veritabanı seviyesinde kapatabiliriz. Veritabanı seviyesinde kapatmak için recyclebin parametresi değiştiğinde yeniden başlatmak gerekiyor.

SQL> alter session set recyclebin=off ;

Session altered.


SQL> alter system set recyclebin=off scope=spfile sid='*'


Session altered.

 

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir