Oracle12c中数据删除(delete)新特性之数据库内归档功能
有些应用有“标记删除”的概念,即不是删除数据,而是数据依然保留在表中,只是对应用不可见而已。这种需求通常通过如下方法实现:
1) 给相关表增加一个另外的列,该列存储标志数据被删除的标记。
2) 给每个语句增加一个谓词,检查被删除行的状态,像:“WHERE deleted = 'N'”,以便排除被删除行。 谓词能被硬编码进SQL语句中,或动态应用类似VPD的安全策略。
数据库内归档是Oracle12c的新特性,该特性可以对现有代码做最少改动的情况下,实现了这种“标记删除”的功能和需求。
1. 开启数据库内归档
ROW ARCHIVAL子句被用来开启数据库内归档。该子句可以用在创建表时用在CREATE TABLE中,也可以在表创建后用在ALTER TABLE中。
DROPTABLE tab1 PURGE;
--创建表并开启数据库内归档特性
CREATETABLE tab1 (
no NUMBER,
desc VARCHAR2(50),
CONSTRAINT tab1_pk PRIMARY KEY (no)
)
ROWARCHIVAL;
--禁用并重新开启数据库内归档特性
ALTERTABLE tab1 NO ROW ARCHIVAL;
ALTERTABLE tab1 ROW ARCHIVAL;
--往表中加入1000行数据。
INSERT/*+ APPEND */ INTO tab1
SELECTlevel, 'Description of ' || level
FROM dual
CONNECTBY level <= 1000;
COMMIT;
--检查表内容
SELECTCOUNT(*) FROM tab1;
COUNT(*)
----------
1000
SQL>
开启数据库内归档特性将会引起表另外增加一个叫做“ORA_ARCHIVE_STATE”系统隐藏列。
COLUMNcolumn_name FORMAT A20
COLUMNdata_type FORMAT A20
SELECTcolumn_id,
column_name,
data_type,
data_length,
hidden_column
FROM user_tab_cols
WHERE table_name = 'TAB1'
ORDERBY column_id;
COLUMN_ID COLUMN_NAME DATA_TYPE DATA_LENGTH HID
------------------------------ -------------------- ----------- ---
1NO NUMBER 22 NO
2DESC VARCHAR2 50 NO
ORA_ARCHIVE_STATE VARCHAR2 4000 YES
SQL>
默认的,该列的每行被填充为‘0’。
COLUMNora_archive_state FORMAT A20
SELECTora_archive_state, COUNT(*)
FROM tab1
GROUPBY ora_archive_state
ORDERBY ora_archive_state;
ORA_ARCHIVE_STATE COUNT(*)
------------------------------
0 1000
1row selected.
SQL>
2. 归档(删除)的行
并非删除不需要的行,而是把ORA_ARCHIVE_STATE系统隐藏列的值更改为‘1’。这将导致应用看不到这些行。
UPDATEtab1
SET ora_archive_state = '1'
WHERE no BETWEEN 751 and 1000;
COMMIT;
SELECTCOUNT(*) FROM tab1;
COUNT(*)
----------
750
SQL>
其实,可以把ORA_ARCHIVE_STATE列设置为非‘0‘的其他任何字符串值来归档这些数据,但DBMS_ILM包使用如下常量。
1) ARCHIVE_STATE_ACTIVE='0'
2) ARCHIVE_STATE_ARCHIVED='1'
3. 显示归档行
通过将ROW_ARCHIVAL_VISIBILITY设置为ALL,可以使得这些隐藏行对会话可见。将该参数设置回ACTIVE可以再次使这些行不可见。
--使归档的行可见
ALTERSESSION SET ROW ARCHIVAL VISIBILITY = ALL;
SELECTCOUNT(*) FROM tab1;
COUNT(*)
----------
1000
SQL>
COLUMNora_archive_state FORMAT A20
SELECTora_archive_state, COUNT(*)
FROM tab1
GROUPBY ora_archive_state
ORDERBY ora_archive_state;
ORA_ARCHIVE_STATE COUNT(*)
------------------------------
0 750
1 250
2rows selected.
SQL>
--使归档行再次不可见
ALTERSESSION SET ROW ARCHIVAL VISIBILITY = ACTIVE;
SELECTCOUNT(*) FROM tab1;
COUNT(*)
----------
750
SQL>
Oracle12c中数据删除(delete)新特性之数据库内归档功能的更多相关文章
- Oracle12c中性能优化增强新特性之数据库智能闪存
智能闪存功能最初在XD中引入.从Oracle11.2.0.2开始,除了用于XD存储,还可用于任何闪盘.Oracle12c中,不需卷管理器就可以使用闪盘. 1. 简介 智能闪存在solaris和lin ...
- Oracle12c中PL/SQL(DBMS_SQL)新特性之隐式语句结果(DBMS_SQL.RETURN_RESULT and DBMS_SQL.GET_NEXT_RESULT)
隐式数据结果特性将能简化从其他数据库到Oracle12c存储过程迁移.1. 背景T-SQL中允许查询结果的隐式返回.例如:下面T-SQL存储过程隐式返回查询结果.CREATE PROCEDURE Ge ...
- Oracle12c中容错&性能新特性之表空间组
1. 简介 表空间组可以使用户消耗来自多个表空间的临时表空间.表空间组有如下特点: 1) 至少包含一个表空间.表空间组中包含的最大表空间数没有限制. 2) 和表空间共 ...
- 简单理解ECMAScript2015中的箭头函数新特性
箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...
- 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件
[源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...
- ABAP 7.52 中的Open SQL新特性
S/4 HANA 1709 已经在几个月前发布,随之而来的是ABAP 7.52. 本文翻译了更新文档中有关Open SQL的部分 本文链接:http://www.cnblogs.com/hhelibe ...
- ABAP 7.40, SP08 中的 Open SQL 新特性
1,使用 data_source~*指定列 在7.40, SP08中,可以在SELECT语句中使用data_source~*来指定选取不同的数据库表.视图的全部列来作为结果集.它也可以和单独指定的列c ...
- 【SharePoint学习笔记】第3章 SharePoint列表新特性以及数据访问
第3章 SharePoint列表新特性以及数据访问 使用CAML查询语言 CAML:协作应用程序标记语言 Collaboration Application Markup Language ...
- [SQL基础教程] 4-2 数据删除(DELETE)
[SQL基础教程] C4 数据更新 4-2 数据删除(DELETE) DROP TABLE / DELETE DROP TABLE - 完全删除表 DELETE - 仅删除数据,保留表容器 DELET ...
- Java 9中的 9个 新特性
Java 9 中的 9个 新特性 java 7 2011发布,Java 8 2014发布,java9发布于2017年9月21日. 你可能已经听说过 Java 9 的模块系统,但是这个新版本还有许多其它 ...
随机推荐
- Linux系统安装telnet以及xinetd服务
Linux系统安装telnet以及xinetd服务 一.安装telnet 1.检测telnet-server的rpm包是否安装 # rpm -qa telnet-server 若无输入内容,则表示没有 ...
- mysql服务器,大量tcp连接状态TIME_WAIT
今天早上,java应用中发现too many open files,检查了下使用的连接数发现基本上在两三百左右,mysql打开的文件数也就几百左右,再看所有tcp连接,发现3306的连接有4000多, ...
- 贪婪算法(Greedy Algorithm)
Greedy Algorithm <数据结构与算法--C语言描述> 图论涉及的三个贪婪算法 Dijkstra 算法 Prim 算法 Kruskal 算法 Greedy 经典问题:coin ...
- zabbix-server新增zabbix-agent
zabbix监控系统搭建好了之后,就需要为各种角色host加入进来,现在新增一台zabbix-agent: 1.在172.16.23.128上安装zabbix-agent,zabbix-server: ...
- 2018-2019-1 20189218《Linux内核原理与分析》第七周作业
task_struck数据结构 在Linux内核中,通过task_struct这个结构体对进程进行管理,我们可以叫他PCB或者进程描述符.这个结构体定义在include/linux/sched.h中. ...
- DTMF在VOIP中的解决方案
双音多频DTMF(Dual Tone Multi-Frequency)信令,因其提供更高的拨号速率,迅速取代了传统转盘式电话机使用的拨号脉冲信令.DTMF也应用在交互式控制中,诸如语言菜单.语言邮件. ...
- Email移动的原理
1.从数据库中得到被移动邮件的uid: 2.选择移动邮件所属folder,即SelectFolder; 3.调用copymessage(path,vmime::net::messageset::byU ...
- 第八章 对称加密算法--AES
注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第7章“初等加密算法--对称加密算法” 8.1.AES 特点: 密钥建立时间短.灵敏性好.内存需求低(不管怎样,反正就是好) ...
- shiro(1) 介绍
一.什么是shiro (1)属性:java框架 (2)用途:身份验证.用户授权.加密.会话管理 (3)优点:轻量.易用 二.三大组件 (1)subject:代表当前主体,与当前应用交互的任何东西都是s ...
- Linux基础※※※※连接XShell到Ubuntu 14.04 LTS
参考链接: 博客链接1:http://blog.csdn.net/lichangzai/article/details/39379153 百度百科:http://baike.baidu.com/lin ...