oracle表空间设计基本原则
 
1、系统数据与应用数据必须存储于不同的表空间。
2、按照应用划分数据,不同应用的数据应存储于不同的表空间。
3、表和索引分离,需存储在不同的表空间,以便分布到不同的数据文件和硬盘上,并分别进行不同的物理存储参数优化,减少磁盘I/O的竞争。
4、相对静态的表和频繁变动的表分开存放在不同的表空间,以便分别进行不同的物理参数优化。
5、为中间表单独设计表空间,可以不考虑备份。
6、采用临时表空间组技术,提高大批量数据处理效率。
 
-----原链接:http://blog.itpub.net/31429550/viewspace-2149226/
 
 

Oracle 表空间设计理念

SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

第一步:建立表空间。

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

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

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

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

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


oracle 创建一个用户并指定默认表空间和临时表空间

1. 创建临时表空间

SQL> create temporary tablespace test1temp 
tempfile '/home/u01/app/oracle/oradata/ytzx/test1temp01.dbf' 
size 10240m 
autoextend on next 1024m
 maxsize 20480m
extent management local  ;

2. 创建数据表空间

SQL> create tablespace test1
logging
datafile '/home/u01/app/oracle/oradata/ytzx/test1.dbf'
size 10240M --50-100G
autoextend on next 2000M 
maxsize unlimited
extent management local autoallocate 
segment space management auto ;

3.创建用户并制定临时表空间和默认表空间

SQL>create user test1 identified by test1
default tablespace test1
temporary tablespace test1temp;

4.给用户授予权限

 grant connect,resource to test;

 

大神回答:

oracle数据库建表和表空间设计

问:需要建很多表,其中有三张表加001编号各创建100张,每张表记录2天的数据量,数据量最大为2000万,正常在1000万数据量,这样3*100*2000万*1.5k,需要的表空间就很大,现在我想知道怎么设计这些表的建立。是建一个表空间,很多数据文件,将表放入一个表空间,还是分配多个表空间,表放入不同的表空间中。数据库是oracle 11g,性能是16cpu,32G内存,磁盘矩阵。请大家帮忙提供解决方式,解决我在追加悬赏。谢谢了,有需要进一步了解情况的提出来,我会每天晚上查看的。
 
答:这个数据的多少和表空间的选择和你的数据量多少是没有太大关系的,需要统计你的数据量的大小。如果数据量很大,像你说的3*100*2000万*1.5k需要估算一下他是有多少G?这样才好设计表空间的分配。从10g开始有表空间支持一个大的数据文件,由多个文件组成肯定没有一个文件好管理,但是如果出问题了一个大数据文件损坏肯定造成的损失很大。这就是易维护性和安全性的取舍。不知道你们磁盘阵列是怎么做的如果没有raid1,数据又很重要的话,也许添加多个数据文件。但是多个数据文件的添加,每个数据文件的大小又受到OS的影响,这个和DB_block_size的大小又有关系,具体算法我不细讲,结论是单个数据文件最多32G。所以这个时候就看你的数据量大小了,你只说量,但是也许有lob字段之类的我无法估算大小,所以这个你自己算一下,如果需要的数据文件过多的话,你想方便维护也是可以使用大数据文件。sql如下:
SQL> create bigfile tablespace giapblob ----------------表空间名字
2 datafile 'H:\ypx\pic02.dbf' ----------------数据文件名字路径
3 size 204800M ----------------200G的bigfile
4 autoextend on next 1024M -----------------扩展自动1G
5 maxsize unlimited -----------------不限最大
6 extent management local autoallocate; ----------------自动管理分配区间
其中上述只是从管理方便的角度考虑一个表空间的处理方法,一般单个表空间最大限制是1022个数据文件*4M数据块*DB_BLOCK_SIZE=32TB。如果数据量过大,必须采用多表空间。
另外也要考虑需求中的使用性能,如果表数据量过大,比如你们每天2000万,那有没有历史表数据?这个如果是OLAP还好说,OLTP可能要做分区表等等一系列的性能考虑,情况不同选择不同。
 
追问
我想知道如果使用大文件表空间的话,对查询性能有没有影响,不过我准备使用视图将所有历史表创建成一个视图,不知道对查询性能会不会有影响?
还有一个表空间和多个表空间有什么区别吗?我们的总体数据量还是很大的,顶峰时每天的流水记录为1000万+300万,需要保存370天左右,记录放在历史表中。
追答
大文件和多个小文件没有什么性能差异,主要的瓶颈在于I/O。这个取决于你的磁盘阵列和硬盘情况。你说把所有表做一个视图,这个性能就差得离谱了,即使每个表上都有索引,你要选择所有数据也是要走full index scan ,光维护索引就累死了。这样还不如用分区表,然后再建立local索引。
分区表的意义在于均衡I/O,可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能; 改善查询性能,对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。比你说的两天一表既方便了管理(不用每天都去建表),也加快了查询速度(相对于查询所有历史数据的视图来说)。
posted on 2020-02-16 19:50  vinsonLu  阅读(1617)  评论(0编辑  收藏  举报