1. 内容提要sql
1) 表分区维护的加强。数据库
2) 数据库升级改善。网络
3) 跨网络还原/恢复数据文件。并发
4) 数据泵的加强。工具
5) 实时ADDM。post
6) 并发统计信息收集。性能
2. 表分区维护的加强学习
在其余文章中,我说明了如何在线或离线把一个表分区或子分区移到一个不一样的表空间。这部分,你将学习和表分区相关的其余方面的加强。日志
2.1. 增长多个新分区。orm
12c R1以前,在一个已分区表上只能一次增长一个分区。为了增长多个分区,你必须每增长一个新分区单独执行一个ALTER TABLE ADD PARTITION语句。 12c支持用一个ALTER TABLE ADD PARTITION命令增长多个新分区。下例说明如何往一个已有分区表上增长多个新分区:
SQL> CREATE TABLE emp_part(eno number(8), ename varchar2(40), salnumber (6))
PARTITION BY RANGE (sal)
(PARTITION p1 VALUES LESS THAN(10000),
PARTITION p2 VALUES LESS THAN(20000),
PARTITION p3 VALUES LESS THAN(30000)
);
下面让咱们增长几个新分区:
SQL> ALTER TABLE emp_part ADD PARTITION
PARTITION p4 VALUES LESS THAN(35000),
PARTITION p5 VALUES LESS THAN(40000);
一样,你能给列表和系统分区表上增长多个新分区,前提是这些分区表上不存在maxvalue分区。
2.2. 若是删除和截断多个分区或子分区
做为数据维护的一部分,典型的你能够删除或截断分区表上分区。12c R1前,只能一次一个的删除或截断分区表的分区。12c中,用一个ALTER TABLE table_name {DROP|TRUNCATE}PARTITIONS 命令能够删除或截断多个分区或子分区。下例说明如何删除或截断分区表上的多个分区:
SQL> ALTER TABLEemp_part DROP PARTITIONS p4,p5;
SQL> ALTER TABLEemp_part TRUNCATE PARTITONS p4,p5;
为了同时也维护索引,使用UPDATE INDEXES or UPDATE GLOBAL INDEXES 子句,
以下:
SQL> ALTERTABLE emp_part DROP PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;
SQL> ALTERTABLE emp_part TRUNCATE PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;
若是你删除或截断分区时不带UPDATE GLOBAL INDEXES子句,你能够查询USER_INDEXES或USER_IND_PARTITIONS字典视图的ORPHANED_ENTRIES,以便发现索引是否包含陈旧索引项。
2.3. 将一个分区劈成多个新分区
12c中,新加强的SPLITPARTITION子句可让你用一个命令将一个特定的分区或子分区劈成多个新分区:
SQL> CREATE TABLE emp_part
(eno number(8), enamevarchar2(40), sal number (6))
PARTITION BY RANGE (sal)
(PARTITION p1 VALUES LESS THAN(10000),
PARTITION p2 VALUES LESS THAN(20000),
PARTITION p_max VALUES LESSTHAN (MAXVALUE)
);
SQL> ALTER TABLE emp_part SPLIT PARTITION p_max INTO
(PARTITION p3 VALUES LESS THAN(25000),
PARTITION p4 VALUES LESS THAN(30000), PARTITION p_max);
2.4. 将多个分区合并成一个分区
你能够用一个ALTER TBALE MERGE PARTITIONS语句将多个分区合并成一个分区:
SQL> CREATETABLE emp_part
(eno number(8), ename varchar2(40), salnumber (6))
PARTITION BY RANGE (sal)
(PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (20000),
PARTITION p3 VALUES LESS THAN (30000),
PARTITION p4 VALUES LESS THAN (40000),
PARTITION p5 VALUES LESS THAN (50000),
PARTITION p_max (MAXVALUE)
);
SQL> ALTERTABLE emp_part MERGE PARTITIONS p3,p4,p5 INTO PARTITION p_merge;
若是这些分区包含分区键值范围,你也能用下例命令:
SQL> ALTERTABLE emp_part MERGE PARTITIONS p3 TO p5 INTO PARTITION p_merge;
3. 数据库升级改善
不管什么时候新版本发布,每一个DBA必须马上面对的就是升级。这部分,将会说明两个新引进的升级到12c的改善。
3.1. 升级前脚本
12c R1中,一个新的、获得极大改善的升级前信息脚本preupgrd.sql,替换了以前的utlu[121]s.sql脚本。除了作升级前检查验证,该脚本还能以fixup脚本的方式解决升级过程先后产生的各类问题。产生的fixup脚本能被执行来解决不一样层面的问题。例如:升级前和升级后。当手工升级数据库时,开始实际数据库升级前,脚本必须被手工运行。但是,当用DBUA工具升级数据库时,会被做为升级过程的一部分,自动运行升级前脚本,当出现任何错误时,都会提示你运行fixup脚本。下例说明如何运行该脚本:
SQL> @$ORACLE_12GHOME/rdbms/admin/preupgrd.sql
上面脚本会产生一个日志文件和一个[pre/post]upgrade_fixup.sql 脚本。全部这些文件都在$ORACLE_BASE/cfgtoollogs 目录下。在你继续真正升级前,你该查看日志并运行日志中推荐的操做和脚原本解决存在的任何问题。
注意:确信你把preupgrd.sql和utluppkg.sql 脚本都从12c的Oracle的主目录 home/rdbms/admin拷贝到了目前的数据库/rdbms/admin位置。
3.2. 并行更新功能
数据库升级时间和数据库配置的组件多少成正比,而不是和数据库大小成正比。以前的版本,没有直接或间接可用选项来并行快速的完成整个升级过程。
12c R1中的catctl.pl (并行升级功能)替换了以前的catupgrd.sql脚本,12c R1中的脚本有个选项用以并行升级,从而能够缩短完成整个升级过程所需的时间。下面的过程说明如何启动并行(3个进程)升级功能,以upgrade模式启动数据库后再运行下列命令:
cd $ORACLE_12_HOME/perl/bin
$ ./perl catctl.pl –n 3 -catupgrd.sql
当数据库被手工升级时,以上两个步骤须要被显式运行。然而,DBUA工具包含上面这两个变化。
4. 经过网络还原/恢复数据文件
12c R1中,另外一个很大的加强是,你如今能够经过服务名(service name)在主备库之间还原或恢复数据文件,控制文件,spfile,表空间或整个库。在同步主备库时,这是很是有用的。
当在主备库之间发现一个很长的延迟时(gap),你再也不须要复杂的前滚过程来填充主备库间的延迟了。RMAN能经过网络获得增量备份而且在物理备库上应用这些备份来恢复备库。像已经说过的,你能用服务名直接把须要的数据文件从备库拷贝到主库上,例如:主库上的一个数据文件或表空间丢了,或者没有从备份集还原数据文件等。
下列过程说明如何用新特色执行前滚来同步主备库:
物理备库端:
./rman target"username/password@standby_db_tns as SYSBACKUP"
RMAN> RECOVERDATABASE FROM SERVICE primary_db_tns USING COMPRESSED BACKUPSET;
上面的例子使用备库上的链接串primary_db_tns链接主库来执行一个增量备份,而后把这些增量备份传输到备库,并应用这些文件来同步备库。但是,你须要确信已经在备库端配置了 指向主库的链接串primary_db_tns。
下例中,我将经过从备库获取并恢复主库上丢失的数据文件来讲明一个场景:
主库端:
./rman target"username/password@primary_db_tns as SYSBACKUP"
RMAN> RESTOREDATAFILE ‘+DG_DISKGROUP/DBANME/DATAFILE/filename’ FROM SERVICE standby_db_tns;
5. 数据泵加强
这部分主要介绍数据泵方面的加强。有不少有用的加强,例如:导出时将试图转化为表,导入时关闭日志等。
5.1. 关闭日志产生
数据泵导入被新引进的TRANSFORM选项支持在导入过程当中不产生对象redo。当肯定TRANSFORM选项的值为DISABLE_ARCHIVE_LOGGING时,整个导入过程当中上下文中对象将不产生redo。当导入大表时,该特色会很大的减轻系统压力和产生的redo,从而减速导入进程。该特色能够应用到表和索引,下例说明了该特色:
$ ./impdp directory=dpump dumpfile=abcd.dmp logfile=abcd.logTRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
5.2. 把视图转换为表
这是数据泵的另外一个加强。利用VIEWS_AS_TABLES选项,你能把视图导出为一个表。下列例子描述了如何在导出期间将视图导出为一个表:
$ ./impdp directory=dpump dumpfile=abcd.dmp logfile=abcd.logTRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
6. 实时进行ADDM分析
经过像AWR,ASH和ADDM等工具去分析过去和目前数据库健康状态是每一个DBA生活的一部分。虽然每一个工具能在各个层面来测量数据库的总体健康和性能,但当整个数据库没反应或”hang”时,每个工具可使用。
当你碰到数据库没反应或被hang住时,若是你已经配置了Oracle企业管理器12c云控制,你就能诊断严重的性能问题。这将会给你提供一个数据库中当前什么在发生的总体描述,也许也会给你提供一个解决问题的补救措施。
下面一步步的说明如何利用Oracle企业管理器云控制来分析数据库状态:
1) 在存取数据库主页上从Performance菜单选择EmergencyMonitoring选项,这将会显示hang分析表中排在最前面的阻塞会话。
2) 从Performance选择Real-TimeADDM选项来执行实时ADDM分析。
3) 收集性能数据后,点击Findings页来获取全部发现的交互总结。
7. 并行的收集多张表的统计信息
在先前的Oracle版本中,不管何时你运行DBMS_STATS过程来收集表,索引,模式或数据库级别的统计信息,Oracle都是一次收集一张表。若是表很大,那么推荐增长并行度。12c R1中,你如今能够同时收集多张表、分区和子分区的统计信息。 在开始使用该特色时,你必须在数据库层面进行以下设置以启用该特色:
SQL>ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='DEFAULT_MAIN';
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=4;
SQL>EXEC DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT', 'ALL');
SQL>EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');