Oracle 12c新特性对于业务上的一些影响总结(下)
8、通过网络恢复数据文件
在12cR1中另一个重要的增强是,你现在可以在主数据库和备用数据库之间用一个服务名重新获得或恢复数据文件、控制文件、参数文件、表空间或整个数据库。这对于同步主数据库和备用数据库极为有用。
当主数据库和备用数据库之间存在相当大的差异时,你不再需要复杂的前滚流程来填补它们之间的差异。RMAN能够通过网络执行备用恢复以进行增量备 份,并且可以将它们应用到物理备用数据库。你可以用服务名直接将所需数据文件从备用点拷贝至主站,这是为了防止主数据库上数据文件、表空间的丢失,或是没有真正从备份集恢复数据文件。
以下流程演示了如何用此新功能执行一个前滚来对备用数据库和主数据库进行同步:
在物理备用数据库上:
1. ./rman target "username/password@standby_db_tns as SYSBACKUP"
2. RMAN> RECOVER DATABASE FROM SERVICE primary_db_tns USING COMPRESSED BACKUPSET;
以上示例使用备用数据库上定义的primary_db_tns 连接字符串连接到主数据库,然后执行了一个增量备份,再将这些增量备份传输至备用目 的地,接着将应用这些文件到备用数据库来进行同步。然而,需要确保已经对primary_db_tns 进行了配置,即在备份数据库端将其指向主数据库。
在以下示例中,我将演示一个场景通过从备用数据库获取数据文件来恢复主数据库上丢失的数据文件:
在主数据库上:
1. ./rman target "username/password@primary_db_tns as SYSBACKUP"
2. RMAN> RESTORE DATAFILE ‘+DG_DISKGROUP/DBANME/DATAFILE/filename’ FROM SERVICE standby_db_tns;
9、 对Data Pump的增强
Data Pump版本有了不少有用的改进,例如在导出时将视图转换为表,以及在导入时关闭日志记录等。
关闭redo日志的生成
Data Pump中引入了新的TRANSFORM选项,这对于对象在导入期间提供了关闭重做生成的灵活性。当为TRANSFORM选项指定了 DISABLE_ARCHIVE_LOGGING 值,那么在整个导入期间,重做生成就会处于关闭状态。这一功能在导入大型表时缓解了压力,并且减少了过度的redo产生,从而加快了导入。这一属性还可应用到表以及索引。以下示例演示了这一功能:
1. $ ./impdp directory=dpump dumpfile=abcd.dmp logfile=abcd.log TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
将视图转换为表
这是Data Pump中另外一个改进。有了VIEWS_AS_TABLES 选项,你就可以将视图数据载入表中。以下示例演示了如何在导出过程中将视图数据载入到表中:
1. $ ./expdp directory=dpump dumpfile=abcd.dmp logfile=abcd.log views_as_tables=my_view:my_table
5. 实时自动数据诊断监视器 (ADDM) 分析
通过使用诸如AWR、ASH以及ADDM之类的自动诊断工具来分析数据库的健康状况,是每个DBA日程工作的一部分。尽管每种工具都可以在多个层面衡量数据库的整体健康状况和性能,但没有哪个工具可以在数据库反应迟钝或是完全挂起的时候使用。
当数据库反应迟钝或是挂起状态时,而且你已经配置了Oracle 企业管理器 12c的云控制,你就可以对严重的性能问题进行诊断。这对于你了解当前数据库发生了什么状况有很大帮助,而且还能够对此问题给出解决方案。
以下步骤演示了如何在Oracle 企业管理器 12c上分析数据库状态:
在访问数据库访问主页面从Performance菜单选择Emergency Monitoring 选项。这会显示挂起分析表中排名靠前的阻止会话。
在Performance菜单选择Real-Time ADDM 选项来执行实时ADDM分析。
在收集了性能数据后,点击Findings标签以获得所有结果的交互总结。
10、 同时在多个表上收集统计数据
在之前的Oracle数据库版本中,当你执行一个DBMS_STATS 程序来收集表、索引、模式或者数据库级别的统计数据时,Oracle习惯于一次一个表的收集统计数据。如果表很大,那么推荐你采用并行方式。在12cR1中,你现在可以同时在多个表、分区以及子分区上收集统计数据。在你开始使用它之前,你必须对数据库进行以下设置以开启此功能:
1. SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='DEFAULT_MAIN';
2. SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=4;
3. SQL> EXEC DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT', 'ALL');
4. SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');
11、 自动存储管理(ASM)中的增强
Flex ASM
在一个典型的网格基础架构安装环境中,每个节点都运行自身的ASM实例,并将其作为运行于此节点上数据库的存储容器。但这种设置会存在相应的单点故 障危险。例如,如果此节点上的ASM实例发生故障,则运行于此节点上的所有数据库和实例都会受到影响。为了避免ASM实例的单点故障,Oracle 12c提供了一个名为Flex ASM的功能。Flex ASM是一个不同的概念和架构,只有很少数量的ASM实例需要运行在集群中的一些服务器上。当某节点上的一个ASM实例发生故障,Oracle集群就会在 另一个不同的节点上自动启动替代ASM实例以加强可用性。另外,这一设置还为运行在此节点上的实例提供了ASM实例负载均衡能力。Flex ASM的另一个优势就是可以在单独节点上加以配置。
当选择Flex Cluster选项作为集群安装环境的第一部分时,鉴于Flex Cluster的要求,Flex ASM配置就会被自动选择。传统集群同样也适用于Flex ASM。当你决定使用Flex ASM时,你必须保证所需的网络是可用的。你可以选择Flex ASM存储选项作为集群安装环境的一部分,或是使用ASMCA在一个标准集群环境下启用Flex ASM。
以下命令显示了当前的ASM模式:
1. $ ./asmcmd showclustermode
2. $ ./srvctl config asm
或是连接到ASM实例并查询INSTANCE_TYPE参数。如果输出值为ASMPROX,那么,就说明Flex ASM已经配置好了。
ASM存储限制放宽
ASM存储硬性限额在最大ASM磁盘群组和磁盘大小上已经大幅提升。在 12c R1中,ASM支持511个ASM磁盘群组,而在11g R2中只支持63个。同样,相比起在11g R2中20 PB的磁盘大小,现在已经将这一数字提高到32 PB。
对ASM均衡操作的优化
12c 中新的EXPLAIN WORK FOR 语句用于衡量一个给定ASM均衡操作所需的工作量,并在V$ASM_ESTIMATE动态视图中输入结果。使用此动态视图,你可以调整 POWERLIMIT语句对重新平衡操作工作进行改善。例如,如果你想衡量添加一个新ASM磁盘所需的工作量,在实际执行手动均衡操作之前,你可以使用以下命令:
1. SQL> EXPLAIN WORK FOR ALTER DISKGROUP DG_DATA ADD DISK data_005;
2. SQL> SELECT est_work FROM V$ASM_ESTIMATE;
3. SQL> EXPLAIN WORK SET STATEMENT_ID='ADD_DISK' FOR ALTER DISKGROUP DG_DATA AD DISK data_005;
4. SQL> SELECT est_work FROM V$ASM_ESTIMATE WHERE STATEMENT_ID = 'ADD_DISK’;
你可以根据从动态视图中获取的输出来调整POWER的限制以改善均衡操作。
ASM 磁盘清理
在一个ASM磁盘群组中,新的ASM磁盘清理操作分为正常或高冗余两个级别,它可以检验ASM磁盘群组中所有磁盘的逻辑数据破坏,并且可以自动对逻 辑破坏进行修复,如果检测到有逻辑数据破坏,就会使用ASM镜像磁盘。磁盘清理可以在磁盘群组,特定磁盘或是某个文件上执行,这样其影响可降到最小程度。 以下演示了磁盘清理场景:
1. SQL> ALTER DISKGROUP dg_data SCRUB POWER LOW:HIGH:AUTO:MAX;
2. SQL> ALTER DISKGROUP dg_data SCRUB FILE '+DG_DATA/MYDB/DATAFILE/filename.xxxx.xxxx'
3. REPAIR POWER AUTO;
ASM的活动会话历史(ASH)
V$ACTIVE_SESSION_HISOTRY 动态视图现在还可以提供ASM实例的活动会话抽样。然而,诊断包的使用是受到许可限制的。
12、 网格(Grid)基础架构的增强
Flex 集群
Oracle 12c 在集群安装时支持两类配置:传统标准集群和Flex集群。在一个传统标准集群中,所有集群中的节点都彼此紧密地整合在一起,并通过私有网络进行互 动,而且可以直接访问存储。另一方面,Flex集群在Hub和Leaf节点结构间引入了两类节点。分配在Hub中的节点类似于传统标准集群,它们通过私有 网络彼此互连在一起并对存储可以进行直接读写访问。而Leaf节点不同于Hub节点,它们不需要直接访问底层存储;相反的是,它们通过Hub节点对存储和 数据进行访问。
你可以配置多达64个Hub节点,而Leaf节点则可以更多。在Oracle Flex集群中,无需配置Leaf节点就可以拥有Hub节点,而如果没有Hub节点的话,Leaf节点是不会存在的。对于一个单独Hub节点,你可以配置 多个Leaf节点。在Oracle Flex集群中,只有Hub节点会直接访问OCR和Voting磁盘。当你规划大规模的集群环境时,这将是一个非常不错的功能。这一系列设置会大大降低互连拥堵,并为传统标准集群提供空间以扩大集群。
部署Flex集群的两种途径:
1. 在配置一个全新集群的时候部署
2. 升级一个标准集群模式到Flex集群
如果你正在配置一个全新的集群,你需要在步骤3中选择集群配置的类型,选择配置一个Flex集群选项,然后你需要在步骤6中对Hub和Leaf节点进行分类。对于每个节点,选择相应角色是Hub或是Leaf,而虚拟主机名也是可选的。
将一个标准集群模式转换为Flex 集群模式需要以下步骤:
1. 用以下命令获取集群的当前状态:
$ ./crsctl get cluster mode status |
2. 以root用户执行以下命令:
$ ./crsctl set cluster mode flex |
3. 根据设计改变节点角色:
$ ./crsctl get node role config |
注意:
· 你无法从Flex恢复回标准集群模式
· 改变集群节点模式需要集群栈停止
· 确保以一个固定的VIP配置GNS
ASM磁盘群组中的OCR备份
对于12c,OCR现在可以在ASM磁盘群组中得以备份。这简化了通过所有节点对OCR备份文件的访问。为了防止OCR的恢复,你不必担心OCR最新的备份是在哪个节点上。可以从任何节点轻易识别存储在ASM中的最新备份并能很容易地执行恢复。
以下演示了如何将ASM磁盘群组设置为OCR备份位置:
$ ./ocrconfig -backuploc +DG_OCR |
支持IPv6协议
对于12c,Oracle是支持IPv6网络协议配置的。你现在可以在IPv4或IPv6上配置共有或私有网络接口,尽管如此,你需要确保在所有集群中的节点上使用相同的IP协议。
13、 RAC数据库的增强
What-if命令评估
通过srvctl使用新的What-if命令评估选项,现在可以确定运行此命令所造成的影响。这一新添加到srvctl的命令,可以在没有实际执行 或是不对当前系统做任何改变的情况下模拟此命令。这在想要对一个已存在的系统进行更改却对结果不确定的时候特别有用。这样,此命令就会提供进行变更的效果。而–eval 选项也可以通过crsctl 命令来使用。
例如,如果你想要知道停止一个特定数据库会发生什么,那么你就可以使用以下示例:
$ ./srvctl stop database –d MYDB –eval |
srvctl的改进
对于srvctl命令还有一些新增功能。以下演示了如何用这些新增功能停止或启动集群上的数据库或实例资源。
srvctl start database|instance –startoption NOMOUNT|MOUNT|OPEN |
13、截断表CASCADE
在之前的版本中,在子表引用一个主表以及子表存在记录的情况下,是不提供截断此主表操作的。而在12c中的带有CASCADE操作的TRUNCATE TABLE可以截断主表中的记录,并自动对子表进行递归截断,并作为DELETE ONCASCADE服从外键引用。由于这是应用到所有子表的,所以对递归层级的数量是没有CAP的,可以是孙子表或是重孙子表等等。
这一增强摈弃了要在截断一个主表之前先截断所有子表记录的前提。新的CASCADE语句同样也可以应用到表分区和子表分区等。
SQL> TRUNCATE TABLE CASCADE; |
如果对于子表的外键没有定义ON DELETE CASCADE 选项,便会抛出一个ORA-14705错误。
14、对Top-N查询结果限制记录
在之前的版本中有多种间接手段来对顶部或底部记录获取Top-N查询结果。而在12c中,通过新的FETCH FIRST|NEXT|PERCENT语句简化了这一过程并使其变得更为直接。为了从EMP表检索排名前10的工资记录,可以用以下新的SQL语句:
SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC |
以下示例获取排名前N的所有相似的记录。例如,如果第十行的工资值是5000,并且还有其他员工的工资符合排名前N的标准,那么它们也同样会由WITH TIES语句获取。
SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC |
以下示例限制从EMP表中获取排名前10%的记录:
SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC |
以下示例忽略前5条记录并会显示表的下5条记录:
SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC |
所有这些限制同样可以很好的应用于PL/SQL块。
1. BEGIN
2. SELECT sal BULK COLLECT INTO sal_v FROM EMP
3. FETCH FIRST 100 ROWS ONLY;
4. END;
15、对SQL*Plus的各种增强
SQL*Plus的隐式结果:12c中,在没有实际绑定某个RefCursor的情况下,SQL*Plus从一个PL/SQL块的一个隐式游标返回 结果。这一新的dbms_sql.return_result过程将会对PL/SQL 块中由SELECT 语句查询所指定的结果加以返回并进行格式化。以下代码对此用法进行了描述:
1. SQL> CREATE PROCEDURE mp1
2. res1 sys_refcursor;
3. BEGIN
4. open res1 for SELECT eno,ename,sal FROM emp;
5. dbms_sql.return_result(res1);
6. END;
7. SQL> execute mp1;
当此过程得以执行,会在SQL*Plus上返回格式化的记录。
显示不可见字段:在本系列文章的第一部分,我已经对不可见字段的新特性做了相关阐述。当字段定义为不可见时,在描述表结构时它们将不会显示。然而,你可以通过在SQL*Plus提示符下进行以下设置来显示不可见字段的相关信息:
SQL> SET COLINVISIBLE ON|OFF |
以上设置仅对DESCRIBE 命令有效。目前它还无法对不可见字段上的SELECT 语句结果产生效果。
16、会话级序列
在12c中现在可以创建新的会话级数据库序列来支持会话级序列值。这些序列的类型在有会话级的全局临时表上最为适用。
会话级序列会产生一个独特范围的值,这些值是限制在此会话内的,而非超越此会话。一旦会话终止,会话序列的状态也会消失。以下示例解释了创建一个会话级序列:
1. SQL> CREATE SEQUENCE my_seq START WITH 1 INCREMENT BY 1 SESSION;
2. SQL> ALTER SEQUENCE my_seq GLOBAL|SESSION;
对于会话级序列,CACHE, NOCACHE, ORDER 或 NOORDER 语句会予以忽略。
17、WITH语句的改善
在12c中,你可以用SQL更快的运行PL/SQL函数或过程,这些是由SQL语句的WITH语句加以定义和声明的。以下示例演示了如何在WITH语句中定义和声明一个过程或函数:
1. WITH
2. PROCEDURE|FUNCTION test1 (…)
3. BEGIN
4. END;
5. SELECT FROM table_name;
6. /
尽管你不能在PL/SQL单元直接使用WITH语句,但其可以在PL/SQL单元中通过一个动态SQL加以引用。
18、扩展数据类型
在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的大小会从4K以及2K字节扩展至32K字节。只要可能,扩展字符的大小会降低对LOB数据类型的使用。为 了启用扩展字符大小,你必须将MAX_STRING_SIZE的初始数据库参数设置为EXTENDED。
要使用扩展字符类型需要执行以下过程:
1. 关闭数据库
2. 以升级模式重启数据库
3. 更改参数: ALTERSYSTEM SETMAX_STRING_SIZE=EXTENDED;
4. 执行 utl32k.sql as sysdba: SQL>@?/rdbms/admin/utl32k.sql
5. 关闭数据库
6. 以读写模式重启数据库
对比LOB数据类型,在ASSM表空间管理中,扩展数据类型的字段以SecureFiles LOB加以存储,而在非ASSM表空间管理中,它们则是以BasciFiles LOB进行存储的。
注意:一旦更改,你就不能再将设置改回STANDARD。
19、 在线重命名和重新定位活跃数据文件
不同于以往的版本,在Oracle数据库12c R1版本中对数据文件的迁移或重命名不再需要太多繁琐的步骤,即把表空间置为只读模式,接下来是对数据文件进行离线操作。在12c R1中,可以使用ALTER DATABASE MOVE DATAFILE这样的SQL语句对数据文件进行在线重命名和移动。而当此数据文件正在传输时,终端用户可以执行查询,DML以及DDL方面的任务。另 外,数据文件可以在存储设备间迁移,如从非ASM迁移至ASM,反之亦然。
重命名数据文件:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users01.dbf' TO '/u00/data/users_01.dbf'; |
从非ASM迁移数据文件至ASM:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '+DG_DATA'; |
将数据文件从一个ASM磁盘群组迁移至另一个ASM磁盘群组:
SQL> ALTER DATABASE MOVE DATAFILE '+DG_DATA/DBNAME/DATAFILE/users_01.dbf ' TO '+DG_DATA_02'; |
在数据文件已存在于新路径的情况下,以相同的命名将其覆盖:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '/u00/data_new/users_01.dbf' REUSE; |
复制文件到一个新路径,同时在原路径下保留其拷贝:
SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '/u00/data_new/users_01.dbf' KEEP; |
当通过查询v$session_longops动态视图来移动文件时,你可以监控这一过程。另外,你也可以引用alert.log,Oracle会在其中记录具体的行为。
20、 表分区或子分区的在线迁移
在Oracle12c R1中迁移表分区或子分区到不同的表空间不再需要复杂的过程。与之前版本中未分区表进行在线迁移类似,表分区或子分区可以在线或是离线迁移至一个不同的表空间。当指定了ONLINE语句,所有的DML操作可以在没有任何中断的情况下,在参与这一过程的分区或子分区上执行。与此相反,分区或子分区迁移如果是在离线情况下进行的,DML操作是不被允许的。
示例:
SQL> ALTER TABLE table_name MOVE PARTITION|SUBPARTITION partition_name TO tablespace tablespace_name; |
第一个示例是用来在离线状况下将一个表分区或子分区迁移至一个新的表空间。第二个示例是在线迁移表分区或子分区并维护表上任何本地或全局的索引。此外,当使用ONLINE语句时,DML操作是不会中断的。
重要提示:
UPDATE INDEXES语句可以避免出现表中任何本地或全局索引无法使用的情况。
表的在线迁移限制也适用于此。
引入加锁机制来完成这一过程,当然它也会导致性能下降并会产生大量的redo,这取决于分区和子分区的大小。
Oready即为“One Technology Ready”!
Oready不仅仅是数据库领域的专家,同时也是一个社区,我们汇集百位数据库领域资深顾问、讲师,服务于数据中心的技术支持与技能传授,注重对客户的关键数据库运营支撑,强调经验的分享-Skill Transfer,聚焦数据中心的完美结合.