数据库的逻辑结构和物理结构
1. 逻辑结构
逻辑结构是从用户的角度来看待数据库的组织方式,与数据的存储方式无关。它主要用于帮助用户和开发人员理解和操作数据。
逻辑结构的主要组成
-
表 (Table) 数据以行和列的形式存储,每一行是一个记录,每一列是一个字段。
-
视图 (View) 从一个或多个表中派生的虚拟表,用户可以通过视图查询数据,但视图本身不存储数据。
-
索引 (Index) 用于加快数据检索速度的数据结构。逻辑上是独立的,但物理上需要存储空间。
-
模式 (Schema) 一个数据库中的逻辑对象(表、视图、索引等)的集合。
-
分区 (Partition) 为了提高查询性能,将一张表分成多个部分,每个部分可以独立存储和管理。
2. 物理结构
物理结构描述了数据在底层存储设备上的组织方式,主要与数据库管理系统如何存储和管理数据相关。
物理结构的主要组成
-
数据文件 (Data Files) 数据存储在数据文件中,数据文件是数据库的基本物理存储单元。
-
日志文件 (Redo Log Files) 记录数据库操作的日志信息,用于故障恢复。
-
控制文件 (Control Files) 存储数据库的物理结构信息,例如数据文件和日志文件的位置。
-
表空间 (Tablespace) 数据库物理结构中的逻辑分组,一个表空间可以由多个数据文件组成。
-
数据块 (Data Blocks) 存储的最小单元,通常为固定大小(例如 8KB)。
-
区 (Extent) 由多个连续的数据块组成,是分配存储空间的基本单位。
-
段 (Segment) 表、索引或其他对象使用的存储空间的集合,由多个区组成。
表空间的种类
1. 永久表空间(Permanent)
这些表空间主要用于存储永久性数据,数据在存储后会一直保留,直到被显式删除或修改。
包括以下类型:
-
SYSTEM 表空间:
-
存储数据库的核心数据字典和视图等永久性管理信息。
-
必须存在,且不可删除。
-
-
SYSAUX 表空间:
-
存储辅助管理数据(如性能统计信息、元数据)。
-
用于分担 SYSTEM 表空间的压力。
-
-
用户表空间:
-
用于存储用户创建的表、索引等永久性对象。
-
用户可以根据需要创建多个永久表空间,分别用于不同应用或用户。
-
-
大文件表空间(Bigfile Tablespace):
-
适合存储大量永久数据的场景。
-
通常用于减少文件管理的复杂性。
-
-
只读表空间:
-
可将某些永久表空间设置为只读模式,防止数据被修改。
-
常用于存储归档数据或历史记录。
-
2. 回滚表空间(Undo)
-
作用:Undo 表空间是一种专门用于存储 Undo Segment(回滚段) 的表空间。
-
内容:只能存放 Undo Segments(回滚段),不能存储表、索引或其他用户对象。
-
管理:在数据库的自动管理模式下,Oracle 会动态分配和回收 Undo 空间。
3. 临时表空间(Temporary)
在 Oracle 数据库中,临时表空间(Temporary Tablespace) 是一种用于存储临时数据的表空间,主要用于在数据库会话中进行中间计算或查询操作时存储临时结果。它是 暂时性(Temporary) 的存储区域,在会话结束时或计算完成后会被清空。
包括以下类型:
-
临时表空间:
-
临时表空间是用来存储数据库中临时计算结果的区域。所有需要临时存储的操作(如排序、哈希连接、聚合等)都将使用临时表空间。
-
-
全局临时表空间 Default
是 Oracle 数据库中用于存储 全局临时表 数据的表空间。
-
只有一个:一个数据库实例只能有一个默认的全局临时表空间。
-
不能离线(offline):默认全局临时表空间不能被设置为脱机(offline)。如果脱机,系统无法正常存储全局临时表的数据。
-
不能删除(drop):默认全局临时表空间不能被删除。如果删除该表空间,会影响全局临时表的功能,导致数据库无法正常处理临时数据。
-
不能变为永久表空间(permanent):默认全局临时表空间的功能是专门为存储临时数据而设计,不能将其转换为永久表空间,用于存储持久化数据。
-
-
用户临时表空间:
-
每个用户可以分配一个临时表空间,用于存储该用户会话中的临时数据。用户临时表空间的配置是为了提供用户特定的临时数据存储,而不是多个用户共享的临时空间。
-
分类 | 主要表空间 | 特点 |
---|---|---|
永久 | SYSTEM、SYSAUX、用户表空间、大文件表空间、只读表空间 | 数据持久保存,存储核心信息和用户数据。 |
暂时 | UNDO 表空间 | 事务回滚和读一致性,数据在事务完成后清除。 |
临时 | 临时表空间、临时表空间组、临时 Undo 表空间 | 数据仅在会话期间有效,用于中间计算和查询优化。 |
表空间空间管理
在 Oracle 数据库中,表空间空间管理指的是如何分配和管理表空间中的存储空间。在空间管理方面,主要有两种方式:本地管理(Locally-managed) 和 字典管理(Dictionary-managed)。本地管理(Locally-managed)是主流的空间管理方式。
本地管理(Locally-managed)表空间
本地管理表空间中,表空间的空间分配和管理由每个数据文件的 文件头 中的位图(Bitmap)来管理。位图用于记录表空间中每个块的使用情况。每个数据块的状态(例如,是否空闲、是否已被分配)通过该位图进行跟踪。
表空间的状态
1. 在线状态(ONLINE)
-
定义:表空间处于在线状态时,它是可用的,用户和数据库进程可以正常访问表空间中的数据。
-
用途:这是表空间的默认状态,表示表空间正在正常使用中。
-
设置方法:
ALTER TABLESPACE tablespace_name ONLINE;
2. 脱机状态(OFFLINE)
-
定义:表空间处于脱机状态时,用户和数据库进程无法访问该表空间中的数据。
-
用途:用于维护或诊断问题,例如备份、恢复或修复表空间时将其脱机。
-
类型:
-
正常脱机(NORMAL):表空间中的所有数据在脱机前会被写入磁盘,确保数据一致性。
-
立即脱机(IMMEDIATE):立即脱机表空间,未完成的事务不会被写入磁盘。
-
临时脱机(TEMPORARY):仅对当前会话脱机。
-
-
设置方法:
ALTER TABLESPACE tablespace_name OFFLINE NORMAL;
3. 只读状态(READ ONLY)
-
定义:表空间设置为只读状态时,数据只能被查询,不能被修改。
-
用途:
-
用于保护历史数据,防止意外修改。
-
减少备份频率,因为只读表空间的数据不会改变。
-
-
注意:将表空间设置为只读前,表空间必须先在线(ONLINE)。
-
设置方法:
ALTER TABLESPACE tablespace_name READ ONLY;
4. 读写状态(READ WRITE)
-
定义:表空间处于读写状态时,允许对数据进行查询、插入、更新和删除操作。
-
用途:这是表空间的默认状态,大多数情况下表空间都处于这种状态。
-
设置方法:
ALTER TABLESPACE tablespace_name READ WRITE;