代码改变世界

Oracle表空间基础(5)

2016-06-24 13:47  magnes  阅读(255)  评论(0编辑  收藏  举报

一、修改和维护表空间

1、增加表空间容量

可以通过修改表空间数据文件的大小或为表空间添加一个数据文件的方式增加表空间的容量,另外我们还可以使用表空间的自动扩展选项为大文件表空间增加容量。对于本地管理的临时表空间,即无法它增加空间容量,也无法修改它的段空间管理方式。

a、小文件表空间增加容量

# 通过为表空间添加数据文件的方式增加表空间容量
SQL> alter tablespace test
  2  add datafile '/u01/app/oracle/oradata/stdb/test02.dbf' size 10m;
Tablespace altered.

# 使用RESIZE子句增加大文件表空间的容量
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test02.dbf' resize 20m;
Database altered.

b、大文件表空间增加容量

# 使用RESIZE子句增加大文件表空间的容量
SQL> alter tablespace bigtbs resize 20m;
Tablespace altered.

# 使用AUTOEXTEND子句增加大文件表空间的容量
SQL> alter tablespace bigtbs autoextend on next 10m;
Tablespace altered.

2、修改本地管理的临时表空间

可以使用alter tablespace语句为临时表空间添加数据文件,由于无法对临时表空间执行离线操作,所以可以使用离线临时表空间的临时文件的方法来替代。

# 增加临时表空间容量
SQL> alter tablespace lmttmp     
  2  add tempfile '/u01/app/oracle/oradata/stdb/temp03.dbf' size 20m;
Tablespace altered.

# 使临时表空间中的数据文件离线
SQL> alter tablespace lmttmp tempfile offline;
Tablespace altered.

# 使临时表空间中的数据文件在线
SQL> alter tablespace lmttmp tempfile online;
Tablespace altered.

# 删除临时表空间文件
SQL> alter database tempfile '/u01/app/oracle/oradata/stdb/temp03.dbf' drop including datafiles;   
Database altered.

3、收缩本地管理临时表空间

由于执行大的排序操作可能会导致占用相当大的临时表空间,在完成排序后,这些额外的空间并不会被释放,这些空间会被标记成空闲且可被重用的状态。基于这一点,在数据库中允许收缩临时表空间中的未使用的空间。

使用alter tablespace ... shrink space语句可以执行收缩临时表空间的操作,或者使用alter tablespace ... shrink tempfile语句收缩临时表空间当中的临时文件。收缩使得临时表空间有更多的空间可用,同时并不改变该表空间的其他属性。使用keep子句保持临时表空间或临时文件的最小大小。

4、重命名表空间

使用alter tablespace old_new rename to new_name语句重命名表空间,只能够对永久表空间或临时表空间进行重命名的操作。重命名表空间将会在数据字典、控制文件、数据文件的文件头中更新所有对该表空间的引用。表空间重命名的操作不会更新表空间的ID号,所以当更新用户的默认表空间时,通过dba_vusers视图可以查询到更新后的信息。

下列情形将对表空间重命名操作产生影响:

  • 兼容性参数(compatible)必须被设置为10.2.0或者更高;
  • 如果尝试对system,sysaux表空间进行重命名操作,将会产生一个错误;
  • 如果数据文件或表空间离线,表空间的命名操作不会成功,并且会产生一个错误;
  • 如果表空间为只读状态,此时数据字典和控制文件被更新,但数据文件头将无法更新,这将会产生一条错误消息写入告警日志文件;
  • 如果是undo表空间,那么重命名表空间也会更新spfile的信息,如果使用的是pfile的话,需要手动修改undo_tablespace参数;

5、删除表空间

当删除一个表空间时,与该表空间文件相关的指针都将从数据库的控制文件中移除。在删除表空间的操作过程中,可以选择同时删除数据文件,如果仅删除表空间而没有删除数据文件的话,可以再删除操作完成后,然后使用操作系统命令完成删除。

不能在包含活动段的表空间上执行删除表空间的操作。例如,如果表空间上的表当前正在被使用或者表空间包含回滚未提交事务的撤销数据,此时就无法执行删除表空间的操作。在执行删除表空间的操作时,表空间可以在线,也可以离线,但是最好在删除操作之前使表空间离线。

删除表空间及表空间上的段,如果表空间上的表的主键或唯一键被其他表空间上的表引用的话(存在外键约束),可以使用cascade constraints子句执行删除表空间的操作。

drop tablespace ... including contents
drop tablespace ... including contents cascade constraints

删除表空间的同时删除数据文件:

drop tablespace ... including contents and datafiles //该操作将会在数据库告警日志文件里产生一条记录

 

二、管理SYSAUX表空间

当创建数据库时,SYSAUX表空间被安装,SYSAUX表空间作为SYSTEM的一个辅助表孔空间。以前各自使用单独表空间的一些数据库组件现在都被统一存储在SYSAUX表空间中了。如果SYSAUX表空间不可用,数据库的核心功能并不受影响,使用SYSAUX表空间的数据库特性将无法使用或功能受到限制。

通过v$sysaux_occupants视图可以实现对SYSAUX表空间的监控、将某些组件已入或移出SYSAUX表空间、组件空间使用率等信息。SYSAUX表空间内存放的是一些数据库组件,这些组件所占空间的大小就构成了SYSAUX表空间的大小;反过来,组件所占用的空间大小取决于数据库使用了那些功能特性及数据库的工作负载情况。

除此之外,EM(Oracle Enterprise Manager Repository)也会占用较大的SYSAUX表空间。