Oracle数据库与SQL Server数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念。Oracle中很多优化都是基于表空间的设计理念而实现的。
Oracle表空间之基本概念
ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。
每个ORACLE数据库均有SYSTEM表空间,这是数据库创建时自动创建的。SYSTEM表空间必须总要保持联机,因为其包含着数据库运行所要求的基本信息(关于整个数据库的数据字典、联机求助机制、所有回退段、临时段和自举段、所有的用户数据库实体、其它ORACLE软件产品要求的表)。
一个小型应用的ORACLE数据库通常仅包括SYSTEM表空间,然而一个稍大型应用的ORACLE数据库采用多个表空间会对数据库的使用带来更大的方便。
Oracle表空间之作用
表空间的作用能帮助DBA用户完成以下工作:
1.决定数据库实体的空间分配;
2.设置数据库用户的空间份额;
3.控制数据库部分数据的可用性;
4.分布数据于不同的设备之间以改善性能;
5.备份和恢复数据。
用户创建其数据库实体时其必须于给定的表空间中具有相应的权力,所以对一个用户来说,其要操纵一个ORACLE数据库中的数据,应该:
1.被授予关于一个或多个表空间中的RESOURCE特权;
2.被指定缺省表空间;
3.被分配指定表空间的存储空间使用份额;
4.被指定缺省临时段表空间。
临时表空间
临时表空间主要用途是在数据库进行排序运算、管理索引、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理。当oracle里需要用到sort的时候,PGA中sort_area_size大小不够时,将会把数据放入临时表空间里进行排序,同时如果有异常情况的话,也会被放入临时表空间,正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段的。注意这里的释放,仅仅是将这些空间标记为空闲,并可重用,真正占用的磁盘空间并没有释放。所以Temp表空间可能会越来越大。 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间。在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。 临时表空间的主要作用:
临时表空间的主要作用:
(1)索引create或rebuild
(2)Order by 或 group by
(3)Distinct 操作
(4)Union 或 intersect 或 minus
(5)Sort-merge joins
(6)analyze 排序是很耗资源的,Temp表空间满了,关键是优化你的语句,尽量使排序减少才是上策.
-- 创建临时表空间: CREATE TEMPORARY TABLESPACE LandRequisitionTempSpace TEMPFILE 'D:\Oracle\oradata\LandRequisition\LANDREQUISITIONTEMPSPACE.DBF' SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE 2048M EXTENT MANAGEMENT LOCAL; -- 创建用户表空间: CREATE TABLESPACE LandRequisitionDataSpace LOGGING DATAFILE 'D:\Oracle\oradata\LandRequisition\LANDREQUISITIONDATASPACE.DBF' SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE 2048M EXTENT MANAGEMENT LOCAL; -- 创建用户并设置默认表空间 -- LandRequisition :创建的帐号名 -- LandRequisition :为设置帐号的密码 CREATE USER LandRequisition IDENTIFIED BY LandRequisition DEFAULT TABLESPACE LandRequisitionDataSpace TEMPORARY TABLESPACE LandRequisitionTempSpace; -- 给用户授予权限: GRANT CREATE SESSION, CREATE ANY TABLE, CREATE ANY VIEW ,CREATE ANY INDEX, CREATE ANY PROCEDURE, ALTER ANY TABLE, ALTER ANY PROCEDURE, DROP ANY TABLE, DROP ANY VIEW, DROP ANY INDEX, DROP ANY PROCEDURE, SELECT ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE TO LandRequisition; -- 将role这个角色授与username,也就是说,使username这个用户可以管理和使用role所拥有的资源 -- 说明 GRANT role TO LandRequisition;
导入数据
imp LandRequisition/LandRequisition file=d:\Landrequisition.dmp full=y;
-----------------------------------------------查看用户权限-----------------------------------------------
-- 查看所有用户:
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 '
alter user userquota 10M[unlimited] on tablespace;



浙公网安备 33010602011771号