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] [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:表示将来的表、索引等是否需要进行日志处理,默认为需要
extent management:指定如何管理表空间的盘区。
dictionary:使用字典表来管理表空间,这是默认设置。
local:指定本地管理表空间
autoallocate:指定表空间由系统管理,用户不能指定盘区尺寸。
uniform:使用size字节的统一盘区来管理表空间。默认的size是1MB。
注意:如果指定了local,就不能指定default storage storage_clause 和temporary。
default storage storage_clause:为在该表空间创建的全部对象指定默认的存储参数。storage_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] )
如:
create tablespace ts_app datafile 'D:\Oracle\oradata\orcl\ts_app.dbf' size 1024M autoextend on next 50M maxsize 2048M; --将创建一个名为“ts_app”的表空间,初始大小为1024M,允许自动扩充,每次扩充50M,最多扩充到2048M。
创建临时表空间时只需要在tablespace前加上temporary,并且将datafile改为tempfile,如:
create temporary tablespace ts_temp tempfile 'D:\Oracle\oradata\orcl\ts_temp.dbf' size 256M autoextend on next 100M maxsize 2048M;
(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)范围-列表分区:首先使用范围方法将数据进行分区,然后在每个分区内,使用列表方法将其分成子分区