Oracle在逻辑上以表空间存储数据,而实际上是以数据文件存储数据。
表空间和数据文件
表空间:某一时刻只属于一个数据库;由一个或多个数据文件组成;可近一步划分逻辑存储单元
数据文件:只能属于一个表空间和一个数据库
表空间类型
system表空间:
– 随数据库创建
– 包含数据字典
– 包含 SYSTEM 还原段
非SYSTEM表空间:
– 用于分开存储段
– 易于空间管理
– 控制分配给用户的空间量
创建表空间
创建表空间的命令:create tablespace
CREATE TABLESPACE tablespace
[DATAFILE clause]
[MINIMUM EXTENT integer[K|M]]
[BLOCKSIZE integer [K]]
[LOGGING|NOLOGGING]
[DEFAULT storage_clause ]
[ONLINE|OFFLINE]
[PERMANENT|TEMPORARY]
[extent_management_clause]
[segment_management_clause]
其中:
Tablespace:是要创建的表空间的名称
DATAFILE:指定组成表空间的一个或多个数据文件
MINIMUM EXTENT:确保表空间内每个占用区的大小是整数 (integer) 的倍数。使用 K 或M以千字节或兆字节为单位指定该大小。
BLOCKSIZE:BLOCKSIZE 指定表空间的非标准块大小。要指定该子句,必须具有DB_CACHE_SIZE,并至少设置一个 DB_nK_CACHE_SIZE参数,在该 子句中指定的整数(integer) 必须与一个DB_nK_CACHE_SIZE 参数设置相对应。
LOGGING:指定在缺省情况下,表空间内的所有表、索引和分区的所有更改都写入重做日志文件。LOGGING为缺省设置。
NOLOGGING:指定在缺省情况下,表空间内的所有表、索引和分区的所有更改都不写入重做日志文件。
NOLOGGING只影响某些DML 和DDL 命令,如直接加载。
DEFAULT:DEFAULT指定表空间内创建的所有对象的缺省存储参数。
OFFLINE:指定表空间从创建后就不可用。
PERMANENT:指定表空间可用于保留永久对象。
TEMPORARY:指定表空间仅用于保留临时对象,如:由 ORDER BY子句引起的隐式排序所使用的段。不能指定 EXTENT MANAGEMENT LOCAL BLOCKSIZE 子句。
extent_management_clause:该子句指定如何管理表空间内的区。
segment_management_clause:这只与永久的、且在本地管理的表空间相关。通过它可指定Oracle 是否应使用空闲列表或位图来跟踪表空间段中的已占用空间和空闲空间
datafile_clause:== filename [SIZE integer[K|M] [REUSE] [ autoextend_clause ]
filename:是表空间中的数据文件的名称。
SIZE:指定文件大小。使用K 或 M 以千字节或兆字节为单位指定大小。
REUSE:允许 Oracle 服务器重新使用现有文件。
autoextend_clause:该子句启用或禁用数据文件的自动扩展。
NEXT:以字节为单位指定在需要更多区时自动分配的磁盘空间下一增量的大小
其中:
MAXSIZE:指定数据文件可以自动扩展到的最大磁盘空间。
UNLIMITED:指定可分配给数据文件或Tempfile 的磁盘空间是不受限制的。
验证上述参数,示例如下:
SQL> CREATE TABLESPACE userdata DATAFILE '/disk4/ora10/oradata/ora1/userdata01.dbf' SIZE 20M
2 AUTOEXTEND ON NEXT 500K MAXSIZE 100M
3 LOGGING ONLINE
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
Tablespace created.
表空间的空间管理
表空间以区(extent)为单位分配空间。可使用以下两种不同方法来跟踪创建的表空间中的空闲空间和已占用空间
本地管理的表空间:在表空间内通过位图管理区。位图中的每个位对应于一个块或一组块。分配了某个区或释放了某个区可重新使用时,Oracle 服务器更改位 图值以显示块的新状态。从 Oracle9i 开始,在本地管理已成为缺省设置。
字典管理的表空间:由数据字典管理区。Oracle 服务器将在分配或回收区时更新数据字典中对应的表。
本地管理的表空间:减少了对数据字典表的争用;分配或回收空间时不生成还原数据
示例:
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
EXTENT MANAGEMENT 子句的 LOCAL 选项指定表空间在本地管理。缺省情况下,表空间在本地管理。
extent_management_clause:
[ EXTENT MANAGEMENT [ DICTIONARY | LOCAL
[ AUTOALLOCATE | UNIFORM [SIZE integer[K|M]] ] ] ]
其中:
DICTIONARY:指定使用字典表来管理表空间。
LOCAL:指定在本地通过位图管理表空间。如果指定了LOCAL,则不能再指定 DEFAULT
storage_clause、MINIMUM EXTENT或 TEMPORARY。
AUTOALLOCATE:指定表空间由系统管理。用户无法指定区大小。这是缺省设置。
UNIFORM:指定按照大小统一为 SIZE 字节数的各个区来管理表空间。使用K 或 M 以千字节或兆字节来指定区大小。缺省大小为 1 MB
在本地管理表空间的优点:
1.本地管理的表空间相对于字典管理的表空间有如下优点:
2.本地管理可以避免循环空间管理操作,但是这种操作在字典管理的表空间中却有可能发生。一旦消耗或释放某个区的空间会
3.产生另一个消耗或释放操作(消耗或释放还原段或数据字典表内的空间)时,它就会发生。
4.由于本地管理的表空间在数据字典表中不记录空闲空间,从而减少了对这些表的争用。
5.区的本地管理可自动跟踪邻近的空闲空间,因而无须合并空闲区。
6.本地管理的区大小可由系统自动确定。
7.对区的位图进行更改不会生成还原信息,因为它们不更新数据字典中的表(表空间限额信息等特殊情况除外)。