oracle12c 清理归档,Oracle 12c中数据删除(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 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)新特性之数据库内归档功能相关推荐
- oracle12c生命周期,Oracle 12c 新特性之: ILM 数据生命周期管理
张乐奕 云和恩墨副总经理,Oracle ACE总监,ACOUG 联合创始人 ILM 全称是 Information Lifecycle Management,意思是信息生命周期管理,听上去很高端洋气的 ...
- oracle 12c创建归档,oracle 12c 数据归档 即Using In-Database Archiving feature
在oracle 12c 通过Using In-Database Archiving feature 特性,来启到分离在线数据和历史数据的作用, 即数据归档,应用可以有选择性的访问在线数据或者历史数据, ...
- Oracle 12c中增强的PL/SQL功能
英文链接:http://www.oracle.com/technetwork/issue-archive/2013/13-sep/o53plsql-1999801.html Oracle 12c增强了 ...
- oracle12c启动apply,Oracle 12c 新特性 -- DG 默认使用 Real-Time Apply
https://www.cndba.cn/dave/article/213 1 理论说明 在Oracle 12c 之前的Data Guard 环境中,默认情况下备库apply redo 是从备库 ...
- oracle数据库中批量把一张表里面的数据插入到不同的表中的方法
oracle数据库中批量把一张表里面的数据插入到不同的表中的方法(insert first into | insert all into) 准备环境 1.oracle数据库自带的scott下的用户表 ...
- oracle里面cat,Oracle 12c 中推荐使用 catcon.pl 执行SQL脚本
https://www.cndba.cn/dave/article/225https://www.cndba.cn/dave/article/225 1 说明 在Oracle 12c中,Orac ...
- Oracle 21C 新特性:数据泵相关新特性汇总
墨墨导读:本文来自墨天轮用户"JiekeXu"投稿,墨天轮主页:https://www.modb.pro/u/434,本文分享Oracle 21c 新特性:数据泵相关新特性汇总. ...
- Python 3.10 中的 6 个新特性,你体验了吗?
作者 | Sara A. Metwalli 译者 | 有数可据 出品 | CSDN(ID:CSDNnews) 新的 Python 版本推出了有趣的新功能. Python 是当今最流行的编程语言之一.它 ...
- 极速体验:Oracle 18c下载和Scalable Sequence新特性
Oracle 18c 如约已至,目前已经可以从 Oracle Edelivery 网站下载.该网站地址是:https://edelivery.oracle.com 搜索 Oracle Database ...
最新文章
- mbr备份以及破坏后如何恢复
- 【技术交流】让我们来谈一谈多线程和并发任务
- missing LSB tags and overrides
- TensorFlow Dropout
- 推荐一款可以监控电脑软硬件和操作电脑的微信小程序,名叫HiPC
- python模拟ajax请求_短信炸弹—用Python模拟ajax请求
- QT之深入理解QThread
- python 进程池阻塞和非阻塞_python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)...
- “Device eth0 does not seem to be present”解决办法
- CSS设置一行文字,超出部分自动隐藏
- 数据库 SQL Server2012安装步骤详解
- ec12编码器电路图_旋转编码器电路原理图
- 网络封包编辑器mysql_WapCn网络封包编辑器
- TL431和PC817在开关电源中的工作详解
- 驱动程序开发:无设备树和有设备树的platform驱动
- python IDLE设置了清屏插件,不起作用怎么办
- MySQL 查询一个表的大小
- input输入框限制中文汉字只能输入20个字符,英文10个字符!
- FPG-超越FPN/NAS-FPN的表现 | Feature Pyramid Grids
- vivo自带便签新版_vivo手机便签怎么导出到新手机?
热门文章
- 《终身成长》读书笔记(part3)--如果一个人能学会什么东西,那么世界上其他人也都可以学会
- latex设置一级标题样式不居中_Markdown不快速入门
- 用 ABAP 读取本地文本文件内容
- 今日头条PC端的状态管理,使用的实现库是Redux
- SAP Spartacus里的injector
- JSP的session处理
- Fiori Elements - OData metadata response and annotation merge
- Visual Studio Code里一个查看括号匹配的神器 - Bracket Pair Colorizer
- SpringBoot的配置优先级,一个具体的练习例子
- SAP SD数据库表一览