在前面学习Oracle数据库基础架构时,已经了解了Oracle的存储结构,逻辑上,Oracle的数据存放在tablespaces中,物理上存放在datafiles中。一个tablespace只能属于一个数据库(一个数据库可包括多个tablespace),包括了1个或多个数据文件。Tablespace可进一步分为segments、extents和blocks。一个datafile只属于一个数据库的一个tablespace。
Tablespace的分类有2种,一种分为SYSTEM tablespace和Non-SYSTEM tablespace。
SYSTEM tablespace是随数据库的创建而创建的,包含了数据字典和SYSTEM undo segment;Non-SYSTEM tablespace包括了分配给用户的空间便于数据库的空间管理。
另一种分为permanent、undo、temporary三种tablespace。
一般不加特别说明时所创建的permanent tablespace,保存永久性对象;
undo tablespace用于保存undo segments以便于回滚操作,而不能包含其他对象;
temporary tablespace是用于进行排序操作,能够被多个用户共享,不能包含永久性对象.
Temporary tablespace中有一个default temporary tablespace,指定了一个全局的默认临时表空间,如果没有这个表空间,默认情况下,是使用SYSTEM tablespace来存储临时数据的,显然,这是不好的,默认临时表空间只有一个,可以从表database_properties中查看default temp tablespace,在新的default temp tablespace被创建之前,是不能被dropped的。
和tablespace以及datafile相关的数据字典有:dba_tablespaces、v$tablespace、dba_data_files、v$datafile、dba_temp_files、v$tempfile。
1、创建表空间
创建表空间的完整命令:
Create [undo] tablespace
datafile
mininum extent
blocksize
logging clause
force logging
default storage_clause
online | offline
permanent | temporary
extent_manager_clause
segment_manager_clause
1)、undo指定系统将创建一个回滚表空间
2)、tablespace指定表空间名称
3)、datafile指定数据文件的路径、名称、大小及自增长状况:具体形如'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' size 50M autoextend on next 10M maxsize 500M,也可以指定on为off,就没有后面的递增和最大尺寸了,也可以在maxsize后面指定最大尺寸unlimited说明表空间无限大。
4)、mininum extent
5)、blocksize
6)、logging cluse指示这个表空间上所有用户对象的日志属性,缺省是logging;
7)、force logging指示表空间进入强制日志模式。此时系统将记录表空间上对象的所有改变,除了临时段的改变。这个参数高于logging参数中的nologging选项;
8)、default storage_clause声明缺省的存储子句;
9)、online|offline指定表空间状态;
10)、permanent | temporary指出表空间的属性,是永久表空间还是临时表空间。永久表空间存放的是永久对象,临时表空间存放的是session生命期中存在的临时对象。这个参数生成的临时表空间创建后一直都是字典管理,不能使用extent management local选项。如果要创建本地管理表空间,必须使用create temporary tablespace。声明了这个参数就不能声明block size。
11)、extent_manager_clause说明表空间如何管理extent。一旦声明了这个子句,就只能通过移植的方式改变这些参数。如果希望表空间本地管理的话,声明local选项。本地管理表空间是通过位图管理的。Autoallocate说明表空间自动分配extent,用户不能指定extent的大小。只有9.0以上的版本具有这个功能。Uniform说明表空间的范围的固定大小,缺省是1M。不能将本地管理的数据库的SYSTEM表空间设置成字典管理。ORACE推荐使用本地管理表空间。如果没有设置这个子句,oracle会进行默认设置。如果初始化参数compatible小于9.0.0,那么系统创建字典管理表空间,如果大于9.0.0,那么按如下设置:
如果没有指定default storage_clause,oracle创建一个自动分配的本地管理表空间;否则如果指定了mininum extent,那么oracle判断mininum extent、initial、next是否相等,以及pctincrease是否为0,如果满足这2个条件,oracle吃醋昂就一个本地管理表空间,extent size是initial,如果不满足,那么oracle将创建一个自动分配的本地管理表空间;如果没有指定mininum extent,那么oracle判断initial和next是否相等,以及pctincrease是否为0,如果满足这2个条件,那么oracle创建一个本地管理表空间并制定uniform,否则oracle将创建一个自动分配的本地管理表空间。(本地管理表空间只能存储永久对象。如果你声明了local,则不能声明default storage_clause,mininum extent,temporary);
12)、segment_management_clause : segment space management auto。
2、表空间的状态:
Tablespace的状态有3种:ONLINE、OFFLINE、READ ONLY。ONLINE是正常工作的状态,OFFLINE状态下,是不允许访问数据的,
SYSTEM tablespace和DEFAULT temp tablespace是不能被OFFLINE的,且带有active undo segments的tablespace也不能被OFFLINE。
切换ONLINE和OFFLINE状态的命令是alter tablespace