目录
一、基础知识
1、表空间和数据文件
2、存储层次结构摘要
3、表空间的类型
4、表空间中的空间管理
5、临时表空间
6、Default Temporary TS 默认临时TS
二、常用实操
1、Creating Tablespaces创建表空间
2、Dictionary-Managed TS 字典管理的表空间
3、Locally Managed Tablespace本地管理的表空间(最常用)
4、Migrating a DM SYSTEM TS 字段管理的表空间转变为本地管理的表空间
5、Undo Tablespace 撤消表空间
6、Temporary Tablespaces 临时表空间
7、创建Default Temporary TS 默认临时TS
8、Creating a Default Temp TS 创建默认临时TS
Managing Tablespace & Data File (维护表空间和数据文件)
目标:
- 定义表空间和数据文件的用途
- 创建表空间
- 管理表空间
- 学会使用甲骨文托管文件(OMF) 创建和管理表空间(不是重点)
- 获取表空间信息
一、基础知识
1、表空间和数据文件
Oracle逻辑地将数据存储在表空间中,物理上存储在数据文件中。
表空间:
- 一次只能属于一个数据库
- 由一个或多个数据文件组成
- 进一步划分为逻辑存储单元
数据文件:
- 只能属于一个表空间和一个数据库
- 是架构物件资料的储存库
2、存储层次结构摘要
数据库-->>表空间-->>段-->>区-->>块
-
左边是逻辑区分,右边是物理区
-
一个tablespace对应多个Data file
-
Data file是由很多OS block操作系统内存块组成
-
一个Oracle data block内存块是由多个OS block组成的
-
一个数据库是由多个模式组成的
-
一个数据库是由多个表空间组成的
-
一个表空间是由多个Segment段组成的
-
在Oracle数据库中,一个segment是一个逻辑存储结构,它由一个或多个物理存储结构组成,用于存储数据。每个表或索引都有一个对应的segment,也就是表段和索引段。
-
-
一个Segment段由多个Extent区组成
-
在Oracle数据库中,extent是指一组数据块,用于存储表或索引中的数据。每个extent都是一个连续的物理空间,通常包含多个数据块。当存储空间不足时,Oracle会分配新的extent来存储数据。
-
-
一个Extent由多个Oracle data block数据块组成
-
在Oracle数据库中,数据块是指数据库中最小的物理数据单位,也是存储数据和索引的基本存储单位。每个数据块大小在Oracle中是固定的,通常是8KB。
一个数据块由以下部分组成:
- 数据块头(block header):用于存储关于数据块的元数据,如块的地址、块的类型、块大小和块的校验和等信息。
- 行数据(data rows):存储表中的数据。
- 行目录(row directory):存储每行数据在数据块中的位置和大小信息。
- 空间管理信息(free space management information):用于管理数据块中的空闲空间。
-
总结注意点:
- 数据库由一个或多个表空间组成。
- 表空间由一个或多个数据文件组成。这些文件可能是文件系统中的熟文件、原始分区、ASM管理的数据库文件或集群文件系统上的文件。表空间包含段。
- 段(TABLE、INDEX等)由一个或多个区段组成。段存在于表空间中,但可能在该表空间中的许多数据文件中包含数据。
- 区是磁盘上逻辑上连续的块集。区位于单个表空间中,而且始终位于该表空间中单个文件中。
- 块是数据库中最小的分配单位。块是I/o的最小单位数据库使用的。
3、表空间的类型
- SYSTEM表空间
- 用数据库创建的
- 包含数据字典
- 包含SYSTEM撤消段
- 非SYSTEM表空间
- 分开的部分
- 简化空间管理
- 控制分配给用户的空间量
- 永久的,撤消的,临时的
4、表空间中的空间管理
- 本地管理的表空间
- 空闲区在表空间中进行管理
- 位图用于记录空闲区
- 每个比特对应一个块或一组块
- 位值指示空闲或已使用
- 字典管理的表空间:
- 空闲区段由数据字典管理
- 在分配或取消分配区时更新适当的表。
5、临时表空间
- 如果SYSTEM表空间是本地管理的,那么在创建数据库时必须至少定义一个默认的临时表空间。本地管理的SYSTEM表空间不能用于默认临时存储。
- 如果SYSTEM是字典管理的,并且在创建数据库时没有定义默认的临时表空间那么SYSTEM仍然用作默认的临时存储。但是,您将在ALERT.LOG中收到警告,表示建议使用默认的临时表空间,并且在以后的发行版中是必要的。
6、Default Temporary TS 默认临时TS
- 指定数据库范围内的默认临时表空间
- 消除使用SYSTEM表空间存储临时数据
- 可以通过使用以下方式创建全局表空间
- 创建数据库
- ALTER数据库
二、常用实操
1、Creating Tablespaces创建表空间
使用以下命令创建表空间:
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 5M;
2、Dictionary-Managed TS 字典管理的表空间
- 区段在数据字典中管理
- 存储在表空间中的每个段可以有不同的存储子句
- 需要链接。
代码:
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf'
SIZE 500M EXTENT MANAGEMENT DICTIONARY
DEFAULT STORAGE (initial 1M NEXT 1M PCTINCREASE O);
3、Locally Managed Tablespace本地管理的表空间(最常用)
- 减少对数据字典表的争用
- 发生空间分配或解除分配时不生成撤消(不需要undo)
- 不需要链接
代码:
CREATE TABLESPACE userdata
DATAFILE'/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K:
4、Migrating a DM SYSTEM TS 字段管理的表空间转变为本地管理的表空间
因为这是一个比较重大的事,所以在做之前我们需要进行准备工作
准备工作:
- 对你的数据库做一个完整的备份。
- 确保数据库有一个不是SYSTEM的默认临时表空间。临时表空间是使用CREATE TEMPORARY TABLESPACE命令创建的。
- 消除字典管理表空间中的任何撤销(回滚)段
- 本地管理的表空间中应该至少有一个联机撤消段,或者一个撤消表空间应该是联机的.
- 除了包含撤消空间的表空间和默认临时表空间之外,所有表空间都应设置头READ ONLY(只读)模式。
- 在受限模式下启动实例(防止其他用户登录进来捣乱)。
- 使用以下命令迁移SYSTEM表空间
DBMS_SPACE_ADMIN TABLESPACE_MIGRATE_TO_LOCAL('SYSTEM');
将字典管理的SYSTEM表空间迁移到本地管理的:
DBMS_SPACE_ADMIN TABLESPACE_MIGRATE_TO_LOCAL('SYSTEM');
5、Undo Tablespace 撤消表空间
- 用于存储撤消段(比如:做事务回滚)
- 不能包含任何其他对象
- 区是本地管理的(undo 一定是本地管理的)
- 只能使用DATAFILE和区段管理子句。
创建代码:
CREATE UNDO TABLESPACE undo1
DATAFILE '/u01/oradata/undo01.dbf' SIZE 40M;
6、Temporary Tablespaces 临时表空间
- 用于排序操作
- 可以由多个用户共享
- 不能包含任何永久对象
- 建议使用本地管理的区段
CREATE TEMPORARY TABLESPACE temp
TEMPFILE'/u01/oradata/temp01.dbf' SIZE 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;
7、创建Default Temporary TS 默认临时TS
在创建数据库时创建:
CREATE DATABASE DBA01 LOGFILE GROUP 1 ('/SHOME/ORADATA/u01/redo01.log') SIZE 100M GROUP 2 ('/SHOME/ORADATA/u02/redo02.log') SIZE 100M MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXLOGHISTORY 1 MAXDATAFILES 100 MAXINSTANCES 1 DATAFILE '/SHOME/ORADATA/u01/system01.dbf' SIZE 325M UNDO TABLESPACE undotbs DATAFILE '/SHOME/ORADATA/u02/undotbs01.dbf' SIZE 200 DEFAULT TEMPORARY TABLESPACE temp TEMPFILE '/$HOME/ORADATA/u03/temp01.dbf' SIZE 4M CHARACTER SET US7ASCII
其中这里就是创建全局临时表空间的地方
数据库创建后创建的方法:
修改数据库默认临时表空间
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE default_temp2;
若要查找数据库查询数据库属性的默认临时表空间,请执行以下操作:
SELECT * FROM DATABASE_PROPERTIES;
8、Creating a Default Temp TS 创建默认临时TS
数据库创建后:
ALTER DATABASE
DEFAULT TEMPORARY TABLESPACEdefault_temp2;
若要查找数据库查询数据库属性的默认临时表空间,请执行以下操作:
SELECT * FROM DATABASE_PROPERTIES: