从逻辑上读,数据存储在段中;从物理上讲,数据存储在数据文件中。表空间实体是二者的抽象,一个表空间可能包含多个段,并由多个数据文件组成。段和数据文件没有直接关系。数据文件可以作为文件系统中的文件存在,从10G版本开始,也可以作为自动存储管理(ASM)设备上的文件而存在。
5.1.1 ORACLE 数据存储模型
将逻辑存储与物理存储分开是关系数据库范例的必要部分。关系数据库表明:编辑人员只处理逻辑结构,而让数据库去管理物理结构的映射。这意味着,可以重新组织物理存储,也可以将整个数据库移动到完全不同的硬件和操作系统上,而应用程序将意识不到任何更改。
表空间实体消除了段与数据文件之间的多对多关系。一个表空间可以包含多个段,而且可以由多个数据文件组成。这意味着,一个段可以分布在多个数据文件中,而任一数据文件可以包含多个段的全部或一部分。
下面总结了这些段类型,按DBA关注的程序排序
TABLE 这些是包含数据行的堆结构的表。
INDEX 索引是键值的有序列表,相应的指针ROWID指向每行的物理位置。
TYPE2UNDO 这些是撤销段,存储数据的更改前版本,为了提供完整性,这些是必需的。
ROLLBACK 总有一个回滚段保护用于创建数据库的事务
TABLE PARTITION可以将表分成多个分区。如果这样的话,分区将成为一个个的段,而表本身完全不是段:仅以分区总和的形式存在。
INDEX PARTITION 默认方式下,一个索引在一个段中,但是也可以对索引进行分区。如果对表进行分区,通常也会对这些表上的索引进行分区。
LOBSEGMENT,LOBINDEX,LOB PARTITION
CLUSTER
NESTED TABLE
5.1.3 文件存储技术
数据文件可以保存在四类设备上:本地文件系统,群集文件系统,原始设备和ASM磁盘组。
本地文件系统上的文件
群集文件系统上的文件
原始设备上的文件
ASM设备上的文件
5.2 创建和管理表空间
表空间是模式数据的仓库,包括数据字典(是SYS模式)。所有数据库都必须有SYSTEM表空间和SYSAUX表空间,在实际中,还有临时表空间和撤销表空间。在创建数据库时,通常已经创建了这4个表空间。此后,DBA可能为用户数据创建更多表空间,为撤销和临时数据创建更多表空间。
可以使用Enerprise Manager Database Control 创建表空间
也可以用SQL创建:
create smallfile tablespace "NEWTS"
datafile 'd:\app\oracle\oratada\orcl11g\newts01.dbf '
size 100M autoextend on next 10m maxsize 200m
logging
extent management local
segment space management auto
default nocompress
5.2.2 更改表空间
创建后对表空间的常见更改如下:
重命名
使其联机或脱机
标记为读写或只读
重调大小
更改警报阈值
1 重命名表空间及其数据文件
语法如下
alter tablespace tablespaceoldname rename to tablespacenewname
2 使表空间联机或脱机
联机表空间或数据文件可供使用。而脱机表空间或数据文件以数据字典中的定义形式存在,控制文件无法使用。可能出现这样的情况。表空间处于联机状态,而其中一个或多个数据文件处于脱机状态。这种情况通常应该避免。使表空间脱机的语法如下:
alter tablespace tablespacename offline | normal | immediate | temporary |
3 将表空间标记为只读
alter tablespace tablespacename [ read only | read write ]
在将表空间标记为只读后,将不能使用DML语句来更改其中的任何对象,但是,可以删除它们。
使表空间只读对备份和还原有好处。ORACLE 了解到表空间内容不能更改,因此不需要重复备份它们。
4 重新调整表空间的大小
要重调表空间的大小,可以向其添加数据文件,也可以调整现有数据文件的大小。如果在创建文件时使用AUTOEXTENT语法。则可以根据需要自动向上重调数据文件的大小。否则,必须使用ALTER DATABASE 命令手动更改:
ALTER DATABASE DATAFILE filename resize a[M|G|T]
如:alter database datafile '/oradata/user02.dbf' resize 10M;
只有文件系统上的空间足够大,向上的重调大小才能成功;只有文件中的空间尚未由分配给段的区间使用时,才能向下重调大小。
要向表空间添加另一个50MB大小的数据文件,主使用下列语法:
alter tablespace storedata
add datafile 'C:\oracle\oradata\orcl11g\storedata_03.dbf ' size 50M;
可以添加自动扩展子句,或在后面使用下列命令自动自动扩展;
alter database datafile ' C:\oracle\oradata\orcl11g\storedata_03.dbf ' autoextend on next 50m maxsize 2g;
这使得文件大小翻番,一次性增加50MB
5 更改警报阈值
实例的MMON进程实时地监视每个表空间的满度。如果表空间的满度超过一定限度,MMON将发生警报。默认方式下,如果表空间的满度超过80%,将发生警报:如果满度超过97%,将发出严重警报。可按多种方式来查看警报,但最简单的方法莫过于查看database control 的数据库主页。
5.2.3删除表空间
要删除表空间,请使用DROP TABLESPACE 命令,语法如下:
DROP TABLESPACE tablespacename [ INCLUDING CONTENTS AND DATAFILES] ;
如果未指定INCLUDING CONTENTS 关键字,但表空间中包含任何对象,那么删除操作将失败。使用这些关键字指示ORACLE 首先删除对象,然后删除表空间。即便如此,在一些环境下同样失败,如果表空间包含的表与另一个表空间的表存在外键关系,而且此表是交表,则删除将失败。
如果未指定AND DATAFILES 关键字,则将删除表空间及其内容,但数据库文件仍保存在磁盘上。ORACLE将不了解它们位于何处,必须使用操作系统命令删除它们。
5.2.4 OMF
有了ORACLE管理的文件(ORACLE-MANAGED FILES,OMF),DBA将不必了解有关文件系统的任何知识。将以完全自动的方式完成数据库文件的创建。要启用OMF,请设置一部分或下列实例参数
DB_CREATE_FILE_DEST
DB_CREATE_ONLINE_LOG_DEST_1
DB_CREATE_ONLINE_LOG_DEST_2
DB_CREATE_ONLINE_LOG_DEST_3
DB_CREATE_ONLINE_LOG_DEST_4
DB_CREATE_ONLINE_LOG_DEST_5
DB_RECOVERY_FILE_DEST
DB_CREATE_FILE_DEST 参数指定所有文件的默认位置。DB_CREATE_ONLINE_LOG_DEST_n参数指定联机重做日志文件的默认位置。DB_RECOVERY_FILE_DEST调协归档重做日志文件和备份文件的默认位置。