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
当数据库被手工升级时,以上两个步骤须要被显式执行。
然而。DBUA工具包括上面这两个变化。
4. 通过网络还原/恢复数据文件
12c R1中。还有一个非常大的增强是,你如今能够通过服务名(service name)在主备库之间还原或恢复数据文件,控制文件。spfile,表空间或整个库。
在同步主备库时。这是非常实用的。
当在主备库之间发现一个非常长的延迟时(gap)。你不再须要复杂的前滚过程来填充主备库间的延迟了。
RMAN能通过网络得到增量备份而且在物理备库上应用这些备份来恢复备库。
像已经说过的。你能用服务名直接把须要的数据文件从备库复制到主库上。比如:主库上的一个数据文件或表空间丢了。或者没有从备份集还原数据文件等。
下列过程说明怎样用新特点运行前滚来同步主备库:
物理备库端:
./rman target"username/[email protected]_db_tns as SYSBACKUP"
RMAN> RECOVERDATABASE FROM SERVICE primary_db_tns USING COMPRESSED BACKUPSET;
上面的样例使用备库上的连接串primary_db_tns连接主库来运行一个增量备份,然后把这些增量备份传输到备库,并应用这些文件来同步备库。
但是。你须要确信已经在备库端配置了 指向主库的连接串primary_db_tns。
下例中,我将通过从备库获取并恢复主库上丢失的数据文件来说明一个场景:
主库端:
./rman target"username/[email protected]_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‘);