1. 内容提要
1) 表分区维护的增强。
2) 数据库升级改善。
3) 跨网络还原/恢复数据文件。
4) 数据泵的增强。
5) 实时ADDM。
6) 并发统计信息收集。
2. 表分区维护的增强
在其他文章中,我说明了如何在线或离线把一个表分区或子分区移到一个不同的表空间。这部分,你将学习和表分区相关的其他方面的增强。
2.1. 增加多个新分区。
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
当数据