Oracle Database 12c中引入了 In-Database Archiving的新特性, 该特性允许用户通过对表上的数据行标记为inactive不活跃的,以归档数据。 这些inactive的数据行可以通过压缩进一部优化,且对应用来说默认不可见。该特性可以对现有代码做最少改动的情况下,实现了这种“标记删除”的功能和需求。

12c之前:
有些应用有“标记删除”的概念,即不是删除数据,而是数据依然保留在表中,只是对应用不可见而已。这种需求通常通过如下方法实现:
1)  给相关表增加一个另外的列,该列存储标志数据被删除的标记。
2)  给每个语句增加一个谓词,检查被删除行的状态,像:“WHERE deleted = 'N'”,以便排除被删除行。 谓词能被硬编码进SQL语句中,或动态应用类似VPD的安全策略。

12c之后:
1.   开启数据库内归档
ROW ARCHIVAL子句被用来开启数据库内归档。该子句可以用在创建表时用在CREATE TABLE中,也可以在表创建后用在ALTER TABLE中。

--创建表并开启数据库内归档特性
SQL>grant select on dba_objects to c##andy container=all;
SQL> conn c##andy/andy
Connected.
SQL>create table ida as select object_name,object_id from dba_objects where 1=2;
SQL>insert into ida select object_name,object_id from dba_objects order by object_id fetch first 10 percent rows only;
7281 rows created.
SQL> alter table ida ROW ARCHIVAL; 或者在建表的时候指定 create table (XXX) ROWARCHIVAL;
Table altered.
--检查表内容
SQL>SELECT COUNT(*) FROM ida;
  COUNT(*)
----------
      7281
SQL> desc ida;
 Name   Null?    Type
 ----------------------------------------- -------- ----------------------------
 OBJECT_NAME    VARCHAR2(128)
 OBJECT_ID    NUMBER

开启数据库内归档特性将会引起表另外增加一个叫做“ORA_ARCHIVE_STATE”系统隐藏列。
SQL>
COL column_name FORMAT A20;
COL data_type FORMAT A20;
SELECT column_id,
column_name,
data_type,
data_length,
hidden_column
FROM user_tab_cols
WHERE table_name = 'IDA'
ORDER BY column_id;
COLUMN_ID COLUMN_NAME DATA_TYPE    DATA_LENGTH HID
---------- -------------------- -------------------- ----------- ---
1 OBJECT_NAME VARCHAR2     128 NO
2 OBJECT_ID NUMBER      22 NO
  SYS_NC00003$ RAW     126 YES
  ORA_ARCHIVE_STATEVARCHAR2    4000 YES

默认的,该列的每行被填充为‘0’。
SQL>
COL ora_archive_state FORMAT A20;
SELECT ora_archive_state,COUNT(*)
FROM ida
GROUP BY ora_archive_state
ORDER BY ora_archive_state;
ORA_ARCHIVE_STATE      COUNT(*)
-------------------- ----------
0   7281

2.   归档(删除)的行
并非删除不需要的行,而是把ORA_ARCHIVE_STATE系统隐藏列的值更改为‘1’。这将导致应用看不到这些行。
SQL>
UPDATE ida
SET ora_archive_state ='1'
WHERE object_id>7000;
284 rows updated.
SQL>COMMIT;

SQL>SELECT COUNT(*) FROM ida; 
  COUNT(*)
----------
      6997  > 已经出现隐藏列了

3.   显示归档行
通过将ROW_ARCHIVAL_VISIBILITY设置为ALL,可以使得这些隐藏行对会话可见。将该参数设置回ACTIVE可以再次使这些行不可见。
--使归档的行可见
SQL>ALTER SESSION SET ROW ARCHIVAL VISIBILITY = ALL;
SQL>SELECT COUNT(*) FROM ida;
  COUNT(*)
----------

7281     > 隐藏行对会话可见

--使归档行再次不可见
SQL>ALTER SESSION SET ROW ARCHIVAL VISIBILITY = ACTIVE;

SQL>SELECT COUNT(*) FROM ida;
  COUNT(*)
----------
      6997    > 隐藏行对会话不可见

--禁用并重新开启数据库内归档特性
SQL>ALTER TABLE ida NO ROW ARCHIVAL;
SQL>ALTER TABLE ida ROW ARCHIVAL;

Oracle 12c 新特性之 数据库内归档(In-Database Archiving)的更多相关文章

  1. Oracle12c中数据删除(delete)新特性之数据库内归档功能

    有些应用有“标记删除”的概念,即不是删除数据,而是数据依然保留在表中,只是对应用不可见而已.这种需求通常通过如下方法实现: 1)  给相关表增加一个另外的列,该列存储标志数据被删除的标记. 2)  给 ...

  2. Oracle 12c新特性

    转载自:Oracle 12c新特性(For DBA) 一: Multitenant Architecture (12.1.0.1)      多租户架构是Oracle 12c(12.1)的新增重磅特性 ...

  3. Oracle 12C 新特性之扩展数据类型(extended data type)

    Oracle 12C 新特性-扩展数据类型,在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的大小会从4K以及2K字节扩展至32K字节.只要可能,扩展字 ...

  4. Oracle 12C 新特性之在线重命名、迁移活跃的数据文件

    Oracle 数据库 12c 版本中对数据文件的迁移或重命名不再需要太多繁琐的步骤,可以使用 ALTER DATABASE MOVE DATAFILE 这样的 SQL 语句对数据文件进行在线重命名和移 ...

  5. Oracle 12c新特性之——TABLE ACCESS BY INDEX ROWID BATCHED

    Oracle12c开始,我们在获取SQL语句的执行计划时,也会经常看到"TABLE ACCESS BY INDEX ROWID BATCHED"操作,那么,这个操作到底是什么意思呢 ...

  6. Oracle 12c新特性(For DBA)

    一: Multitenant Architecture (12.1.0.1)      多租户架构是Oracle 12c(12.1)的新增重磅特性,内建的多分租(Multi-tenancy),一个容器 ...

  7. ORACLE 12C新特性——CDB与PDB

    Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库( ...

  8. Oracle 12C 新特性之表分区带 异步全局索引异步维护(一次add、truncate、drop、spilt、merge多个分区)

    实验准备:-- 创建实验表CREATE TABLE p_andy(ID number(10), NAME varchar2(40))PARTITION BY RANGE (id)(PARTITION ...

  9. Oracle 12C 新特性之 PDB热克隆(本地克隆、远端异机克隆)

    说明:版本12.2.0.1 12c r1版本中 clone 一份PDB源库需要打开在read only只读模式 , 在12c r2版本中引入了local undo mode, 源PDB在read/wr ...

随机推荐

  1. full stack on the road

    Full Stack, I'm coming. 有人说全栈只是个理想情况,但我不这么认为,因为好多思想是想通的, 比如 OO.函数式编程.设计模式... 也有人说搞全栈的人样样普通,可是为嘛我在学习j ...

  2. vue介绍和简单使用

    Vue是什么? Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易 ...

  3. picasso设置背景图片

    compile'com.squareup.picasso:picasso:2.5.2' String url = "http://192.168.191.1:8080/b"+(i+ ...

  4. 图形数据库(GraphDB)

    Date: 2016-01-27 Title: 图形数据库-1 Published: true Type: post Excerpt: Category: GraphDB 图形数据库(GraphDB) ...

  5. rtpdataheader.h

    #ifndef RTPDATAHEADER_H #define RTPDATAHEADER_H // For 32bit intel machines typedef short int16; typ ...

  6. R中常用数据挖掘算法包

    数据挖掘主要分为4类,即预测.分类.聚类和关联,根据不同的挖掘目的选择相应的算法.下面对R语言中常用的数据挖掘包做一个汇总: 连续因变量的预测: stats包 lm函数,实现多元线性回归 stats包 ...

  7. ARDUINO解析GPS数据,读取出来GPRMC帧数据

    测试板子使用ARDUINO MEGA2560 #include <TimerOne.h> #define GPSSerial Serial1 #define DebugSerial Ser ...

  8. oldboyshell编程扩展内容

    oldboyshell编程扩展内容一.命令的优先级 命令分为: ==> alias ==> Compound Commands ==> function  ==> build_ ...

  9. nodejs之入门

    一.安装: 去官网下载稳定版本,安装即可. 安装后执行node -v,显示node版本,然后输入node回车,然后输出console.log(111);,正常输出即可. 二.入门介绍: 1.nodej ...

  10. 【leetcode刷题笔记】Unique Binary Search Trees II

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...