在一些大型的数据库应用中,我们需要控制某个用户或者某一组用户其所占用的磁盘空间。这就好像在文件服务器中,需要为每个用户设置磁盘配额一样,以防止硬 盘空间耗竭。所以,在数据库中,我们也需要限制用户所可以使用的磁盘空间大小。为了达到这个目的,我们就可以通过表空间来实现。
我们可以在Oracle数据库中,建立不同的表空间,为其设置最大的存储容量,然后把用户归属 于这个表空间。如此的话,这个用户的存储容量,就受到这个表空间大小的限制。当然,表空间的优势还不仅仅这些,企业对于数据库的性能要求越高,或者数据库 容量越大,则表空间的优势就会越大。
在数据库设计的时候,我们建议数据库管理员按如下顺序设置表空间。
第一步:建立Oracle用户表空间。 在设计数据库的时候,首先需要设计表空间。我们需要考虑,是只建立一个表空间呢,还是需要建立多个表空间,以及各个表空间的存放位置、磁盘限额等等。 到底设计多少个表空间合理,没有统一的说法,这主要根据企业的实际需求去判断。如企业需要对用 户进行磁盘限额控制的,则就需要根据用户的数量来设置表空间。当企业的数据容量比较大,而其又对数据库的性能有比较高的要求时,就需要根据不同类型的数 据,设置不同的表空间,以提高其输入输出性能。
第二步:建立Oracle用户表空间,并制定用户的默认表空间。 在建立用户的时候,我们建议数据库管理员要指定用户的默认表空间。因为我们在利用CREATE 语句创建数据库对象,如数据库表的时候,其默认是存储在数据库的当前默认空间。若不指定用户默认表空间的话,则用户每次创建数据库对象的时候,都要指定表 空间,显然,这并不是很合理。 另外要注意,不同的表空间有不同的权限控制。用户对于表空间A具有完全控制权限,可能对于表空间B就只有查询权限,甚至连连接的权限的都没有。所以,合理为用户配置表空间的访问权限,也是提高数据库安全性的一个方法。 当创建用户时,应该定义它的表空间(default tablespace)。否则,它会使用系统表空间(system tablespace)。这是应该避免的。这是常用的创建用户的一个例子:
CREATE USER XXXXX IDENTIFIED BY xxxxx
PROFILE DEFAULT
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMPTS01
ACCOUNT UNLOCK;
请注意,首先要确认你的数据库里是否有这二个表空间:USERS和TEMPTS01。如果没有,先要创建表空间USERS及TEMPTS01,然后再创建用户。
1 默认的表空间是存放数据的。而临时表空间是存放查询和缓冲区的数据的
2 临时表空间你可以自己创建。如果你不创建指定的话就会默认使用系统自带的临时表空间。
Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。
重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间。
临时表空间的主要作用:
索引create或rebuild
, Order by 或 group by
, Distinct 操作
, Union 或 intersect 或 minus
, Sort-merge joins
, analyze.
创建数据表空间_语法:
CREATE TABLESPACE tablespace_name
DATAFILE 'path/filename' [SIZE integer [K|M]][REUSE]
[AUTOEXTEND[OFF|ON [NEXT integer[K|M]] /*OFF/ON禁止或允许自动扩展数据文件,NEXT指定下次分配给数据文件的磁盘空间*/
[MAXSIZE UNLIMITED|integer[K|M]]]] /*允许分配给数据文件的最大磁盘空间,UMLIMITED没有限制*/
[DEFAULT STORAGE storage_clause] /*为在该表空间创建的对象指定默认的存储参数*/
[ONLINE|OFFLINE] /*空间的可用/不可用设置*/
[LOGGING|NOLOGGING] /*将来的表、索引等是否进行日志处理*/
[PERMANENT|TEMPORARY] /*表空间的状态,永久或临时*/
[EXTENT MANAGEMENT[DICTIONARY| /*如何管理表空间的盘区*/
LOCAL[AUTOALLOCATE|UNIFORM[SIZE integer[K|M]]]]]
创建数据表空间_实例:
创建临时表空间_实例:
创建用户并指定表空间:
给用户授权:
---------------------------------查看用户权限-----------------------
查看所有用户
SELECT * FROM DBA_USERS;
SELECT * FROM ALL_USERS;
SELECT * FROM USER_USERS;
查看用户系统权限
SELECT * FROM DBA_SYS_PRIVS;
SELECT * FROM USER_SYS_PRIVS;
查看用户对象或角色权限
SELECT * FROM DBA_TAB_PRIVS;
SELECT * FROM ALL_TAB_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
查看所有角色
SELECT * FROM DBA_ROLES;
查看用户或角色所拥有的角色
SELECT * FROM DBA_ROLE_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
-------遇到no privileges on tablespace 'tablespace '
引用:
http://baike.baidu.com/view/2973562.html?fromTaglist
http://blog.chinaunix.net/u2/87262/showart_2303056.html