Pages

2 Nisan 2011 Cumartesi

Oracle 11g Recycle Bin (Geri Dönüşüm Kutusu)

Recycle bin(Geri Dönüşüm Kutusu) düşürülmüş objelerin bilgilerini tutan bir çeşit veri dizin tablosudur. Silinmiş tablolar ve bu tablolara bağlı olan indeskler, kısıtlayıcılar, nested tablolar ve diğerleri gibi objeler silinmez ve hala alan kaplar. Geri dönüşüm kutusundan silinmeden veya tablespace alan kısıtlamaları gibi sebeplele veritabanından kalıcı olarak silinmeden, bu objeler hala kullanıcı alan kotası dahilinde yer kaplar.

Her kullanıcı kendine ait geri dönüşüm kutusu olduğunu düşünür, çünkü bir kullanıcı SYSDBA haklarına sahip olmadan Geri dönüşüm kutusu içerisinde erişebildiği ve gördüğü objeler kendi sahip olduklarıdır. Aşağıdaki komut ile her kullanıcı geri dönüşüm kutusu içindeki silinen objelerini görebilir.

SELECT * FROM RECYCLEBIN;

Bir tablespace içerikleri ile beraber düşürüldüğünde bu tablespace’e ait objeler geri dönüşüm kutusu içerisinde yer almaz. Veritabanı aynı zamanda geri dönüşüm kutusu içinde bu düşürülen tablespace’e ait olan nesneleride kalıcı olarak siler.

  • Bir kullanıcıyı düşürdüğünüzde bu kullanıcıya ait objeler geri dönüşüm kutusu içerisine yerleştirilmez ve geri dönüşüm kutusunda bu kullanıcıya ait olan objeler varsa bunlarda kalıcı olarak otomatikman silinir.
  • Bir küme(cluster) düşürüldüğünde bu kümenin üye tabloları geri dönüşüm kutusu içerisine yerleştirilmez ve geri dönüşüm kutusu içinde varsa üye tablolar bunlarda otomatikman kalıcı silinir.
  • Bir tip(type) düşürüldüğünde ise bu tipe bağlı alt nesneler geri dönüşüm kutusuna yerleştirilmez ve herhangi bir alt nesne varsa geri dönüşüm kutusunda, kalıcı olarak otomatikman silinir.
Geri dönüşüm kutusu içinde objelerin yeniden adlandırılması
Düşürülmüş bir tablo geri dönüşüm kutusuna taşındığında, bu tablo ve ona ait tüm objeler Oracle tarafından özel bir isim formatında yeniden adlandırılır. Birçok tablonun aynı isme sahip olma ihtimaline karşılık isim çakışmasının önüne geçmek için bu işlem zorunludur.Bu yeniden adlandırma aşağıdaki durumlarda önem kazanmaktadır;

  • Kullanıcı bir tabloyu düşürdüğünde, yeniden aynı isimle oluşturduğunda ve tekrar bu tabloyu düşürdüğünde.
  • İki kullanıcı aynı isimde tablolara sahip olduğunda ve her ikiside bu tabloları düşürdüğünde.
Yeniden adlandırma şablonu BIN$tekil_id$versiyon gibidir.tekil_id 26 karakter uzunluğunda GUID numarasıdır ve ismi tüm veritabanında tekil yapar. versiyon bilgisi ise Oracle tarafından atanan versiyon numarasını temsil eder.

Geri dönüşüm kutusunu etkinleştirme ve devre dışı bırakma
Oracle 11g veritabanı kurulduğunda varsayılan olarak geri dönüşüm kutusu etkinleştirilmiştir.Geri dönüşüm kutusu etkinken, düşürülmüş tablolar ve buna bağlı objeler geri dönüşüm kutusuna yerleştirilir. Geri dönüşüm kutusu devre dışı bırakıldığında ise düşürülmüş tablolar ve bunlara ait objeler geri dönüşüm kutusu içine yerleştirilmez ve kalıcı olarak Oracle veritabanından silinir. Bu durumda yedekten geri almak veya flashback dışında bu objeleri geri getirme imkanı olmaz.

Geri dönüşüm kutusunu devre dışı bırakmak, halihazırda geri dönüşüm kutusunda bulunan objeleri kalıcı olarak silmez veya bu objeleri kullanılmaz hale getirmez. Bu objeler bu durumda geri dönüşüm kutusunda bulunmaya devam eder, ancak yeni düşürülen objeler artık geri dönüşüm kutusuna yerleştirilmez.

Geri dönüşüm kutusunu etkinleştirmek veya devre dışı bırakmak için RECYCLEBIN adlı başlangıç parametresi ON veya OFF olarak ayarlanır.Bu parametre dinamik değildir, yani ALTER SYSTEM komutu ile bu değer değiştirildiğinde, değişikliğin etki etmesi için veritabanı yeniden başlatılmalıdır.

Geri dönüşüm kutusunu devre dışı bırakmak için;
ALTER SESSION SET recyclebin = OFF;
veya,
ALTER SYSTEM SET recyclebin = OFF SCOPE = SPFILE;

Geri dönüşüm kutusunu etkinleştirmek için;
ALTER SESSION SET recyclebin = ON;
veya,
ALTER SYSTEM SET recyclebin = ON SCOPE = SPFILE;

Geri dönüşüm kutusu içindeki objeleri izleme ve sorgulama

İzleme amaçlı kullanılan sistem görünümlerinin bir amacı düşürülen tablonun geri dönüşüm kutusu içinde atanan yeni ismini sorgulamaktır. Bu amaçla aşağıda HR şemasından silinen DEPT adlı tablonun yeni sistem generik ismi tespit edilmektedir.

SELECT object_name, original_name FROM dba_recyclebin
WHERE owner = 'HR';

OBJECT_NAME                                                         ORIGINAL_NAME
------------------------------                                               -------------------------
BIN$yrMKlZaLMhfgNAgAIMenRA==$0                  DEPT

Aynı zamanda SHOW RECYCLEBIN komutunu kullanarak Geri dönüşüm kutusu içindeki içerikler listelenebilmektedir.

SQL> show recyclebin

ORIGINAL NAME RECYCLEBIN NAME                                        OBJECT TYPE       DROP TIME
--------------------     ------------------------                                               -------------------         ----------------------------
DEPT                    BIN$yrMKlZaVMhfgNAgAIMenRA==$0      TABLE                      2011-03-27:21:05:52

Bu arada geri dönüşüm kutusu içindeki objelerede sorgu çekilerek içindeki kayıtlar listelenebilir. Ancak sorgu çekilecek tablo yeniden adlandırılan sistem generik adı olmalıdır.

SELECT * FROM "BIN$yrMKlZaVMhfgNAgAIMenRA==$0";

Geri dönüşüm kutusundaki objelerin kalıcı olarak silinmesi
Geri dönüşüm kutusundaki objelere gereksinim duyulmayacağı düşünüldüğünde, PURGE komutu ile bu objeler kalıcı olarak silinebilir ve boş depo alanı kazanılır. Düşürülen objenin ya orijinal ismi, yada geri dönüşüm kutusundaki yeni ismi kullanılarak PURGE işlemi yapılabilir.

PURGE TABLE BIN$jsleilx392mk2=293$0;
PURGE TABLE dept;

Aynı zamanda geri dönüşüm kutusunda belirli bir tablespace’e ait olan tüm objeler bu tablespace ismi kullanılarak kalıcı olarak silinebilir.Hatta tablespace birden fazla kullanıcı tarafından kullanılmaktaysa ilgili kullanıcı ismi belirtilerek o tablespace’e ve o kullanıcıya ait tüm objeler geri dönüşüm kutusundan kalıcı olarak silinebilir.

PURGE TABLESPACE test1;
PURGE TABLESPACE test1 USER testuser;

Kullanıcılar kendine ait tüm objeleri geri dönüşüm kutusundan silmek için ise aşağıdaki komutu kullanabilir.

PURGE RECYCLEBIN;

SYSDBA rolüne sahip olunduğunda ise RECYCLEBIN yerine DBA_RECYCLEBIN belirtilerek tüm geri dönüşüm kutusu boşaltılabilir.

PURGE DBA_RECYCLEBIN;

Geri dönüşüm kutusundan tabloların geri kurtarılması
Geri dönüşüm kutusundaki objeleri geri almak için FLASHBACK TABLE ... TO BEFORE DROP komutu kullanılmaktadır. Ya tablonun orjinal ismi yada geri dönüşüm kutusundaki generik sistem ismi kullanılabilir. RENAME TO opsiyonel takısı ile geri dönüşüm kutusundan alınan tablo yeniden veritabanı katmanında adlandırılabilir.

Aşağıdaki örnekte dept tablosu dept_new adıyla yeniden adlandırılarak geri dönüşüm kutusundan geri kurtarılmaktadır.

FLASHBACK TABLE dept TO BEFORE DROP
RENAME TO dept_new;

Sistem generik isimleri bir tablonun birden fazla düşürülüğü durumlarda oldukça kullanışlıdır. Mesela, farzedinki dept tablosu farklı zaman dilimlerinde düşürüldüğünden dolayı geri dönüşüm kutusunda 3 adet DEPT adlı tablo mevcuttur ve senaryo gereği ikinci versiyonun geri kurtarılması gerekmektedir. İkinci versiyonu bulmak için oluşturulma zamanı kolonu sorguya eklenerek aşağıdaki gibi sorgu çekilebilir ve burda listelenen ikinci versiyonun generik sistem ismi kullanılarak FLASHBACK TABLE ….. TO BEFORE DROP komutu kolayca kullanılabilir.

SELECT object_name, original_name, createtime FROM recyclebin;

OBJECT_NAME                                                  ORIGINAL_NAME              CREATETIME
------------------------------                                        ---------------                            -------------------
BIN$yrMKlZaLMhfgNAgAIMenRA==$0      
DEPT                                    2011-03-27
:21:05:52
BIN$yrMKlZaVMhfgNAgAIMenRA==$0     
DEPT                                    2011-03-27
:21:25:13
BIN$yrMKlZaQMhfgNAgAIMenRA==$0     
DEPT                                    2011-03-27
:22:05:53

FLASHBACK TABLE BIN$yrMKlZaVMhfgNAgAIMenRA==$0 TO BEFORE DROP;

İlgili objelerin geri yüklenmesi
Bir tablo geri dönüşüm kutusundan geri kurtarıldığında indeks gibi  bu tabloya bağlı objeler orijinal isimleri ile geri yüklenmez ve geri dönüşüm kutusunda yeniden adlandırıldıkları sistem generik isimlerini muhafaza ederler.Aşağıdaki örnekte HR şemasından düşürülen  JOB_HISTORY tablosunun indekslerinin orijinal isimlerine döndürülerek geri kurtarılması yer almaktadır.

1. JOB_HISTORY düşürüldükten sonra ve geri dönüşüm kutusundan geri kurtarılmadan önce aşağıdaki sorgu çalıştırılır.

SELECT OBJECT_NAME, ORIGINAL_NAME, TYPE FROM RECYCLEBIN;

OBJECT_NAME                                  ORIGINAL_NAME                              TYPE
------------------------------                                        -------------------------                               --------
BIN$DBo9UChtZSbgQFeMiAdCcQ==$0     JHIST_JOB_IX                                     INDEX
BIN$DBo9UChuZSbgQFeMiAdCcQ==$0    JHIST_EMPLOYEE_IX                      INDEX
BIN$DBo9UChvZSbgQFeMiAdCcQ==$0    JHIST_DEPARTMENT_IX                 INDEX
BIN$DBo9UChwZSbgQFeMiAdCcQ==$0   JHIST_EMP_ID_ST_DATE_PK       INDEX
BIN$DBo9UChxZSbgQFeMiAdCcQ==$0    JOB_HISTORY                                     TABLE

2. Aşağıdaki komut ile tablo geri kurtarılır.

FLASHBACK TABLE JOB_HISTORY TO BEFORE DROP;

3. Aşağıdaki komutu kullanarak ilk iki indeks orijinal isimlerine dönüştürülerek geri döndürülür.

ALTER INDEX "BIN$DBo9UChtZSbgQFeMiAdCcQ==$0" RENAME TO JHIST_JOB_IX;
ALTER INDEX "BIN$DBo9UChuZSbgQFeMiAdCcQ==$0" RENAME TO JHIST_EMPLOYEE_IX;

0 yorum:

Yorum Gönder