Oracle11g新特性:Flashback Data Archive

Oracle11g新特性:Flashback Data Archive

Oracle9i引入flashback query,使得数据库第一次可以查询到之前的数据,而不再需要利用log和备份进行时间点恢复。Oracle10g更是引入flashback version query,flashback transaction query,flashback database,flashback table,flashback drop等特性,并且大大简化了flashback query的使用。Oracle11g则为flashback家族又带来一个新的成员:flashback data archive

初看起来,flashback data archive和flashback query没有太大的不同,都是通过as of能够查询之前的数据,但是他们的实现机制是不一样的。Flashback query是通过直接从undo中读取信息来构造旧数据,这样就有一个限制,就是undo中的信息不能被覆盖。而undo段是循环使用的,只要事务提交,之前的undo信息就可能被覆盖,虽然可以通过undo_retention等参数来延长undo的存活期,但这个参数会影响所有的事务,设置过大,可能导致undo tablespace快速膨胀。

Falshback data archive特性则通过将变化数据另外存储到创建的flashback archive中,以和undo区别开来,这样就可以通过为flashback archive单独设置存活策略,使得可以闪回到指定时间之前的旧数据而不影响undo策略。并且可以根据需要指定哪些数据库对象需要保存历史变化数据,而不是将数据库中所有对象的变化数据都保存下来,这样可以极大的减少空间需求。

flashback_data_archive

[继续阅读全文]

Oracle11g新特性:dba_users不再显示密码

我们知道,oracle用户的密码是加密后存储在数据字典中的,可以通过dba_users视图查看到加密后的密码。虽然密码是经过加密存储的,但是从信息安全的角度来看,暴露的信息越多越不安全,所以即使是加密后的密码泄漏,也可能造成很严重的安全问题。所以,在Oracle11g中,除了可以选择加强的密码算法,更加严格的密码强度,还有一点加强,就是不再在dba_uses.password中显示加密后的密码了。

[继续阅读全文]

Oracle11g新特性:server result cache续

之前投给It168的一篇文章中简单点评了一下Oracle11g的这个新特性,当时没有软件所以没有给出例子。本文主要是实际的测试演示一下server result cache。

Server result cache是在shared pool中为查询结果开辟一块专用的缓存,通过新引入的一个初始化参数来控制该cache的大小:result_cache_max_size。如果result_cache_max_size=0则表示禁用该特性。参数result_cache_max_result则控制单个缓存结果可以占总的Server result cache大小的百分比。另外还有一个初始化参数用于控制Server result cache的模式:result_cache_mode,如果取值为auto,则优化器会自动判断是否将查询结果缓存;如果取值为manual(这是默认值),则需要通过查询提示result_cache来告诉优化器是否缓存结果;如果取值为force,则系统会尽可能的缓存查询结果,当然,即使参数取值为force,也可以通过提示no_result_cache来拒绝缓存结果。在itpub关于该特性的讨论中,有人提到,文档中result_cache_mode只有manual/force两个取值。这个可能是文档的bug,通过给参数赋一个非法值得到的报错信息中明白的说明有三个取值:

SQL> alter session set result_cache_mode=a;
ERROR:
ORA-00096: invalid value A for parameter result_cache_mode, must be from among FORCE, MANUAL, AUTO

Oracle11g还引入了一个package专门用于管理server result cache:dbms_result_cache

[继续阅读全文]

Oracle11g新特性:只读表(read only table)

Oracle11g推出了一个新的特性,可以将table置于read only状态,处于该状态的table的不能执行DML操作和某些DDL操作。在Oracle11g之前的版本,只能将整个tablespace或者database置于read only状态。对于table的控制则只能通过权限来设定。

SQL> create table t(i int);
 
Table created.
 
SQL> insert into t values(1);
 
1 row created.
 
SQL> commit;
 
Commit complete.
SQL> alter table t read only;
 
Table altered.
 
SQL> select read_only from user_tables where table_name='T';
 
READ_ONLY
----
--
YES

[继续阅读全文]