管理Oracle的undo表空间和temp表空间

时间:2023-01-16 21:42:16

当对数据库中的表进行查询时,使用undo表空间暂存查询结果(oracle8i为rollback表空间),通常情况下结果集越大undo表空间也会增加。在oracle9i中提供了一个AUM(Auto UNDO Managment)工具来自动管理undo表空间,但大量事实发现,aum只能自动增加表空间,收缩表空间的功能很不理想(这一点上个人感觉还不如oracle8i手工管理rollback表空间方便)。 于是导致以上问题的出现。

解决的方法如下:

一、针对temp表空间

temp表空间的重建比较简单,不需要关闭数据库。步骤如下:

1。以system用户进入;

2.create temporary tablespace  TEMP2 TEMPFILE ‘/oracle/u01/oracle/oradata/BIZDB/temp02.dbf’ SIZE 512M REUSE AUTOEXTEND ON NEXT  640K MAXSIZE UNLIMITED;   –创建中转临时表空间
3.alter database default  temporary tablespace  temp2; –改变缺省临时表空间 为刚刚创建的新临时表空间temp2
4.drop tablespace temp including contents and datafiles;–删除原来临时表空间
5.create temporary tablespace  TEMP TEMPFILE ‘/oracle/u01/oracle/oradata/BIZDB/temp01.dbf’ SIZE 512M REUSE AUTOEXTEND ON NEXT  640K MAXSIZE UNLIMITED;   –重新创建临时表空间
6.alter database default  temporary tablespace  temp; –重置缺省临时表空间为新建的temp表空间
7.drop tablespace temp2 including contents and datafiles;–删除中转用临时表空间
8.alter user narrowad temporary tablespace temp;   –重新指定用户表空间为重建的临时表空间
完成!

二、undo表空间

重建undo表空间比较复杂,需要关闭数据库,并需要sysdba权限来操作。步骤如下:

1。先以system重户登陆;

select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like ‘UNDOTBS1′;    –查询undo表空间目前的大小
select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;    –每个回滚段的状态
create undo tablespace undotbs2 datafile ‘/oracle/u01/oracle/oradata/BHVHDB/undotbs02.dbf’ SIZE 2000M; –创建一个新的undotbs2表空间

关掉数据库
以sysdba权限登陆:

sqlplus /nolog
connect / as sysdba
startup mount
alter database open;
show parameter undo    –查看当前undo表空间的参数
select name from  v$tablespace; –查看当前在线的所有表空间

alter system set undo_tablespace=undotbs2 scope=both;    //在执行该步骤时如果出现错误 则表示在启动数据库时加载的不是spfile配置文件 而是init文件。因为该命令需要同时在数据库中修改undo表空间的指向,也需要修改spfile配置文件中的参数指向。以上错误的解决办法如下:执行create spfile from pfile;   在系统配置中增加spfile的指向

关掉数据库

sqlplus /nolog
connect / as sysdba
startup mount
alter database open;

show parameter undo

select name from  v$tablespace;

alter system set undo_tablespace=undotbs2 scope=both;    //该步骤应该执行正确

select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;    等待原UNDO表空间所有UNDO SEGMENT OFFLINE

drop tablespace undotbs1 including contents and datafiles;

胜利完成!