学习目标
- 定义表空间和数据文件的用途
- 创建表空间管理表空间
- 使用Oracle管理文件(OMF)创建和管理表空间
- 获取表空间信息
表空间和数据文件
Oracle逻辑上将数据存储在表空间中,物理上将数据存储在数据文件中。
-
Tablespaces:
- 一次只能属于一个数据库
- 包含一个或多个数据文件
- 是否进一步划分为逻辑存储单元
-
数据文件:
- 只能属于一个表空间和一个数据库
- 是模式对象数据的存储库
数据库、表空间和数据文件密切相关,但它们之间有重要的区别:Oracle数据库由一个或多个称为表空间的逻辑存储单元组成,这些存储单元共同存储数据库的所有数据。
- Oracle数据库中的每个表空间由一个或多个称为数据文件的文件组成,这些文件是与Oracle运行的操作系统一致的物理结构
- 数据库的数据集中存储在构成数据库的每个表空间的数据文件中。例如,最简单的Oracle数据库将有一个表空间和一个数据文件。另一个数据库可以有三个表空间,每个表空间由两个数据文件组成(总共6个数据文件)。
表空间的类型
- 系统表空间
- 使用数据库创建
- 包含数据字典。
- 包含SYSTEM undo段的
- 非系统表空间
- 单独的部分
- 简化空间管理
- 控制分配给用户的空间量
补充的:
在 Oracle 数据库中,表空间是存储数据的逻辑结构。根据用途和功能的不同,表空间可以分为以下几种类型:
1. 永久表空间(Permanent Tablespace)
定义:
- 用于存储永久性数据库对象(如表、索引等)的数据。
- 默认的用户表空间类型。
特点:
- 数据会持续保存在磁盘上,直到用户删除数据。
- 每个数据库必须至少有一个永久表空间,通常是 SYSTEM 表空间。
主要表空间:
-
SYSTEM 表空间:
- 每个数据库必须有一个 SYSTEM 表空间。
- 存储数据字典视图和数据库核心信息。
- 必须始终在线。
-
SYSAUX 表空间:
- 用于辅助 SYSTEM 表空间,存储额外的数据库元数据(如 AWR 报告、Statspack 数据等)。
-
用户定义的永久表空间:
- 存储用户的应用数据和索引。
2. 临时表空间(Temporary Tablespace)
定义:
- 用于存储 SQL 语句执行过程中生成的临时数据,例如排序操作或哈希连接。
特点:
- 数据只在会话期间存在,会话结束后数据被清除。
- 不需要进行备份。
- 每个用户都需要分配一个默认的临时表空间。
用途:
- 排序操作(如
ORDER BY
和GROUP BY
)。 - 创建临时索引。
- 大型查询的中间结果存储。
3. 解读表空间(Undo Tablespace)
定义:
- 专门用于存储事务回滚所需的撤销信息(Undo 信息)。
特点:
- 支持事务回滚和一致性读。
- 用于维护事务的原始数据版本。
- 数据在事务提交后自动释放。
用途:
- 回滚未提交事务。
- 支持读一致性(如快照读)。
- 间接支持闪回查询(Flashback Query)。
4. 临时表空间组(Temporary Tablespace Group)
定义:
- 一组临时表空间的集合,用于分担临时数据的存储负载。
特点:
- 支持多个临时表空间的并行使用。
- 增加了查询排序和临时操作的 I/O 性能。
5. 大文件表空间(Bigfile Tablespace)
定义:
- 一个特殊的表空间类型,支持单个非常大的数据文件。
特点:
- 数据文件大小限制为 128 TB(而普通表空间的限制为 32 GB)。
- 适用于需要管理大规模数据的场景。
- 减少数据文件数量,但一个表空间只有一个数据文件。
用途:
- 在数据量巨大且表空间增长频繁的场景下,减少管理复杂性。
6. 小文件表空间(Smallfile Tablespace)
定义:
- 默认的表空间类型,支持多个较小的数据文件。
特点:
- 每个数据文件的大小限制为 32 GB。
- 一个表空间可以包含多个数据文件。
用途:
- 普通数据库场景下使用。
7. 表外表空间(Tablespace for External Tables)
定义:
- 用于存储外部表的元数据信息,外部表可以从外部文件(如 CSV、文本文件)中直接读取数据。
特点:
- 数据本身不存储在数据库中,而存储在外部文件系统中。
- 数据定义和元数据保存在数据库中。
用途:
- 大量外部数据的快速加载和访问。
8. 快照表空间(Read-Only Tablespace)
定义:
- 表空间设置为只读模式,不允许修改其中的数据。
特点:
- 常用于存储历史数据或只读应用场景。
- 便于备份和节省存储资源。
用途:
- 数据仓库场景。
- 存储归档数据。
总结
表空间类型 | 用途 | 特点 |
---|---|---|
永久表空间 | 存储表、索引等永久性对象 | 持久保存,适合日常数据存储。 |
临时表空间 | 存储排序和中间结果数据 | 数据会话结束后清除。 |
撤销表空间(UNDO) | 存储事务撤销信息,支持一致性读和回滚 | 用于事务管理,提交后数据自动清除。 |
大文件表空间 | 支持单个大数据文件,减少数据文件管理复杂性 | 最大支持 128 TB。 |
小文件表空间 | 默认表空间类型,支持多个较小数据文件 | 一个表空间可包含多个文件,每个文件最大 32 GB。 |
快照表空间 | 只读表空间,存储历史数据或归档数据 | 不允许修改,提高安全性和节省存储资源。 |
表外表空间 | 存储外部表的元数据 | 数据存储在外部文件系统,适合批量加载。 |
临时表空间组 | 一组临时表空间 | 提高排序和临时操作性能,支持并行 I/O。 |
根据具体业务需求选择合适的表空间类型,可以有效优化数据库性能和管理复杂性。
表空间和数据文件
- 数据库、表空间和数据文件密切相关,但它们之间有重要的区别:Oracle数据库由一个或多个称为表空间的逻辑存储单元组成,这些存储单元共同存储数据库的所有数据。Oracle数据库中的每个表空间由一个或多个称为数据文件的文件组成,这些文件是与Oracle运行的操作系统一致的物理结构。
- 数据库的数据集中存储在构成数据库的每个表空间的数据文件中。例如,最简单的Oracle数据库将有一个表空间和一个数据文件。另一个数据库可以有三个表空间,每个表空间由两个数据文件组成(总共6个数据文件)。
三种表空间permanent,undo,temporary
是的,从广义上来看,Oracle 数据库中的表空间可以简化为三种主要类型,它们是基于表空间的用途进行分类的。这种分类方式强调了核心功能,具体如下:
1. Permanent Tablespace(永久表空间)
定义:
- 存储永久性数据,如表、索引和视图等,数据会一直保存在磁盘上,直到被显式删除。
特点:
- 数据的持久性:即使数据库关闭或重新启动,数据仍然存在。
- 存储日常业务数据。
- 包括以下具体表空间:
- SYSTEM 表空间:存储数据库的核心数据字典和系统元数据。
- SYSAUX 表空间:辅助 SYSTEM 表空间,存储元数据的支持性数据(如 AWR、Statspack 等)。
- 用户定义的表空间:用于存储应用程序的业务数据,如用户的表、索引等。
典型用途:
- 存储应用程序的持久性数据(如用户表、索引)。
- 存储数据库的核心元数据(如 SYSTEM 表空间)。
2. Undo Tablespace(撤销表空间)
定义:
- 专门用于存储事务的撤销信息(Undo Records),支持事务回滚和一致性读。
特点:
- 数据是临时的,通常在事务提交后会被自动清除。
- 在事务回滚或读一致性(如快照读)中起到关键作用。
- 通常数据库会为实例分配一个默认的 Undo 表空间。
典型用途:
- 支持事务回滚:当事务需要撤销时,Oracle 使用撤销表空间中的数据还原更改。
- 支持一致性读:查询时,提供快照数据以避免 “脏读”。
3. Temporary Tablespace(临时表空间)
定义:
- 用于存储 SQL 查询和操作(如排序、哈希连接等)产生的临时数据。
- 数据仅在会话期间存在,随着会话结束会被清除。
特点:
- 数据的短暂性:临时表空间中的数据不会长期保留。
- 为用户分配一个默认的临时表空间,用于排序和其他操作的中间结果存储。
- 不会参与数据库备份。
典型用途:
- 排序操作(如
ORDER BY
、GROUP BY
)。 - 哈希连接或合并连接操作。
- 查询或 DML 操作的中间结果存储。
总结
从功能的核心分类来看,表空间可以被归类为以下三种类型:
类型 | 用途 | 特点 |
---|---|---|
Permanent | 存储持久性数据(表、索引、视图、系统元数据等)。 | 数据持久化存储,即使数据库关闭也存在,适合业务数据和系统元数据。 |
Undo | 存储事务的撤销信息,支持回滚和一致性读。 | 数据是临时的,在事务提交后自动清除。 |
Temporary | 存储排序、哈希连接等操作的中间结果。 | 数据短暂存在,只在会话期间保留,不会参与备份。 |
这种三种类型的划分方式将表空间的核心功能抽象出来。
查询表空间
select * from v$tablespace; desc dba_data_files; select file_name, tablespace_name from dba_data_files;
.
.
本地管理表空间和字典管理表空间
- 本地管理表空间 : Locally managed tablespace:
- 空间管理方式:在本地管理表空间中,空闲区段的管理是在表空间级别进行的。每个表空间维护一个位图,用于记录表空间中每个块的空闲状态。每个位对应一个或一组块,位值表示该块是空闲还是已使用。
- 优点:本地管理表空间的管理效率高,因为空闲区段的状态可以直接在位图中进行快速查找和更新,减少了对数据字典的访问和更新。
- 适用场景:适用于大型数据库,能够提高空间管理的效率和性能。
- 字典管理表空间 : Dictionary-managed tablespace:
- 空间管理方式:在字典管理表空间中,空闲区段的管理是由数据字典(Oracle系统表)来管理的。当需要分配或释放区段时,Oracle会更新相应的数据字典表,以记录表空间中的空闲区段信息。
- 优点:字典管理表空间相对较为简单,适用于小型数据库或早期版本的Oracle数据库。
- 缺点:字典管理表空间的管理效率较低,因为每次分配或释放空间都需要更新数据字典表,可能会导致性能下降。
总的来说,本地管理表空间通过位图管理空闲区段,管理效率更高,适用于大型数据库;而字典管理表空间通过数据字典管理空闲区段,管理相对较慢,适用于小型数据库或早期版本的Oracle数据库。在实际应用中,推荐使用本地管理表空间来提高数据库的性能和管理效率。
在继续讨论之前,我们将查看与表空间相关的另一个主题:如何在表空间中管理区段。在Oracle8.1.5之前,只有一种方法可以管理表空间内的区分配:字典管理的表空间。也就是说,表空间中的空间是在数据字典表中管理的,与管理会计数据的方式大致相同,可能使用DEBIT和CREDIT表。在借方,我们有分配给对象的所有区段。在信用方面,我们有所有的免费区可供使用。当一个对象需要另一个范围时,它会要求系统获得一个。然后,Oracle会去它的数据字典表,运行一些查询,找到空间(或不),然后更新一个表中的一行(或全部删除),并将一行插入到另一个表中。Oracle管理空间的方式与您编写应用程序的方式非常相似:通过修改数据和移动数据。
这个SQL在后台以您的名义执行以获得额外的空间,它被称为递归SQL。您的SQL INSERT语句导致执行其他递归SQL以获得更多空间。如果频繁地执行这种递归SQL,可能会非常昂贵。这种对数据字典的更新必须序列化;两者不能同时进行。它们是要避免的。
表空间的创建、查询、删除
创建Oracle数据库表空间的详细步骤如下:
- 创建表空间:
CREATE TABLESPACE tablespace_name
DATAFILE 'path_to_datafile.dbf' SIZE size_in_MB
AUTOEXTEND ON NEXT 10M MAXSIZE unlimited;
其中,tablespace_name为表空间的名称,path_to_datafile.dbf为数据文件的路径,size_in_MB为表空间的初始大小(单位为MB),AUTOEXTEND ON表示自动扩展表空间,NEXT 10M表示每次扩展的大小为10MB,MAXSIZE unlimited表示表空间的最大大小为无限制。
- 查看表空间:
SELECT tablespace_name FROM dba_tablespaces;
这条SQL语句将列出数据库中所有的表空间名称。
- 删除表空间:
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
在删除表空间时,需要谨慎操作。INCLUDING CONTENTS AND DATAFILES
表示删除表空间的同时删除其中的所有对象和数据文件。
对于本地管理的表空间,存储在每个数据文件中的位图用于管理区段。现在要获得一个范围,系统所需要做的就是在位图中设置一个位为1。为了释放空间,系统将位设置回0。与使用字典管理的表空间相比,这是令人难以置信的快。我们不再在数据库级别为跨所有表空间的空间请求序列化长时间运行的操作。相反,我们在表空间级别进行序列化,以实现非常快的操作。本地管理的表空间还有其他很好的属性,比如强制统一的区段大小,但这开始成为DBA的重要角色。
接下来,您应该使用的唯一存储管理方法是本地管理的表空间。实际上,在Oracle9i及以上版本中,如果使用数据库配置助手(DBCA)创建数据库,它会将SYSTEM创建为本地管理的表空间,如果SYSTEM是本地管理的,则该数据库中的所有其他表空间也将被本地管理,并且传统的字典管理方法将不起作用。这并不是说在SYSTEM是本地管理的数据库中不支持字典管理的表空间,而是它们根本无法创建:
Dictionary-Managed TS
- 区段在数据字典中进行管理。
- 存储在表空间中的每个段可以有不同的存储子句。
- 需要合并。
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
本地管理表空间是通过在CREATE TABLESPACE语句中使用EXTENT MANAGEMENT子句的LOCAL选项来指定的。默认情况下,表空间是本地管理的。
EXTENT MANAGEMENT子句的语法如下:
EXTENT MANAGEMENT [ DICTIONARY | LOCAL [ AUTOALLOCATE | UNIFORM [SIZE integer[K|M]] ] ]
其中:
- DICTIONARY:指定表空间使用数据字典表进行管理。
- LOCAL:指定表空间通过位图进行本地管理。如果指定了LOCAL,就不能再指定DEFAULT storage_clause、MINIMUM EXTENT或TEMPORARY。
- AUTOALLOCATE:指定表空间由系统自动管理,用户无法指定扩展大小。这是默认选项。
- UNIFORM:指定表空间使用固定大小的块进行管理,SIZE参数用于指定块的大小,单位为字节。可以使用K或M来指定块大小的单位为千字节或兆字节。默认大小为1MB。
本地管理表空间:
EXTENT MANAGEMENT
子句可用于各种CREATE命令:
- 对于永久表空间,可以在CREATE tablespace命令中指定EXTENT MANAGEMENT LOCAL。注意:在Oracle9i Database Release 2之前,SYSTEM表空间不是本地管理的。
- 对于临时表空间,可以在目录中指定EXTENT MANAGEMENT LOCAL创建临时表空间命令。
本地管理表空间的优点:
与字典管理的表空间相比,本地管理的表空间具有以下优点:
- 本地管理避免了递归的空间管理操作。这可能发生在消耗或释放撤消段或数据字典表中的空间的另一个操作中。
- 由于本地管理的表空间不会在数据字典表中记录空闲空间,因此它们可以减少这些表上的争用。
- 区段的本地管理自动跟踪相邻的空闲空间,从而消除了这种需要合并空闲的区段
- 本地管理的区段的大小可以由系统自动确定。
- 区段位图的更改不会生成撤消信息,因为它们不会更新数据字典中的表(表空间配额等特殊情况除外)。
Dictionary-Managed TS
- 区段在数据字典中进行管理。
- 存储在表空间中的每个段可以有不同的存储子句。
- 需要合并。
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf'
SIZE 500M EXTENT MANAGEMENT DICTIONARY
DEFAULT STORAGE
(initial 1M NEXT 1M PCTINCREASE 0);
字典管理的表空间中的段可以具有自定义存储。这种存储比本地管理的表空间更灵活,但效率要低得多。
迁移字典管理的系统表空间
将字典管理的SYSTEM表空间迁移到本地管理:
DBMS_SPACE_ADMIN.
TABLESPACE_MIGRATE_TO_LOCAL('SYSTEM');
使用以下步骤将SYSTEM表空间从字典管理转换为本地管理:
-
对数据库进行完整备份:
- 使用Oracle提供的备份工具(如RMAN)或者其他备份工具对数据库进行完整备份,确保备份数据的完整性和可恢复性。
-
确保数据库有一个默认的临时表空间:
- 使用CREATE TEMPORARY TABLESPACE命令创建一个默认的临时表空间,例如:
CREATE TEMPORARY TABLESPACE temp_ts TEMPFILE 'temp01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M;
- 使用CREATE TEMPORARY TABLESPACE命令创建一个默认的临时表空间,例如:
-
在字典管理的表空间中消除任何撤消(回滚)段:
- 使用ALTER TABLESPACE命令将字典管理的表空间中的回滚段设置为OFFLINE并删除,例如:
ALTER TABLESPACE undo_ts OFFLINE;
- 使用ALTER TABLESPACE命令将字典管理的表空间中的回滚段设置为OFFLINE并删除,例如:
-
在本地管理的表空间中设置在线undo段:
- 使用CREATE UNDO TABLESPACE命令创建一个在线undo表空间,或者将现有的undo表空间设置为在线状态,例如:
ALTER TABLESPACE undo_ts ONLINE;
- 使用CREATE UNDO TABLESPACE命令创建一个在线undo表空间,或者将现有的undo表空间设置为在线状态,例如:
-
将除undo空间和默认临时表空间外的所有表空间设置为READ ONLY模式:
- 使用ALTER TABLESPACE命令将需要设置为READ ONLY模式的表空间设置为只读,例如:
ALTER TABLESPACE data_ts READ ONLY;
- 使用ALTER TABLESPACE命令将需要设置为READ ONLY模式的表空间设置为只读,例如:
-
以受限模式启动实例:
- 在启动数据库实例时,使用RESTRICT选项以受限模式启动数据库实例,例如:
STARTUP RESTRICT;
- 在启动数据库实例时,使用RESTRICT选项以受限模式启动数据库实例,例如:
-
迁移SYSTEM表空间到本地管理表空间:
- 使用DBMS_SPACE_ADMIN包中的TABLESPACE_MIGRATE_TO_LOCAL过程将SYSTEM表空间迁移为本地管理表空间,例如:
EXEC DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL('SYSTEM');
- 使用DBMS_SPACE_ADMIN包中的TABLESPACE_MIGRATE_TO_LOCAL过程将SYSTEM表空间迁移为本地管理表空间,例如:
以上是每个步骤的基本操作示例,具体操作时请根据实际情况和数据库环境进行调整和执行。在执行这些操作之前,请务必做好充分的备份以防意外情况发生。
撤销表空间 :undo Tablespace
- 用于存储undo段
- 不能包含任何其他对象
- 区段是本地管理的
- 只能使用DATAFILE和EXTENT管理子句
CREATE UNDO TABLESPACE undo1
DATAFILE '/u01/oradata/undo01.dbf' SIZE 40M;
临时表空间
- 用于排序操作
- 能被多个用户共享吗
- 不能包含任何永久对象
- 建议使用本地管理的区段
CREATE TEMPORARY TABLESPACE temp
TEMPFILE '/u01/oradata/temp01.dbf' SIZE 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;
临时表空间
通过专门为排序段指定临时表空间,可以更有效地管理排序操作的空间。永久模式对象不能驻留在临时表空间中。
当一个段被多个排序操作共享时,使用排序段或临时段。当多个排序太大而无法装入内存时,临时表空间可以提供性能改进。给定临时表空间的排序段是在实例的第一次排序操作时创建的。排序段通过分配区段进行扩展,直到段大小等于或大于该实例上运行的所有活动排序的总存储需求。
注意:在创建临时表空间时不能指定非标准块大小。
本地管理的临时表空间具有临时数据文件(temp文件),它与普通数据文件类似,除了:
- 临时文件总是被设置为NOLOGGING模式。
- 不能将tempfile设置为只读。
- 不能重命名临时文件。
- 不能使用ALTER DATABASE命令创建tempfile。
- 只读数据库需要临时文件。媒体恢复不能恢复临时文件。
为了优化临时表空间中排序的性能,可以将UNIFORM SIZE设置为SORT_AREA_SIZE的倍数。
在Oracle数据库中关于SYSTEM表空间和临时表空间的管理规则。
-
当SYSTEM表空间是本地管理时,在创建数据库时必须至少定义一个默认的临时表空间:
- 如果SYSTEM表空间被设置为本地管理(使用位图管理),则在创建数据库时,必须定义一个默认的临时表空间,以便处理排序和其他临时操作。
-
本地管理的SYSTEM表空间不能用于默认的临时存储:
- 本地管理的SYSTEM表空间不能被用作默认的临时存储,这意味着必须有一个单独的临时表空间来处理临时数据。
-
如果SYSTEM是字典管理的,并且在创建数据库时没有定义默认的临时表空间,那么SYSTEM仍然用于默认的临时存储:
- 如果SYSTEM表空间是字典管理的(使用数据字典进行管理),并且在创建数据库时没有指定默认的临时表空间,那么SYSTEM表空间将被用作临时存储。
-
但是,您将在ALERT.LOG中收到一条警告,指出建议使用默认的临时表空间,并且在将来的版本中是必需的:
- 在这种情况下,数据库会在ALERT.LOG日志文件中记录一条警告,建议用户定义一个默认的临时表空间,并提示在未来的版本中,这将成为一个强制要求。
总结来说,当SYSTEM表空间为本地管理时,必须定义一个默认的临时表空间,而字典管理的SYSTEM表空间在没有定义临时表空间时可以作为临时存储,但会收到警告。
默认临时表空间 : Default Temp Table space
- 指定数据库范围的默认临时表空间
- 避免使用SYSTEM表空间存储临时数据
- 可以使用以下命令创建:
- 创建数据库
- 修改数据库
默认临时表空间
默认的临时表空间可以通过以下方式创建和设置:
- 使用CREATE TABLESPACE命令创建临时表空间
- 使用ALTER DATABASE命令
当创建一个没有默认临时表空间的数据库时,SYSTEM表空间被分配给任何没有临时表空间子句创建的用户。此外,在alert_sid.log中还会放置一个警告,指出SYSTEM表空间是默认的临时表空间。在创建数据库时创建默认的临时表空间,可以防止SYSTEM表空间被用作临时空间。数据库创建后,可以通过创建临时表空间,然后修改数据库来设置默认的临时表空间修改数据库默认临时表空间
定义后,未显式分配给临时表空间的用户将分配给默认临时表空间。
可以通过ALTER DATABASE default temporary tablespace
命令随时修改默认的临时表空间。当默认临时表空间发生变化时,所有分配给默认临时表空间的用户将被重新分配给新的默认表空间。
创建默认临时表空间
1. 在数据库创建时:
使用以下命令创建数据库并定义默认临时表空间:
CREATE DATABASE DBA01
LOGFILE
GROUP 1 ('/$HOME/ORADATA/u01/redo01.log') SIZE 100M,
GROUP 2 ('/$HOME/ORADATA/u02/redo02.log') SIZE 100M,
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
MAXINSTANCES 1
DATAFILE '/$HOME/ORADATA/u01/system01.dbf' SIZE 325M
UNDO TABLESPACE undotbs
DATAFILE '/$HOME/ORADATA/u02/undotbs01.dbf' SIZE 200M
DEFAULT TEMPORARY TABLESPACE temp
TEMPFILE '/$HOME/ORADATA/u03/temp01.dbf' SIZE 4M
CHARACTER SET US7ASCII;
2. 在数据库创建后:
- 要查找数据库的默认临时表空间,可以查询
DATABASE_PROPERTIES
视图。 - 使用以下命令修改默认临时表空间:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE default_temp2;
- 查询当前的数据库属性:
SELECT * FROM DATABASE_PROPERTIES;
创建和管理临时表空间
-
查看数据库属性:
DESC DATABASE_PROPERTIES; COL PROPERTY_NAME FORMAT A40; COL PROPERTY_VALUE FORMAT A40; COL DESCRIPTION FORMAT A40; SELECT * FROM DATABASE_PROPERTIES;
-
查看当前表空间:
SELECT * FROM V$TABLESPACE; DESC DBA_TABLESPACES;
-
创建临时表空间:
创建一个名为mytemp
的临时表空间,并指定为默认临时表空间:CREATE TEMPORARY TABLESPACE mytemp TEMPFILE '/ora/oracle/oradata/orcl/mytemp01.dbf' SIZE 100M EXTENT MANAGEMENT LOCAL;
-
设置默认临时表空间:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE mytemp;
注意事项
- 数据库可以有多个临时表空间,但只能有一个默认的临时表空间。
- 默认临时表空间是全局的,不能被删除(DROPPED),因为它用于处理所有未指定临时表空间的用户的临时数据。
在创建数据库时,可以通过CREATE DATABASE
命令定义默认临时表空间。创建后,可以使用ALTER DATABASE
命令修改默认临时表空间,并通过查询DATABASE_PROPERTIES
视图来查看当前的默认临时表空间设置。
默认临时表空间有以下限制:
在新的默认临时表空间可用之前,不能删除默认临时表空间。
不能将默认临时表空间设置为离线状态。
不能将默认临时表空间更改为永久表空间。