表空间管理

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 '.....' SIZE50m

  EXTENET MANAGEMENT LOCAL AUTOALLOCATE;

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

  AUTOALLOCATE有什么用了?

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

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

  CREATE TABLESPACE xxx DATAFILE '...' SIZE50M

  EXTENT MANAGEMENTLOCAL UNIFORM. SIZE 128k;

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

 表空间对SEGMENTS的控制

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

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

  CREATE TABLESPACE xxx DATAFILE '...' SIZE50m

  EXTENT MANAGEMENT LOCAL

  SEGMENT SPACE MANAGEMENT AUTO;

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

MANAGEMENT AUTO --->SEGMENT SPACE MANAGEMENT MANUAL

 

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

 CREATE TABLESPACE xxx DATAFILE '...' SIZE50m

 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效率,哈哈!追求高效率是我前进的动力。

请使用浏览器的分享功能分享到微信等