当前位置:K88软件开发文章中心编程全书编程全书01 → 文章内容

Oracle的表空间和区

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 1:52:04

:2012-07-17 15:40:39

本文讲解了Oracle中表空间及分区的种类和创建方法。

1、表空间:表空间是数据库的逻辑划分,一个表空间只属于一个数据库。每个表空间由一个或多个数据文件组成。

表空间中其他逻辑结构的数据存储在这些数据文件中。在Oracle安装完成后,会自动建立多个表空间,
主要有:

(1)System表空间:该表空间用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等。

(2)undo表空间:该表空间是存储撤销信息的表空间。当用户对数据库表进行修改(insert,update,delete)时,Oracle会自动使用undo表空间来临时存放修改前的数据。当所进行的修改完成并提交后,系统根据需要保留修改前数据的时间长短来释放undo表空间的部分空间。

(3)users表空间:该空间是给用户使用的表空间。

(4)temporary表空间:该表空间是供用户临时使用的,如进行排序、汇总等操作时。

可以使用OEM(Oracle Enterprise Manager)管理表空间,也可以使用命令管理表空间。利用OEM管理表空间是非常简单的,只需要根据系统提示进行操作就可以了。利用create tablespace 命令会创建一个读/写表空间,以后可以利用alter tablespace 语句来使表空间脱机或联机、给它添加数据文件或使它成为只读表空间。也可以利用drop tablespace 语句从数据库中撤销表空间。

(1)利用create tablespace命令创建表空间。使用该命令的用户必须具有创建表空间的权限。

语法格式:

create tablespace tablespace_name datafile 'path/fileName' [size integer [K | M]] [reuse]
[autoextend [off | on [next integer [K | M]]] [maxsize [unlimited | integer [K | M]]]]
[minmum extent integer [K | M]]
[default storage storage_clause]
[online | offline]
[logging | nologging]
[permanent | temporary]
[extent management [dictionary | local [autoallocate | uniform [size integer [K | M]]]]]

其中,tablespace_name是将要创建的表空间的名称,该名称在数据库中是唯一的,并且命名必须符合命名规则。

path/fileName: 数据文件的存放路径和名称。当使用关键字reuse时表示若该文件存在,则清除该文件再重新建立该文件;如该文件不存在,则建立新文件。

off/on: 禁止或允许自动扩展数据文件。若选则off, 则禁止自动扩展;若选择on,则允许自动扩展数据文件

next:表示当需要更多的磁盘空间时,一次给数据文件分配的磁盘空间,以KB或MB为单位。

maxsize umlimited | integer[K | M]:指定允许分配给数据文件的最大磁盘空间,其中unlimited表示没有限制。

minmum extent:指定最小的长度,默认为操作系统和数据库块。

online:在创建表空间后使该表空间立即可以被授权用户访问,这是默认设置。

offline:则表示不可用

logging/nologging:表示将来的表、索引等是否需要进行日志处理,默认为需要

permanent:指定表空间将保存永久对象,这是默认设置

temporary:指定表空间将用于保存临时对象

extent management:指定如何管理表空间的盘区。

dictionary:使用字典表来管理表空间,这是默认设置。

local:指定本地管理表空间

autoallocate:指定表空间由系统管理,用户不能指定盘区尺寸。

uniform:使用size字节的统一盘区来管理表空间。默认的size是1MB。

注意:如果指定了local,就不能指定default storage storage_clause 和temporary。

default storage storage_clause:为在该表空间创建的全部对象指定默认的存储参数。

torage_clause的语法格式如下:

storage(
initial integer[K|M]
next integer[K|M]
minextents integer | unlimited
maxextents integer
pctincrease integer
freelists integer
freelist groups integer
optimal [integer[K|M] | null]
)

(2)利用alter tablespace命令管理表空间。

语法格式:

alter tablespace tablespace_name
[add dataFile | tempFile 'path/fileName' [size integer [K | M]] 
[reuse] 
[autoextend [off | on [next integer [K | M]] maxsize [unlimited | integer [K | M]]]]
[rename dataFile 'path/fileName',...n to 'path/fileName',...n]
[default storage storage_clause]
[online | offline [normal | temporary | immediate]]
[logging | nologging]
[read only | write]
[permanent]
[temporary] 

2、分区:在非常大的数据库中,通常可以通过把一个大表的数据分成多个小表来简化数据库的管理,这些小表叫做分区,除了对表分区外,还可以对索引进行分区。分区不仅简化了数据库的管理,还改善了应用性能。在Oracle中,还可以细分分区,创建子分区。

并不是所有的表列都可以进行分区,只有日期型(date)或二进制大对象(blob)等数据类型的表列可以分区。

Oracle有以下几种分区方法:

(1)范围分区:根据列值的范围将行映射到分区。

(2)散列分区:散列分区提供了一种方法,可在指定数量的分区间平均分布数据。这种方法将根据分区关键字的散列值将行映射到分区。

(3)列表分区:列表分区可以显式地控制如何把行映射到分区。

(4)范围-散列分区:首先使用范围方法将数据进行分区,然后在每个分区内,使用散列方法将其分成子分区。

(5)范围-列表分区:首先使用范围方法将数据进行分区,然后在每个分区内,使用列表方法将其分成子分区


Oracle的表空间和区