Oracle 12c Yeni Özellikler – In Database Row Archiving


Oracle 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.

Kaynak: http://www.kora.com.tr/oracle-12c-yeni-ozellikler-in-database-row-archiving/
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: