暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle中的表空间

想下海的咸鱼 2024-08-23
153

一、概述表空间
表空间是 Oracle 中用于存储逻辑对象的独立存储单元。它被划分为若干个连续的数据块,每个数据块大小可以在创建表空间时指定,比如 2KB、4KB、8KB 等。块是Oracle中最小的存储单位。块大小可以在创建表空间时指定,一旦指定就不能更改。块大小的选择会影响数据库的性能和存储空间的使用效率。
一个表空间由多个数据文件(data file)组成,每个数据文件可以存储一个或多个表空间,这些数据文件可以位于同一个磁盘上或者不同的磁盘上。
每个表空间都有自己的名字和属性,表空间是由表空间名称、数据文件名称、数据文件大小、数据文件路径等组成的。
表空间还可以设置自动扩展属性,当表空间中的空间不足时,可以自动增加数据文件的大小。此外,表空间还可以设置存储参数,如表空间的初始大小、最大大小、增量大小等。
下面是一些关于 Oracle 表空间的详细描述:

每个表空间拥有一组数据文件,这组数据文件可以存在于不同的磁盘上、文件系统上或者操作系统上,从而实现了物理独立性。
表空间可以用来管理数据库中的表、索引、视图和其他对象。因此,一个 DBA 可以更加灵活地管理数据和资源,优化磁盘空间利用和备份恢复。
每个表空间都有一个名字,并且必须指定大小(默认为无限制)。表空间可以动态增长,但最好预留一些空间以便后续应用需求。
某个表或索引可以被创建在一个特定的 tablespace 中。对于大型的数据库,通常会将不同类别的表和索引分配到不同的 tablespace 中,以便更好地控制存储空间和性能。
在 Oracle 11g 及之前的版本中,通常有四种类型的表空间:SYSTEM、SYSAUX、TEMP 和 USER,默认情况下每个数据库都会包含这四种表空间。从 Oracle 12c 开始,还增加了 UNDO 表空间。
SYSTEM 表空间包含系统表(如 sys 和 system 表)和其他 Oracle 系统对象,通常不应该用来存储用户数据。
SYSAUX 表空间包含许多 Oracle 数据库的关键组件,它随着数据库升级和新功能添加而变化。因此,保持 SYSAUX 表空间有足够空间非常重要。
TEMP 表空间用于存储临时表和排序操作的中间结果。TEMP 表空间中的数据在事务提交后自动删除。
USER 表空间用于存储被普通用户创建的数据库对象,如数据库表、索引和视图等。
UNDO 表空间用于实现 Oracle 数据库事务的撤消(undo)功能,使得当一个事务需要回滚时,所有已做的修改可以反向执行。UNDO 表空间的大小应该设置足够大,以免影响事务撤消和回滚的性能。
总之,表空间是一个用于管理数据的逻辑单元,并提供了很大的灵活性,以及更好的磁盘空间使用率和容错性。

二、表空间分类
2.1按照管理权限方面划分
按照管理权限来划分时,将其分为系统表空间和用户表空间两种类型。

2.1.1系统表空间
系统表空间是被 Oracle 管理员使用的特殊表空间,存储了数据库自身运行所需的数据和对象,以及系统元数据等。系统表空间包括 SYSTEM 表空间和 SYSAUX 表空间两种类型,主要包含如下的数据库对象:

数据库元数据:这些元数据包括系统表、系统视图以及一些其他的元数据定义,用于实现 Oracle 数据库自身的基本功能。
系统表:Oracle 自带的一些常见表,通常存储有关 Oracle 实例、用户、安全性、备用设备等信息。
系统索引:实际上是一个特殊类型的表,用于加快系统表查询,提高系统效率。
控制文件:Oracle 数据库控制文件,它保存了数据库名称、创建日期、日志序列号、当前数据库日志组数等关键信息。
2.1.2用户表空间
用户表空间是由用户创建的,用于存储用户数据和对象,如表、索引、视图等。用户表空间则是被普通用户使用的表空间,用于存储用户定义的表、索引、存储过程等数据库对象。一般情况下,一个 Oracle 数据库中可以存在多个用户表空间,这些用户表空间由用户创建或者由管理员代为创建。同时用户表空间中也包含如下的数据库对象:

数据表:是最常见的数据库对象类型之一。用户可以创建自己的数据表,并在其中存储数据。
索引:用于加快数据表中数据的检索速度,提高系统性能。
视图:类似于数据表,但是不能向其中直接插入新行或删除行。
序列:用于生成唯一标识符,常用于主键或其它数据列上。
存储过程和函数:由 PL/SQL 编写并编译为可执行代码的程序单元。
Package: PL/SQL 中对存储过程和函数进行组合,在数据库中作为一个单独的对象存在。
用户定义类型:是用户自定义数据类型,可以像基本类型一样使用。
2.2按照分区策略方面划分
从分区策略方面考虑,Oracle 中表空间可以按照以下4种类型进行分类,包括 SYSTEM 表空间、SYSAUX 表空间、TEMP 表空间、UNDO 表空间等。

2.2.1SYSTEM 表空间
系统表空间的重要组成部分,存储数据库元数据和控制信息等,是整个数据库结构中必不可少的一环。包含了所有的系统元数据,例如系统数据字典,Oracle 内核代码等,这些元素都是 Oracle 系统负责维护并不提供给用户修改和访问的。

2.2.2SYSAUX 表空间
第二个重要的系统表空间,主要用于存储系统管理数据、高级队列、日志记录信息、数据挖掘模型等。也是存储Oracle数据库的一些辅助系统对象,如Oracle Enterprise Manager的性能监控数据、日志信息等。同时是环境数据的存放,当 Oracle 安装有更多的组件或者安装更多的应用程序时,使用 SYSAUX 表空间扩展系统表空间以支持 Oracle 11g 以后新的 Oracle 功能。

2.2.3TEMP 表空间
临时表空间,用于存放查询操作过程中生成的临时表或排序表等中间结果,执行完成后会自动清空。用于存储排序操作、合并 JOIN 操作产生的临时文件和表,在查询非常复杂,且需要大量的临时空间支持的情况下,会涉及到读写 TEMP 表空间。因此主要是用于存储临时数据,如排序操作、连接操作等。

2.2.4UNDO 表空间
撤销表空间,用于存储在事务执行过程中会被修改或删除的旧版数据,在回滚操作时可以用来恢复之前的状态。常用于处理数据库中的回滚段管理,当事务被回滚时,根据需要进行回滚以前完成的工作,并将撤消所需信息放入 UNDO 表空间中。这些信息保留在 UNDO 表空间中,以便在需要的时候恢复这些文档。因此主要用于存储回滚段数据,支持事务的回滚操作。

2.3按照功能类型方面划分
按照数据的持久性和功能类型来划分表空间,根据不同的功能需要和数据处理方式, Oracle 将表空间可分为永久表空间、撤销表空间和临时表空间三种类型。

2.3.1永久表空间(Permanent tablespace)
用于存储用户定义的数据库对象,如数据表、索引、视图等。这些数据是长期存放在硬盘上供日常业务使用的,不会随着会话或者事务的结束而消失,即永久表空间中的数据在提交后会被持久化到磁盘上。常用于存储永久性数据,如表、索引等,在数据库关闭之后仍会存在。

2.3.2撤销表空间(Undo tablespace)
撤销表空间用于实现事务的回撤和恢复功能。当事务处理过程中需要撤销某个事务时,Oracle 数据库就会从撤销表空间中获取相应的数据,并使用这些数据将撤销操作进行回退。因此常用于存放正在执行事务对数据所做的修改的详细信息。当事务需要回滚时,Oracle 回到这个表空间中找到 undo 数据,使用这些数据还原到之前的状态。它是与会话关联的表空间,每个活动的会话都会用到它。

2.3.3临时表空间(Temporary tablespace)
临时表空间用来存储对 SQL 查询操作进行排序和处理等临时需求所创建的对象。这些对象在查询结束后会被自动删除。临时表空间主要用于临时数据库对象的存储,如排序时存储的临时文件、Hash Join 操作时的临时表等,以支持 OLAP 和大型复杂查询等高级操作。当语句需要较大量的内存进行排序、转储到磁盘等操作时,会自动使用临时表空间。完成操作后其内数据也会相应地释放掉,即临时表空间中的数据在会话结束后会被自动删除。

通常情况下,一个完整的 Oracle 数据库都应该包含至少一个永久表空间和一个撤销表空间,默认情况下也会包含一个临时表空间。此外,永久表空间和临时表空间还可以根据其所处磁盘位置、大小、性能等因素进行细分,以更好地满足数据库应用程序的需求。

注意:

最好将永久表空间和撤销表空间分开使用,而不要将它们同时存储在同一个表空间中,这样可以避免由于一些操作(如大量数据删除)而导致撤销表空间被耗尽的情况。

可以通过以下SQL语句查询表空间的类型:

SELECT tablespace_name, contents FROM dba_tablespaces;
其中,contents列的值可以为PERMANENT、UNDO或TEMPORARY,分别对应永久表空间、撤销表空间和临时表空间。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_71406734/article/details/131135587

文章转载自想下海的咸鱼,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论