Oracle11g部分新特性移植到9i和10g
Oracle10.2.0.4出来的时候包含了属于Oracle11g的新特性Real Application Testing,现在,通过patch,可以在9i~10g各版本中获得包括SQL Performance Analyzer和Database Replay在内的Oracle11g新特性。
SQL Performance Analyzer可用于诊断由于系统改变等引起的SQL性能问题,通过在做出改变前后收集一个性能统计报告,然后比较得到性能改变的主要原因。
Database Replay则可以捕获产品数据库的压力等,在测试数据库中进行重演,可以更加准确的模拟产品库的压力对应用进行测试,这也是Oracle11g主推的Real Application Testing的主要功能。
要获得这两个新特性,需要安装Patch,对应的Patch请参考:Metalink Note:560977.1
Oracle11g新特性:Active Database Duplicate
利用Rman的duplicate命令,可以很方便的将原库复制出一个新库,这在诸如data guard等应用中非常有用。但是在Oracle11g之前,执行duplicate要求首先对原库用rman进行备份,然后将备份复制到复制库,同时连接原库(做为target)和复制库(做为auxiliary),执行duplicate命令进行复制。在Oracle11g中推出的active database duplicate特性,则省略了进行rman备份的步骤,能够直接从原库复制出新库,对于一些大型的数据库来说,这个特性可以节省很多操作时间。本文将简单的演示一下操作过程(在同一个主机上执行duplicate):
原库:ora11g(归档模式)
新库:oradup
操作系统:windows
一、首先手工创建新的instance
包括windows服务,dump路径,初始化参数文件,password文件,监听配置等等,这些步骤就不赘述了。理论上,初始化参数最少只需要指定db_name一个参数就可以了。当然,简单起见,最好还是设置如下参数:
DB_NAME=ORADUP
CONTROL_FILES=(’F:\ORACLE\ORADATA\ORADUP\CONTROL01.CTL’,
‘F:\ORACLE\ORADATA\ORADUP\CONTROL02.CTL’)
DB_FILE_NAME_CONVERT=(’F:\ORACLE\ORADATA\ORA11G’,'F:\ORACLE\ORADATA\ORADUP’)
LOG_FILE_NAME_CONVERT=(’F:\ORACLE\ORADATA\ORA11G’,'F:\ORACLE\ORADATA\ORADUP’)
log_archive_dest_1=F:\ORACLE\ARCH\ORADUP
compatible=11.1.0
经过试验,必须加入compatible=11.1.0的参数,如果不加,默认是compatible=11.0.0,那么rman duplicate最后在创建控制文件的时候会报错:
RMAN-03002: Duplicate Db 命令 (在 10/23/2007 22:43:40 上) 失败
RMAN-06136: 来自辅助数据库的 ORACLE 错误: ORA-01503: CREATE CONTROLFILE 失败
ORA-01130: 数据库文件版本 11.1.0.0.0 与 ORACLE 版本 11.0.0.0.0 不兼容
ORA-01110: 数据文件 1: ‘F:\ORACLE\ORADATA\ORADUP\SYSTEM01.DBF’
这个应该算是一个bug吧,11.0.0应该是beta版的版本号
加入log_archive_dest_1参数,则是因为最后需要复制原库的归档日志到备库,如果两个库都没有设置归档路径,那么都会放在默认的$ORACLE_HOME\rdbms目录下,就会发生冲突。当然,如果原库和新库在不同的主机上,则只需要db_name和compatible就足够了。
Oracle11g新特性:Automatic Memory Management(AMM)
Oracle9i引入pga_aggregate_target,可以自动对PGA进行调整;Oracle10引入sga_target,可以自动对SGA进行调整。Oracle11g则对这两部分进行综合,引入memory_target,可以自动调整所有的内存,这就是新引入的自动内存管理特性。
System altered.
SQL> alter system set memory_target=200m scope=spfile;
System altered.
SQL> alter system set sga_target=0 scope=spfile;
System altered.
SQL> alter system set pga_aggregate_target=0 scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 209235968 bytes
Fixed Size 1298920 bytes
Variable Size 150998552 bytes
Database Buffers 54525952 bytes
Redo Buffers 2412544 bytes
Database mounted.
Database opened.
Oracle11g新特性:虚拟列virtual column
Oracle11g引入了一个新的特性:虚拟列(Virtual Column)。虚拟列不进行实际的存储,而是通过函数计算得到。目前版本只能在普通的堆表中使用虚拟列,其他如index-organized table, external, object, cluster, 或者temporary table中都还不支持使用虚拟列。
Table created.
其中,virtual关键字可以省略。这样,i3列就是一个基于i1列和i2列计算得到的一个虚拟列。
insert into test values(1,2,3)
*
ERROR at line 1:
ORA-54013: INSERT operation disallowed on virtual columns
NING@11g> insert into test(i1,i2) values(1,2);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test;
I1 I2 I3
---------- ---------- ----------
1 2 3