表空间和数据文件
Oracle逻辑上将数据存储在表空间中,物理上将数据存储在数据文件中。
表空间:
- 一次只能属于一个数据库
- 由一个或多个数据文件组成
- 是否进一步划分为逻辑存储单元
数据文件:
能只属于一个表空间和一个数据库
是模式对象数据的存储库
表空间的类型
SYSTEM表空间
用数据库创建
- 包含数据字典
- 包含SYSTEM撤消段
非SYSTEM表空间
- 单独的部分
- 简化空间管理
- 控制分配给用户的空间量
permanent(永久表空间)、undo、temporary(临时表空间)
创建表空间
创建表空间的命令如下:
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 5M;
表空间中的空间管理
本地管理表空间:
- 在表空间中管理空闲区。
- 位图用于记录空闲区。
- 每个位对应一个或一组块。
- 位值表示空闲或已使用。
Dictionary-managed表空间:
- 空闲区由数据字典管理。
- 当区段被分配或释放时,相应的表被更新。
Dictionary-Managed TS
- 区段在数据字典中管理。
- 存储在表空间中的每个段可以有不同的存储子句。
- 需要进行Coalescing。
CREATE TABLE userdata
DATAFILE '/u01/oradata/userdata01.dbf'
SIZE 500M EXTENT MANAGENT DICTIONARY
DEFAULT STORAGE
(initial 1M NEXT 1M PCTINCREASE);
迁移DM SYSTEM TS
将字典管理的SYSTEM表空间迁移到本地管理:
- 对数据库做一个完整的备份。
- 确保数据库有一个非SYSTEM的默认临时表空间。使用CREATE TEMPORARY TABLESPACE命令创建临时表空间。
- 在字典管理的表空间中消除任何撤消(回滚)段。
- 本地管理的表空间中至少应该有一个在线撤销段,或者撤销表空间应该是在线的。
- 除了包含undo空间和默认临时表空间的表空间外,所有表空间都应该设置为READ ONLY模式。
- 以受限模式启动实例。
- 迁移SYSTEM表空间:
DBMS_SPACE_ADMIN.
TABLESPACE_MIGRATE_mig_TO_LOCAL('SYSTEM');
Undo Tablespace
- 用于存储undo段
- 不能包含任何其他对象
- 区段是本地管理的
- 只能使用DATAFILE和EXTENT MANAGEMENT子句
CREATE UNDO TABLESPACE undo1
DATAFILE '/u01/oradata/undo01.dbf' SIZE 40M;
Temporary Tablespaces(临时表空间)
- 用于排序操作
- 能被多个用户共享
- 不能包含任何永久对象
- 建议使用本地管理的区段
CREATE TEMPORARY TABLESPACE temp
TEMPFILE 'u01/oradata/temp01.dbf' SIZE 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;
当SYSTEM表空间是本地管理时,在创建数据库时必须至少定义一个默认的临时表空间。本地管理的SYSTEM表空间不能用作默认临时存储。
如果SYSTEM是字典管理的,并且在创建数据库时没有定义默认的临时表空间,那么SYSTEM仍然用于默认的临时存储。然而,你会在ALERT.LOG中收到一个警告,说默认临时表空间是推荐的,并且在未来的版本中是必要的。
Defauit Temporary TS(默认临时表空间)
指定数据库范围的默认临时表空间
避免使用SYSTEM表空间存储临时数据
可以使用以下命令创建:
CREATE DATBASE
ALER DATABASE
创建默认临时表空间
在数据库创建过程中:
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
DATAFILE9/SHOME/ORADATA/u02/undotbs01.dbf' SIZE 200
DEFAULT TEMPORARY TABLESPACE temp
TEMPFILE'/SHOME/ORADATA/u03/temp01.dbf' SIZE 4G
CHARACTER SET US7ASCII
数据库创建后:
ALTER DATAASE
DEFAULT TEMPORARY TABLESPACE default_temp2;
查找数据库查询DATABASE_PROPERTIES的默认临时表空间:
SELECT * from DATABASE_PROPERTIES;
限制
默认临时表空间不能为:
- 在新的默认表空间可用之前删除
- 离线
- 修改为永久表空间
只读表空间
使用以下命令将表空间设置为只读模式:
ALTER TABLESPACE userdata READ ONLY;
- 引起检查点
- 只能用于读操作的数据
- 对象可以从表空间中删除
使表空间离线
- 不可用于数据访问
- 不能离线的表空间:SYSTEM tablespace
- 具有活动undo段的表空间
- 默认临时表空间
使表空间离线:
ALTER TABLESPACE userdata OFFLINE;
使表空间在线:
ALTER TABLESPACE userdata ONLINE;
更改存储设置
使用修改表空间命令修改存储设置:
ALTER TABLESPACE userdata MINIMUM EXTENT 2M;
ALTER TABLESPACE userdata
DEFAULT STORAGE (INITIAL 2M NEXT 2M MAXEXTENTS 999);
本地管理的表空间的存储设置不能被修改。
调整表空间大小
表空间可以通过以下方式调整大小:
1.修改数据文件的大小:
- 自动使用AUTOEXTEND
- 手动使用ALTER DATABASE
2.使用ALTER TABLESPACE添加数据文件
启用自动扩展
可以使用以下命令自动调整大小:
- CREATE DATABASE
- CREATE TABLESPACE
- ALTER TABLESPACE … ADD DATAFILE
例子:
CREATE TABLESPACE user_data
DATAFILE
'/u01/oradata/userdata01.dbf' SIZE 200M
AUTOEXTEND ON NEXT 10m MAXSIZE 500M;
查询DBA_DATA_FILES视图,确定是否启用了AUTOEXTEND。
手动调整数据文件大小
- 手动增加或减少数据文件的大小更改数据库。
- 调整数据文件大小可以在不添加更多数据文件的情况下增加空间。
- 手动调整数据文件大小会回收数据库中未使用的空间。
- 例子:
ALTER DATABASE
DATAFILE '/u03/oradata/userdata02.dbf'
RESIZE 200M;
向表空间添加数据文件
- 通过添加额外的数据文件来增加分配给表空间的空间
- 添加DATAFILE子句用于添加数据文件
- 例子:
ALTER TABLESPACE user_data
ADD DATAFILE '/u01/oradata/userdata03.dbf'
SIZE 200M;
移动数据文件的方法
ALTER TABLESPACE
- 表空间必须离线。
- 目标数据文件必须存在。
ALTER TABLESPACE userdata RENAME
DATTAFILE '/u01/oradata/userdata01.dbf'
Tо '/u02/oradata/userdata01.dbf';
ALTER DATABASE
- 必须挂载数据库(MOUNTED)。
- 目标数据文件必须存在。
ALTER DATABASE RENAME
FILE '/u01/oradata/system01.dbf'
TO '/u03/oradata/system01.dbf';
删除表空间
不能删除表空间,如果它:
- 是SYSTEM表空间
- 有活动的段
包括内容删除段。
包括内容和数据文件删除数据文件。
级联约束删除所有引用完整性约束。
DROP TABLESPACE userdata
INCLUDING CONTENTS AND DATAFILES;
获取表空间信息
获取表空间信息和数据文件信息可通过以下查询方式获取:
表空间信息:
DBA_TABLESPACES
V$TABLESPACE
数据文件信息:
DBA_DATA_FILES
V$DATAFILE
临时文件信息:
DBA_TEMP_FILES
V$TEMPFILES
存储层次结构摘要
- 数据库由一个或多个表空间组成。
- 一个表空间由一个或多个数据文件组成。这些文件可能是文件系统中的cooked file,原始分区(raw partition),ASM 管理的数据库文件,或者是群集文件系统(clustered file system)中的文件。一个表空间包含段(segments)。
- 一个段(TABLE, INDEX等)由一个或多个区段组成。一个段存在于一个表空间中,但可能在该表空间内的许多数据文件中有数据。
- 区段是磁盘上逻辑上连续的一组块。区段位于单个表空间中,而且始终位于该表空间中的单个文件中。
- 块是数据库中最小的分配单位。块是数据库使用的最小I/O单位。