700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【12c】新特性:Oracle 12c In-Database Archiving 数据库内归档

【12c】新特性:Oracle 12c In-Database Archiving 数据库内归档

时间:2020-05-07 06:16:21

相关推荐

【12c】新特性:Oracle 12c In-Database Archiving 数据库内归档

通常,在应用程序开发中对表做设计时,不可避免的会对表中的数据做删除处理,如果直接使用硬删除,则不能有效的对已删除的数据进行追踪;如果采用软删除(例如表中增加了删除标记的字段delete_flag),虽然可以对已删除的字段进行追踪,但如果使用未删除的数据时,需要加上delete_flag='N',这种带删除标记的数据对应用来说是可见的,而且占用一定的存储空间。那么,有没有一种更有效的技术,可以让数据的删除或归档更高效呢?

Oracle 12.1.0.1 版本引入了In-Database Archiving(数据库内归档),通过这一新特性,可以将表中的数据行标记为非活动(Inactive)状态来对其进行归档,这些非活动数据行对应用来说不可见的,并且可以通过压缩进行优化。

要管理表的In-Database Archiving(数据库内归档),必须启用表的ROW ARCHIVAL(行归档)并操作表的ORA_ARCHIVE_STATE隐藏列,本篇对In-Database Archiving进行介绍和演示。

1 数据库版本

ALEN@PROD2> select * from v$version;BANNER CON_ID-------------------------------------------------------------------------------- ----------Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 0PL/SQL Release 12.1.0.2.0 - Production 0CORE 12.1.0.2.0 Production 0TNS for Linux: Version 12.1.0.2.0 - Production 0NLSRTL Version 12.1.0.2.0 - Production 0

2 启用行归档

ALEN@PROD2> create table alen(id number,name varchar2(200)) row archival;Table created.

开启行归档后,会在表新增一个隐藏列ORA_ARCHIVE_STATE,该值为0和1,0表示数据是active,1表示数据是inactive的,插入数据时若不指定该列的值,则默认为0。

3 查看表结构

ALEN@PROD2> select column_name,data_type,data_length,column_id,segment_column_id, hidden_column from user_tab_cols where table_name='ALEN';COLUMN_NAME DATA_TYPE DATA_LENGTH COLUMN_ID SEGMENT_COLUMN_ID HIDDEN_COL------------------------------ -------------------- ----------- ---------- ----------------- ----------ORA_ARCHIVE_STATE VARCHAR2 4000 1 YESID NUMBER 22 1 2 NONAME VARCHAR2 200 2 3 NO

4 创建并查看测试数据

ALEN@PROD2> insert into alen(id,name) values(2,'Lucy');1 row created.ALEN@PROD2> commit;Commit complete.ALEN@PROD2> select ora_archive_state,id,name from alen;ORA_ARCHIVE_STATE ID NAME-------------------- ---------- --------------------0 1 Alen0 2 Lucy

5 修改数据使其归档

ALEN@PROD2> update alen set ora_archive_state=2 where id=2;1 row updated.ALEN@PROD2> commit;Commit complete.ALEN@PROD2> select ora_archive_state,id,name from alen;ORA_ARCHIVE_STATE ID NAME-------------------- ---------- --------------------0 1 Alen

可以看到,将隐藏列置为非0值后,该行记录就不可见了。

6 参数ROW ARCHIVAL VISIBILITY设置

在会话级别设置该参数,可实现对已归档数据行的可见性,该参数有两个值,分别为:

ACTIVE:默认值,设置该参数后,执行查询时数据库返回active数据行;ALL:该值该参数后,执行查询时,数据库返回所有数据行;

6.1 设置参数值为ALL

ALEN@PROD2> select ora_archive_state,id,name from alen;ORA_ARCHIVE_STATE ID NAME-------------------- ---------- --------------------0 1 Alen2 2 Lucy

6.2 设置参数值为ACTIVE

ALEN@PROD2> insert into alen(ora_archive_state,id,name) values(1,3,'Tom');1 row created.ALEN@PROD2> commit;Commit complete.ALEN@PROD2> alter session set row archival visibility=active;Session altered.ALEN@PROD2> select ora_archive_state,id,name from alen;ORA_ARCHIVE_STATE ID NAME-------------------- ---------- --------------------0 1 Alen

7 禁用行归档

ALEN@PROD2> alter table alen no row archival;Table altered.ALEN@PROD2> select * from alen;ID NAME---------- --------------------1 Alen2 Lucy3 Tom

以上就是Oracle 12c新增特性行归档的使用,通过该特性的隐藏列ora_archive_state可实现数据的删除或归档。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。