第3章创建数据库 本章要点  Oracle数据库的体系结构  创建和删除数据库 在Oracle中,数据库是一个数据容器,它包含表、视图、索引、过程、函数等对象,表是数据库中最重要的数据库对象,用来存储数据库中的数据。本章介绍Oracle数据库的体系结构、创建和删除数据等内容。 3.1Oracle数据库的体系结构 Oracle是一个关系数据库系统,Oracle数据库(Database)是一个数据容器,它包含表、视图、索引、过程、函数等对象,用户只有和一个确定的数据库相连接,才能使用和管理该数据库中的数据。在使用数据库之前,有必要了解Oracle数据库的体系结构。 Oracle数据库的体系结构包括逻辑结构、物理结构和总体结构。其中,逻辑结构为Oracle引入的结构,物理结构为操作系统所拥有的结构。Oracle引入逻辑结构,首先是为了增加Oracle的可移植性,即在某个操作系统上开发的数据库几乎可以不加修改地移植到另外的操作系统上; 其次是为了减少Oracle操作人员的操作难度,只需对逻辑结构进行操作,而从逻辑结构到物理结构的映射,则由Oracle数据库管理系统来完成。 下面对逻辑结构、物理结构和总体结构分别进行介绍。 3.1.1逻辑结构 逻辑结构包括表空间,段、盘区和数据块,表,索引,用户和方案等。 1. 表空间 表空间(Table Space)是Oracle数据库中数据的逻辑组织单位,通过表空间来组织数据库中的数据,数据库逻辑上由一个或多个表空间组成,表空间物理上是由一个或多个数据文件组成,Oracle系统默认创建的表空间如下。 (1) EXAMPLE表空间。 EXAMPLE表空间是示例表空间,用于存放示例数据库的方案对象信息及其培训资料。 (2) SYSTEM表空间。 SYSTEM表空间是系统表空间,用于存放Oracle系统内部表和数据字典的数据,如表名、列名和用户名等。一般不赞成将用户创建的表、索引等存放在SYSTEM表空间中。 (3) SYSAUX表空间。 SYSAUX表空间是辅助系统表空间,主要存放Oracle系统内部的常用样例用户的对象,如存放CMR用户的表和索引等,从而减少系统表空间的负荷。 (4) TEMP表空间。 TEMP表空间是临时表空间,存放临时表和临时数据,用于排序和汇总等。 (5) UNDOTBS1表空间。 UNDOTBSI表空间是重做表空间,存放数据库中有关重做的相关信息和数据。 (6) USERS表空间。 USERS表空间是用户表空间,存放永久性用户对象的数据和私有信息,因此也被称为数据表空间。 2. 段、盘区和数据块  段(Segment): 段是按照不同的处理性质,在表空间划分出不同区域,用于存放不同的数据,例如,数据段、索引段、临时段等。  盘区(Extent): 盘区由连续分配的相邻数据块组成。  数据块(Data Block): 数据块是数据库中最小的、最基本的存储单位。 表空间划分为若干段,段由若干个盘区组成,盘区由连续分配的相邻数据块组成,如图3.1所示。 图3.1表空间、段、盘区和数据块之间的关系 3. 表 表(Table)是数据库中存放用户数据的对象,它包含一组固定的列,表中的列描述该表所跟踪的实体的属性,每个列都有一个名字和若干个属性。 4. 索引 索引(Index)是帮助用户在表中快速地查找记录的数据库结构,既可以提高数据库性能,又能够保证列值的唯一性。 5. 用户 用户(User)账号虽然不是数据库中的一个物理结构,但它与数据库中的对象有着重要的关系,这是因为用户拥有数据库的对象。 6. 方案 用户账号拥有的对象集称为用户的方案(SCHEMA)。 3.1.2物理结构 物理结构包括数据文件、控制文件、日志文件、初始化参数文件、其他文件等。 1. 数据文件 数据文件(Data File)是用来存放数据库数据的物理文件,文件后缀名为“.DBF”。 数据文件存放的主要内容有:  表中的数据;  索引数据;  数据字典定义;  回滚事务所需信息;  存储过程、函数和数据包的代码;  用来排序的临时数据。 每一个Oracle数据库都有一个或多个数据文件,每一个数据文件只能属于一个表空间,数据文件一旦加入到表空间,就不能从这个表空间中移走,也不能和其他表空间发生联系。 数据库、表空间和数据文件之间的关系,如图3.2所示。 图3.2数据库、表空间和数据文件之间的关系 2. 重做日志文件 日志文件(Log File)用于记录对数据库进行的修改操作和事务操作,文件后缀名为“.LOG”。 除了数据文件外,最重要的Oracle数据库实体档案就是重做日志文件(Redo Log Files)。Oracle保存所有数据库事务的日志。这些事务被记录在联机重做日志文件(Online Redo Log File)中。当数据库中的数据遭到破坏时,可以用这些日志来恢复数据库。 3. 控制文件 控制文件(Control File)用于记录和维护整个数据库的全局物理结构,它是一个二进制文件,文件后缀名为“.CTL”。 控制文件存放了与Oracle数据库物理文件有关的关键控制信息,如数据库名和创建时间,物理文件名、大小及存放位置等信息。 控制文件在创建数据库时生成,以后当数据库发生任何物理变化都将被自动更新。 每个数据库包含两个或多个控制文件。这几个控制文件的内容上保持一致。 3.1.3总体结构 总体结构包括实例、内存结构、进程等。 1. 实例 数据库实例(Instance)也称作服务器(Server),它由系统全局区(System Global Area, SGA)和后台进程组成,实例用来访问数据库且只能打开一个数据库,一个数据库可以被多个实例访问,实例与数据库之间的关系如图3.3所示。 图3.3实例与数据库之间的关系 2. 内存结构 内存结构是Oracle存放常用信息和所有运行在该机器上的Oracle程序的内存区域,Oracle有两种类型的内存结构: 系统全局区(System Global Area, SGA)和程序全局区(Program Global Area, PGA)。 (1) 系统全局区。 SGA区是由Oracle分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。当多个用户同时连接同一个实例时,SGA区数据供多个用户共享,所以SGA区又称为共享全局区。SGA区在实例启动时分配,实例关闭时释放。 SGA包含几个重要区域,数据块缓存区(Data Block Buffer Cache)、字典缓存区(Dictionary Cache)、重做日志缓冲区(Redo Log Buffer)和共享池(Shared SQL Pool),如图3.4所示。 图3.4SGA各重要区域之间的关系  数据块缓存区。 数据块缓存区为SGA的主要成员,用来存放读取自数据文件的数据块复本,或是使用者曾经处理过的数据。 数据块缓存区又称用户数据高速缓存区,为所有与该实例相链接的用户进程所共享。采用最近最少使用算法(LRU)来管理可用空间。  字典缓存区。 数据库对象信息存储在数据字典中,包括用户账号、数据文件名、表说明和权限等。当数据库需要这些信息,就要读取数据字典,并将这些信息存储在字典缓存区中。  重做日志缓冲区。 联机重做日志文件用于记录数据库的更改,对数据库进行修改的事务(Transaction)在记录到重做日志之前都必须首先放到重做日志缓冲区(Redo Log Buffer)中。重做日志缓冲区是专为此开辟的一块内存区域,重做日志缓存中的内容将被LGWR后台进程写入重做日志文件。  共享池。 共享池(Shared SQL Pool)用来存储最近使用过的数据定义,最近执行过的SQL指令,以便共享。共享池有两个部分: 库缓存区和数据字典缓存区。 (2) 程序全局区。 PGA是为每一个与Oracle数据库连接的用户保留的内存区,主要存储该连接使用的变量信息和与用户进程交换的信息,它是非共享的,只有服务进程本身才能访问它自己的PGA区。 3. 进程 进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务,进程可看作由一段可执行的程序、程序所需要的相关数据和进程控制块组成。 进程的类型有用户进程、服务器进程、后台进程。 (1) 用户进程。 当用户连接数据库执行一个应用程序时,会创建一个用户进程,来完成用户所指定的任务,用户进程在用户方工作,它向服务器进程提出请求信息。 (2) 服务器进程。 服务器进程由Oracle自身创建,用于处理连接到数据库实例的用户进程所提出的请求,用户进程只有通过服务器进程才能实现对数据库的访问和操作。 (3) 后台进程。 为了保证Oracle数据库在任意一个时刻可以处理多用户的并发请求,进行复杂的数据操作,Oracle数据库起用了一些相互独立的附加进程,称为后台进程。服务器进程在执行用户进程请求时,调用后台进程来实现对数据库的操作。 Oracle数据库服务器的总体结构如图3.5所示。 图3.5Oracle数据库服务器的总体结构 几个常用的后台进程介绍如下。  DBWR(数据库写入进程)。 负责将数据块缓冲区内变动过的数据块写回磁盘内的数据文件。  LGWR(日志写入进程)。 负责将重做日志缓冲区内变动记录循环写回磁盘内的重做日志文件,该进程会将所有数据从重做日志缓存中写入到现行的在线重做日志文件中。  SMON(系统监控进程)。 系统监控进程的主要职责是重新启动系统。  PMON(进程监控进程)。 PMON的主要职责是监控服务器进程和注册数据库服务。  CKPT(检查点进程)。 在适当时候产生一个检查点事件,确保缓冲区内经常被变动的数据也要定期被写入数据文件。在检查点之后,万一需要恢复,不再需要写检查点之前的记录,从而缩短数据库的重新激活时间。 3.2创建和删除数据库 3.2.1删除数据库 本书在Oracle数据库安装时,已创建数据库stsys,现在使用图形界面方式的数据库配置向导(Database Configuration Assistant, DBCA)首先删除该数据库,再重新创建数据库。 【例3.1】使用DBCA删除数据库stsys。 使用DBCA删除数据库stsys操作步骤如下。 (1) 选择“开始”→“所有程序”→OracleOraDB12Home1→“配置和移植工具”→Database Configuration Assistant命令,启动DBCA。 (2) 单击“下一步”按钮,出现“选择数据库操作”窗口,这里选择“删除数据库”单选按钮,如图3.6所示。 图3.6“操作”窗口 (3) 单击“下一步”按钮,进入“选择数据库”窗口,这里选择stsys数据库,如图3.7所示,单击“下一步”按钮。 图3.7“选择源数据库”窗口 (4) 单击“下一步”按钮,进入“管理选项”窗口、“概要”窗口,都保持默认设置,单击“完成”按钮,在弹出的确认删除提示框中单击“是”按钮,显示删除进度,完成删除数据库操作。 3.2.2创建数据库 使用图形界面方式的数据库配置向导(Database Configuration Assistant, DBCA)创建数据库举例如下。 【例3.2】使用DBCA创建数据库stsys。 使用DBCA创建数据库stsys操作步骤如下。 (1) 启动DBCA,进入“选择数据库操作”窗口,单击“创建数据库”单选按钮,如图3.8所示。 图3.8“选择数据库操作”窗口 (2) 单击“下一步”按钮,出现“选择数据库创建模式”窗口,在“全局数据库名”输入“stsys”,在“数据库字符集”中选择“ZHS 16GBKGBK 16位简体中文”,在“管理口令”“确认口令”和“Oracle主目录用户口令”栏目中,分别输入“Ora123456”,如图3.9所示。 图3.9“选择数据库创建模式”窗口 (3) 单击“下一步”按钮,进入“概要”窗口,如图3.10所示,单击“完成”按钮,出现“进度页”窗口,直至数据库stsys创建完成。 图3.10“概要”窗口 3.3小结 本章主要介绍了以下内容。 (1) Oracle数据库的体系结构包括逻辑结构、物理结构和总体结构。 (2) 逻辑结构包括表空间、段、盘区、数据块、表、其他逻辑对象等。 表空间(TableSpace)是Oracle数据库中数据的逻辑组织单位,通过表空间来组织数据库中的数据,数据库逻辑上由一个或多个表空间组成,表空间物理上是由一个或多个数据文件组成。 段(Segment)是按照不同的处理性质,在表空间划分出不同区域,用于存放不同的数据,例如,数据段、索引段、临时段等。 盘区由连续分配的相邻数据块组成。 数据块(Data Block)是数据库中最小的、最基本的存储单位。 表(Table)是数据库中存放用户数据的对象,它包含一组固定的列,表中的列描述该表所跟踪的实体的属性,每个列都有一个名字和若干个属性。 (3) 物理结构包括数据文件、控制文件、日志文件、初始化参数文件、其他文件等。 数据文件(Data File)是用来存放数据库数据的物理文件,文件后缀名为“.DBF”。 日志文件(Log File)用于记录对数据库进行修改操作和事务操作,文件后缀名为“.LOG”。 控制文件(Control File)用于记录和维护整个数据库的全局物理结构,它是一个二进制文件,文件后缀名为“.CTL”。 (4) 总体结构包括实例、内存结构、进程等。 数据库实例(Instance)也称作服务器(Server),它由系统全局区(System Global Area, SGA)和后台进程组成,实例用来访问数据库且只能打开一个数据库,一个数据库可以被多个实例访问。 内存结构是Oracle存放常用信息和所有运行在该机器上的Oracle程序的内存区域,Oracle有两种类型的内存结构: 系统全局区(System Global Area, SGA)和程序全局区(Program Global Area, PGA)。 进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务,进程可看作由一段可执行的程序、程序所需要的相关数据和进程控制块组成。进程的类型有用户进程、服务器进程、后台进程。 (5) 使用图形界面方式删除和创建数据库。 3.4创建数据库实验 1. 实验目的及要求 (1) 掌握使用DBCA(数据库配置向导)删除数据库的步骤和方法。 (2) 掌握使用DBCA(数据库配置向导)创建数据库的步骤和方法。 2. 实验内容 (1) 使用DBCA删除数据库stsys。 (2) 使用DBCA创建数据库stsys。 3. 观察与思考 (1) Oracle数据库文件有哪几种,扩展名分别是什么? (2) Oracle常用的后台进程有哪几个? 习题3 一、 选择题 1. 下列选项中,属于Oracle数据库最小存储分配单元的是。 A. 表空间B. 盘区 C. 数据块D. 段 2. 当数据库创建时,会自动生成。 A. SYSTEM表空间B. TEMP表空间 C. USERS表空间D. TOOLS表空间 3. 每个数据库至少有重做日志文件。 A. 1个B. 2个 C. 3个D. 任意个 4. 解析后的SQL语句在SGA的区域中进行缓存。 A. 数据缓冲区B. 字典缓冲区 C. 重做日志缓冲区D. 共享池 5. 在全局存储区SGA中,内存区域是循环使用的。 A. 数据缓冲区B. 字典缓冲区 C. 共享池D. 重做日志缓冲区 6. 当数据库运行在归档模式下,如果发生日志切换,为了不覆盖旧的日志信息,系统将启动进程。 A. LGWRB. DBWR C. ARCHD. RECO 7. 下列进程中,用于将修改后的数据从内存保存到磁盘数据文件中的是。 A. PMONB. SMON C. LGWRD. DBWR 二、 填空题 1. 一个表空间物理上对应一个或多个文件。 2. Oracle数据库系统的物理存储结构主要由数据文件、、控制文件三类文件组成。 3. 用户对数据库的操作如果产生日志信息,则该日志信息首先存储在中,然后由LGWR进程保存到日志文件。 4. 在Oracle实例系统中,进程分为用户进程、服务器进程和。 5. 是Oracle最大的逻辑存储结构。 6. 在安装Oracle系统时,一般会自动创建6个默认的表空间: 、SYSAUX表空间、TEMP表空间、UNDOTBS1表空间、USERS表空间和EXAMPLE表空间。 7. 表空间的管理类型可以分为和本地化管理。 8. 表空间的状态属性有、OFFLINE、READ WRITE和READ ONLY四种状态。 三、 问答题 1. Oracle数据库的逻辑结构包括哪些内容? 2. Oracle数据库的物理结构包括哪些文件? 3. 什么是数据库实例?简述其组成。 4. 什么是内存结构?Oracle有哪两种内存结构? 5. 什么是进程?Oracle有哪些进程类型?