Jul
01
2007

Oracle忽然很倾向于使用Vault(保险库)这个词语了,推出了Oracle Database Vault,现在又是Oracle Audit Vault。
官方文档的示意图给出Oracle Audit Vault的整体架构。

OAV是一个新的安全产品(塞班斯法案害人不浅啊),如果说Oracle Database Vault是完善了对于数据库SYSDBA的权限控制,那么Oracle Audit Vault则是对于企业内部违规者的进一步预防和监控。目前OAV只针对于Oracle的数据库产品,支持Oracle Database 9i到10gR2的所有数据库版本,实现的是自动获捕获,存储,分析审计数据的功能。
OAV的元数据可以是数据库redo日志,数据库Audit日志以及操作系统Audit日志,这些元数据被Audit Agent通过预先制定的捕获规则抓取到Audit Server中,而Audit Server端则提供了多样的报表查询,并且根据预先定义的企业策略提供违规操作告警功能。
OAV是针对Sarbanes-Oxley (SOX)的应景之作,它还有很长的路要走,作为一个安全产品,仅仅是面向Oracle数据库还是远远不够的,Oracle也承诺将在以后逐步完善对于Microsoft SQL Server和IBM UDB的支持。
目前Oracle Audit Vault已经推出了大部分平台上的版本,包括Linux, AIX, HP-UX, Soalris,而Windows和HP-Itanium的版本也将在不久推出,不知道国内的企业什么时候才会准备考虑这些安全方面的产品?
Oracle 


Oracle Audit Vault 


Jul
01
2007
Partition(分区)一直是Oracle数据库引以为傲的一项技术,正是分区的存在让Oracle高效的处理海量数据成为可能,在即将发布的Oracle 11g中,分区技术在易用性和可扩展性上再次得到了增强。
1. Interval Partitioning
在我曾经的一个项目中,由于数据量的巨大,所以表设计为每一个小时一个分区,数据库管理员日常要做的一件重复而无聊的工作就是每隔一天要生成新的24个分区,用以存储第二天的数据。
而在11g中这项工作可以交由Oracle自动完成了,基于Range和List的Interval Partitioning分区类型登场。
- CREATE TABLE TB_INTERVAL (time_col date)
- PARTITION BY RANGE (time_col)
- INTERVAL(NUMTOYMINTERVAL(1, 'month'))
- (PARTITION P0 VALUES LESS THAN (TO_DATE('1-1-2007', 'dd-mm-yyyy')));
指定需要Oracle自动创建分区的间隔时间,上面这个例子是1个月,然后至少创建一个基本分区,上面这个例子是在2007-1-1之前的所有数据都在P0分区中,以后每个月的数据都会存放在Oracle自动创建的一个新分区中。
目前还没有更多的资料显示Oracle如何控制每个新分区的属性,比如存放在哪个表空间中,自动创建的数据文件有多大,如果是数据文件是裸设备如何处理,当第一条跨分区的记录插入时实时创建分区效率如何,虽然这些仍然是未知数,但是我们不得不承认这是一个人性化的进步。
2. System Partitioning
又一个人性化的分区类型,系统分区,在这个新的类型中,我们不需要指定任何分区键,数据会进入哪个分区完全由应用程序决定,实际上也就是由SQL来决定,终于,我们在Insert语句中可以指定插入哪个分区了。
假设我们创建了下面这张分区表,注意,没有指定任何分区键:
- CREATE TABLE systab (c1 integer, c2 integer)
- PARTITION BY SYSTEM
- (
- PARTITION p1 TABLESPACE tbs_1,
- PARTITION p2 TABLESPACE tbs_2,
- PARTITION p3 TABLESPACE tbs_3,
- PARTITION p4 TABLESPACE tbs_4
- );
现在由SQL语句来指定插入哪个分区:
- -- 数据插入p1分区
- INSERT INTO systab PARTITION (p1) VALUES (4,5);
- -- 为了实现绑定变量,用pno变量来代替实际分区名,以避免过度解析,physical_partid为分区的data_object_id
- INSERT INTO systab PARTITION (DATAOBJ_TO_PARTITION (base_table, :physical_partid)) VALUES (...);
由于System Partitioning的特殊性,所以很明显,这种类型的分区将不支持Partition Split操作,也不支持create table as select操作。
3. More Composite Partitioning
在10g中,我们知道复合分区只支持Range-List和Range-Hash,而在在11g中复合分区的类型大大增加,现在Range,List,Interval都可以作为Top level分区,而Second level则可以是Range,List,Hash,也就是在11g中可以有3*3=9种复合分区,满足更多的业务需求。
4. Virtual Column-Based Partitioning
Virtual Column是11g中的一个新功能,这种列中的数据并不实际存储于磁盘上(我们可以看成是一个类似Function的列),只有当读取的时候才实时计算。暂时不讨论性能问题,这个功能还是比较有意思的。
可以通过这样的语句来创建虚拟列。
- CREATE TABLE tb_v
- (col_1 number(6) not null,
- col_2 number not null,
- …
- col_v as (col_1 +col_2);
虚拟列虽然没有实际的存储空间,但是却可以跟其他普通列一样,创建索引,作为分区键,甚至可以收集统计信息,这是让人感觉有意思的地方,一个实时计算的Function如何创建索引呢?等到11g推出的时候就真相大白了。
下一篇介绍RMAN的增强。
No Tags