表空间


为什么要创建表空间?是为了便于管理,毕竟逻辑存储结构相对于物理存储结构来说,软件管理的可用性会大大提高。比如扩容、改删、迁移等。 以下摘自《数据库系统概念》第五版:表空间也可以作为在数据库之间转移数据的一种办法。譬如,很常见的是每隔一段时间把数据从事务系统转移到数据仓库中去。Oracle允许将一个表空间的所有数据从一个系统转移到另一个系统,仅仅简单地复制文件并从数据字典元数据中输入输出一小部分数据。这些操作比从一个数据库下载数据,然后用一个加载器将数据插入到另一个数据库中比起来块多了。

2012-12-31更新(描述清楚点):
1、表空间是逻辑结构,对开发人员或者用户来说处理逻辑结构更方便、对系统管理员来说逻辑结构不可见,更能保证数据安全性,物理结构则交由数据库本身去管理,这样在重新组织物理存储后(如迁移、更换硬件、更换操作系统)应用程序可以不做任何修改直接使用。
2、 如果没有表空间,庞大的数据库系统中的表、索引等会对应于相应数量的操作系统文件,这对DBA的维护工作来说是无法想象的。
3、表空间的逻辑结构可以突破操作系统或者底层硬件环境(如硬盘大小)对文件大小的限制,



创建表空间



表空间  
建立表空间(一般建N个存数据的表空间和一个索引空间):  

create tablespace 表空间名  
datafile ' 路径(要先建好路径)\***.dbf  ' size *M  
tempfile ' 路径\***.dbf ' size *M  
autoextend on  --自动增长  
--还有一些定义大小的命令,看需要  
 default storage(  
 initial 100K,  
 next 100k,  
); 

例子:创建表空间  
create tablespace DEMOSPACE   
datafile 'E:/oracle_tablespaces/DEMOSPACE_TBSPACE.dbf'   
size 1500M   
autoextend on next 5M maxsize 3000M;  
删除表空间  
drop tablespace DEMOSPACE including contents and datafiles  

创建唯一索引(姓名不能重复)
create unique  index  username_index  ON  t_user (username);
创建组合索引
create index name_time_index  ON  t_user(username,user_time);


create index IDX_O_ORG_ORGNO_ICS on O_ORG (ORG_NO_ICSS)
  tablespace DATA_ICS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
create index IDX_O_ORG_P_ORG_NO on O_ORG (P_ORG_NO)
  tablespace DATA_ICS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table O_ORG
  add constraint P_O_ORG primary key (ORG_NO)
  using index 
  tablespace DATA_ICS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );



注意:



1。Oracle建议要把一个用户的数据分离到多个表空间------------这个分为数据文件和索引文件,把数据和索引分开而来,有利于读取。