Oracle数据库12c新特性总结导读:本系列文章是OracleACE总监SyedJafferHussain对Oracle数据库12c的一些新特性总结,包括数据库管理、RMAN、高可用性以及性能调优等内容。关键词:Oracle数据库12cRMANPGA限制不可见字段【TechTarget中国原创】编者按:甲骨文公司近日正式发布了新版旗舰级数据库OracleDatabase12c,在TechTarget数据库网站之前的一些报道中,我们曾对12c的一些新特性进行了介绍(参考:尝鲜OracleDatabase12c的十二大新特性)而随着产品正式GA,相关技术文档也披露了更多关于12c数据库的细节。本系列文章是OracleACE总监SyedJafferHussain对Oracle数据库12c的一些新特性总结,包括数据库管理、RMAN、高可用性以及性能调优等内容。Oracle数据库12c新特性总结(一)在第一部分中,我们将介绍:1.在线迁移活跃的数据文件2.表分区或子分区的在线迁移3.不可见字段4.相同字段上的多重索引5.DDL日志6.临时undo7.新的备份用户特权8.如何在RMAN中执行SQL语句9.RMAN中的表级别恢复10.PGA的大小限制问题1.在线重命名和重新定位活跃数据文件不同于以往的版本,在Oracle数据库12cR1版本中对数据文件的迁移或重命名不再需要太多繁琐的步骤,即把表空间置为只读模式,接下来是对数据文件进行离线操作。在12cR1中,可以使用ALTERDATABASEMOVEDATAFILE这样的SQL语句对数据文件进行在线重命名和移动。而当此数据文件正在传输时,终端用户可以执行查询,DML以及DDL方面的任务。另外,数据文件可以在存储设备间迁移,如从非ASM迁移至ASM,反之亦然。重命名数据文件:SQLALTERDATABASEMOVEDATAFILE'/u00/data/users01.dbf'TO'/u00/data/users_01.dbf';从非ASM迁移数据文件至ASM:SQLALTERDATABASEMOVEDATAFILE'/u00/data/users_01.dbf'TO'+DG_DATA';将数据文件从一个ASM磁盘群组迁移至另一个ASM磁盘群组:SQLALTERDATABASEMOVEDATAFILE'+DG_DATA/DBNAME/DATAFILE/users_01.dbf'TO'+DG_DATA_02';在数据文件已存在于新路径的情况下,以相同的命名将其覆盖:SQLALTERDATABASEMOVEDATAFILE'/u00/data/users_01.dbf'TO'/u00/data_new/users_01.dbf'REUSE;复制文件到一个新路径,同时在原路径下保留其拷贝:SQLALTERDATABASEMOVEDATAFILE'/u00/data/users_01.dbf'TO'/u00/data_new/users_01.dbf'KEEP;当通过查询v$session_longops动态视图来移动文件时,你可以监控这一过程。另外,你也可以引用alert.log,Oracle会在其中记录具体的行为。2.表分区或子分区的在线迁移在Oracle12cR1中迁移表分区或子分区到不同的表空间不再需要复杂的过程。与之前版本中未分区表进行在线迁移类似,表分区或子分区可以在线或是离线迁移至一个不同的表空间。当指定了ONLINE语句,所有的DML操作可以在没有任何中断的情况下,在参与这一过程的分区或子分区上执行。与此相反,分区或子分区迁移如果是在离线情况下进行的,DML操作是不被允许的。示例:SQLALTERTABLEtable_nameMOVEPARTITION|SUBPARTITIONpartition_nameTOtablespacetablespace_name;SQLALTERTABLEtable_nameMOVEPARTITION|SUBPARTITIONpartition_nameTOtablespacetablespace_nameUPDATEINDEXESONLINE;第一个示例是用来在离线状况下将一个表分区或子分区迁移至一个新的表空间。第二个示例是在线迁移表分区或子分区并维护表上任何本地或全局的索引。此外,当使用ONLINE语句时,DML操作是不会中断的。重要提示:UPDATEINDEXES语句可以避免出现表中任何本地或全局索引无法使用的情况。表的在线迁移限制也适用于此。引入加锁机制来完成这一过程,当然它也会导致性能下降并会产生大量的redo,这取决于分区和子分区的大小。3.不可见字段在Oracle11gR1中,Oracle以不可见索引和虚拟字段的形式引入了一些不错的增强特性。继承前者并发扬光大,Oracle12cR1中引入了不可见字段思想。在之前的版本中,为了隐藏重要的数据字段以避免在通用查询中显示,我们往往会创建一个视图来隐藏所需信息或应用某些安全条件。在12cR1中,你可以在表中创建不可见字段。当一个字段定义为不可见时,这一字段就不会出现在通用查询中,除非在SQL语句或条件中有显式的提及这一字段,或是在表定义中有DESCRIBED。要添加或是修改一个不可见字段是非常容易的,反之亦然。SQLCREATETABLEemp(enonumber(6),enamenamevarchar2(40),salnumber(9)INVISIBLE);SQLALTERTABLEempMODIFY(salvisible);你必须在INSERT语句中显式提及不可见字段名以将不可见字段插入到数据库中。虚拟字段和分区字段同样也可以定义为不可见类型。但临时表,外部表和集群表并不支持不可见字段。4.相同字段上的多重索引在Oracle12cR1之前,一个字段是无法以任何形式拥有多个索引的。或许有人会想知道为什么通常一个字段需要有多重索引,事实上需要多重索引的字段或字段集合是很多的。在12cR1中,只要索引类型的形式不同,一个字段就可以包含在一个B-tree索引中,同样也可以包含在Bitmap索引中。注意,只有一种类型的索引是在给定时间可用的。5.DDL日志在之前的版本中没有可选方法来对DDL操作进行日志记录。而在12cR1中,你现在可以将DDL操作写入xml和日志文件中。这对于了解谁在什么时间执行了create或drop命令是十分有用的。要开启这一功能必须对ENABLE_DDL_LOGGING初始参数加以配置。这一参数可以在数据库或会话级加以设置。当此参数为启用状态,所有的DDL命令会记录在$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl路径下的xml和日志文件中。一个xml中包含DDL命令,IP地址,时间戳等信息。这可以帮助确定在什么时候对用户或表进行了删除亦或是一条DDL语句在何时触发。开启DDL日志功能SQLALTERSYSTEM|SESSIONSETENABLE_DDL_LOGGING=TRUE;以下的DDL语句可能会记录在xml或日志文件中:CREATE|ALTER|DROP|TRUNCATETABLEDROPUSERCREATE|ALTER|DROPPACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENCE6.临时undo每个Oracle数据库包含一组与系统相关的表空间,例如SYSTEM,SYSAUX,UNDO&TEMP,并且它们在Oracle数据库中每个都用于不同的目的。在Oracle12cR1之前,临时表生成的undo记录是存储在undo表空间里的,通用表和持久表的undo记录也是类似的。而在12cR12的临时undo功能中,临时undo记录可以存储在一个临时表中,而无需再存储在undo表空间内。这样做的主要好处在于:减少undo表空间,由于信息不会被记录在redo日志中,所以减少了redo数据的生成。你可以在会话级别或者数据库级别来启用临时undo选项。启用临时undo功能要使用这一新功能,需要做以下设置:兼容性参数必须设置为12.0.0或更高启用TEMP_UNDO_ENABLED初始化参数由于临时undo记录现在是存储在一个临时表空间中的,你需要有足够的空间来创建这一临时表空间对于会话级,你可以使用:ALTERSYSTEMSETTEMP_UNDO_ENABLE=TRUE;查询临时undo信息以下所列的字典视图是用来查看或查询临时undo数据相关统计信息的:V$TEMPUNDOSTATDBA_HIST_UNDOSTATV$UNDOSTAT要禁用此功能,你只需做以下设置:SQLALTERSYSTEM|SESSIONSETTEMP_UNDO_ENABLED=FALSE;7.备份特定用户特权在11gR2中,引入了SYSASM特权来执行ASM的特定操作。同样地,在12c中引入了SYSBACKUP特权用来在RMAN中执行备份和恢复命令。因此,你可以在数据库中创建一个本地用户并在不授予其SYSDBA权限的情况下,通过授予SYSBACKUP权限让其能够在RMAN中执行备份和恢复相关的任务。$./rmantargetusername/passwordasSYSBACKUP8.如何在RMAN中执行SQL语句在12c中,你可以在不需要SQL前缀的情况下在RMAN中执行任何SQL和PL/SQL命令,即你可以从RMAN直接执行任何SQL和PL/SQL命令。如下便是在RMAN中执行SQL语句的示例:RMANSELECTusername,machineFROMv$session;RMANALTERTABLESPACEusersADDDATAFILESIZE121m;9.RMAN中的表恢复和分区恢复Oracle数据库备份主要分为两类:逻辑和物理备份。每种备份类型都有其自身的优缺点。在之前的版本中,利用现有物理备份来恢复表或分区是不可行的。为了恢复特定对象,逻辑备份是必需的。对于12cR1,你可以在发生drop或truncate的情况下从RMAN备份将一个特定的表或分区恢复到某个时间点或SCN。当通过RMAN发起一个表或分区恢复时,大概流程是这样的:确定要恢复表或分区所需的备份集在恢复表或分区的过程中,一个辅助数据库会临时设置为某个时间点利用数据泵将所需表或分区导出到一个dumpfile你可以从源数据库导入表或分区(可选)在恢复过程中进行重命名操作以下是一个通过RMAN对表进行时间点恢复的示例(确保你已经对稍早的数据库进行了完整备份):RMANconnecttargetusername/passwordasSYSBACKUP;RMANRECOVERTABLEusername.tablenameUNTILTIME'TIMESTAMP…'AUXILIARYDESTINATION'/u01/tablerecovery'DATAPUMPDESTINATION'/u01/dpump'DUMPFILE'tablename.dmp'NOTABLEIMPORT--thisoptionavoidsimportingthetableautomatically.(此选项避免自动导入表)REMAPTABLE'username.tablename':'username.new_table_name';--canrenametablewiththisoption.(此选项可以对表重命名)重要提示:确保对于辅助数据库在/u01文件系统下有足够的可用空间,同时对数据泵文件也有同样保证必须要存在一份完整的数据库备份,或者至少是要有SYSTEM相关的表空间备份以下是在RMAN中应用表或分区恢复的限制和约束:SYS用户表或分区无法恢复存储于SYSAUX和SYSTEM表空间下的表和分区无法恢复当REMAP选项用来恢复的表包含NOTNULL约束时,恢复此表是不可行的10.限制PGA的大小在Oracle12cR1之前,没有