一、表空间概念:
表空间(tablespace)是数据库的逻辑划分, 每个数据库至少有一个表空间,叫做系统表空间(system 表空间). 一个表空间只能属于一个数据库。
每个表空间由同一个磁盘上的一个或多个文件组成, 这些文件称为数据文件。
oracle数据库中的数据逻辑的存储在表空间并物理的存储在数据文件中。
二、表空间特性:
a.控制数据库数据磁盘分配。
b.限制用户在表空间中可以使用的磁盘空间大小。
c.表空间具有 online(联机), offline(脱机), readonly, readwrite属性。
修改表空间的属性:
SQL> alter tablespace 表空间名称 属性;
查询表空间状态: SQL> select tablespace_name, status from dba_tablespaces;
注意: system, undo, temp表空间不能设为offline属性.
d.完成部分数据库的备份与恢复
e.表空间通过数据文件来扩大, 表空间的大小等于构成该表空间的所以数据文件的大小只和.
查询表空间与数据文件对应关系:
SQL> select tablespace_name, bytes, file_name from dba_data_files;
三、表空间分类:
a、按数据文件的类型分:
大文件表空间(bigfile tablespace)此为10g新增功能
小文件表空间(smallfile tablespace)此为创建时默认值
大文件表空间的优点有:
1、在一个表空间里只有一个大的数据文件,以后不需要再去管理数据文件;
2、一个大的数据文件相当于1024个小的数据文件,这样一来,在一个块大小为32K时,整个数据库可以达到(4g*32K)128TB,不过在实际环境中还是要受到操作系统的影响;
3、使用一个大的数据文件可以代替多个小数据文件,这样对数据文件的管理就少多了;
4、当打开数据库,发生检查点,执行DBWR进程时使用大文件表空间会增强性能。
大文件表空间的的需要注意有:
1、要使用在ORACLE的ASM(自动存储管理)的存储空间或者分散(striping)存储的LVM中,或者RAID阵列上;
2、不要把大文件表空间建立在不能分散(striping)存储的系统上;
3、不要把大文件表空间建立在没有空间(剩余空间少)的磁盘组上;
4、建立大文件表空间时不推荐建立在不能扩展的存储空间里;
5、大文件表空间只支持本地管理表空间(LMT)和本地段空间管理(ASSM);
6、在临时表空间与回滚段表空间,只能用手动段空间管理;
7、自动扩展数据文件必须是起用的,而且最大文件大小必须是不限制;
8、系统表空间和系统辅助(SYSAUX)表空间不能使用大文件表空间;
9、每个表空间只能包含一个数据文件。如果试图添加新的文件,则会报告 ora-32771 错误;
b、按管理方式分:
本地管理表空间(LMT)
数据字典管理表空间(DMT)
注:从ORACLE9.2起,如果SYSTEM表空间为本地管理的,ORACLE系统就不再允许创建数据字典管理的表空间。但是用户可以使用可移动表空间(transportable tablespace)功能向此数据库中加入一个数据字典管理的表空间,此表空间只能置为只读状态。
c、按使用类型分:
永久段表空间:一般存储数据的表空间。
临时段表空间:一般用来排序和创建索引时使用。
回滚段表空间:用来存放修改中数据的原数据,回滚段表空间是用来保证数据读一致性的。
d、在永久表空间中按存储内容方式分:
系统表空间(SYSTEM TABLESPACE):从10g开始系统表空间默认为本地管理表空间。
系统辅助表空间(SYSAUX TABLESPACE)
非系统表空间
四、表空间操作:
(1)查询用户缺省表空间: SQL> select username, default_tablespace from dba_users;
(2)查询表与存储该表的表空间: SQL> select table_name, tablespace_name from user_tables;
(3)修改用户缺省表空间: SQL> alter user username default tablespace tablespace_name;
(4)将数据从一个表空间移动到另一个表空间: SQL> alter table table_name move tablespace tablespace_name;
//创建临时表空间
create temporary tablespace test_temp
tempfile 'E:\oracle\product\10.2.0\oradata\testserver\test_temp01.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
//创建数据表空间
create tablespace test_data
logging
datafile 'E:\oracle\product\10.2.0\oradata\testserver\test_data01.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
//创建用户并指定表空间
create user username identified by password
default tablespace test_data
temporary tablespace test_temp;
//给用户授予权限
grant connect,resource to username;
//以后以该用户登录,创建的任何数据库对象都属于test_temp 和test_data表空间,这就不用在每创建一个对象给其指定表空间了。
//修改表空间的状态
(1)使表空间脱机
alter tablespace 表空间名 offline;
(2)使表空间联接
alter tablespace 表空间名 online;
(3)只读表空间
alter tablespace 表空间名 read only
(4)可读可写表空间
alter tablespace 表空间名 read write
//查询某表空间下的所有表名
select * from all_tables where tablespace_name='表空间名'
//查询某个表在那个表空间中
select tablespace_name,table_name from user_tables where
table_name='EMP';
//删除表空间
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
//扩展表空间
1.增加数据文件
ALTER TABLESPACE game
ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M;
2.手动增加数据文件尺寸
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'
RESIZE 4000M;
3.设定数据文件自动扩展
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf
AUTOEXTEND ON NEXT 100M MAXSIZE 10000M;
注:整理自网络