Oracle数据库--入门学习--表空间tablespace详解

来源:互联网 发布:在线编程测试平台 编辑:程序博客网 时间:2024/06/11 22:14
SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。
Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。
可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的。

Oracle数据库中表空间的处理方式
在数据库设计的时候,我们建议数据库管理员按如下顺序设置表空间。   
第一步:建立Oracle用户表空间。在设计数据库的时候,首先需要设计表空间。我们需要考虑,是只建立一个表空间呢,还是需要建立多个表空间,以及各个表空间的存放位置、磁盘限额等等。到底设计多少个表空间合理,没有统一的说法,这主要根据企业的实际需求去判断。如企业需要对用户进行磁盘限额控制的,则就需要根据用户的数量来设置表空间。当企业的数据容量比较大,而其又对数据库的性能有比较高的要求时,就需要根据不同类型的数据,设置不同的表空间,以提高其输入输出性能。   
第二步:建立Oracle用户表空间,并制定用户的默认表空间。在建立用户的时候,我们建议数据库管理员要指定用户的默认表空间。因为我们在利用CREATE语句创建数据库对象,如数据库表的时候,其默认是存储在数据库的当前默认空间。若不指定用户默认表空间的话,则用户每次创建数据库对象的时候,都要指定表空间,显然,这并不是很合理。   
另外要注意,不同的表空间有不同的权限控制。用户对于表空间A具有完全控制权限,可能对于表空间B就只有查询权限,甚至连连接的权限的都没有。所以,合理为用户配置表空间的访问权限,也是提高数据库安全性的一个方法。

一个用户可以使用一个或多个表空间,一个表空间也可以供多个用户使用。用户和表空间没有隶属关系,表空是一个用来管理数据存储逻辑概念,表空间只是和数据文件发生关系,数据文件是物理的,一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间。
用户属于数据库实例的,在一个实例下不能同名用户。但在一oracle服务器,可以创建多个实例,只要你的机器配置够用就可以。因为一个实例启动起码需要100多兆内存的。所以在一oracle服务器上可以存在多个同名用户,他们是属于不同数据库实例,他们对应使用的表空间在不同的实例上。

笔者数据库版本(oracle 10g)

下面是操作表空间的完整sql语句,部分文件名和路径需要读者自行更改,特此声明!

/*创建表空间datafile--数据文件/tempfile--临时文件autoextend--自动延伸 : on--开启/off--关闭permanent--永久的表空间/temporary--暂时的表空间logging--在表空间中设置表、索引和切割区的记录属性/nologging--在表空间中不设置记录属性,即不会产生Undo和Redo记录文件online--可以使用 /offline--不可以使用*/create tablespace jdbc_orc2 datafile'C:\oracle\product\10.1.0\oradata\niit\java_db03.dbf' size 100mautoextend on next 100m maxsize 2048mdefault storage (initial 10m next 1m)permanent online logging;/*      修改表空间记录属性--alter*/alter tablespace jdbc_orcl nologging;alter tablespace jdbc_orcl logging;/*  添加数据文件--add datafile建立表空间时如果约束了表空间的大小,那么可能一段时间后表空间会被装满,这时需要给表空间添加数据文件--add datafilemaxsize unlimited:最大空间不受限制*/alter tablespace jdbc_orcl add datafile'C:\oracle\product\10.1.0\oradata\niit\java_db02.dbf' size 100m reuseautoextend on next 100m maxsize unlimited;/*      删除表空间--drop      删除表空间但是不删除数据文件*/drop tablespace jdbc_orcl;/*      删除表空间以及数据文件*/drop tablespace jdbc_orc2 including contents and datafiles;/*      在表空间内创建表      如果建表之时不指定表空间,则建在默认表空间内(users)*/create table tb_test3(t_id varchar(2),t_name varchar(10))tablespace jdbc_orc2;



0 0
原创粉丝点击