ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle表空间设计理念

Oracle表空间设计理念

原创 Linux操作系统 作者:yyp2009 时间:2009-02-18 15:11:54 0 删除 编辑
SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的。

  典型应用一:控制用户所占用的表空间配额。

  在一些大型的数据库应用中,我们需要控制某个用户或者某一组用户其所占用的磁盘空间。这就好像在文件服务器中,需要为每个用户设置磁盘配额一样,以防止硬盘空间耗竭。所以,在数据库中,我们也需要限制用户所可以使用的磁盘空间大小。为了达到这个目的,我们就可以通过表空间来实现。

  我们可以在Oracle数据库中,建立不同的表空间,为其设置最大的存储容量,然后把用户归属于这个表空间。如此的话,这个用户的存储容量,就受到这个表空间大小的限制。

  典型应用二:控制数据库所占用的磁盘空间。

  有时候,在Oracle数据库服务器中,可能运行的不止一个服务。除了数据库服务器外,可能还有邮件服务器等应用系统服务器。为此,就需要先对Oracle数据库的磁盘空间作个规划,否则,当多个应用程序服务所占用的磁盘空间都无限增加时,最后可能导致各个服务都因为硬盘空间的耗竭而停止。所以,在同一台服务器上使用多个应用程序服务,我们往往需要先给他们进行磁盘空间的规划和分配。各个服务都不能够超过我们分配给他的最大限额,或者超过后及时的提醒我们。只有这样,才能够避免因为磁盘空间的耗竭而导致各种应用服务的崩溃。

  典型应用三:灵活放置表空间,提高数据库的输入输出性能。

  数据库管理员还可以将不同类型的数据放置到不同的表空间中,这样可以明显提高数据库输入输出性能,有利于数据的备份与恢复等管理工作。因为我们数据库管理员在备份或者恢复数据的时候,可以按表空间来备份数据。如在设计一个大型的分销系统后台数据库的时候,我们可以按省份建立表空间。与浙江省相关的数据文件放置在浙江省的表空间中,北京发生业务记录,则记录在北京这个表空间中。如此,当浙江省的业务数据出现错误的时候,则直接还原浙江省的表空间即可。很明显,这样设计,当某个表空间中的数据出现错误需要恢复的时候,可以避免对其他表空间的影响。

  另外,还可以对表空间进行独立备份。当数据库容量比较大的时候,若一下子对整个数据库进行备份,显然会占用比较多的时间。虽然说Oracle数据库支持热备份,但是在备份期间,会占用比较多的系统资源,从而造成数据库性能的下降。为此,当数据库容量比较大的时候,我们就需要进行设置多个表空间,然后规划各个表空间的备份时间,从而可以提高整个数据库的备份效率,降低备份对于数据库正常运行的影响。

  典型应用四:大表的排序操作。

  我们都知道,当表中的记录比较多的时候,对他们进行查询,速度会比较慢。第一次查询成功后,若再对其进行第二次重新排序,仍然需要这么多的时间。为此,我们在数据库设计的时候,针对这种容量比较大的表对象,往往把它放在一个独立的表空间,以提高数据库的性能。

  典型应用五:日志文件与数据文件分开放,提高数据库安全性。

  默认情况下,日志文件与数据文件存放在同一表空间。但是,这对于数据库安全方面来说,不是很好。所以,我们在数据库设计的过程中,往往喜欢把日志文件,特别是重做日志文件,放在一个独立的表空间中,然后把它存放在另外一块硬盘上。如此的话,当存放数据文件的硬盘出现故障时,能够马上通过存放在另一个表空间的重做日志文件,对数据库进行修复,以减少企业因为数据丢失所带来的损失。

  当然,表空间的优势还不仅仅这些,企业对于数据库的性能要求越高,或者数据库容量越大,则表空间的优势就会越大。

  下面,我们就具体来看看Oracle数据库中表空间的处理方式,看其在性能与安全性方面是否有足够的优势与SQL Server数据库抗衡。

  在数据库设计的时候,我们建议数据库管理员按如下顺序设置表空间。

  第一步:建立表空间。

  在设计数据库的时候,首先需要设计表空间。我们需要考虑,是只建立一个表空间呢,还是需要建立多个表空间,以及各个表空间的存放位置、磁盘限额等等。

  到底设计多少个表空间合理,没有统一的说法,这主要根据企业的实际需求去判断。如企业需要对用户进行磁盘限额控制的,则就需要根据用户的数量来设置表空间。当企业的数据容量比较大,而其又对数据库的性能有比较高的要求时,就需要根据不同类型的数据,设置不同的表空间,以提高其输入输出性能。

  第二步:建立用户,并制定用户的默认表空间。

  在建立用户的时候,我们建议数据库管理员要指定用户的默认表空间。因为我们在利用CREATE语句创建数据库对象,如数据库表的时候,其默认是存储在数据库的当前默认空间。若不指定用户默认表空间的话,则用户每次创建数据库对象的时候,都要指定表空间,显然,这并不是很合理。

  另外要注意,不同的表空间有不同的权限控制。用户对于表空间A具有完全控制权限,可能对于表空间B就只有查询权限,甚至连连接的权限的都没有。所以,合理为用户配置表空间的访问权限,也是提高数据库安全性的一个方法。

 

ORACLE表空间及其维护

基本概念
ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构。一
个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库
文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引
、聚簇、回退段和临时段等。
每个ORACLE数据库均有SYSTEM表空间,这是数据库创建时自动创建的。SYSTEM表空间
必须总要保持联机,因为其包含着数据库运行所要求的基本信息(关于整个数据库的数据字
典、联机求助机制、所有回退段、临时段和自举段、所有的用户数据库实体、其它ORACLE
软件产品要求的表)。
一个小型应用的ORACLE数据库通常仅包括SYSTEM表空间,然而一个稍大型应用的ORACL
E数据库采用多个表空间会对数据库的使用带来更大的方便。
作用
表空间的作用能帮助DBA用户完成以下工作:
1.决定数据库实体的空间分配;
2.设置数据库用户的空间份额;
3.控制数据库部分数据的可用性;
4.分布数据于不同的设备之间以改善性能;
5.备份和恢复数据。
用户创建其数据库实体时其必须于给定的表空间中具有相应的权力,所以对一个用户来
说,其要操纵一个ORACLE数据库中的数据,应该:
1.被授予关于一个或多个表空间中的RESOURCE特权;
2.被指定缺省表空间;
3.被分配指定表空间的存储空间使用份额;
4.被指定缺省临时段表空间。
维护
表空间的维护是由ORACLE数据库系统管理员DBA通过SQL*PLUS语句实现的,其中表空间
创建与修改中的文件名是不能带路径的,因此DBA必须在ORACLE/DBS目录中操作。
1.新表空间的创建
语法格式:CREATE TABLESPACE 表空间名
DATAFILE 文件标识符[,文件标识符]...
[DEFAULT STORAGE(存储配置参数)]
[ONLINE\OFFLINE];
其中:文件标识符=’文件名’[SIZE整数[K\M][REUSE]
2.修改表空间配置
语法格式:ALTER TABLESPCE 表空间名
(ADD DATAFILE 文件标识符[,文件标识符]...
\RENAME DATAFILE ’文件名’[,’文件名’]...
TO ’文件名’[,’文件名’]...
\DEFAULT STORAGE(存储配置参数)
\ONLINE\OFFLINE[NORMAL\IMMEDIATE]
\(BEGIN\END)BACKUP);
3.取消表空间
语法格式:DROP TABLESPACE表空间名[INCLUDING CONTENTS];
4.检查表空间使用情况
(1)检查当前用户空间分配情况
SELECT tablespace_name,SUM(extents),SUM(blocks),SUM(bytes)
FROM user_segments
GROUP BY tablespace_name
(2)a.检查各用户空间分配情况
SELECT owner,tablespace_;
(2)b.检查各用户空间分配情况
SELECT owner,tablespace_name,SUM(extents),SUM(blocks),SUM(bytes)
FROM dba_segments
GROUP BY owner,tablespace_name;
(3) 检查当前用户数据库实体空间使用情况
SELECT tablespace_name,segment_name,segment_type,
COUNT(extent_id),SUM(blocks),SUM(bytes)
FROM user_extents
GROUP BY tablespace_name,segment_name,segment_type;
(4)检查各用户空间使用情况
SELECT owner,tablespace_name,COUNT(extent_id),SUM(blocks),
SUM(bytes) FROM user_extents
GROUP BY owner,tablespace_name;
(5)检查数据库空间使用情况
SELECT tablespace_name,COUNT(extent_id),SUM(blocks),SUM(bytes)
FROM user_extents
GROUP BY tablespace_name;
(6)检查当前用户自由空间情况
SELECT tablespace_name,COUNT(block_id),SUM(blocks),SUM(bytes)
FROM user_free_space
GROUP BY tablespace_name;
(7)检查数据库自由空间情况
SELECT tablespace_name,COUNT(block_id),SUM(blocks),SUM(bytes)
FROM dba_free_space
GROUP BY tablespace_name;
四、结论
表空间是ORACLE数据库系统维护的主要对象,通过本文能详细了解它的基本概念与作用
,并掌握其日常维护知识,从而保证ORACLE数据库系统的正常运行。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13750068/viewspace-555220/,如需转载,请注明出处,否则将追究法律责任。

上一篇: OLTP和OLAP的区别
下一篇: Chunk Size
请登录后发表评论 登录
全部评论

注册时间:2008-10-17

  • 博文量
    330
  • 访问量
    1024096