有些应用有“标记删除”的概念,即不是删除数据,而是数据依然保留在表中,只是对应用不可见而已。这种需求通常通过如下方法实现:

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 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 清理归档,Oracle 12c中数据删除(delete)新特性之数据库内归档功能相关推荐

  1. oracle12c生命周期,Oracle 12c 新特性之: ILM 数据生命周期管理

    张乐奕 云和恩墨副总经理,Oracle ACE总监,ACOUG 联合创始人 ILM 全称是 Information Lifecycle Management,意思是信息生命周期管理,听上去很高端洋气的 ...

  2. oracle 12c创建归档,oracle 12c 数据归档 即Using In-Database Archiving feature

    在oracle 12c 通过Using In-Database Archiving feature 特性,来启到分离在线数据和历史数据的作用, 即数据归档,应用可以有选择性的访问在线数据或者历史数据, ...

  3. Oracle 12c中增强的PL/SQL功能

    英文链接:http://www.oracle.com/technetwork/issue-archive/2013/13-sep/o53plsql-1999801.html Oracle 12c增强了 ...

  4. oracle12c启动apply,Oracle 12c 新特性 -- DG 默认使用 Real-Time Apply

    https://www.cndba.cn/dave/article/213 1    理论说明 在Oracle 12c 之前的Data Guard 环境中,默认情况下备库apply redo 是从备库 ...

  5. oracle数据库中批量把一张表里面的数据插入到不同的表中的方法

    oracle数据库中批量把一张表里面的数据插入到不同的表中的方法(insert first into | insert all into) 准备环境 1.oracle数据库自带的scott下的用户表 ...

  6. oracle里面cat,Oracle 12c 中推荐使用 catcon.pl 执行SQL脚本

    https://www.cndba.cn/dave/article/225https://www.cndba.cn/dave/article/225 1    说明 在Oracle 12c中,Orac ...

  7. Oracle 21C 新特性:数据泵相关新特性汇总

    墨墨导读:本文来自墨天轮用户"JiekeXu"投稿,墨天轮主页:https://www.modb.pro/u/434,本文分享Oracle 21c 新特性:数据泵相关新特性汇总. ...

  8. Python 3.10 中的 6 个新特性,你体验了吗?

    作者 | Sara A. Metwalli 译者 | 有数可据 出品 | CSDN(ID:CSDNnews) 新的 Python 版本推出了有趣的新功能. Python 是当今最流行的编程语言之一.它 ...

  9. 极速体验:Oracle 18c下载和Scalable Sequence新特性

    Oracle 18c 如约已至,目前已经可以从 Oracle Edelivery 网站下载.该网站地址是:https://edelivery.oracle.com 搜索 Oracle Database ...

最新文章

  1. mbr备份以及破坏后如何恢复
  2. 【技术交流】让我们来谈一谈多线程和并发任务
  3. missing LSB tags and overrides
  4. TensorFlow Dropout
  5. 推荐一款可以监控电脑软硬件和操作电脑的微信小程序,名叫HiPC
  6. python模拟ajax请求_短信炸弹—用Python模拟ajax请求
  7. QT之深入理解QThread
  8. python 进程池阻塞和非阻塞_python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)...
  9. “Device eth0 does not seem to be present”解决办法
  10. CSS设置一行文字,超出部分自动隐藏
  11. 数据库 SQL Server2012安装步骤详解
  12. ec12编码器电路图_旋转编码器电路原理图
  13. 网络封包编辑器mysql_WapCn网络封包编辑器
  14. TL431和PC817在开关电源中的工作详解
  15. 驱动程序开发:无设备树和有设备树的platform驱动
  16. python IDLE设置了清屏插件,不起作用怎么办
  17. MySQL 查询一个表的大小
  18. input输入框限制中文汉字只能输入20个字符,英文10个字符!
  19. FPG-超越FPN/NAS-FPN的表现 | Feature Pyramid Grids
  20. vivo自带便签新版_vivo手机便签怎么导出到新手机?

热门文章

  1. 《终身成长》读书笔记(part3)--如果一个人能学会什么东西,那么世界上其他人也都可以学会
  2. latex设置一级标题样式不居中_Markdown不快速入门
  3. 用 ABAP 读取本地文本文件内容
  4. 今日头条PC端的状态管理,使用的实现库是Redux
  5. SAP Spartacus里的injector
  6. JSP的session处理
  7. Fiori Elements - OData metadata response and annotation merge
  8. Visual Studio Code里一个查看括号匹配的神器 - Bracket Pair Colorizer
  9. SpringBoot的配置优先级,一个具体的练习例子
  10. SAP SD数据库表一览