Oracle 12c 新特性之 数据库内归档(In-Database Archiving)

简介:

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;



本文转自 张冲andy 博客园博客,原文链接: http://www.cnblogs.com/andy6/p/6832249.html  ,如需转载请自行联系原作者

相关文章
|
3月前
|
SQL 机器学习/深度学习 Oracle
关系型数据库Oracle关键特性
【7月更文挑战第5天】
56 3
|
2月前
|
SQL Oracle 关系型数据库
"揭秘!一键解锁Oracle日志清理魔法,让海量归档日志无处遁形,守护数据库健康,告别磁盘空间告急噩梦!"
【8月更文挑战第9天】随着Oracle数据库在企业应用中的普及,归档日志管理对保持数据库健康至关重要。归档日志记录所有更改,对数据恢复极为重要,但也可能迅速占用大量磁盘空间影响性能。利用Oracle提供的RMAN工具,可通过编写Shell脚本来自动清理归档日志。脚本包括设置环境变量、连接数据库、检查和删除指定时间前的日志,并记录执行情况。通过Cron作业定时运行脚本,可有效管理日志文件,确保数据库稳定运行。
74 7
|
2月前
|
SQL 算法 关系型数据库
(二十)MySQL特性篇:2022年的我们,必须要懂的那些数据库新技术!
 MySQL数据库从1995年诞生至今,已经过去了二十多个年头了,到2022.04.26日为止,MySQL8.0.29正式发行了GA版本,在此之前版本也发生了多次迭代,发行了大大小小N多个版本,其中每个版本中都有各自的新特性,所有版本的特性加起来,用一本书的篇幅也无法完全阐述清楚,因此本章主要会挑重点特性来讲,具体各版本的特性可参考MySQL官网的开发手册。
|
2月前
|
存储 安全 NoSQL
|
3月前
|
存储 SQL Oracle
关系型数据库Oracle归档日志备份
【7月更文挑战第19天】
59 5
|
3月前
|
SQL Oracle 关系型数据库
Oracle 12c有哪些新特性?
【7月更文挑战第20天】Oracle 12c有哪些新特性?
47 2
|
3月前
|
存储 Oracle 关系型数据库
Oracle数据库ACID特性
【7月更文挑战第6天】
70 6
|
4月前
|
SQL 关系型数据库 数据管理
数据管理DMS产品使用合集之归档数据至其它MySQL数据库时,如何指定目的库
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
60 1
|
4月前
|
SQL Oracle 关系型数据库
探索 Linux 命令 `db_archive`:Oracle 数据库归档日志的工具
探索 Linux 中的 `db_archive`,实际与 Oracle 数据库归档日志管理相关。在 Oracle 中,归档日志用于恢复,当在线重做日志满时自动归档。管理员可使用 SQL*Plus 查看归档模式,通过 `RMAN` 进行备份和恢复操作。管理归档日志需谨慎,避免数据丢失。了解归档管理对 Oracle 管理员至关重要,确保故障时能快速恢复数据库。
|
4月前
|
SQL 安全 关系型数据库
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
71 1

推荐镜像

更多