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

Oracle 19c的表空间

原创 IT烧麦 2023-08-14
1477

目录

前言

 表空间是 Oracle 中用于存储逻辑对象的独立存储单元。它被划分为若干个连续的数据块,每个数据块大小可以在创建表空间时指定,比如 2KB、4KB、8KB 等。块是Oracle中最小的存储单位。块大小可以在创建表空间时指定,一旦指定就不能更改。块大小的选择会影响数据库的性能和存储空间的使用效率。

 一个表空间由多个数据文件(data file)组成,每个数据文件可以存储一个或多个表空间,这些数据文件可以位于同一个磁盘上或者不同的磁盘上。
每个表空间都有自己的名字和属性,表空间是由表空间名称、数据文件名称、数据文件大小、数据文件路径等组成的。

 表空间还可以设置自动扩展属性,当表空间中的空间不足时,可以自动增加数据文件的大小。此外,表空间还可以设置存储参数,如表空间的初始大小、最大大小、增量大小等。

下面是一些关于 Oracle 表空间的详细描述:

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

一、表空间的分类

1、按照管理权限方面划分

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

  • 1、 系统表空间

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

数据库元数据:这些元数据包括系统表、系统视图以及一些其他的元数据定义,用于实现 Oracle 数据库自身的基本功能。
系统表:Oracle 自带的一些常见表,通常存储有关 Oracle 实例、用户、安全性、备用设备等信息。
系统索引:实际上是一个特殊类型的表,用于加快系统表查询,提高系统效率。
控制文件:Oracle 数据库控制文件,它保存了数据库名称、创建日期、日志序列号、当前数据库日志组数等关键信息。

  • 2、 用户表空间

用户表空间是由用户创建的,用于存储用户数据和对象,如表、索引、视图等。用户表空间则是被普通用户使用的表空间,用于存储用户定义的表、索引、存储过程等数据库对象。一般情况下,一个 Oracle 数据库中可以存在多个用户表空间,这些用户表空间由用户创建或者由管理员代为创建。同时用户表空间中也包含如下的数据库对象:

数据表:是最常见的数据库对象类型之一。用户可以创建自己的数据表,并在其中存储数据。
索引:用于加快数据表中数据的检索速度,提高系统性能。
视图:类似于数据表,但是不能向其中直接插入新行或删除行。
序列:用于生成唯一标识符,常用于主键或其它数据列上。
存储过程和函数:由 PL/SQL 编写并编译为可执行代码的程序单元。
Package: PL/SQL 中对存储过程和函数进行组合,在数据库中作为一个单独的对象存在。
用户定义类型:是用户自定义数据类型,可以像基本类型一样使用。

2、按照分区策略方面划分

从分区策略方面考虑,Oracle 中表空间可以按照以下4种类型进行分类,包括 SYSTEM 表空间、SYSAUX 表空间、TEMP 表空间、UNDO 表空间等。

  • 1、 SYSTEM 表空间

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

  • 2、 SYSAUX 表空间

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

  • 3、TEMP 表空间

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

  • 4、UNDO 表空间

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

3、按照功能类型方面划分

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

  • 1、永久表空间(Permanent tablespace)

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

  • 2、撤销表空间(Undo tablespace)

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

  • 3、 临时表空间(Temporary tablespace)

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

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

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

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

 SELECT tablespace_name, contents FROM dba_tablespaces;

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论