ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 表空间管理

表空间管理

原创 Linux操作系统 作者:willlxy 时间:2009-04-14 16:21:17 0 删除 编辑

表空间管理

ORACLE 初始化时,它会默认的创建两个表空间SYSTEM SYSAUX 各自的意义此处不描述

 

首先讲一下,ORACLE 允许DBA 创建多处表空间,这有什么好处了?

1.       把用户的数据从数据字典中分离,可以减少IO竞争

2.       不同应用的数据放在不同的表空间,便于管理

3.       把不同表空间的数据文件放在不同的磁盘上可以减小IO竞争

4.       由于有了多个表空间,这样就可以允放一部分表空间在线,而另一部分表空间离线,而彼此互不影响

5.       对不同的应用数据创建各自表空间,效率更高

6.       方便倍份

接下来 看看 怎么创建表空间?

   首先 在你的数据服务器上创建目录,也就是建一个文件夹用来存放你的数据。   接着你就可以在SQLPLUS 中创建表空间了,运用SQL语法

CREATE TABLESPACE (永久表空间)  || CREATE TEMPORARY TEABLSPACE(临时表空间) .....(不同的参数) 

 

你也可以创建UNDO 表空间,用于倍份用,自己去查查吧

  

以下我们来详细的讲讲

 首先推荐建的表空间 是本地管理表空间

    我们先来看看本地管理空间的好处吧:

    1.它更快,并发的空间操作,(因为他用的是BITMAP

    2.效率更高

    3.空间分配更简单,因为有AUTOALLOCATE

    4.由于是本地管理,对数据字典的信赖很小

  具体的创建语法是:

     CREATE TABLESPACE xxx(NAME)

     DATAFILE '....'

     EXTENTS MANAGEMENT LOCAL

  注:首先,创建永久有空间时,系统默认的就是本地管理,但我们有时需要明确写出这一句话,是因为,当我们想要指定 AUTOALLOCATE || UNIFORM. 子句时,我们必时显示的写出这句。

 表空间对EXTENTS的控制

   CREATE TABLESPACE xxx DATAFILE '.....' SIZE 50m

   EXTENET MANAGEMENT LOCAL AUTOALLOCATE;

   这一句创建了一个表空间 50M大小,并指定是本地管理+AUTOALLOCATE

   AUTOALLOCATE有什么用了?

     让我来告诉你吧,它指定该表空间的最小extent 大小为64K

   替换AUTOALLOCATE 的参数是 UNIFORM,看看以下语句你就知道了

   CREATE TABLESPACE xxx DATAFILE '...' SIZE 50M

   EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 128k;

   这是什么意思?就是在EXTENT bitmap 128K段对应于bitmap的一个BIT

 表空间对SEGMENTS的控制

 创建表空间初了可以控制EXTENT 还可以指定SEGMENT的参数。我们接着来看看吧。

  ORACLE提供了两种控制SEGMENT的方法,一种是自动的,一种是手工的,两者的区别在于,手工的采用freelists去管理SEGMENT中的空(未使用)空间,而自动的采用的是BITMAP,所以自动管理模式效率更高,也是ORACLE推荐使用的。默认情况下,你创建的表空间是SEGMENT 自动管理的。当然显示指出也不是一件坏事。

   CREATE TABLESPACE xxx DATAFILE '...' SIZE 50m

   EXTENT MANAGEMENT LOCAL

   SEGMENT SPACE MANAGEMENT AUTO;

   如果你想人工管理 只要把上面的SEGMENT SPACE

MANAGEMENT AUTO --->SEGMENT SPACE MANAGEMENT MANUAL

 

下面再说一个最重要的东西,BLOCKSIZE

  CREATE TABLESPACE xxx DATAFILE '...' SIZE 50m

  EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 128K

  BLOCKSIZE 16k;

为什么我们要指定BLOCKSIZE了?为什么我们不使用系统标准的BLOCKSIZE了?

 这是个好问题,我们来看看吧,

ORACLEBLOCK SIZE规则是这样的,应该是OS BLOCK SIZE的整数倍,而且应该小于OS IO SIZE,这里的OS IO SIZE是指的什么概念?难道操作系统不是以OS BLOCK SIZE为单位来进行IO的么??

为了提高效率,OS一般都不是以OS BLOCK SIZE来作一次IO,而是在一次IO中读取一定数量的OS BLOCK,在unix平台,一般OS IO64k(这个跟平台有关系,不同的平台是不一样的。)如果ORACLEBLOCK SIZE>OSIO,则意味着如果oracle需要从datafile中读取一个oracle block,则需要OS两次或者更多次的IO,这显然会影响系统的效率。

这下你明白了为什么我们要设BLOCKSIZE了吧,为了提高IO效率,哈哈! 追求高效率是我前进的动力。

参考文献:《Oracle® DatabaseAdministrator's Guide11g Release 1 (11.1)》以及平时坛子上的贴子

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

下一篇: 表空间的更改
请登录后发表评论 登录
全部评论

注册时间:2009-01-07

  • 博文量
    28
  • 访问量
    82686