### Oracle的逻辑结构、物理结构与实例
#### 一、Oracle的逻辑结构
Oracle数据库的逻辑结构主要包括以下几个组成部分:表空间、段、区和数据块。这些组成部分共同构成了Oracle数据库的逻辑视图。
##### 1. 数据块(Data Blocks)
数据块是Oracle数据库中最小的存储单元。它是Oracle用来管理数据的最小单位。一个数据块通常占用一定的磁盘空间,而该空间的大小是由`DB_BLOCK_SIZE`初始化参数决定的。这个参数指定了标准块的大小,标准块指的是那些大小与`DB_BLOCK_SIZE`相等的块。非标准块则是指那些大小与`DB_BLOCK_SIZE`不一致的块。
当Oracle执行数据读写操作时,它是以块为单位进行的。即使请求的数据量小于一个块的大小,Oracle也会读取整个块。因此,数据块可以被视为Oracle读写数据的最基本单位。
数据块的内部结构包含以下几个部分:
- **块头(Header)**:存储有关块的基本信息,如块的物理地址和所属段的类型(数据段或索引段)。
- **表目录(Table Directory)**:存储与表相关的元数据,例如表的标识信息。
- **行目录(Row Directory)**:记录块内每行数据的位置信息。
- **行数据(Row Data)**:存储实际的表数据或索引数据。
- **空余空间(Free Space)**:可用于存储新插入的数据或更新现有数据时扩展行的空间。
块的头部信息区(Overhead),即块头、表目录和行目录,主要用于存储关于整个块的信息,而不是具体的数据。这块区域的大小是可变的,一般介于84字节到107字节之间。
##### 2. 行链接与行迁移
- **行链接(Row Chaining)**:当插入一行数据时,如果这行数据太大以至于无法完全放入单个数据块中,Oracle将会把这行数据分割并存储在多个数据块中,这个过程被称为行链接。
- **行迁移(Row Migrating)**:当更新一行数据时,如果更新导致该行数据变大,并且当前所在的块没有足够的空闲空间来容纳更大的数据,Oracle会尝试将这行数据迁移到其他具有足够空间的块中,这个过程被称为行迁移。
#### 二、Oracle的物理结构
Oracle数据库的物理结构是指数据在物理磁盘上的存储方式。它包括以下几种主要的文件类型:
- **数据文件(Data Files)**:用于存储数据的实际文件。每个表空间至少有一个数据文件。
- **重做日志文件(Redo Log Files)**:用于记录所有对数据库所做的修改,以便在系统故障后恢复数据库。
- **控制文件(Control Files)**:用于存储数据库的物理结构相关信息,如数据文件名、位置等。
- **归档日志文件(Archived Log Files)**:在启用归档模式的情况下,归档日志文件包含了重做日志文件的备份。
#### 三、Oracle实例
Oracle实例是指运行Oracle数据库软件的一组后台进程以及内存结构。实例由以下两个主要组件组成:
- **系统全局区(System Global Area, SGA)**:共享内存区域,用于存储数据缓存、SQL语句缓存等信息。
- **后台进程**:负责完成特定任务,如清理内存、处理用户连接等。
实例与数据库文件一起工作,以提供数据库服务。实例是临时的,一旦关闭,所有的内存结构都会丢失;而数据库文件则是持久的,存储着所有数据和元数据。
#### 总结
Oracle数据库的逻辑结构、物理结构和实例共同构成了其完整的架构。逻辑结构面向用户,描述了如何组织和管理数据;物理结构描述了数据如何存储在物理磁盘上;实例则提供了运行数据库所需的所有软件环境。理解这些结构对于有效地设计、管理和优化Oracle数据库至关重要。