Oracle11g新特性之:数据压缩技术

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle11g新特性之:数据压缩技术相关的知识,希望对你有一定的参考价值。

参考技术A

  随着数据量的不断海量 CPU的不断强劲 双核四核的叫个不停 一种叫做时间换空间的优化技术应该会越来越流行 所以 数据压缩对于今后的数据库来说 应该会从核武器变成常规武器 Oracle从 i开始羞羞答答的引入表级压缩 一直以来都是像中国的核电站一样 宣传的用处大 论实际的贡献就不怎么样了

  Oracle g似乎是正儿八经的要推广数据压缩技术了 专门推出了一个叫做Advance Compression的组件 全面支持普通表压缩 非结构化数据压缩(SecureFile数据压缩) Data Pump数据压缩 以及RMAN备份压缩 数据压缩技术从此名正言顺的登上历史舞台 既然是专门做为一个Option推出 Oracle一定是对该特性相当有信心 所以需要单独为该特性购买License

  在Oracle i中虽然引入了表压缩 但是有很大的限制 只能对批量装载操作(比如直接路径装载 CTAS等)涉及的数据进行压缩 普通的DML操作的数据是无法压缩的 这应该是对于写操作的压缩难题没有解决 一直遗留到Oracle g 总算是解决了关系数据压缩的写性能问题 Oracle的表压缩是针对Block级别的数据压缩 主要技术和Oracle i差不多 还是在Block中引入symbol表 将block中的重复数据在symbol中用一个项表示 Oracle会对block进行批量压缩 而不是每次在block中写入数据时都进行压缩 通过这种方式 可以尽量降低数据压缩对于DML操作的性能影响 这样 在block级别应该会引入一个新的参数 用于控制block中未压缩的数据量达到某个标准以后进行压缩操作

  SecureFile也是Oracle g新推出的一项特性 用于存储非结构化数据 SecureFile也将支持数据压缩操作 这样对于传统的LOB字段也可以进行压缩 将极大的减少大型数据库的存储空间需求 当然 有得比有失 压缩和解压时 对于CPU的要求也将更高 但是 目前CPU的发展速度明显比IO和存储空间快速的情况下 压缩是大有可为的技术 通过在压缩率和压缩效率方面的不断提升 以后应该为成为各个数据库的标准配置

  除了对数据库中的数据进行压缩 Advance Compression Option还将支持备份数据的压缩 做为逻辑备份的Data Pump和物理备份的RMAN工具 都将支持该技术 在Oracle gR 中 Data Pump已经开始支持压缩源数据 Oracle g中则可以直接压缩导出文件 这样导出的时候就可以极大的减少存储空间的需求 在以前版本中 利用WinRAR等 经常可以将几个G的导出文件压缩到几十M Oracle g的白皮书上说压缩率可以达到 % 等软件出来 大家可以好好的测试一把 同样的 Oracle也在 g中开始引入RMAN的压缩技术 但是Oracle g号称采用了更先进的ZLIB要所算法 可以比Oracle g的压缩算法快上 % 空间需求也将减少 %

  除了上述的数据压缩技术 Oracle g Advanced Compression Option还将引入另外一种压缩技术 我们知道在Data Guard中 需要将日志从主库传递到备库 如果主库的事务很多 则单位时间内需要传递的日志量将相当可观 如果能将这些日志压缩后在传递 然后在备库解压后应用 将极大的减少对于网络带宽的需求 从而已减少主备库的时间差

  另外 Oracle的bitmap一直就是压缩存储的 g中的bitmap对于 i就有比较大的改动 通过一些细节的完善 提供更好的性能和更高的稳定性 也是oracle一贯的风格 对于bitmap在Oracle g中将如何实现 也将是非常值得关注的一个特点

lishixinzhi/Article/program/Oracle/201311/16929

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;








































































































以上是关于Oracle11g新特性之:数据压缩技术的主要内容,如果未能解决你的问题,请参考以下文章

oracle 11G表压缩

oracle11g和oracle10g的区别

win10下oracle11g数据库突然连接失败怎么办

win10下oracle11g数据库突然连接失败怎么办

Oracle11g新特性点评之RMAN

Oracle 11g 压缩表无法增加删除字段