Oracle数据库12c新特性总结二

本文是Oracle数据库12c新特性的系列文章的第二篇,作者将对数据库管理、RMAN、DataGuard以及性能调优等方面的改进进行介绍。

第二部分内容包括:

  1.对表分区维护的增强

  2.数据库升级的改进

  3.通过网络恢复数据文件

  4.对DataPump的增强

  5.实时自动数据诊断监视器(ADDM)

  6.并发统计信息收集

  一、对表分区维护的增强

  在第一部分中,我解释了如何在线或是离线状态下迁移一个表分区或子分区到另一个不同的表空间。在本文中,主要介绍表分区其他方面的改进。

  添加多个新分区

  在Oracle12cR1之前,一次只可能添加一个新分区到一个已存在的分区表。要添加一个以上的新分区,需要对每个新分区都单独执行一次ALTERTABLEADDPARTITION语句。而Oracle12c只需要使用一条单独的ALTERTABLEADDPARTITION命令就可以添加多个新分区,这增加了数据库灵活性。以下示例说明了如何添加多个新分区到已存在的分区表:

SQLCREATETABLEemp_part(enonumber(8),enamevarchar2(40),salnumber(6))PARTITIONBYRANGE(sal)(PARTITIONp1VALUESLESSTHAN(),PARTITIONp2VALUESLESSTHAN(),PARTITIONp3VALUESLESSTHAN());

  添加两个新分区:

SQLALTERTABLEemp_partADDPARTITIONPARTITIONp4VALUESLESSTHAN(),PARTITIONp5VALUESLESSTHAN();

  同样,只要MAXVALUE分区不存在,你就可以添加多个新分区到一个列表和系统分区表。

  如何删除和截断多个分区/子分区

  作为数据维护的一部分,DBA通常会在一个分区表上进行删除或截断分区的维护任务。在12cR1之前,对于一个已存在的分区表一次只可能删除或截断一个分区。而对于Oracle12c,可以用单条ALTERTABLEtable_name{DROP

TRUNCATE}PARTITIONS命令来撤销或合并多个分区和子分区。

  下例说明了如何在一个已存在分区表上删除或截断多个分区:

  SQLALTERTABLEemp_partDROPPARTITIONSp4,p5;   SQLALTERTABLEemp_partTRUNCATEPARTITONSp4,p5;

  要保持索引更新,使用UPDATEINDEXES或UPDATEGLOBALINDEXES语句,如下所示:

  SQLALTERTABLEemp_partDROPPARTITIONSp4,p5UPDATEGLOBALINDEXES;   SQLALTERTABLEemp_partTRUNCATEPARTITIONSp4,p5UPDATEGLOBALINDEXES;

  如果你在不使用UPDATEGLOBALINDEXES语句的情况下删除或截断一个分区,你可以在USER_INDEXES或USER_IND_PARTITIONS字典视图下查询ORPHANED_ENTRIES字段以找出是否有索引包含任何的过期条目。

  将单个分区分割为多个新分区

  在12c中新增强的SPLITPARTITION语句可以让你只使用一个单独命令将一个特定分区或子分区分割为多个新分区。下例说明了如何将一个分区分割为多个新分区:

 SQLCREATETABLEemp_part   (enonumber(8),enamevarchar2(40),salnumber(6))   PARTITIONBYRANGE(sal)   (PARTITIONp1VALUESLESSTHAN(),   PARTITIONp2VALUESLESSTHAN(),   PARTITIONp_max(MAXVALUE)   );   SQLALTERTABLEemp_partSPLITPARTITIONp_maxINTO   (PARTITIONp3VALUESLESSTHAN(),   PARTITIONp4VALUESLESSTHAN(),PARTITIONp_max);

  将多个分区合并为一个分区

  你可以使用单条ALTERTBALEMERGEPARTITIONS语句将多个分区合并为一个单独分区:

  SQLCREATETABLEemp_part   (enonumber(8),enamevarchar2(40),salnumber(6))   PARTITIONBYRANGE(sal)   (PARTITIONp1VALUESLESSTHAN(),   PARTITIONp2VALUESLESSTHAN(),   PARTITIONp3VALUESLESSTHAN(),   PARTITIONp4VALUESLESSTHAN(),   PARTITIONp5VALUESLESSTHAN(),   PARTITIONp_max(MAXVALUE)   );   SQLALTERTABLEemp_partMERGEPARTITIONSp3,p4,p5INTOPARTITIONp_merge;

  如果分区范围形成序列,你可以使用如下示例:

  SQLALTERTABLEemp_partMERGEPARTITIONSp3TOp5INTOPARTITIONp_merge;

  二、数据库升级改进

  每当一个新的Oracle版本发布,DBA所要面临的挑战就是升级过程。该部分我将介绍12c中引入的针对升级的两个改进。

  预升级脚本

  在12cR1中,原有的utlu[]s.sql脚本由一个大为改善的预升级信息脚本preupgrd.sql所取代。除了预升级检查验证,此脚本还能以修复脚本的形式解决在升级过程前后出现的各种问题。

  可以对产生的修复脚本加以执行来解决不同级别的问题,例如,预升级和升级后的问题。当手动升级数据库时,脚本必须在实际升级过程初始化之前加以手动执行。然而,当使用DBUA工具来进行数据库升级时,它会将预升级脚本作为升级过程的一部分加以自动执行,而且会提示你去执行修复脚本以防止报错。

  如何执行脚本:

SQL

$ORACLE_12GHOME/rdbms/admin/preupgrd.sql

  以上脚本会产生一份日志文件以及一个[pre/post]upgrade_fixup.sql脚本。所有这些文件都位于$ORACLE_BASE/cfgtoollogs目录下。在你继续真正的升级过程之前,你应该浏览日志文件中所提到的建议并执行脚本以修复问题。

  注意:你要确保将preupgrd.sql和utluppkg.sql脚本从12cOracle的目录home/rdbms/admindirectory拷贝至当前的Oracle的database/rdbms/admin路径。

  并行升级功能

  数据库升级时间的长短取决于数据库上所配置的组件数量,而不是数据库的大小。在之前的版本中,我们是无法并行运行升级程序,从而快速完成整个升级过程的。

  在12cR1中,原有的catupgrd.sql脚本由catctl.pl脚本(并行升级功能)替代,现在我们可以采用并行模式运行升级程序了。

  以下流程说明了如何初始化并行升级功能(3个过程);你需要在升级模式下在启动数据库后运行这一脚本:

  cd$ORACLE_12_HOME/perl/bin   $./perlcatctl.pl–n3-catupgrd.sql

  以上两个步骤需要在手动升级数据库时运行。而DBUA也继承了这两个新变化。

  三、通过网络恢复数据文件

  在12cR1中另一个重要的增强是,你现在可以在主数据库和备用数据库之间用一个服务名重新获得或恢复数据文件、控制文件、参数文件、表空间或整个数据库。这对于同步主数据库和备用数据库极为有用。

  当主数据库和备用数据库之间存在相当大的差异时,你不再需要复杂的前滚流程来填补它们之间的差异。RMAN能够通过网络执行备用恢复以进行增量备份,并且可以将它们应用到物理备用数据库。你可以用服务名直接将所需数据文件从备用点拷贝至主站,这是为了防止主数据库上数据文件、表空间的丢失,或是没有真正从备份集恢复数据文件。

  以下流程演示了如何用此新功能执行一个前滚来对备用数据库和主数据库进行同步:

  在物理备用数据库上:

  ./rmantargetusername/password

standby_db_tnsasSYSBACKUP   RMANRECOVERDATABASEFROMSERVICEprimary_db_tnsUSINGCOMPRESSEDBACKUPSET;

  以上示例使用备用数据库上定义的primary_db_tns连接字符串连接到主数据库,然后执行了一个增量备份,再将这些增量备份传输至备用目的地,接着将应用这些文件到备用数据库来进行同步。然而,需要确保已经对primary_db_tns进行了配置,即在备份数据库端将其指向主数据库。

  在以下示例中,我将演示一个场景通过从备用数据库获取数据文件来恢复主数据库上丢失的数据文件:

  在主数据库上:

  ./rmantargetusername/password

primary_db_tnsasSYSBACKUP   RMANRESTOREDATAFILE‘+DG_DISKGROUP/DBANME/DATAFILE/filename’FROMSERVICEstandby_db_tns;

  四、对DataPump的增强

  DataPump版本有了不少有用的改进,例如在导出时将视图转换为表,以及在导入时关闭日志记录等。

  关闭redo日志的生成

  DataPump中引入了新的TRANSFORM选项,这对于对象在导入期间提供了关闭重做生成的灵活性。当为TRANSFORM选项指定了DISABLE_ARCHIVE_LOGGING值,那么在整个导入期间,重做生成就会处于关闭状态。这一功能在导入大型表时缓解了压力,并且减少了过度的redo产生,从而加快了导入。这一属性还可应用到表以及索引。以下示例演示了这一功能:

$./impdpdirectory=dpumpdumpfile=abcd.dmplogfile=abcd.logTRANSFORM=DISABLE_ARCHIVE_LOGGING:Y

  将视图转换为表

  这是DataPump中另外一个改进。有了VIEWS_AS_TABLES选项,你就可以将视图数据载入表中。以下示例演示了如何在导出过程中将视图数据载入到表中:

$./expdpdirectory=dpumpdumpfile=abcd.dmplogfile=abcd.logviews_as_tables=my_view:my_table

  五、实时自动数据诊断监视器(ADDM)分析

  通过使用诸如AWR、ASH以及ADDM之类的自动诊断工具来分析数据库的健康状况,是每个DBA日程工作的一部分。尽管每种工具都可以在多个层面衡量数据库的整体健康状况和性能,但没有哪个工具可以在数据库反应迟钝或是完全挂起的时候使用。

  当数据库反应迟钝或是挂起状态时,而且你已经配置了Oracle企业管理器12c的云控制,你就可以对严重的性能问题进行诊断。这对于你了解当前数据库发生了什么状况有很大帮助,而且还能够对此问题给出解决方案。

  以下步骤演示了如何在Oracle企业管理器12c上分析数据库状态:

在访问数据库访问主页面从Performance菜单选择EmergencyMonitoring选项。这会显示挂起分析表中排名靠前的阻止会话。

在Performance菜单选择Real-TimeADDM选项来执行实时ADDM分析。

在收集了性能数据后,点击Findings标签以获得所有结果的交互总结。

  六、同时在多个表上收集统计数据

  在之前的Oracle数据库版本中,当你执行一个DBMS_STATS程序来收集表、索引、模式或者数据库级别的统计数据时,Oracle习惯于一次一个表的收集统计数据。如果表很大,那么推荐你采用并行方式。在12cR1中,你现在可以同时在多个表、分区以及子分区上收集统计数据。在你开始使用它之前,你必须对数据库进行以下设置以开启此功能:

  SQLALTERSYSTEMSETRESOURCE_MANAGER_PLAN=DEFAULT_MAIN;   SQLALTERSYSTEMSETJOB_QUEUE_PROCESSES=4;   SQLEXECDBMS_STATS.SET_GLOBAL_PREFS(CONCURRENT,ALL);   SQLEXECDBMS_STATS.GATHER_SCHEMA_STATS(SCOTT);

  在本系列的第三篇文章中,你将会学到更多关于集群、ASM以及RAC数据库的新变化。

TechTarget中国

赞赏

长按







































北京白癜风治疗最好的医院是哪家
治疗白癜风花多少钱



转载请注明:http://www.xcqg58.com/zytd/6775.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了