Oracle 12c Yeni Özellikler – In Database Row Archiving

Posted by | Eylül 23, 2014 | Database | No Comments

12cOracle 12c “In Database Row Archiving” adıyla anılan yeni bir özelliğe sahiptir.

Eski kayıtları silmek yerine bu kayıtları arşiv verisi olarak işaretleyebiliriz.
Arşiv verisi olarak işaretlenmiş kayıtlar uygulamalar tarafından görülemeyecek, fakat orijinal halleriyle tablolarda durmaya devam edeceklerdir.
Gereklilik durumunda tekrar görülebilir duruma alınmaları da yedekleme-geri yükleme süreçleri olmaksızın daha kolay olacaktır.
Ayrıca denetçiler açısından da daha tercih edilebilir bir durum olarak karşımıza çıkmaktadır.

Şimdi bu yapının nasıl işlediğine bir göz atalım.

Öncelikle bir test tablosu oluşturalım.

SQL> create table ida_employee_test (EMP_ID integer primary key, EMP_NAME varchar2(10), archive_date date);

Table created.

SQL> insert into ida_employee_test (EMP_ID, EMP_NAME) values (1,’Noyan’);

1 row created.

SQL> insert into ida_employee_test (EMP_ID, EMP_NAME) values (2,’Kaan’);

1 row created.

Şimdi de test tablosu için arşivlemeyi etkinleştirelim.

SQL> alter table ida_employee_test row archival;

Table altered.

Gizlilik parametre değeri ORA_ARCHIVE_STATE=0 olan kayıtlar arşivlenmemiş kayıtlar olarak görülebilmektedir.

SQL> select * from ida_employee_test;

EMP_ID EMP_NAME ARCHIVE_D
—— ———- ———
1 Noyan
2 Kaan

SQL> select EMP_ID, EMP_NAME, ora_archive_state from ida_employee_test;

EMP_ID EMP_NAME ORA_ARCHIVE_STATE
—— ———- ———————————————–
1 Noyan 0
2 Kaan 0

Şimdi işten ayrılan “Kaan” çalışanına ait kaydı arşivleyelim.

SQL> update ida_employee_test
set ora_archive_state=dbms_ilm.archivestatename(1), archive_date=sysdate
where emp_id=2;

1 row updated.

Artık normal sorgu işlemlerinde “Kaan” kaydı görülmeyecektir.

SQL> select * from ida_employee_test;

EMP_ID EMP_NAME ARCHIVE_D
—— ———- ———
1 Noyan

Eğer oturuma ait “row archive visibility” değerini “all” olarak set edecek olursak “Kaan” çalışanına ait kaydın tabloda halen var olduğunu görebileceğiz.

SQL> alter session set row archival visibility = all;

Session altered.

SQL> select emp_id, emp_name, ora_archive_state from ida_employee_test;

EMP_ID EMP_NAME ORA_ARCHIVE_STATE
—— ———- ———————————————–
1 Noyan 0
2 Kaan 1

SQL> alter session set row archival visibility = active;

Session altered.

Kayıt tabloda yer almasına karşın uygulamalar tarafından görülememektedir ve tablo üzerine uygulanmış olan kısıtlar halen geçerlidir.

SQL> select * from ida_employee_test;

EMP_ID EMP_NAME ARCHIVE_D
—— ———- ———
1 Noyan

SQL> insert into ida_employee_test (emp_id, emp_name) values (2,’Kaan’);
insert into ida_employee_test (emp_id, emp_name) values (2,’Kaan’)
*
ERROR at line 1:
ORA-00001: unique constraint (TEST.SYS_C009859) violated

Şimdi bu kaydın yeniden aktif veri halini alabileceği bir durum tasarlayalım.
Örneğin “Kaan” kullanıcısı tekrardan işe alınmış olsun.

SQL> alter session set row archival visibility = all;

Session altered.

SQL> update ida_employee_test
set ora_archive_state=dbms_ilm.archivestatename(0), archive_date=null
where emp_id=2;

1 row updated.

SQL> alter session set row archival visibility = active;

Session altered.

SQL> select * from ida_employee_test;

EMP_ID EMP_NAME ARCHIVE_D
—— ———- ———
1 Noyan
2 Kaan

Görüleceği gibi “Kaan” çalışanına ait kayıt yeniden aktif kayıtlar arasındaki yerini almıştır.

Leave a comment

Your email address will not be published. Required fields are marked.