当我们不需要表中的某些行时,需要发布delete语句来删除。
但是有时候并不是想在物理上真正的删除这些数据,在传统的表设计中,我们一般都加多一个栏位来表示逻辑删除。
比如is_delete。当应用程序在处理时,把is_delete也加入到where条件中来表示行是不是真正的删除了.
在12C中,引入了一个新特性叫作row archive,可以让数据库自动来做这些操作.
开启行归档:alter table t1 row archival
在允许row archival后,系统会自动会表增加栏位ORA_ARCHIVE_STATE,用来表示数据可用性情况。
如果我们用select * from t1这种方式,这个栏位是不会被显示的,只有显式指定栏位,才会在结果集中显示栏位.
查看行归档:
SQL> select column_name from user_tab_cols where table_name='T1'
SQL> select a,b,ora_archive_state from t1; 查询ora_archive_state的值是0
进行逻辑删除:
SQL>update t1 set ora_archive_state=1 where a=1;
SQL>commit;
SQL>select * from t1;
此时a=1这行就看不到了
开启全部可视:
SQL> alter session set row archival visibility=ALL;
SQL>select * from t1; (又可以都看到了)
关闭全可视
SQL> alter session set row archival visibility=active;
SQL>select * from t1; (a=1这行又看不到了)
SQL> select a,b,ora_archive_state from t1;
关闭行归档:
SQL> alter table t1 no row archival;




