Oracle 12c数据库入门与应用
上QQ阅读APP看书,第一时间看更新

第1章
关系数据库与Oracle 12c

在信息化如此发达的今天,数据库技术作为数据管理的核心技术在社会各个领域中发挥着重要的作用,具有强大的功能。企业使用数据库来保存数据,不仅会为企业带来更多的效益,而且会降低企业的生产和管理成本。

关系型数据库管理系统Oracle以其安全性、完整性和稳定性的特点在市场占有很大的优势,成为应用最广泛的数据库产品之一。

Oracle 12c是由Oracle公司发布的关系数据库管理系统,它为用户提供了完整的数据管理和分析解决方案。本章首先讲解什么是数据库、关系型数据库常见的一些专业术语等内容;然后以Oracle 12c版本为例介绍安装过程、登录方式及其体系结构。

本章学习要点

◎ 了解数据库、数据库管理系统、数据库系统的概念

◎ 熟悉数据库管理系统的管理模型

◎ 掌握关系型数据库的构成

◎ 熟悉关系型数据库常见的术语

◎ 了解范式理论和E-R模型

◎ 了解Oracle 12c的发展历史

◎ 熟悉Oracle 12c的数据库版本

◎ 熟悉Oracle 12c的新增特性

◎ 掌握Oracle 12c数据库管理系统的安装过程

◎ 掌握如何登录到Oracle 12c数据库

◎ 熟悉Oracle 12c的体系结构

1.1 数据库的概念

开发者可以将数据库理解为存放数据的仓库,数据库中包含系统运行所需要的全部数据。用户可以使用数据库来管理和维护数据库,并且可以对数据库表中的数据进行调用。为了更好地了解和使用数据库,开发者必须先了解一些数据库的基本概念和基本模型。

1.1.1 数据库概述

数据库(Database,DB)是存放数据的仓库。数据库是需要长期存放在计算机内,有组织、可共享的数据集合。数据库中的数据按一定的模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并且可以为不同的用户共享。例如,把一个学校教师的教学工龄、所教课程等数据有序地组织并存放在计算机内,这样就可以构成一个数据库。

与数据库经常一起出现的还有数据库管理系统和数据库系统,下面简单介绍它们的概念。

1.数据库管理系统

数据库管理系统(DataBase Management System,DBMS)按一定的数据模型组织数据形成数据库,并对数据库进行管理。简单来说,数据库管理系统就是管理数据库的系统。数据库系统管理员(Database Adminastrator,DBA)通过DBMS对数据库进行管理。

目前,SQL Server、Oracle、MySQL、Access、Sybase等都是比较流行的数据库管理系统。其中,Oracle和SQL Server是目前最流行的中大型关系数据库管理系统。本书介绍的是Oracle版本。

2.数据库系统

数据、数据库、数据库管理系统与操作数据库的应用程序,加上支撑它们的硬件平台、软件平台和与数据库有关的人员一起构成了一个完整的数据库系统。简单来说,数据库系统(Database System,DBS)是由数据库及其管理软件组成的系统。

数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。

1.1.2 数据库模型

数据库管理系统根据数据模型对数据进行存储和管理。数据库模型是指数据库中数据的存储结构,目前数据库管理系统采用的数据模型有3种,分别为层次模型(Hierarchical Model)、网状模型(Network Model)以及关系模型(Relation Model)。从当前的软件行业来看,关系型数据库使用得最为普遍。

1.层次模型

层次型数据库使用层次模型作为自己的存储结构。层次模型将数据组织成一对多关系的结构,采用关键字来访问其中每一层次的每一部分。层次模型具有以下优势。

  • 存取方便且速度快。
  • 结构清晰,非常容易理解。
  • 检索关键属性非常方便。
  • 更容易实现数据修改和数据库扩展。

除了优势外,层次模型还有一定的缺点。例如,结构不够灵活,同一属性数据要存储多次,数据冗余大,不适合拓扑空间数据的组织。

2.网状模型

网状型数据使用网状模型作为自己的存储结构。网状模型具有多对多类型的数据组织方式。这种模型能明确而方便地表示数据间的复杂关系,数据冗余小。但是网状结构的复杂性增加了用户查询和定位的困难,需要存储数据间联系的指针,使得数据量增大,同时不方便数据的修改。

3.关系模型

关系模型突破了层次模型和网状模型的许多局限。它以记录组或二维数据表的形式组织数据,以便于利用各种实体与属性之间的关系进行存储和变换,不分层也无指针,是建立空间数据和属性数据之间关系的一种非常有效的数据组织和方法。

在关系模型中,实体和实体间的联系都是用关系表示的。关系是指由行与列构成的二维表。也就是说,二维表格中既存放着实体本身的数据,又存放着实体间的联系。关系不但可以表示实体间一对多的联系,通过建立关系间的关联,也可以表示多对多的联系。图1-1所示为关系模型的结构。

图1-1 关系模型的结构示意图

从图1-1中可以看出,关系模型数据库的优点是结构简单、格式统一、理论基础严格,而且数据表之间相对独立,可以在不影响其他数据表的情况下进行数据的增加、修改和删除。在进行查询时还可以根据数据表之间的关联性,从多个数据表中查询抽取相关的信息。

1.2 了解关系型数据库

关系型数据库就是指基于关系模型的数据库,它是一种重要的数据组织模型。在计算机中,关系型数据库是数据和数据库对象的集合,而管理关系型数据库的计算机软件称为关系数据库管理系统(Relational Database Management System,RDBMS)。

1.2.1 数据库的组成

关系型数据库是建立在关系模型基础上的数据库,是利用数据库进行数据组织的一种方式,是现代流行的数据管理系统中应用最为普遍的一种。下面通过两个方面来详细了解数据库的组成。

1.数据库的表

关系型数据库是由数据表以及数据表之间的关联组成的。其中数据表通常是一个由行和列组成的二维表,每一个数据表分别说明数据库中某一特定的方面或部分的对象及其属性。数据表中的行通常叫作记录或元组,它代表众多具有相同属性对象中的一个;数据库表中的列通常叫作字段或属性,它代表相应数据库表中存储对象的共有属性。图1-2所示为会员系统中的会员信息表。

图1-2 会员信息表

从图1-2所示的会员信息表中可以看出,该表中的数据都是会员系统中的每位会员的具体信息,每行代表一名会员的完整信息,而每行每一个字段列则代表会员的其中一方面信息,这样就组成了一个相对独立于其他数据表之外的会员信息表。可以对这个表进行添加、删除或修改记录等操作,而完全不会影响到数据库中其他的数据表。

2.数据库表的关联

在关系型数据库中,表的关联是一个非常重要的组成部分。表的关联是指数据库中的数据表与数据表之间使用相应的字段实现数据表的连接。通过使用这种连接,无须再将相同的数据多次存储,同时,这种连接在进行多表查询时也非常重要。

例如,图1-3列出了订单表与会员信息表和会员类型表之间的关联。在该图中,使用“会员编号”列将订单同会员信息表关联起来;使用“会员类型编号”列将订单表与会员类型表关联起来。这样,开发者想要通过订单表查询会员名称或者会员类型名称时,只需要告知管理系统需要查询的“购买商品”名称,然后使用“会员编号”和“会员类型编号”列关联订单、会员信息和会员类型3个数据表就可以实现。

图1-3 数据库表的关联

提示

在数据库设计过程中,所有的数据表名称都是唯一的。因此,不能将不同的数据表命名为相同的名称。但是在不同的表中,可以存在同名的列。

1.2.2 常见术语

关系数据库的特点在于它将每个具有相同属性的数据独立地存在一个表中。对任何一个表而言,用户可以新增、删除和修改表中的数据,而不会影响表中的其他数据。下面来了解一下关系数据库中的一些基本术语。

1.键

键(key)是关系模型中的一个重要概念,在关系中用来标识行的一列或多列。

2.主关键字

主关键字(Primary Key)是被挑选出来作为表行的唯一标识的候选关键字,一个表中只有一个主关键字,主关键字又称为主键。主键可以由一个字段,也可以由多个字段组成,分别称为单字段主键或多字段主键。

3.候选关键字

候选关键字(Candidate Key)是标识表中的一行而又不含多余属性的一个属性集。

4.公共关键字

在关系数据库中,关系之间的联系是通过相容或相同的属性或属性组来表示的。如果两个关系中具有相容或相同的属性或属性组,那么这个属性或属性组被称为这两个关系的公共关键字(Common Key)。

5.外关键字

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外关键字(Foreign Key)。由此可见,外关键字表示了两个关系之间的联系,外关键字又称为外键。

警告

主键与外键的列名称可以是不同的。但必须要求它们的值集相同,即主键所在表中出现的数据一定要和外键所在表中的值匹配。

1.2.3 完整性规则

关系模型的完整性规则是对数据的约束。关系模型提供了3类完整性规则,分别是实体完整性规则、参照完整性规则和用户定义完整性规则。其中,实体完整性规则和参照完整性规则是关系模型必须满足的完整性约束条件,称为关系完整性规则。

1.实体完整性规则

实体完整性规则指关系的主属性(主键的组成部分)不能是空值。现实世界中的实体是可以区分的,即它们具有某种唯一性标识。

相应地,关系模型中以主键作为唯一性标识,主键中的属性(即主属性)不能取空值。如果取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与现实世界的环境相矛盾,因此这个实体一定不是一个完整的实体,即主键不能为空并且必须是唯一的。

2.参照完整性规则

如果关系R1的外键与关系R2中的主键相符合,那么外键的每个值必须在关系R2的主键值中找到或者是空值,即外键只能对应唯一的主键。

3.用户定义完整性规则

用户定义完整性规则是针对某一具体的实际数据库的约束条件。它由应用环境所决定,反映某一具体应用所涉及的数据必须满足的要求。关系模型提供定义和检验这类完整性的机制,以便用统一的、系统的方法处理,而不必由应用程序承担这一功能。

1.3 范式理论和E-R模型

范式理论是数据库设计的一种理论基础和指南,它不仅能够作为数据库设计优劣的判断标准,而且还可以预测数据库系统可能出现的问题。而E-R模型方法则是一种用来在数据库设计过程中表示数据库系统结构的方法,其主导思想是使用实体、实体的属性以及实体间的关系表示数据库系统结构。

1.3.1 范式理论

无规矩不成方圆。开发者在构建数据库时必须遵循一定的规则,在关系数据库中这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,即满足不同的范式。

目前关系数据库有6种范式,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。

满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的范式称为第二范式(2NF),其余范式以此类推。一般说来,数据库只需满足第三范式(3NF)即可。

1.第一范式

第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多的关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。

注意

在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

例如,对于图1-4所示的员工信息表来说,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。简而言之,第一范式就是无重复的列。

图1-4 员工信息表

2.第二范式

第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式。第二范式要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

例如,在图1-4中,为员工信息表中加上了员工编号列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。

第二范式要求实体的属性完全依赖于主关键字。完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在则这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。

3.第三范式

满足第三范式必须先满足第二范式。简而言之,第三范式要求一个数据库表中不包含已在其他表中包含的非主关键字信息。

例如,存在一个部门信息表,其中每个部门有部门编号、部门名称、部门简介等信息。那么在图1-4所示的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式也应该构建它;否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其他非主属性。

提示

实际上,第三范式就是要求不在数据库中存储可以通过简单计算得出的数据。这样不但可以节省存储空间,而且当函数依赖的一方发生变动时,避免了修改数据的麻烦,同时也避免了在这种修改过程中可能造成的人为错误。

根据前面3个范式的叙述可以看出,数据表规范化的程度越高,数据冗余就越少,同时造成人为错误的可能性也就越小。但是,规范化的程度越高,在查询检索时需要做的关联等工作就会越多,数据库在操作过程中需要访问的数据表以及它们之间的关联也就越多。

因此,在数据库设计的规范化过程中,需要根据数据库实际的需求选择一个折中的规范化程序。

1.3.2 E-R模型

在数据库设计过程中,建立数据模型是第一步,它将确定要在数据库中保存什么信息和确认各种信息之间存在什么关系。建立数据模型需要使用E-R数据模型来描述和定义。

E-R(Entity-Relationship,实体-关系)模型用简单的图形反映了现实世界中存在的事物或数据以及它们之间的关系。

1.实体模型

实体是观念世界中描述客观事物的概念,可以是具体的事物,如一张桌子、一条凳子、一间房屋等,也可以是抽象的事物,如一种感受或者一座城市等。同一类实体的所有实例就构成该对象的实体集。

实体集就是实体的集合,由该集合中实体的结构或形式表示,而实例则是实体集中某个特例。实体集中可以有多个实例,如图1-5所示。

在图1-5所示的电影实体中,每一个用来描述电影特性的信息都是一个实体属性。例如,电影实体包含编号、名称、主演、导演、上映日期,这些属性就组合成一个电影实例的基本数据信息。

图1-5 实体模型

根据系统的描述,每个属性都有它的数据类型和特性,特性包括该属性在某些情况下是否是必需的、是否有默认值以及属性的取值限制等。另外,为了区分和管理多个不同的实例,要求每个实例都要有标识。例如,图1-5所示的电影实体,可以由电影编号或者电影名称来标识。但是,通常情况下,不用名称进行标识,这是因为可能出现名称相同的情况,而是使用具有唯一标识的电影编号进行标识,这样可以避免电影名称相同引起的混乱。

提示

开发者可以简单地将实体标识符理解为表的主键,由实体的一个或多个属性构成,如果标识符由多个属性组成,那么将其称为复合标识符。

2.关系模型

实体之间是通过关系进行联系的,它们按照有意义的方式连接在一起,以确保数据的完整性,使得在一个关系中采取的操作对另一个关系中的数据不会产生消极影响。实体之间的关系通常分为一对一、一对多和多对多关系。

1)一对一关系

如果实体A中的每一个实例最多和实体B中的一个实例有关,反之亦然,那么就称实体A和实体B的关系为一对一(即1∶1)关系。

例如,图1-6所示的班级实体对班长实体就属于一对一关系,一个班级只能有一个正班长,同样一个班长只能在一个班级中任职。

图1-6 一对一关系

2)一对多关系

如果实体A中的每一个实例与实体B中的任意(零个或多个)实例有关,而实体B中的每个实例最多与实体A的一个实例有关,那么就称实体A对实体B的关系为一对多(即1∶N)关系。

例如,图1-7所示为班级对学生的一对多关系,将班级实体和学生实体进行关联,即一个班级中可以有多名学生,但是每名学生只能在一个班级中学习。

图1-7 一对多关系

在一对多关系中,1和N的位置是不能任意调换的。当1处于班级实例而N处于学生实例时,表示一个班级对应多个学生。如果将1和N的位置进行调换,即N∶1,此时表示班级可以有一个学生,但是一个学生可以属于多个班级,这显然不是大家想要的实体关系。

3)多对多关系

多对多关系是二元关联。如果实体A中的每一个实例与实体B中的任意(零个或多个)实例有关,并且实体B中每个实例与实体A中的任意(零个或多个)实例有关,这时就称实体A和实体B的关系为多对多即N∶M关系。

例如,图1-8表示课程与学生之间的多对多关系。一门课程可以同时有多名学生选修,一个学生可以同时选修多门课程。

图1-8 多对多关系

1.3.3 实践案例:E-R模型转换为关系模型

由于E-R图直观易懂,在概念上表示了一个数据库的信息组织情况,所以如果能够画出数据库系统的E-R图,也就意味着弄清楚了应用领域中的问题。本小节将介绍如何根据E-R图将E-R模型演变为关系模型。

1.实体转化为表

对E-R模型中的每个实体,在创建数据库时相应地为其建立一个表,表中的列对应实体所具有的属性,主属性就作为表的主键。在图1-8中可以将学生实体和课程实体转换为学生信息表和课程信息表,如图1-9所示。

图1-9 实体转化为表

2.实体间联系的处理

对于实体间的一对一关系,为了加快查询速度,可以将一个表中的列添加到两个表中。一对一关系的变换比较简单,一般情况下不需要再建立一个表,而是直接将一个表的主键作为外键添加到另一个表中,如果联系在属性中则还需要将联系的属性添加到该表中。

实体间的一对多关系的变换也不需要再为其创建一个表。设表A与表B之间是1∶N关系,则变换时可以将表A的主键作为外键添加到表B中。

多对多关系的变换要比一对多关系复杂得多。因为通常这种情况下需要创建一个称为连接表的特殊表,以表达两个实体之间的关系。连接表的列包含其连接的两个表的主键列,同时包含一些可能在关系中存在的特定的列。例如,学生和课程之间的多对多关系就需要借助选修表,图1-10所示为转换后的关系。

图1-10 转换多对多关系

提示

为了保证设计的数据库能够有效、正确地运行,往往还需要对表进行规范,以消除数据库中的各种异常现象。

1.4 了解Oracle 12c

Oracle Database(简称Oracle)是美国Oracle公司开发的一款关系数据库管理系统,也是目前世界上使用最为广泛的数据库管理系统。作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。

1.4.1 发展历史

1977年,Larry Ellison、Bob Miner和Ed Oates等人组建了Relational软件公司(Relational Software Inc.,RSI)。他们决定使用C语言和SQL界面构建一个关系数据库管理系统(Relational Database Management System,RDBMS),并很快发布了第一个版本(仅是原型系统)。

1979年,RSI首次向客户发布了产品,即第2版。该版本的RDBMS可以在装有RSX-11操作系统的PDP-11机器上运行,后来又移植到了DEC VAX系统。

1983年,发布的第3个版本中加入了SQL语言,而且性能也有所提升,其他功能也得到增强。与前几个版本不同的是,这个版本是完全用C语言编写的。同年,RSI更名为Oracle Corporation,也就是今天的Oracle公司(中文名为甲骨文公司)。

1984年,Oracle的第4版发布。该版本既支持VAX系统,也支持IBM VM操作系统。这也是第一个增加了读一致性的版本。

1985年,Oracle的第5版发布。该版本可称为Oracle发展史上的里程碑,因为它通过SQL*Net引入了客户端-服务器的计算机模式,同时它也是第一个打破640KB内存限制的MS-DOS产品。

1988年,Oracle的第6版发布。该版本除了改进性能、增强序列生成与延迟写入(Deferred Writes)功能以外,还引入了底层锁。此外,该版本还加入了PL/SQL和热备份等功能。这时Oracle已经可以在许多平台和操作系统上运行。

1991年,Oracle 6.1版在DEC VAX平台中引入了Parallel Server选项,很快该选项也可用于许多其他平台。

1992年,Oracle 7发布。Oracle 7在对内存、CPU和I/O的利用方面作了许多体系结构上的变动,这是一个功能完整的关系数据库管理系统,在易用性方面也作了许多改进,引入了SQL*DBA工具和database角色。

1997年,Oracle 8发布。Oracle 8除了增加许多新特性和管理工具以外,还加入了对象扩展特性。开始在Windows系统下使用,以前的版本都是在UNIX环境下运行。

2001年,Oracle 9i Release 1发布。这是Oracle 9i的第一个发行版,包含RAC(Real Application Cluster)等新功能。

2002年,Oracle 9i Release 2发布,它在Release 1的基础上增加了集群文件系统(Cluster File System)等特性。

2004年,针对网格计算的Oracle 10g发布。该版本中Oracle的功能、稳定性和性能的实现都达到了一个新的水平。

2007年7月12日,甲骨文公司推出数据库软件Oracle 11g。Oracle 11g有400多项功能,经过了1500万个小时的测试,开发工作量达到了3.6万人/月。

2013年6月26日,Oracle 12c版本正式发布,其中“c”代表云计算,首先发布的版本号是12.1.0.1.0,目前最新的版本号是12.1.0.2.0。Oracle 12c数据库引入了一个新的多承租方架构,使用该架构可以轻松部署和管理数据库云。另外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle 12c成为私有云和公有云部署的理想平台。

1.4.2 数据库版本

Oracle 12c为适合不同规模的组织需要提供了多个量身定制的版本,并为满足特定的业务和IT需求提供了几个企业版专有选件。Oracle 12c数据库有4个版本,即企业版、标准版、标准版1和个人版。

1.企业版

Oracle 12c企业版将对正在部署私有数据库云的客户和正在寻求以安全、隔离的多租户模型发挥Oracle数据库强大功能的SaaS(Software-as-a-Service,软件即服务)供应商有极大帮助。而且企业版本提供综合功能来管理要求最严苛的事务处理、大数据以及数据仓库负载。客户可以选择各种Oracle数据库企业版选件来满足业务用户对性能、安全性、大数据、云和可用性服务级别的期望。

Oracle 12c企业版数据库具有以下优势。

  • 使用新的多租户架构,无须更改现有应用即可在云上实现更高级别的整合。
  • 自动数据优化特性可高效地管理更多数据、降低存储成本和提升数据库性能。
  • 深度防御的数据库安全性可应对不断变化的威胁和符合越来越严格的数据隐私法规。
  • 通过防止发生服务器故障、站点故障、人为错误以及减少计划内停机时间和提升应用连续性,获得更高可用性。
  • 可扩展的业务事件顺序发现和增强的数据库中大数据分析功能。
  • 与Oracle Enterprise Manager Cloud Control 12c无缝集成,使管理员能够轻松管理整个数据库生命周期。
2.标准版

Oracle 12c标准版是面向中型企业的一个经济实惠、功能全面的数据库管理解决方案。该版本中包含一个可插拔数据库用于插入云端,还包含Oracle真正应用集群用于实现企业级可用性,并且可随用户的业务增长而轻松扩展。

使用Oracle 12c数据库具有以下优势。

  • 每个用户350美元(最少5个用户),可以只购买目前需要的许可,然后使用Oracle真正应用集成随需扩展,从而节省成本。
  • 提高服务质量,实现企业级性能、安全性和可用性。
  • 可运行于Windows、Linux和UNIX操作系统。
  • 通过自动化的自我管理功能轻松管理。
  • 借助Oracle Application Express、Oracle SQL Developer和Oracle面向Windows的数据访问组件简化应用开发。
3.标准版1

Oracle 12c标准版1经过了优化,适用于部署在小型企业、各类业务部门和分散的分支机构环境中。该版本可在单个服务器上运行,最多支持两个插槽。Oracle 12c标准版可以在包括Windows、Linux和UNIX在内的所有Oracle支持的操作系统上使用。

使用Oracle 12c标准版1数据库具有以下优势。

  • 以极低的价格即每个用户180美元起步(最少5个用户)。
  • 以企业级性能、安全性、可用性和可扩展性支持所有业务应用。
  • 可运行于Windows、Linux和UNIX操作系统。
  • 通过自动化的自我管理功能轻松管理。
  • 借助Oracle Application Express、Oracle SQL Developer和Oracle面向Windows的数据访问组件简化应用开发。
4.个人版

个人版数据库只提供Oracle作为数据库管理系统的基本数据库管理服务,它适用于单用户开发环境,其对系统配置的要求也比较低,主要面向开发技术人员使用。

Oracle 12c的所有版本均使用同一个代码库构建而成,彼此之间完全兼容。Oracle 12c可用于多种操作系统中,并且包含一组通用的应用程序开发工具和编程接口。客户可以从标准版1开始使用,而后随着业务的发展或根据需求的变化,轻松升级到标准版或企业版。升级过程非常简单,只需安装下一个版本的软件,无须对数据库或应用程序进行任何更改,便可在一个易于管理的环境中获得Oracle举世公认的性能、可伸缩性、可靠性和安全性。

1.4.3 新特性

Oracle 12c企业版包含500多个新特性,如数据库管理、RMAN、Data Guard以及性能调优等方面的改进。其中包括一种新的架构,可简化数据库整合到云的过程,客户无须更改其应用即可将多个数据库作为一个进程管理。本小节只介绍对开发人员有用的Oracle 12c数据库的部分新特性。

1.WITH语句的改善

在Oracle 12c中,开发人员可以用SQL语句更快地运行PL/SQL函数或过程,这些是由SQL语言的WITH语句加以定义和声明的。尽管不能在PL/SQL块中直接使用WITH语句,但是可以在PL/SQL中通过一个动态SQL加以引用。

2.改善默认值

改善默认值包括:将序列作为默认值;自增列;当明确插入NULL时指定默认值;METADATA-ONLY default值指的是增加一个新列时指定的默认值,和Oracle 11g中的区别在于,Oracle 11g的default值要求NOT NULL约束。

3.放宽多种数据类型长度限制

增加了VARCHAR2、NVARCHAR2和RAW类型的长度到32KB,要求兼容性设置在12.0.0.0以上,且设置初始化参数MAX_SQL_STRING_SIZE的值为EXTENDED,这个功能不支持CLUSTER表和索引组织表,最后这个功能并不是真正改变了VARCHAR2的限制,而是通过OUT OF LINE的CLOB实现。

4.TOP N的语句实现

在之前的版本中有许多间接手段来获取顶部或底部记录TOP N查询结果的限制(如ROWNUM),而在Oracle 12c中,通过新的FETCH语句(如FETCH FIRST|NEXT|PERCENT)可简化这一过程,并使其变得更为直接。

例如,查询dba_users数据字典中user_id列的值最大的前10位用户信息。语句如下:

5.行模式匹配

类似分析函数的功能,可以在行间进行匹配判断并进行计算。在SQL中新的模式匹配语句是match_recognize。

6.分区改进

Oracle 12c中对分区功能做了较多的调整,共分为6部分,简单说明如下。

1)TRUNCATE和EXCHANGE分区及子分区

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

2)INTERVAL和REFERENCE分区

把Oracle 11g的INTERVAL分区和REFERENCE分区相结合,这样主表自动增加一个分区后,所有的子表、孙子表、重孙子表、重重孙子表等都可以自动随着外接列增加数据,自动创建新的分区。

3)部分本地和全局索引

Oracle的索引可以在分区级别定义。无论是全局索引还是本地索引都可以在分区表的部分分区上建立,其他分区上则没有索引。当通过索引列访问全表数据时,Oracle通过UNION ALL实现,一部分通过索引扫描,另一部分通过全分区扫描。这可以减少对历史数据的索引量,极大地增加了灵活性。

4)多个分区同时操作

可以对多个分区同时进行维护操作。例如,将一年的12个分区合并到一个新的分区中,或者将一个分区分解成多个分区。可以通过FOR语句指定操作的每个分区,对于RANGE语句分区而言,也可以通过TO语句来指定处理分区的范围。多个分区同时操作自动并行完成。

5)在线移动分区

通过MOVE ONLINE关键字实现在线分区移动。在移动的过程中,对表和被移动的分区可以执行查询、DML语句以及分区的创建和维护操作。整个移动过程对应用透明。这个功能极大地提高了整体可用性,缩短了分区维护速度。

6)异步全局索引维护(UPDATE GLOBAL INDEX)

对于非常大的分区表而言,异步全局索引不再痛苦。Oracle可以实现异步全局索引异步维护的功能,即使是几亿条记录的全局索引,在分区维护操作时,如DROP或者TRUNCATE后,仍然是VALID状态,索引不会失效,不过索引的状态是包含OBSOLETE数据,当维护操作完成对索引状态恢复。

7.Adaptive执行计划

拥有学习功能的执行计划,Oracle会把实际运行过程中读取到的返回结果作为进一步执行计划判断的输入。因此,统计信息不准确或查询真正结果与计算结果不准时,可以得到更好的执行计划。

8.统计信息增强

动态统计信息收集增加第11层,使得动态统计信息收集的功能更强;增加了混合统计信息用以支持包含大量不同值,且个别值数据倾斜的情况;添加了数据加载过程收集统计信息的能力;对于临时表增加了会话私有统计信息。

9.临时UNDO

将临时段的UNDO独立出来,放到TEMP表空间中,这样做有以下3个优点。

①减少UNDO产生的数量。

②减少REDO产生的数量。

③在ACTIVE DATA GUARD上允许对临时表进行DML操作。

10.数据优化

新增数据生命周期管理(Information Lifecycle Management,ILM)的功能,添加“数据库热图(Database heat map)”,在视图中直接看到数据的利用率,找到哪些数据是最“热”的数据。可以自动实现数据的在线压缩和数据分级,其中数据分级可以在线将定义时间内的数据文件转移到归档存储,也可以将数据表定时转移至归档文件,还可以实现在线的数据压缩。

11.应用连接性

Oracle 12c之前RAC的故障隔离只做到SESSION和SELECT级别,对于DML操作无能为力,当设置为SESSION时,进行到一半的DML自动回滚;而对于SELECT,虽然故障隔离可以不中断查询,但是对于DML的问题更甚之,必须要手工回滚。但是在Oracle 12c版本中,Oracle数据库始终支持事务的故障隔离操作。

12.Oracle Pluggable Database

Oracle PDB由一个容器数据库(CDB)和多个可组装式数据库(PDB)构成,PDB包含独立的系统表空间和SYSAUX表空间等,但是所有PDB共享CDB的控制文件、日志文件和UNDO表空间。

Oracle Pluggable Databases特性可以带来以下好处。

  • 加速重新部署现有的数据库到新平台的速度。
  • 加速现有数据库打补丁和升级的速度。
  • 从原有的DBA的职责中分离部分责任到应用管理员。
  • 集中式管理多个数据库。
  • 提升RAC的扩展性和故障隔离。
  • 与Oracle SQL Developer和Oracle Enterprise Manager高度融合。

1.5 实践案例:安装Oracle 12c数据库管理系统

Oracle 12c是目前Oracle的最新版本,本节以Windows 7平台为例介绍安装过程。首先需要获取安装程序,图1-11所示为Oralce官方网站的下载页面。

开发人员可以选择相应的Oracle数据库版本进行下载,这里选择Oracle 12c版本。当下载完成之后,直接将下载的压缩文件进行解压缩,解压后的目录如图1-12所示。

图1-11 Oracle下载页面

图1-12 Oracle 12c解压后的目录

解压缩完成后,按照以下步骤开始安装Oracle 12c数据库。

01 直接双击图1-12中的setup.exe文件就可以启动Oracle安装程序,出现如图1-13所示的界面。

02 之后会进入Oracle的安装对话框,该对话框询问用户是否接收邮件信息,如图1-14所示。

03 如果不接收Oracle的相关邮件,直接单击【下一步】按钮会弹出如图1-15所示的询问对话框。

04 直接单击【是】按钮进入下一步操作,如图1-16所示。该对话框询问用户是否需要接收Oracle的软件更新,如果需要接收更新信息,则要提供用户的Oracle账户。

图1-13 Oracle安装启动界面

图1-14 询问用户是否接收邮件信息

图1-15 不接收电子邮件的提示

图1-16 不接收软件信息的更新

05 单击【下一步】按钮,弹出如图1-17所示的对话框,默认情况下选中【创建和配置数据库】单选按钮。

06 单击【下一步】按钮,弹出如图1-18所示的对话框,在该对话框中选择要创建的数据库类型,这里选中【桌面类】单选按钮。

图1-17 创建和配置数据库

图1-18 创建桌面类数据库

07 单击【下一步】按钮,弹出如图1-19所示的对话框,在该对话框中配置Oracle安全认证模式。为了方便管理,这里将创建一个新Windows用户,用户名为oracle,口令为123456。

08 单击【下一步】按钮,弹出如图1-20所示的对话框,在该对话框中选择Oracle的安装路径,这里将数据库安装在“G:\app\oracle”目录下,其中oracle表示上个步骤创建的用户名。

图1-19 选择数据库的认证模式

图1-20 配置数据库的安装路径

试一试

在图1-20所示对话框中,除了可以设置安装路径外,还可以选择数据库版本、字符集,并且需要用户输入全局数据库名和管理口令,读者在安装时可以进行尝试,这里不再显示效果图。

09 单击【下一步】按钮,弹出如图1-21所示的对话框,在该对话框中显示安装前的检查情况,确保满足目标环境所选产品的最低安装和配置要求。

10 当安装环境检查完成后会进入如图1-22所示的对话框,该对话框显示安装程序的各个属性,单击右下角的【保存响应文件】按钮可以保存响应文件,以备日后查看。

图1-21 安装检查

图1-22 安装确认

11 单击【安装】按钮,启动安装程序正式进入安装界面,如图1-23所示。

12 在Oracle数据库安装完成后,会自动进入orcl数据库的安装对话框,如图1-24所示。

13 在进行orcl数据库安装时会出现口令管理对话框,如图1-25所示。

14 单击【口令管理】按钮,弹出如图1-26所示的对话框,在该对话框中将一些主要的用户解锁并进行密码设置。

15 配置口令管理完成后单击【确定】按钮,如图1-27所示。这时Oracle 12c数据库管理系统已经安装完成,此时单击【关闭】按钮关闭对话框。

Oracle数据库管理系统安装完成后,会在Windows中出现如图1-28所示的服务选项。其中OracleOraDB12Home1TNSListener和OracleServiceORCL服务最为重要,也是在程序开发中必须启动的两个服务。

  • OracleOraDB12Home1TNSListener服务数据库监听服务,当需要通过程序进行数据库访问时,必须启动该服务;否则将无法进行数据库的连接。
  • OracleServiceORCL服务数据库主服务,命名格式为“OracleServer数据库名称”。

图1-23 安装程序启动

图1-24 数据库安装

图1-25 【口令管理】对话框

图1-26 锁定/解锁用户或更改口令

图1-27 安装完成

图1-28 数据库服务

1.6 实践案例:登录Oracle数据库

Oracle 12c数据库管理系统安装完成后,便可以执行登录语句登录到MySQL界面。最常用的有两种方式,分别是SQL Plus和SQL Developer。下面依次加以介绍。

1.SQL Plus登录

SQL Plus是最常用的Oracle管理工具,它是一个Oracle数据库与用户之间的命令行交互工具。使用SQL Plus登录Oracle数据库的步骤如下。

01 执行【开始】|【程序】|Oracle - OraDB12Home1|【应用程序开发】|SQL Plus命令,打开SQL Plus窗口显示登录界面。

02 在登录界面中将提示输入用户名,根据提示输入相应的用户名和口令后按Enter键,SQL Plus将连接到默认数据库。

03 连接到数据库之后将显示提示符“SQL>”,此时便可以输入SQL命令。例如,可以输入语句查看系统的当前日期,执行结果如图1-29所示。

04 如果要退出SQL Plus,可以输入EXIT或者QUIT命令。

2.SQL Developer工具登录

SQL Developer是一个免费的、针对Oracle数据库的交互式图形开发环境。使用SQL Developer登录Oracle数据库的步骤如下。

01 选择【开始】|【程序】|Oracle - OraDB12Home1|【应用程序开发】|SQL Developer命令。如果是第一次打开,还需要指定随Oracle一起安装的JDK的位置。

02 在SQL Developer主界面左侧的【连接】列表中右击【连接】节点选择快捷菜单中的【新建连接】命令,弹出【新建/选择数据库连接】对话框,如图1-30所示。

图1-29 SQL Plus登录Oracle数据库

图1-30 在SQL Developer中创建连接

03 在图1-30所示对话框中,开发人员可以在【连接名】、【用户名】和【口令】等文本框中输入相应的内容,输入完毕后可以单击【测试】按钮进行连接测试,如果连接失败则会显示错误信息,可根据提示进行修改。

04 如果确定连接,直接单击【连接】按钮即可,连接成功后可以在打开的窗口中执行语句,如图1-31所示。

05 如果要断开连接,只需选中创建的连接后右击,在弹出的快捷菜单中选择【断开连接】命令即可。

图1-31 连接成功界面

提示

关于SQL Plus和SQL Developer两个工具,下一章会详细进行介绍,因此,这里只简单了解如何登录到Oracle数据库。

3.cmd命令窗口

除了上述两种方法外,开发人员还可以利用cmd命令窗口进行登录。在【开始】菜单中选择【运行】命令,在弹出的对话框的文本框中输入cmd命令后按Enter键打开命令窗口,在该命令窗口中可以执行连接操作,下面介绍不同的连接方式。

执行sqlplus命令打开SQL Plus工具,然后输入用户名和口令进行登录,如图1-32所示。

图1-32 在命令窗口运行SQL Plus工具

在命令窗口中执行sqlplus/nolog命令直接进入SQL Plus的命令提示符“SQL>”,然后执行connect命令进行登录,如图1-33所示。

直接利用sqlplus命令登录到Oracle数据库,如图1-34所示。

图1-33 进入SQL Plus的命令提示符

图1-34 利用sqlplus命令登录到Oracle数据库

1.7 实践案例:Oracle用户解锁

在Oracle安装过程中可以设置系统用户的口令以及使用状态。默认情况下只有SYS、SYSTEM、DBSNMP、SYSMAN和MGMT_VIEW这5个用户是解锁状态,其他用户都被锁定。当然用户也可以在需要时进行手动解锁。

使用Oracle 12c的DBA_USERS数据字典可以查询当前系统中的用户列表及用户状态。语句如下:

执行结果如图1-35所示。

图1-35 查看用户及状态

上面的查询语句中,username字段表示用户名,account_status字段表示用户的状态。如果account_status字段的值为OPEN,则表示用户为解锁状态;否则为锁定状态。

假设要为OLAPSYS用户解锁,可以使用以下语句:

解锁后的用户还需要设置登录密码才能使用。假设要为OLAPSYS用户指定密码为123456,语句如下:

1.8 Oracle 12c的体系结构

一个完整数据库的体系结构是指数据库的组成、工作过程与原理以及数据在数据库中的组织与管理机制。Oracle 12c数据库的体系结构相当庞大,开发人员可以从Oracle的官方网站上下载相应的体系结构图。本节从开发及管理的角度,简单介绍内存结构、进程结构和物理结构。

1.8.1 内存结构

Oracle内存由SGA(System Global Area,系统全局区)和PGA(Process Global Area,程序全局区)构成。

SGA中存储数据库信息,由多个数据库进行共享,包括共享池、数据缓冲区、日志缓冲区、大池、Java池、Streams池和数据字典缓冲区等。

1.共享池

共享池是对SQL、PL/SQL程序进行语法分析、编译和执行的内存区域。共享池的大小直接影响数据库的性能,它由数据库高速缓冲区和数据字典缓冲区组成,其中数据库高速缓冲区又包括共享SQL区、私有SQL区(只在共享服务器内存)、共享PL/SQL区和控制结构区。

2.数据库缓冲区

数据库缓冲区是SGA中的一个高速缓冲区域,用来存储最近从数据库中读出的数据块(如表)。数据库缓冲区的大小对数据库的读取速度有直接的影响。当用户处理查询时,服务器进程会先从数据库缓冲区查找所需要的数据库,当缓冲区中没有数据库时才会访问磁盘数据。

3.日志缓冲区

当用户通过INSERT、SELECT和DELETE等语句更改数据库时,服务器进程会将这些修改记录到重做日志缓冲区内,这些修改记录也叫重做记录。相对来说,日志缓冲区对数据库的性能影响较小。当数据库发生意外时,可以从日志缓冲区内读取修改记录来恢复数据库。

4.大池

为了进行大的后台操作而分配的内存空间,主要指备份恢复、大型I/O操作和并行查询等。

5.Java池

Java池内存储了Java语句的文本和语法分析表等信息,如果要安装Java虚拟机,就必须启用Java池。

6.Streams池

Streams池是高级复制技术的一部分,其功能是存放消息,这些消息是共享的。

7.数据字典缓冲区

数据字典缓冲区是共享池的一部分,又称为数据字典区或行缓冲区,包含数据库的结构、用户信息和数据表、视图等信息。数据字典缓冲区存储数据库的所有表和视图的名称、数据库基表的列名和列数据类型以及所有Oracle用户的权限等。

PGA包括会话信息、堆栈空间、排序分区以及游标状态。会话信息存放会话的权限、角色和会话性能统计信息等;堆栈空间存放的是变量、数组和属于会话的其他信息;排序区则是用于排序的一段专用空间;游标状态存放当前使用的各种游标的处理阶段。

1.8.2 进程结构

Oracle数据库的进程结构包括用户进程、服务器进程和后台进程3种类型。用户进程位于客户端,服务器进程和后台进程位于服务器端。

1.用户进程

用户进程是一个需要与Oracle服务器进行交互的程序。当用户运行一个应用程序准备向数据库服务器发送请求时,即创建了用户进程。对于专用连接来说,用户在客户端启用一个应用程序,就是在客户端启用一个用户进程。

2.服务器进程

服务器进程用于处理连接到该实例的用户进程的请求。当用户连接到Oracle数据库实例创建会话时,即产生服务器进程。当用户与Oracle服务器端连接成功后,会在服务器端生成一个服务器进程,该服务器进程作为用户进程的代理进程,代替客户端执行各种命令并把结果返回给客户端。用户进程一旦中止,服务器进程立刻中止。

3.后台进程

后台进程是Oracle数据库为了保持最佳系统性能和协调多个用户请求而设置的。Oracle实例启动时即创建一系列后台进程,如PMON监视用户进程运行是否正常、SMON实时监控整个Oracle状况,其他进程这里不再说明。

执行以下语句可以查询启动的后台进程信息:

执行以下语句查看启动DBWR进程个数:

1.8.3 物理结构

物理结构就是Oracle数据库所使用的操作系统的物理文件,在数据库中的所有数据都保存在物理文件中,它是存放在磁盘上的结构文件。主要的物理文件包括数据文件、控制文件、重做日志文件和参数文件4类。

1.数据文件

数据文件用于存储数据库的全部数据(如表和索引数据),每一个Oracle数据库都有一个或多个物理的数据文件。

2.控制文件

控制文件用于控制数据库的物理结构,它记录数据库中所有文件的控制信息,包含数据库名称、数据库建立日期、数据库中数据文件与日志文件的名称和位置、表空间信息、归档日志信息、当前的日志序列号以及检查点信息等。

3.重做日志文件

Oracle用重做日志文件保存所有数据库事务的日志。当数据库被破坏时,用该文件恢复数据库。

4.参数文件

参数文件保存与Oracle配置有关的信息,一般有以下3种参数文件。

①初始化参数文件。用于在数据库启动实例时配置数据库,该文件主要设置数据库实例名称、主要使用文件的位置和实例所需要的内存区域大小等。

②配置参数文件。一般被命名为config.ora,由初始化参数文件调用。在数据库对应多个实例的时候才会存在,如果一个数据库只对应一个实例,则不会产生此文件。

③二进制参数文件。pfile(Parameter File,参数文件)和spfile(Server Parameter File,服务器参数文件)都属于二进制文件。pfile包含数据库的配置信息,是基于文本格式的参数文件;spfile包含数据库及例程的参数和数值,是基于二进制格式的参数文件。

1.9 练习题

1.填空题

(1)目前数据库管理系统采用的数据模型分为层次模型、__________和关系模型。

(2)在关系型数据库中,使用__________来标识行的一列或多列。

(3)在关系型数据库中有3种完整性规则,分别为__________、参照完整性规则和用户定义完整性规则。

(4)Oracle内存由SGA和__________构成。

(5)__________的大小对数据库的读取速度有直接的影响。

(6)Oracle数据库的进程结构包括用户进程、__________和后台进程3种。

(7)__________一般被命名为config.ora,由初始化参数文件调用。

2.选择题

(1)下面关于数据库模型的描述不正确的是(  )。

A.关系模型的缺点是这种关联错综复杂,关联维护起来非常困难

B.层次模型的优点在于更容易实现数据修改和数据库扩展,而且结构清晰便于理解

C.网状模型能明确而方便地表示数据间的复杂关系,数据冗余小

D.关系模型的优点是结构简单、格式统一、理论基础严格,而且数据表之间相对独立

(2)在一个数据库表中,(  )是用于唯一标识一条记录的表关键字。

A.主关键字

B.外关键字

C.候选关键字

D.公共关键字

(3)Oracle 12c的新特性不包括(  )。

A.放宽多种数据类型长度限制

B.SELECT语句的改善

C.使用FETCH实现TOP N的查询

D.WITH语句的改善

(4)SGA中的内容不包括(  )。

A.Java池

B.程序全局区

C.数据字典缓冲区

D.数据缓冲区

(5)(  )记录数据库中所有文件的信息,包括数据库的名称、数据库建立日期、表空间信息以及检查点信息等。

A.参数文件

B.数据文件

C.重做日志文件

D.控制文件

上机练习:安装Oracle 12c

使用本章介绍的方法在本机下载和安装Oracle 12c数据库管理系统。然后使用sqlplus以SYSTEM身份登录到Oracle,并对系统用户OUTLN解除锁定,设置密码为123456。