解释了数据库的内外部结构,对数据库的整体进行了讲解,初步理解有大体框架即可
Oracle 11g数据库
一.内部结构
1.TABLESPACE(表空间):
数据库的逻辑划分。一个表空间属于一个数据库,表空间由一个或多个数据文件组成。表空间中其它逻辑结构的数据存储在这些数据文件中。oracle的一些主要的默认表空间如下:
- SYSTEM:包含数据目录表和其它管理数据
- SYSAUX:system表空间的辅助表空间
- TEMP仅在回话期间存在的临时数据
- UNDOTBS1:还原段
- USERS:非系统用户创建的所有对象的默认表空间
- EXAMPLE:示例方案
2.逻辑结构:
包含表空间,段,区,数据块和模式对象
1. 表空间:
数据库由一个或多个逻辑单位组成,逻辑单位称为TABLESPACE。表空间可将相关的逻辑结构组合在一起。DBA(数据库管理员)可利用TABLESPACE进行下列操作:
- 数据库数据的磁盘分配
- 分配空间份额给数据库用户
- 通过是单个表空间在线/离线来控制数据的可用性
- 执行部分数据库后备或恢复操作
- 跨越设备分配数据存储来提高性能
2. 段(SEGMENT):
是一个物理实体,依照数据处理性质可能需要将数据表空间划分为不同区域来存放不同数据,这种区域即为段,有数据区段,索引区段。
3. 盘区(EXTENT):
段由盘区组成,当段中空间用完该段就获取另外的盘区。
数据块(DATA BLOCK):数据库最小的储存单元,是操作系统块的数倍,数据块组成盘区
3.表(TABLE):数据库中存放用户数据的对象
①分区(PARTITION):大表的数据可分为多个小表(称为分区)来简化数据库管理,索引也可以。能够细分分区即创建子分区。(表分成分区,分区分成子分区)
②索引(INDEX):帮助用户快速找到记录的数据库结构。表中每行都有RowID,用来告诉数据库准确位置(所在文件,该文件中的块,该块中的行地址)
- 当CREATE TABLE命令中规定有UNIQUE或PRIMARY约束条件子句时自动创建一个索引。或CREATE INDEX手动创建自己的索引。
4.约束条件
种类
- 主键(PRIMARY KEY):非空且唯一,也不能为NULL。
- 非空(NOT NULL)约束条件:默认所有列允许空值,NULL指没有值,NOT NULL则不能包含空值
- 检查(CHECK)约束条件:
- 唯一性(UNIQUE)约束条件:
- 外键(FOREIGN KEY):
- 默认(DEFAULT):
6.用户(USER):用户账户不是物理结构,它拥有数据库的对象。例如用户账号SYS有数据字典表存储数据库其它对象的所有信息;SYSTEM有访问数据字典表的视图供给数据库其它用户使用。
用户账户user有相应权限才能为数据库创建对象(表)。可以对每一个USER进行自定义来将一个特定表空间作为它的默认表空间。
7.方案(SCHEMA):
USER拥有的对象集(表集合),可以创建不能注册到数据库的用户账户(仅用于存储其它用户方案分开的数据库对象,不能连接到数据库实例进行操作)。
Oracle不同于mysql等小型的数据库,它创建一个数据库耗时耗资源较大,所以一般是有一个数据库,然后其中人们通过多个方案来替代小数据库创建多个数据库的功能。
8.同义词:
给不同用户使用数据库对象时提供一个简单,唯一标识数据库对象的名称,可以为数据库对象创建同义词,有公用和私有两种。
9.权限和角色(ROLE):
访问其它账户的对象必须首先授予访问此对象的权限,权限可授予某个用户或PUBLIC(PUBLIC把权限授予数据库全体用户。
角色是权限组,用来简化权限的管理→把一些权限授予角色,此角色可以授予多个用户,角色可以动态的禁用启用。
二.外部结构
1.DATAFILE(数据文件):
数据库有一个或多个数据文件,只能属于一个表空间,创建后可改变大小,创建新表空间就要创建新数据文件,一旦DATAFIEL加入表空间就不能移走也不能和其它表空间发生联系。段可以跨越多个数据文件,如果数据库对象存储在多个表空间中可以通过把它们各自的数据文件存放在不同的磁盘上来对其进行物理分割。
2.REDO LOG FILES(重做日志文件)
记录对数据库的更改,应该多路复用来避免文件丢失
3.CONTROL FILE(控制文件):每个数据库有一个,用来记录和描述数据库外部结构。包括:
- 数据库名称和建立时间
- DATA FILE 和REDO LOG FILE的名称及其位置
- 日志记录序列码(Log SequenceNumber)
三.结构ER图
四.数据库实例(Instance)
1.概念:也称为服务器(Server),是用来访问数据库文件集合的存储结构系统全局区(System Global Area)SGA以及后台进程的集合
(1)系统全局区:激活Oracle时系统会先在内存中规划一个固定区域来存储使用者所需存取数据和Oracle运行时必备的系统信息,此区域即为系统全局区SGA。
SGA包含数个重要区域:
- 数据块缓存区(data block buffer cache),字典缓存区(dictionary cacheSQL共享池的一部分),重做日子缓冲区(redo log buffer),SQL共享池(shared SQL pool)
- 关系如下
- 数据块缓冲区:SGA主要成员,用来存放读取数据文件的数据块副本或使用者曾经处理过的数据。作用是:减少读写磁盘来提升存取效率。大小有DB_BLOCK_BUFFERS决定,大小固定只有数据库的1%–2%,才有LRU(最近最少使用算法)来管理可用空间。
- 字典缓存区:数据库对象的信息(包含用户账户user,数据文件名,盘区位置,表说明和权限等)储存在字典中,数据库需要这些信息是要读取数据字典来获取,并将这些数据存储在SGA的字典缓冲区中。用LRU,字典缓冲区大小由数据库内部决定,字典缓冲区是SQL共享池一部分。
- 重做日志缓冲区:联机重做日志文件用于记录数据库的更改以便于数据库恢复过程中用于向前滚动。==但是这些修改不是马上写入日志文件而是事务首先被记录在重做日志缓冲区的SGA中。==数据库可周期性分批写日志来优化此操作。
- SQL共享池:存储数据字典缓冲区和库缓冲区(对数据库进行操作的语句信息)。使用者将SQL指令送至数据库后系统先解析语法正确性,解析时所需系统信息及其解析结果将放置在共享区内。如果不同使用者执行了相同的SQL指令,就可以共享已解析的结果,从而加速SQL指令的执行速度,共享池哦大小有SHARED_POOL_SIZE决定。
2.后台进程
概念:数据库的物理结构和存储结构之间关系由后台进程来维持。数据库拥有多个后台进程(数量取决于数据库的配置),由数据库管理(只需要很少管理),每个进程执行不同的任务
下图显示后台进程在数据库外部结构,SGA中的作用和地位
常用后台进程:
DBWR(数据库写入进程):将数据块缓冲区内变动过的数据块写会至硬盘内的数据文件
LGWR(日志写入进程):将日志缓冲区的数据变动记录循序写入重做日志文件。
SMON(系统监控进程):进行因为断电或其它因素导致数据库不正常关闭的必要数据库修复动作
PMON(进程监控进程):处理程序异常终止时,PMON清除数据块缓存区内不在使用的空间并释放该程序使用的系统资源。也会定期检查各服务器处理程序和分配器状态。处理程序因故停摆由PMON负责重新激活。
CKPT(检查点进程)检查点发生后CKPT先通知DBWR将数据块缓存区的改动数据回写到数据文件,然后更新数据文件与控制文件的检查点信息。