Oracle数据库的存储结构分为物理存储结构和逻辑存储结构两种。
物理存储结构:主要用于描述在 oracle 数据库外部数据的存储,即在操作系统层面中如何组织和管理数据,与具体的操作系统有关。
逻辑存储结构:主要描述oracle 数据库内部数据的组织和管理方式,即在数据库管理系统的层面中如何组织和管理数据,与操作系统没有关系。
物理存储结构具体表现为一系列的操作系统文件,是可见的;而逻辑存储结构时候物理存储机构的抽象体现,是不可见的,可以通过查询数据库数据字典了解逻辑结构信息。
Oracle数据库的物理存储结构与逻辑存储结构既相互独立又互相联系。
从上面图中可以看出数据库物理存储结构和逻辑存储结构的基本关系:
1.一个数据库在物理上包含多个数据文件,在逻辑上包含多个表空间
2.一个表空间包含一个或多个数据文件,一个数据文件只能从属于某个表空间。
3.数据库的逻辑块由一个或多个操作系统组成。
4.一个逻辑区只能从属于一个数据文件,而一个数据文件可包括一个或多个逻辑区。
Oracle数据库的物理存储结构是由一系列操作系统组成的,存放于物理磁盘上,是数据库的实际存储单元。这些文件主要包括数据文件、控制文件、重做日志文件、归档文件、初始化参数文件、跟踪文件、告警文件等。每种文件都存储特定内容的信息,其数量也因文件类型不同而不同。
数据文件:是数据库所有数据的实际存储空间,所有数据文件的大小和构成了数据库的大小。
控制文件:记录数据库结构信息的重要的二进制文件,由oracle 系统进行读 / 写操作。
重做日志文件:是以重做记录的形式记录、保存用户对数据库所进行的变更操作,是数据库中最重要的物理文件。
归档日志文件:是历史联机重做日志文件的集合,是联机重做日志文件被覆盖之前备份的副本。
初始化参数文件:是数据库启动过程所必需的文件,记录了数据库显式参数的设置。数据库启动的第一步是根据初始化参数文件中的设置,创建并启动实例,即分配内存空间、启动后台进程。
跟踪文件:是数据库中重要的诊断文件,是获取数据库信息的重要工具,对管理数据库的实例起着至关重要的作用。跟踪文件中包含数据库系统运行过程中所发生的重大事件的有关信息,可以为数据库运行故障的解决提供重要信息。
告警文件:是数据库中重要的诊断文件,记录数据库在启动、关闭和运行期间后台进程的活动情况。
oracle数据库的逻辑存储结构是从逻辑的角度来分析数据库的构成的,也就是数据库创建后利用逻辑概念来描述oracle数据库内部数据的组织和管理形式。在操作系统中,没有数据库逻辑存储结构信息,而只有物理存储结构信息。数据库的逻辑存储结构概念存储在数据库的数据字典中,可以通过数据字典查询存储结构信息。
一个或多个连续的oracle数据块构成区,一个或多个区构成段,一个或多个段构成表空间,所有表空间构成数据库。
1.Oracle数据块
oracle 数据块是数据库中最小的逻辑存储单元,是数据库执行输入、输出操作的最小单位,由一个或多个操作系统块构成。在oracle 11g 数据库中, 数据块分为标准块和非标准块两种,其中标准块由数据库初始化参数 DB_BLOCK_SIZE 设置,其大小不可更改。oracle 数据库的默认数据缓冲区就是标准数据块构成的。
2.区
区是由一系列连续的数据块构成的逻辑存储单元,是存储空间分配的最小单元。当创建一个数据库对象时,oracle 为对象分配若干个区,以构成一个段来为对象提供初始的存储空间。当段中已分配的区都写满后,oracle会为段分配一个新区,以容纳更多的数据。构成一个段的所有区只能是在一个文件中。oracle数据库中,引入区的目的是为了提高系统存储空间分配的效率,以区为单位的存储空间分配大大减少了磁盘分配的次数。
3.段
段是由一个或多个连续或不连续的区组成的逻辑存储单元,用于存储特定的、具有独立存储结构的数据库对象。根据存储对象类型不同,分为:表段、索引段、临时段和回退段4类。
表段:又称数据段,用来存储表或簇的数据,可以细分为普通表段、分区表段、簇段、索引化表段
索引段:用来存放索引数据,包括ROWID和索引值
临时段:是进行查询、排序等操作时,如果内存空间不足,用于保存 sql 语句在解释和执行过程中产生的临时数据。会话结束时,为该操作分配的临时段将被释放。
回退段:用于保存数据库的回退信息,包含当前未提交事务所修改的数据的原始版本。利用回退段中保存的回退信息,可以实现事务回滚、数据库恢复、数据的读一致性和闪回查询
4.表空间
表空间是oracle数据库最大的逻辑存储单元,数据库的大小从逻辑上看就是由表空间决定的,所有表空间大小的和就是数据库的大小。在 oracle 数据库中,存储结构管理主要就是通过对表空间的管理啊来实现的。
表空间与数据库文件直接关联,一个表空间包含一个或多个数据文件,一个数据文件只能从属于一个表空间,数据库对象就是存储在表空间对应的一个或多个数据文件中。
表空间根据存储数据类型的不同,分为系统表空间和非系统表空间两类。
系统表空间:主要存放数据库的系统信息,如数据字典、数据库对象定义信息,数据库组件信息等。
非系统表空间:又分为撤销表空间、临时表空间和用户表空间等。其中撤销表空间用于自动管理数据库的回退信息,临时表空间用于管理数据库的临时信息,用户表空间用于存储业务数据。
使表空间脱机:
ALTER TABLESPACE tablespacename
恢复联机状态:
ALTER TABLESPACE tablespacename ONLINE;
将表空间标记只读或只写:
ALTER TABLESPACE tablespacename [READ ONLY|READ WRITE]
调整表空间大小:
ALTER DATABASE DATAFILE ‘filename’ RESIZE n[M|G|T]
删除表空间:
DROP TABLESPACE tablespacename[INCLUDING CONTENTS [AND DATAFILES]];
了解表空间和数据文件
一个表空间可能是多个数据文件。
一个表空间可包含多个段。
一个段是一个或多个区间。
一个区间是位于一个数据文件的多个连接块。
一个Oracle块是一个或多个操作系统块。
Oracle块是数据库的基本I/O单元
SMALLFILE表空间可以有多个数据文件,但BIGFILE表空间只能有一个数据文件。
默认方式下,表空间采用本地区管理和自动段空间管理的方法。但统一区间大小并非默认设置。
OMF数据文件自动命名。开始为100MB,可以自动扩展,没有上限。
除非指定了INCLUDING CONTENTS子句,否则包含段的表空间无法删除。
可将表空间设置为联机或脱机,设置为读写或只读。
表空间可以存储三类对象:永久对象,临时对象或撤销段。