1、关系型数据库
使用数据库的主要目的是存储和处理数据。
1.1 数据库管理系统
数据库管理系统(DBMS):是一种软件,用于控制数据库中数据的存储、组织和检索。
数据库应用(database application):通过DBMS访问和操作数据库中的数据。
数据库管理系统的早期类型:
- Hierarchical database -- 数据组织在树状结构中,类似于文件系统,记录之间是一对多的关系;
- network database -- 与前种类型相似,不同的是:记录之间是多对多的关系。
没有数据定义语言,很难更改数据结构。缺乏简单的查询语言,阻碍了应用程序的开发。
1.2 关系模型(Relational Model)
E.F.Codd在他1970年发表的论文《大型共享数据库数据的关系模型》中, 定义了一个基于数学集合理论的关系模型。 目前,最广泛接受的数据库模型就是关系模型。关系型数据库就是基于这种模型的。
关系模型三要素:关系数据结构、关系操作和关系完整性约束。
关系(relation)是一个元组的集合。 一个元组(tuple)是一些属性值的无序集合。
表(table)是一个关系的二维表示, 关系由行 (元组) 和列 (属性) 的形式构成。
关系数据库是一个将数据存储在关系 (表)中的数据库。
1.3 关系数据库管理系统(RDBMS)
RDBMS是基于关系模型的,实现了关系模型的三要素,并且区分下面两种操作:
- 逻辑操作 -- 数据库应用或用户通过SQL语句对数据库进行操作;
- 物理操作 -- 接到SQL命令之后,由RDBMS决定如何实现。
也就是说数据库应用或用户只需要在逻辑层面上进行操作数据,不用关心数据到底是如何存储的。
Oracle数据库是关系数据库管理系统,并且进行了扩展,实现了面向对象的特性。
1.4 Oracle数据库历史
2、模式对象
RDBMS的特点之一,是物理数据存储是独立于逻辑数据结构的。
在 Oracle 数据库中,数据库模式(Schema)是逻辑数据结构,即模式对象的集合。
数据库模式(Schema)由一个数据库用户拥有,并与用户名具有相同的名称。
数据库对象分为:
- schema对象(表、索引、存储过程、函数等)
- 非schema对象(目录、角色等)
其中,最重要的模式对象是表(table)和索引(index)。
疑问:
数据库模式PUBLIC有没有对应的用户?
SQL> alter user "PUBLIC" identified by oracle account unlock;
alter user "PUBLIC" identified by oracle account unlock
*
ERROR at line 1:
ORA-01918: user 'PUBLIC' does not exist
-- user$表中有PUBLIC的信息
select * from sys.user$;
2.1 表
表描述的是现实世界的实体,比如:员工。表的定义包含:表名,列名和数据类型等。
比如:员工表是员工信息的集合。每一列标识员工的一个属性(例如,员工姓名),每一行代表一个员工。
另外,可以为表中的列设置规则(完整性约束)。比如,NOT NULL约束用来强制某列中必须有值。
与关系模型的对应关系:
- 关系(relation) -- 表(table)
- 属性(attribute) -- 列,字段(column)
- 元组(tuple) -- 行(row)
2.2 索引
索引是在一列或多列上创建的可选数据结构。某些情况下,使用索引可以提高数据检索的性能。
3、数据访问
3.1 Structured Query Language (SQL)
SQL 是一种基于集合的声明性语言,提供一个到关系数据库(如 Oracle 数据库)的接口。
相对于过程化语言(如 C)描述的是怎么做,SQL 作为非过程化的语言,它描述的是应做些什么。
Oracle SQL 是 ANSI 标准的一种实现,并且支持许多标准 SQL 之外的扩展功能
3.2 PL/SQL and Java
PL/SQL 是 Oracle SQL的过程化扩展。
Oracle 数据库还可以存储用Java 编写的程序单元。
4、事务管理
Oracle数据库是多用户数据库。数据库必须确保多个用户可以并发地工作,而不会破坏彼此的数据。
4.1 事务(Transactions)
有些SQL语句在逻辑上是一个整体,比如转账的例子。
假如A给B转账100元,至少包含两个操作:
1)从A的账户中减去100元;
2)从B的账户中增加100元。
这两个操作是一个整体,两个操作都成功才表示转账成功。
事务是一个逻辑、 原子的工作单元,包含一条或多条SQL 语句。数据库必须支持事务,确保同一事务中的所有语句, 要么全部成功,要么全部失败。
4.2 数据并发(Concurrency)
数据并发:多个用户同时访问相同的数据。
对于多用户RDBMS,控制数据并发是非常重要的。
管理并发的其中一种方法,就是让用户等待。但过多的等待会影响数据库的性能。
Oracle 数据库使用锁来控制对数据的并发访问。
4.3 数据一致性(Consistency)
在Oracle数据库中,每个用户必须看到数据的一致视图,包括用户自己的事务以及其他用户已提交的事务所做出的更改。
Oracle 数据库始终强制执行语句级读取的一致性,保证单个查询所返回的数据是已提交的,并与某个时间点一致。
数据库也可以为整个事务中的所有查询提供读一致性,这叫事务级读一致性。在这种情况下,事务中的每一个语句看见的都是同一个时间点的数据,这个时间点也就是事务开始之时。
5、Oracle数据库架构
5.1 数据库和实例
Oracle数据库服务(database server)包含一个数据库和至少一个数据库实例:
- 数据库(database) -- 一些存放在磁盘上的文件,用于存储数据。
- 数据库实例(database instance) -- 管理数据库文件的内存结构,包含共享内存区SGA和一组后台进程。实例可以独立于数据库文件而存在。

上图展示了一个数据库和它的实例。对连接到实例的每个用户,其应用程序以一个客户端进程运行。每个客户端进程都具与它自己的服务器进程相关联。 服务器进程有自己的私有会话内存区,称为程序全局区 (PGA)。
疑问:
服务器进程是否是实例的一部分,为什么该图把服务器进程和PGA画在instance的范围内?
5.2 数据库存储结构
1)物理存储结构包含:
- 数据文件 -- 存放数据库的数据
- 控制文件 -- 存放数据库的物理结构,包含数据库库名称和数据文件的名称和位置
- 在线重做日志文件 -- 记录数据库数据的变化
2)逻辑存储结构包含:
数据块(Data block) -- 最小的存储单位和I/O单位,大小是操作系统块的整数倍。
扩展区(Extent) -- 最小的分配单位,包含一组逻辑上连续的数据块。
段(Segment) -- 为用户对象 (表或索引)、回滚数据、或临时数据等分配的一组扩展区。
表空间(Tablespace) -- 段的逻辑容器。数据库由表空间组成,每个表空间至少包含一个数据文件。
5.3 数据库实例结构
1)Oracle数据库进程包含:
- 客户端进程
- 后台进程
- 服务器进程 -- 处理客户端进程发送的请求
2)实例内存结构包含:
- System Global Area (SGA) -- 共享内存结构
- Program Global Areas (PGA) -- 服务器进程和后台进程进程私有的内存结构
5.4 应用和网络架构
1)应用架构
应用架构是指一个数据库应用程序连接到 Oracle 数据库的计算环境。最常见的两种数据库体系结构是客户端/服务器体系结构和多层体系结构。
Oracle 数据库可以在传统的多层环境或 SOA 环境中扮演一个 Web 服务提供者的角色。
2)网络架构
Oracle 网络服务(Net Service)是数据库与网络通信协议之间的接口, 它对分布式处理和分布式数据库很有用。
Oracle 网络服务支持所有主要的网络通信协议,包括 TCP/IP、 HTTP、 FTP 、和 WebDAV。
Oracle网络服务组件:
- Oracle Net -- 用于建立和保持一个客户端应用程序到数据库服务器的网络会话。
- Oracle 网络监听器(简称监听器) -- 一个单独的进程,运行在数据库服务器上,或在网络中的其它地方。 客户端应用程序可以发送连接请求到监听器,而监听器管理这些发送到数据库服务器的请求的流量。
Oracle 网络服务处理请求的两种最常见的方式
- 专用服务器(dedicated server)连接
- 共享服务器(shared server)连接