表空间中的空间管理有两种方式:
- 本地管理的表空间
- 在表空间中管理空闲区
- 使用位图记录空闲区
- 每一位对应于一个块或一组块
- 位值指示空闲区或占用区
- 建议使用本地管理的表空间
- 字典管理的表空间
- 由数据字典管理空闲区
- 分配或取消分配区后会更新相应的表
- 支持这些表空间仅仅是为了向后兼容
与字典管理表空间相比,本地管理表空间具有以下优势:
- 如果使用本地管理,则不需要执行递归空间管理操作;
- 由于采用本地管理表空间时并不记录数据字典中的空闲空间,因此可以减少对这些表的争用;
- 在本地管理区,可自动跟踪相邻的空闲空间而无需合并空闲区
- 系统会自动确定本地管理区的大小
- 对区位图进行更改不会生成还原信息,因为这些更改并不更新数据字典中的表;
- 可以使用DBMS_SPACE_ADMIN.TABLESAPCE_MIGRATE_TO_LOCAL过程完成从字典管理到本地管理的转换
本地管理表空间的存储:
可以通过以下两种方式之一分配本地管理表空间中的区
- Automatic:这种方式指定表空间中的区的大小由系统管理,不能为临时表空间指定Automatic
- Uniform:使用统一的区大小管理表空间,默认大小为1MB,临时表空间的所有区都是统一的,而且采用默认值。不能为还原表空间指定Uniform;
可将本地管理表空间中的段空间管理指定为:
- Automatic:Oracle数据库使用位图管理段中的空闲空间。这种空间管理方式被称为“自动段空间管理(ASSM)”;
- Manual:此方式指定使用空闲列表来管理段中的空闲空间。由于这种管理段空间的方式需要为在表空间中创建的方案对象指定并优化PCTUSED, FREELISTS和FREELIST GROUPS存储参数,因此这种方式称为“手动段空间管理”。支持此方式是为了实现向后兼容,建议使用ASSM。
事件记录:
对表空间对象所做的更改会写入重做日志。如果未启动事件记录,则使用SQL*Loader的任何直接加载和直接加载INSERT操作都不会写入到重做日志中,因此如果丢失了数据,对象是不可恢复的。
预配置的表空间包括:
- SYSTEM:包含在这个表空间中的数据字典和表包含关于数据库的管理信息
- SYSAUX:这是SYSTEM表空间的辅助表空间
- TEMP:如果执行的SQL语句需要创建临时段,则可以使用临时表空间;
- UNDOTBS1:至少数据库辐射器用于存储还原信息的还原表空间,如果数据库使用“自动还原管理”,那么数据库在任何指定时间必须只有一个活动的还原表空间
- USERS:此表空间用于存储永久用户对象和数据;USERS表空间是用于存储非系统用户创建的所有对象的默认表空间
- EXAMPLE:实例表空间