ITPub博客

首页 > Linux操作系统 > Linux操作系统 > undo表空间的切换

undo表空间的切换

原创 Linux操作系统 作者:jst143 时间:2011-04-06 17:49:02 0 删除 编辑

 

被使用的undo段。
select sum(bytes) from dba_undo_extents where tablespace_name='UNDOTBS1' and status='ACTIVE';
此语句得出要回滚的数据量,如果不为NULL,则undotbs1表空间也不能被删除。而且如果有大量数据的话,系统会比较慢,且使用shutdown immediate将不能关闭数据库,且重新启动数据库后smon仍要继续回滚undotbs1中的数据。因为smon管理回滚及段的分配,此时集中处理回滚,将很少进行段的分配,那么会造成数据库慢。

可以切换使用一个undo表空间到另一个undo表空间。因为UNDO_TABLESPACE初始化参数是一个动态参数,可以使用ALTER SYSTEM SET语句分配一个新的undo表空间。下列语句有效地切换至一个新的undo表空间

--删除当前正在undotbs1中的事务(特别注意是否是能删除要进行确认),应在空闲时使用
select s.sid From v$transaction t,v$session s where t.addr=s.taddr;
kill

SQL> create undo tablespace undotbs3 datafile '/dev/rlv_04_210';  --undo表空间不能使用ASSM,也不能指定UNIFORM. SIZE;缺省为LMT
SQL> alter tablespace undotbs3 add datafile '/dev/rlv_04_211';
SQL> alter tablespace undotbs3 add datafile '/dev/rlv_04_212';
SQL> alter tablespace undotbs3 add datafile '/dev/rlv_04_213';
SQL> alter tablespace undotbs3 add datafile '/dev/rlv_04_214';

SQL> alter system set undo_tablespace='undotbs3' sid='stat1';

--删除undotbs1表空间
alter tablespace undotbs1 offline;
drop tablespace undotbs1;

切换操作不等待老的undo表空间中的事务处理提交。如果在老的undo表空间中有任何pending transactions,老的undo表空间进入pending offline方式(状态)。在这个方式中,可以继续执行已存在的事务处理,但对于新的用户事务处理而言,不能在这个undo表空间中存储undo记录。

例子:
一、undo表空间中无事务存在
1.创建新的undo表空间
SQL> select count(*) from v$transaction;
  COUNT(*)
----------
         0
create undo tablespace undotbs3 datafile '/dev/vgqryb02/rlv_08_rbs_003';
alter system set undo_tablespace='undotbs3';
alter tablespace undotbs1 offline;
drop tablespace undotbs1;

2.切换回原undo表空间
create undo tablespace undotbs1 datafile '/dev/vgqryb01/rlv_08_rbs_001';
alter tablespace undotbs1 add datafile '/dev/vgqryb01/rlv_08_rbs_002';
SQL> select count(*) from v$transaction;
  COUNT(*)
----------
         0
alter system set undo_tablespace='undotbs1';
alter tablespace undotbs3 offline;
drop tablespace undotbs3;

二、undo表空间中有事务存在
1.可能时,删除存在的事务
SQL> select count(*) from v$transaction;
  COUNT(*)
----------
         5
SQL> select p.SPID from v$session s,v$process p where s.PADDR=p.ADDR and s.SID in (select s.sid From v$transaction t,v$session s where t.addr=s.taddr);
SPID
------------
24509
706
16329
21467
19335
在主机上,kill掉对应的进程:
$kill -9 24509
$kill -9 706
$kill -9 16329
$kill -9 21467
$kill -9 19335
SQL> select count(*) from v$transaction;
  COUNT(*)
----------
         0
2.创建新的undo表空间
create undo tablespace undotbs3 datafile '/dev/vgqrya02/rlv_08_rbs_003';
alter system set undo_tablespace='undotbs3';
alter tablespace undotbs1 offline;
drop tablespace undotbs1;
3.切换回原undo表空间
create undo tablespace undotbs1 datafile '/dev/vgqrya01/rlv_08_rbs_001';
alter tablespace undotbs1 add datafile '/dev/vgqrya01/rlv_08_rbs_002';
SQL> select count(*) from v$transaction;
  COUNT(*)
----------
         0
alter system set undo_tablespace='undotbs1';
alter tablespace undotbs3 offline;
drop tablespace undotbs3;

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kinglht/archive/2007/09/04/1771661.aspx

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

上一篇: SQL*PLUS 环境变量
下一篇: 重建undo tablespace
请登录后发表评论 登录
全部评论

注册时间:2010-05-06

  • 博文量
    109
  • 访问量
    139180