undo表空间的切换

被使用的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博客,转载请标明出处:file:///F:/10技术资料(Oracle)/undo表空间的切换%20-%20kinglht的专栏%20-%20CSDN博客.mht

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值