Oracle数据库管理与维护实战
上QQ阅读APP看书,第一时间看更新

第一篇数据库体系结构

第1章 Oracle产品系列

Oracle软件众多,初学者经常分不清Oracle各种产品的区别。本章先对Oracle系列产品作简要的介绍,然后介绍Oracle几个常见版本之间的差别,让读者对Oracle产品有宏观的了解。

1.1 Oracle产品组成

Oracle产品以Oracle数据库为核心,其他产品是围绕这个核心的管理、开发工具和应用软件。我们可以将Oracle产品分成数据库组件、开发套件、应用服务器、协作套件、应用软件五类。Oracle的产品分类如表1-1所示。

表1-1 Oracle系列的主要产品

1.1.1 数据库组件

数据库组件是Oracle内核心的组件,Oracle Database针对不同用户,不同的应用环境有多个版本,如标准版,企业版、个人版等多个版本。针对不同应用,Oracle提供了许多可选组件,如实时应用集群、Oracle OLAP、数据挖掘,这些组件对提高数据库性能,数据库可靠性、安全性、可用性等方面给予了更好的支持。下面我们就几个重要的选件作简要的介绍。

1.实时应用集群

Oracle实时应用集群利用计算机集群技术,将多个互连的服务器整合在一起。这些服务器运行起来如同单一的服务器一样,而其中的每一个服务器节点都可以运行一个数据库实例。当其中的一个或多个服务器发生故障时,或者添加或移去服务器时,并不影响整个集群的运行,数据库仍可正常运转。实时应用集群为数据库运行提供了无限的可伸缩性和高可用性,同时又具有单个系统简单性和易用性。

2.Oracle OLAP

这是一个可伸缩、高性能的计算引擎,它为开发分析应用程序提供了完全集成的管理。Oracle OLAP完全集成在数据库中,同时提供了一整套分析功能,例如预测分析市场趋势、产品生产需求,以生成企业预算和财务分析系统。Java OLAP API还为应用程序提供了软件接口。

3.数据挖掘

Oracle数据挖掘允许用户构建高级商务智能应用程序,这些应用程序能够挖掘企业数据库,并将这些信息集成到应用程序中。

4.应用程序接口

应用程序接口提供了一套第三代语言与数据库应用编程的接口,主要包括以下几种接口方式:Oracle Precompilers、OCI、ODBC、Oracle Objects for OLE、JDBC。通过这些接口,用户可以访问和操作Oracle数据库中的数据。Oracle提供了支持几乎所有第三代语言的接口。

5.网络组件

Oracle网络接口除表1-1中的Net Services外,还有SQL*Net和Oracle *Net8。SQL*Net是Oracle 7及其以前版本使用的网络组件;Oracle *Net8是Oracle 8和Oracle 8i使用的网络组件;Net Services是Oracle 9i和Oracle 10g使用的网络组件。Oracle网络组件支持多种协议,例如TCP/IP,TCP/IP With SSL,Named Pipe,LU6.2,VI。

6.SQL*Plus

SQL*Plus是Oracle提供的一个命令行式的交互界面。用户以数据库合法用户名登录后,可以在SQL*Plus内通过命令直接操纵数据。使用SQL*Plus可以创建及修改数据库结构、查询、更新、删除数据库中的数据;可以创建及修改数据库触发器、数据库存储过程;可以进行数据库用户的管理;可以进行数据库空间的管理和维护;可以进行数据库备份和日志管理等。使用SQL*Plus,还可以生成报表,或把数据库中的数据导出,形成操作系统上的ASCII文件,运行PL/SQL语句等。SQL*Plus可以作为开发和系统调试的辅助工具,也是数据库管理员经常使用的工具。

7.企业管理器OEM

企业管理器(Oracle Enterprise Manager)是数据库管理员进行数据库管理的一个十分便利的工具。企业管理器提供了一套图形化界面。通过图形化界面,用户可以进行实例管理、数据库存储管理、数据库性能调优等操作。

1.1.2 开发套件

Oracle还提供一系列应用设计、开发工具,实现不同阶段的不同要求,下面我们简要介绍几种常用的开发工具。

1.Oracle JDeveloper

Oracle JDeveloper是Oracle提供的一个优秀的Java集成开发环境。利用JDeveloper可以开发基于B/S(Browser/Server)、C/S(Client/Server)体系的Java应用程序。同时,JDeveloper能和Oracle数据库很好地集成,它提供了集成式JDBC支持,并且支持使用SQLJ的编程和调试。相比现在流行的Java开发环境JBuider,JDeveloper有更快的编译和执行速度。

2.Oracle Developer

Oracle Developer提供了一系列Oracle开发工具。它由3个开发工具组成:Forms、Reports和Graphics。Oracle Developer采用与Oracle RDBMS同样的编程语言PL/SQL,因此Oracle Developer上编写的过程或函数通过简单拖放式操作拉到服务器上就可以成为数据库核心的存储过程,反之亦然。这种功能方便了应用开发人员对于系统的再设计与修改,极大地提高了开发效率与运行效率。

3.Oracle Forms

Oracle Forms提供“拖放”式的图形用户界面,以加快应用程序开发。Forms不仅可以开发C/S应用程序,还可以开发在Oracle Application Server上运行的程序,动态生成Java Applet,用户可以在三层体系中的瘦客户机(如Web浏览器)上执行Java Applet。

4.Oracle Reports

Oracle Reports提供了一个设计环境,用来生成和格式化复杂的静态报表。报表中可以包含不同的布局样式和版面,以提高灵活性。Reports还可以同Forms和Graphics集成。

5.Oracle Graphics

Oracle Graphics允许开发人员根据数据库建立图表,能联机地将数据显示成直方图、曲线图、饼图、趋势图等,并在应用程序中嵌入这些图表。

1.1.3 应用服务器

应用服务器(Oracle Application Server)是随着Internet的普及、很多应用转向三层体系结构而出现的。应用服务器的核心是一个Web服务器,用户可以在这个Web服务器上发布自己开发的基于三层体系结构的应用。

这个Web服务器实际上是Apache Web服务器,它支持JSP、Servlet,业务逻辑BC4J(Business Components for Java)以及EJB(Enterprise JavaBeans)并提供了一些数据访问组件,包括JDBC、SQLJ等。

Oracle应用服务器针对三层体系结构的应用,提供了从开发到部署的一系列工具,它可以运行在Linux、UNIX和Windows等多个平台上。

1.1.4 协作套件

协作套件(Oracle Collaboration Suite)是Oracle提供的一套用于电子协作的应用软件,它是在Oracle数据库和应用服务器的基础上构建起来的。Oracle协作套件包括日历、实时会议功能、电子邮件、文件系统支持、语音电子邮件和工作流等全面的协作工具和软件。Oracle协作套件把所有的通讯信息都集中存储在单一的数据库中,用户可以通过Microsoft Outlook、任何Web浏览器、语音、无线设备和传真访问数据库。

1.1.5 应用软件

Oracle产品不仅限于数据库和与数据库开发相关的工具,还提供了一套针对企业的应用软件。应用软件是Oracle另一重大组成部分,它是在Oracle数据库和Oracle应用服务器的基础上构建起来的一系列企业管理软件。

针对企业管理方面Oracle提供了上百个软件模块,这些软件模块能够用于财务管理、供应链管理、生产制造管理、项目管理、人力资源管理、市场管理和服务管理等多个领域,帮助企业实现科学管理和全面自动化。这些应用软件和Oracle数据库管理关系不大,本书将不作介绍。

1.2 Oracle各版本异同

Oracle数据库版本众多,为帮助了解这些版本之间的区别,这里专门作一个介绍。我们先介绍Oracle最近几个系列间的异同,然后介绍Oracle最新系列Oracle 12c,最后介绍同一系列各个版本间的异同。

1.2.1 Oracle 8i和Oracle 9i

Oracle 8i和Oracle 9i的“i”代表“Internet”,Oracle从8i开始提出了Internet计算的概念,表明Oracle 8i和Oracle 9i是面向Internet计算而设计的。Oracle 9i比起Oracle 8i来说变化不大,主要是增加了实时应用集群和管理上的一些改进。Oracle 9i比Oracle 8i主要增强了以下方面。

❑ 不再支持Svrmgrl和Connect internal;

❑ 增加了服务器参数文件Spfile;

❑ 使用OMF(Oracle-Managed Files),免去手动管理数据库文件的繁琐;

❑ 支持多种数据库块大小,允许在创建Tablespace时为每个Tablespace指派不同的数据库块大小;

❑ 会话可以自我调整PGA大小;

❑ 引入了叫作列表分区(List Partitioning)的新分区类型。

1.2.2 Oracle 10g和Oracle 11g

Oracle 10g和Oracle 11g的“g”代表“Grid”,Oracle从10g开始提出了Grid计算的概念,表明Oracle 10g和Oracle 11g是面向Grid计算而设计的。所谓Grid计算,就是多台节点服务器利用高速网络组成一个虚拟的高性能服务器,负载在整个网格中均衡(Load Balance),按需增删节点,避免单点故障(Single Point of Faliure)。

Oracle 10g的一大特点是加强了自我管理,DBA可以从繁琐的内存调整和存储调整上解放出来。其实,Oracle 9i只是Oracle的过渡产品,Oracle 10g才是Oracle要最终发布的新一代产品。Oracle 10g主要加强了以下几方面功能。

❑ 更人性化的图形界面;

❑ 自动存储管理;

❑ 自动内存调整;

❑ 方便的段管理;

❑ 加强了针对表、数据库等的闪回功能。

如此等等,总之,Oracle 10g具有更强大的功能和更好的易用性。

Oracle 11g扩展了Oracle 10g所具有的提供网格计算优势的功能,提高了用户服务水平、减少了停机时间,更加有效地利用IT资源,同时还增强了全天候业务应用程序的性能、可伸缩性和安全性。与Oracle 10g相比,Oracle 11g主要加强了以下几方面功能。

❑ 提高管理自动化;

❑ 支持利用故障诊断快速解决问题;

❑ 实现“Oracle Data Guard”快速恢复数据;

❑ 支持测试环境的快照备用系统。

1.2.3 Oracle 12c

Oracle 12c的“c”代表“Cloud”,Oracle从12c开始提出了Cloud计算的概念,表明Oracle 12c是面向Cloud计算而设计的。同时该版本数据库也是业界首个融合全套oracle堆叠及全方位企业云端生命周期管理功能的解决方案。使用Oracle 12c解决方案,能够提升IT部门的效率和回应速度,同时降低传统资料中心、虚拟以及云端运算环境的成本和复杂性。

与旧版本Oracle数据库相比,Oracle 12c主要加强了以下几方面的功能。

❑ 增加了新特性——Pluggable Database;

❑ 通过纵深防御真正实现应用程序的安全性;

❑ 支持信息生命周期管理(ILM);

❑ 实现极端的可用性、较低成本的迁移。

1.2.4 Oracle企业版、标准版及其他版本的异同

针对不同的开发和部署环境,Oracle公司将同一系列Oracle数据库分成四个版本:标准版One(Standard Edition One)、标准版(Standard Edition)、企业版(Enterprise Edition)和个人版(Personal Edition)。

1.标准版One

标准版One是提供给小规模用户使用的Oracle版本,它提供小型数据库服务器功能。这个版本的价格相对低廉,适合小规模的单服务器环境或者大型的分布式部门级环境使用。但标准版One最多只可以在两个处理器的服务器上使用。

2.标准版

标准版提供了标准版One所有的功能和标准版One所不具有的实时应用集群。标准版提供了对更大型计算机和服务集群的支持。它可以在最高容量为四个处理器的单台服务器上或者最高容量为四个处理器的集群服务器上使用。

3.企业版

企业版是针对大业务量的在线事务处理(OLTP)环境、处理大量查询的数据仓库和其他要求比较高的互联网级应用的Oracle版本。比起标准版,企业版能在更多的平台上运行,包括更多的高级功能,如数据挖掘、并行查询、位图索引等。企业版提供了更高效、可靠、安全的数据管理。总之,企业版为企业提供了满足当今关键任务应用程序的可用性和可伸缩性需求的所有工具和功能。它包含了Oracle数据库的所有组件,并且能够使用其他可选的产品和程序包。

4.个人版

个人版是企业版的单用户版,这个版本允许开发人员在单机上开发。个人版与企业版提供的功能相似,因此开发人员可以利用个人版编写应用程序,然后移植到多用户数据库的企业版或标准版服务器上。有些公司就用个人版来部署单用户应用软件。个人版没有实时应用集群选项和管理程序包。

5.Oracle Lite版

Oracle Lite,以前又称Oracle Mobile,是为使用无线设备的单用户开发的一个版本。它采用了和Oracle其他版本不同的数据库引擎。Oracle Lite版是针对内存与存储量都有限的笔记本与其他手提设备开发的。Oracle Lite使用了一种更简便的数据库引擎,支持的SQL和其他Oracle数据库基本相同,在Oracle Lite版中可以运行其他Oracle数据库开发的应用软件,并且可以与其他Oracle版本互相复制数据。

Oracle数据库个人版、标准版、标准版One和企业版包含相同的应用程序开发组件,如用于编写存储过程和触发器的PL/SQL和Java编程接口等。虽然企业版提供了额外的可伸缩性、可用性和安全性,但这些功能一般对应用程序开发人员是透明的,用Oracle数据库这些版本中任意一个编写的应用程序都可以在其他版本上运行。例如,Oracle企业版支持的API,通常个人版和标准版也支持。

Oracle数据库各版本除了Oracle Lite版外,都是基于同一个数据库引擎开发的。Oracle标准版可以轻易地升级到企业版而不需对数据库、应用程序或管理过程做任何修改。

1.3 Oracle 12c新特性

纵观甲骨文全球大会和甲骨文公司的各种资讯,我们可以发现云计算和大数据是两个重要的主题,Oracle 12c则融合了这两大主题。与以往的Oracle数据库相比,Oracle 12c在16个方面进行了更新。本节将详细介绍Oracle 12c数据库中的16个新特性。

1.3.1 支持多线程模式

在Oracle 12c中,Oracle引入了多线程模式,允许在Windows平台之外的UNIX、Linux等系统使用多线程模式。结合多进程与多线程模式,Oracle 12c数据库极大地提升了进程管理的性能。

关于Oracle 12c数据库中的进程,如表1-2所示。

表1-2 Oracle 12c数据库进程

要使Oracle 12c处于多线程模式,我们必须将兼容性设置为12.0.0.0以上,且设置初始化参数THREADED_EXECUTION为TRUE。启用该功能的步骤如下。

(1)关闭所有实例。

(2)修改初始化参数THREADED_EXECUTION的值。

        SQL> startup upgrade
        SQL> alter system set threaded_execution=true scope=spfile;

(3)重启所有实例。

1.3.2 加强Defaults功能

Oracle 12c中加强了默认值(Default)的功能,主要体现在如下方面。

❑ 支持序列作为默认值;

❑ 如果插入NULL时,也可以指定默认值;

❑ 加强了默认值作为Identity的能力;

❑ 在Oracle 11g中,默认值的值必须是非空列,Oracle 12c中却可以通过METADATAONLY default值指定新增列的默认值。

1.3.3 更新了多种数据类型长度限制

Oracle 12c中为了使数据类型与PL/SQL中的变量类型一致,通过OUT OF LINE的CLOB,扩展VARCHAR2、NVARCHAR2和RAW类型的长度到32K。而在之前版本中,这三个类型的长度则是2000B。

如果要使用扩展后的数据类型,我们必须将兼容性设置为12.0.0.0 以上,且设置初始化参数MAX_STRING_SIZE为EXTENDED,同时还要注意这些类型不支持CLUSTER表和索引组织表。启用该功能的步骤如下。

(1)关闭所有实例。

(2)修改初始化参数MAX_STRING_SIZE的值。

        SQL> startup upgrade
        SQL> alter system set max_string_size = extended;

(3)重启所有实例。

(4)最后创建表来测试VARCHAR2、NVARCHAR2等类型的长度。

1.3.4 增强PL/SQL性能

Oracle 12c中,为了提高SQL语句调用的性能,加强了SQL Engine和PL/SQL Engine这两种代码引擎之间的交互,可以直接在SQL中嵌入PL/SQL对象并且运行。

通过WITH语句在SQL中定义一个函数,例如下面的例子所示。

            with
          function Is_Number
          (x in varchr2) return varchar2 is
          Plsql_Numb_Error exception;
          Pragma exception_init(Plsql_Num_Error, -06502)
          begin
          ……
          end Is_Number;
          select rownum,x,is_number(x) is_num from t

1.3.5 实现Native TOP N查询

正由于Oracle 12c实现了“Native TOP N”查询,大大简化了Oracle数据库中的分页实现。在Oracle 12c版本数据库之前,翻页查询需要使用rownum的方式进行SQL嵌套查询编写,非常复杂;而“Native TOP N”查询允许使用Offset / Limit等限定进行Top N查询。该查询的语法结构如下。

        OFFSET <offset> [ROW | ROWS]
              FETCH [FIRST | NEXT]
              [<rowcount> | <percent> PERCENT] [ROW | ROWS]
              [ONLY | WITH TIES]

为了便于用户掌握该特性,我们通过两种方式来实现返回经过排序后TOP 5%的记录,旧版本的查询语句如下。

        SQL>   select employee_id,last_name,salary
              from(select employee_id,last_name,salary,
                      row_number() over (order by salary) rn,
                      count(*) over () total
                  form employee)
              where rn<=ceil(total*5/100);

新版本的查询语句如下。

        SQL>   select object_id,object_name from eygle order by object_id
              fetch first 5 rows only;

通过上述两段SQL语句的对比,我们可以发现,新版本的分页实现简化了许多。

1.3.6 加强行模式匹配

Oracle 12c中提供了新的模式匹配子句match_recognize,该语句通过使用正则语法提供类似分析函数的功能,从而实现在行间进行匹配判断并进行计算。

1.3.7 增加Adaptive Plans

Adaptive Plans,翻译为自适应执行计划,该特性的增加主要是为了克服列倾斜问题,同时它也是一种非常神奇的特性。因为拥有自适应功能的执行计划,所以优化器可以在运行时自动适配一个性能不良的执行计划,并避免在后续仍选择该性能糟糕的计划。

当SQL优化器支持Adaptive Plans特性后,执行一个关于Join(连接)SQL语句的具体流程如下:

(1)发布用户语句。

(2)SQL优化器基于现有统计生成一个“Nested Loops”执行计划,同时生成可选的“Hash Join”子计划并存放到cursor。

(3)Oracle 12c数据库在执行“Nested Loops”之前先读取要Join表的行,并暂存于内存中。

(4)当表的行很少,做出决策依旧采用“Nested Loops”计划。

(5)当表的行达到一定阀值,做出决策采用“Hash Join”子计划。

1.3.8 改进分区特性

为了提高Oracle 12c数据库的性能,该版本的数据库对分区进行了调整,主要提供了异步维护全局索引的drop和Truncate分区操作,还增加了Interval-Reference分区方式。详细调整如下。

❑ Interval-Reference分区方式:该分区方式把Oracle 11g中的Interval分区和Reference分区方式相结合,当主表自动增加一个分区后,所有的子表、孙子表、重孙子表、重重孙子表等都可以随着外接列新数据增加,自动创建新的分区。

❑ Truncate和Exchange分区及子分区:无论是Truncate还是Exchange分区,在主表上执行的操作,都可以在级联的子表、孙子表、重孙子表、重重重……孙子表上同时执行。对于Truncate分区而言,所有表的操作在同一个事务中,如果中途失败,会回滚到命令执行之前的状头。这两个功能通过关键字Cascade实现。

❑ 在线移动分区:为了提高分区整体可用性,缩短了分区维护时间,提供了“Move Online”关键字。该关键字可以实现在移动过程中,对表和被移动的分区执行查询、DML语句以及分区的创建和维护操作,同时整个移动过程对应用透明。

❑ 多个分区同时操作:实现对多个分区同时进行维护操作,即可以将多个分区Merge到一个新的分区中,也可以将一个分区SPLIT成多个分区。为了让多个分区同时操作自动并行完成,需要通过FOR语句指定操作的每个分区,如果为RANGE分区,也可以通过TO语句来指定处理分区的范围。

❑ 异步全局索引维护:对于非常大的分区表而言,维护全局索引是一件非常痛苦的事情,该特性则解决了这个问题。在具体使用时,即使是几亿条记录的全局索引,在分区维护操作,仍然是VALID状态,索引不会失效,不过索引的状态是包含OBSOLETE数据,当维护操作完成,索引状态恢复。

❑ 部分本地和全局索引:通过使用该特性,可以极大地增加灵活性。如果在分区表的部分分区上建立索引,当通过索引列访问全表数据时,一部分分区可以通过索引扫描,另一部分分区通过全分区扫描,这样可以减少对历史数据的索引量。

由于Oracle 12c数据库在分区上做了很大的改进,最明显的效果就是在该版本数据库中进行在线重命名和在线迁移不再需要复杂的过程。

对于在线重命名,需要首先把表空间置为只读模式,然后通过使用“ALTER DATABASE MOVE DATAFILE”这样的SQL语句对数据文件进行在线重命名。而当该数据文件传输时,终端用户可以执行查询、DML以及DDL方面的任务。同样数据文件可以在存储设备间迁移,如从非ASM迁移至ASM。

对于在线迁移,需要注意的是,当指定了ONLINE语句,所有的DML操作可以在没有任何中断的情况下,在参与在线迁移的分区或子分区上执行;但是如果在离线迁移状态下,DML操作是不允许的。

1.3.9 增强数据优化

为了增强数据优化功能,系统提供了ILM(数据生命周期管理)功能。该功能中的“数据库热图”(Database Heat Map),不仅可以在视图中直接显示数据的利用率,而且还可以发现“最热的数据”。同时Oracle 12c中也可以自动实现数据的在线压缩和数据分级,其中数据分级不仅可以在线将数据文件定时转移到归档文档,而且还可以在线将数据表定时转移至归档文件;而在线压缩则实现在线的数据压缩。

1.3.10 加强应用连续性

Oracle 12c之前RAC(实时应用集群)的FAILOVER(故障转移)只支持SESSION和SELECT级别,而对于DML操作无能为力。当设置为SESSION级别时,进行到一半的DML操作会自动回滚;当设置为SELECT级别时,虽然FAILOVER可以不中断查询,但是对于DML操作却不支持自动回滚,必须要手工回滚。而Oracle Database 12c中则实现了事务的FAILOVER。

1.3.11 引入临时UNDO段

所谓临时UNDO(Temporary Undo Segments),就是将临时段中UNDO独立出来,放到TEMP表空间中,该特性是专门为临时表设置的。

每个Oracle数据库包含一组与系统相关的表空间,例如SYSTEM、SYSAUX、UNDO &TEMP,并且它们在Oracle数据库中的作用都非常重要。在Oracle 12c之前,UNDO记录由临时表产生并存储在UNDO表空间中,其实这更类似于一个通用或持久的表撤销记录。而在Oracle 12c中由于信息不会写入UNDO日志,UNDO表空间的开销得以减少并且产生的UNDO数据会更少。使用临时UNDO的优点如下。

❑ 使用临时UNDO可以降低对UNDO表空间的占用。

❑ 使用临时UNDO可以减少REDO产生的数量,提高DML的速度;

❑ 使用临时UNDO可以在“Active Data Guard”配置中的Standby数据库里直接在临时表上执行DML操作。

如果要启用临时UNDO段,必须将兼容性设置为12.0.0.0以上,并且设置初始化参数SET TEMP_UNDO_ENABLED为TRUE。

1.3.12 支持PDB

PDB,全称为Oracle Pluggable Database(可组装式数据库,PDB),它是Oracle 12c中引人瞩目的新特性,主要是为计算而生。在Oracle 12c版本数据库以前,Oracle数据库是通过Schema来进行用户模式隔离的,而现在可组装式数据库可以让此前意义上的多个数据库一起共存。

关于PDB的体系结构如图1-1所示。

图1-1 Oracle PDB体系结构

我们可以发现,Oracle PDB体系结构由一个容器数据库(CDB)和多个可组装式数据库(PDB)构成。PDB包含独立的系统表空间和SYSAUX表空间等,但是所有PDB共享CDB的控制文件、日志文件和UNDO表空间。各个PDB之间互访需要通过DB Link进行,就仿佛是多个数据库一样。

正是由于Oracle 12c具有PDB这个新特性,该版本数据库也被称为多租户数据库。也就是说,在云平台上,不同租户可以在同一个大的CDB数据库中运行,而彼此数据(PDB)与应用又完全隔离。显然这个特性对Oracle推出的数据库云平台必不可少。

注意,Oracle 12中的PDB特性所面临的最大问题仍然是安全问题。如果某个PDB的用户获得了意外的权限提升,则所有用户的数据都可能被暴露。

1.3.13 提供CDB容器

Multitenant Environment,直译为多租户环境,它是Oracle 12c数据库众多新特性中的一个亮点,同时也是跟PDB关系最紧密的一个特性。在Oracle 12c数据库所提供的多租户环境中,可以创建一个多租户的容器(Oracle Container Database,CDB),CDB则可以用来管理多个用户创建的可组装式数据库(Oracle Pluggable Database,PDB)。其实这些PDB可以直接为用户服务,它们主要包含了Schemas Objects等信息。

CDB容器的架构图如图1-2所示,主要包含Root、Seed和PDB组件,它们的详细介绍如下。

图1-2 CDB架构图

❑ Root组件:也称作CDB$ROOT,主要负责存储元数据和通用账户信息。在具体配置时,通用账户能访问所有的PDB,但是一个CDB中只能有一个Root组件。

❑ Seed组件:也称作PDB$SEED,是创建PDB数据库的模板库。因为该模板库具有只读属性,所以不能直接修改该模板里面的数据。最后需要注意一个CDB容器中也只能有一个Seed组件。

❑ PDB组件:跟以前使用的数据库一样,只不过叫可组装式数据库,是用户可以直接使用的数据库。

上面所介绍的就是一个CDB里的所有组件,每个组件称作一个容器(Container),并且每个容器都有一个唯一ID和名称。

为了了解CDB、PDB、PDB$SEED、CDB$ROOT等之间的关系,用户需要掌握多租户环境的体系结构,如图1-3所示。

图1-3 体系结构

1.3.14 支持表级别恢复

在Oracle 12c数据库中,用户可以通过RMAN工具直接从备份集中恢复单张、多张表和表分区到某个时间点或SCN。这样有一个好处,即当恢复的数据比较少而备份非常大时,该特性能减少工作量。

当Oracle实例由于逻辑损坏、误删除等操作带来数据丢失时,用户可以使用表级别恢复来实现数据找回,具体步骤如下。

(1)检查恢复表在哪个备份中,并且选择合适的备份。

(2)创建辅助数据库并把该辅助数据库临时设置为某个时间点。为了创建成功,用户需要指定一个路径来存放该辅助数据库。

(3)创建包含恢复后表数据的export_dump_file。

(4)(可选)将步骤(3)导出的export_dump_file导入目标数据库。

(5)(可选)重命名导入后的表名称。

以下是在RMAN中应用表或分区恢复的限制和约束。

❑ SYS用户的表无法恢复。

❑ SYSTEM和SYSAUX表空间内的表无法恢复。

❑ 含有NOT NULL约束的表不能使用REMAP工具进行恢复。

1.3.15 支持网络恢复

在Oracle 12c数据库中,用户不仅可以通过RMAN工具执行表级别的恢复,而且还可以网络执行数据文件的备份和恢复。这样有一个好处,当需要同步主数据库和备用数据库时,用户只需要在两者之间用一个服务名重新获得或恢复数据文件、控制文件、参数文件、表空间或整个数据库即可。通过这种方式,用户可以防止主数据库上数据文件、表空间的丢失,或是没有真正从备份集恢复数据文件。

1.3.16 增添了Flex ASM

Oracle 12c数据库为了配合云战略,专门增加了Flex ASM特性。所谓Flex ASM,跟前面介绍的PDB非常相似,为什么怎么说?这是因为在Oracle 12c数据库之前,8个节点的RAC(Real Application Clusters,实时应用集群)需要8个ASM(自动存储管理)实例,即一个RAC节点需要一个ASM实例。Oracle 12c数据库中则只需要2~3个ASM实例,没有ASM实例的那些RAC节点可以直接安装个客户端,这样就可以远程连接到具有ASM实例的节点。

注意,Oracle 12c数据库中的Flex ASM功能需要用户手动启用才能生效,否则RAC的模式还是和Oracle 11g中没有差别。