表空间的扩展

SQL> create tablespace tbs datafile 'd:\u01\app\oracle\oradata\prod\tbs01.dbf' size 1m;

   

表空间已创建。

   

SQL> create table t_1 tablespace tbs as select * from dba_objects;

create table t_1 tablespace tbs as select * from dba_objects

*

第 1 行出现错误:

ORA-01652: 无法通过 8 (在表空间 TBS 中) 扩展 temp 段

   

SQL>

由于表空间太小,存放不下系统表dba_objects,此时我们要对表空间tbs进行扩展,对表空间扩展,其实就是对数据文件扩展:

SQL> select file_id from dba_data_files where tablespace_name='TBS';

   

FILE_ID

----------

11

   

SQL>

SQL> alter database datafile 11 resize 2m;

   

数据库已更改。

   

SQL> create table t_1 tablespace tbs as select * from dba_objects;

create table t_1 tablespace tbs as select * from dba_objects

*

第 1 行出现错误:

ORA-01652: 无法通过 128 (在表空间 TBS 中) 扩展 temp 段

   

可见上面对表空间的扩展还不够大,再扩展到10M:

SQL> alter database datafile 11 resize 10m;

   

数据库已更改。

   

SQL> create table t_1 tablespace tbs as select * from dba_objects;

   

表已创建。

   

SQL>

此时就可以成功创建表T_1且插入数据了。

查看表空间的大小,可以看到已经扩展到了10M

SQL> select file_id,tablespace_name,bytes from dba_data_files where tablespace_name='TBS';

   

FILE_ID TABLESPACE_NAME BYTES

---------- -------------------- ----------

11 TBS 10485760

   

SQL>

一个数据文件,如果是8K的块,最大可以达到32G;当然也和OS有关,WINDOWS FAT32 一个数据文件最大2G,所以它也不可能超过2G。

在创建表空间的时候,给得太小的话,就会报空间不足的错,太大的话,在备份的时候就非常浪费时间,所以最好把表空间设置为自动扩展:

SQL> select file_id,tablespace_name,autoextensible from dba_data_files where tablespace_name='TBS';

   

FILE_ID TABLESPACE_NAME AUTOEX

---------- -------------------- ------

11 TBS NO

   

SQL>

在没有打开的情况下字段autoextensible 为NO,下面打开:

SQL> alter database datafile 11 autoextend on;

   

数据库已更改。

   

SQL> select file_id,tablespace_name,autoextensible from dba_data_files where tablespace_name='TBS';

   

FILE_ID TABLESPACE_NAME AUTOEX

---------- -------------------- ------

11 TBS YES

   

SQL>

打开后字段autoextensible 为YES

在创建数据库的时候,系统自动创建的一些表空间默认为YES,我们自己创建的表空间缺省情况下都是NO。

扩展有一个单位:

SQL> select file_id,tablespace_name,autoextensible,increment_by from dba_data_files where tablespace_name='TBS';

   

FILE_ID TABLESPACE_NAME AUTOEX INCREMENT_BY

---------- -------------------- ------ ------------

11 TBS YES 1

   

SQL>

INCREMENT_BY 字段就是扩展的单位,它指的是数据块的数量。这里是1,表示一次扩展1个数据块。这样扩展就比较麻烦,要扩展稍微大点的空间就要扩展很多次,所以我们可以指定一次扩展多少空间,这样做:

SQL> alter database datafile 11 autoextend on next 5m;

   

数据库已更改。

   

SQL> select file_id,tablespace_name,autoextensible,increment_by from dba_data_files where tablespace_name='TBS';

   

FILE_ID TABLESPACE_NAME AUTOEX INCREMENT_BY

---------- -------------------- ------ ------------

11 TBS YES 640

   

SQL>

一个块8K,640个块正好 是5M,这样,表空间在扩展的时候一次就扩展5M,而不是8K.

   

   

   

   

   

   

posted @ 2013-02-18 14:29  -Bill  阅读(558)  评论(0编辑  收藏  举报