第八章Maintaining Tablespaces & Data Files
本章学习目标
1、了解表空间和数据文件的目的
2、创建表空间
3、管理表空间
4、使用OMF创建并管理表空间
5、获取表空间信息
Tablespaces & Data Files
Oracle数据逻辑上存储在表空间中,物理上存储在数据文件中
表空间同一时间只能属于一个数据库
表空间可以包含多个数据文件
表空间可以进一步分成多个逻辑存储单元
数据文件只能属于一个表空间和一个数据库
数据文件是一个用户对象数据的仓库
一个segment(表、索引等)由多个content组成,一个segment在一个表空间中可以跨多个data files
表空间类型
system tablespace
①数据库自行创建
②包含数据字典
③包含system undo段
non-system tablespace
①独立的段
②减少空间管理
③可以控制分配给用户的空间
也可以分为:permanent、undo、temporary表空间,永久表空间存储数据,undo表空间和temporary表空间存放临时数据
创建表空间
create tablespace userdata datafile ‘/u01/oradata/userdata01.dbf’ size 5M;
查询表空间中有哪些数据文件
select file_name,tablespace_name from dba_data_files;
表空间的空间管理方式
1、本地管理表空间
①表空间自行管理空闲的extents
②bitmap位图记录空闲的extents
③每个bit对应一个block或一组block
④bit数值代表extent是空闲的还是在使用
2、数据字典管理表空间
①空闲的extents由数据字典进行管理
②分配extents或者释放extents时,某些相关的表会自动更新
Oracle8.1.5之前Oracle管理extents都是数据字典进行管理,即dictionary-managed tablespace
就是说一个表空间的空间分配是由数据字典表进行管理的,类似于记账数据,需要存储在负债表debit和入账表credit中。在debit表中记录了所有已经分配出去的extents,在credit表中记录了所有未使用的空闲extents。当一个对象需要增加extent时,将向系统申请空间。Oracle会进入数据字典表中,执行一些查询语句,找到extent(也可能找不到),然后在数据字典credit表中将该extent的相关信息移除,同时在debit表中添加相应信息。
Oracle数据库在数据字典表中执行的相关查询语句就叫做recursive SQL。当用户执行insert语句就会引起recursive SQL。如果用户执行insert语句非常频繁,recursive SQL就会消耗大量的资源。而且recursive SQL语句更新数据字典是单线程的,无法并发执行。