ORACLE在线切换undo表空间

来源:这里教程网 时间:2026-03-03 16:15:26 作者:

查看原undo相关参数

SHOW PARAMETER UNDO;

  查询数据库undo使用情况

SELECT seg.tablespace_name "Tablespace Name",       ts.bytes / 1024 / 1024 "TS Size(MB)",       ue.status "UNDO Status",       count(*) "Used Extents",       round(sum(ue.bytes) / 1024 / 1024, 2) "Used Size(MB)",       round(sum(ue.bytes) / ts.bytes * 100, 2) "Used Rate(%)"  FROM dba_segments seg,       DBA_UNDO_EXTENTS ue,       (SELECT tablespace_name, sum(bytes) bytes          FROM dba_data_files         GROUP BY tablespace_name) ts WHERE ue.segment_NAME = seg.segment_NAME   and seg.tablespace_name = ts.tablespace_name GROUP BY seg.tablespace_name, ts.bytes, ue.status ORDER BY seg.tablespace_name;

查看 undo 表空间的大小SELECT D.TABLESPACE_NAME,D.FILE_NAME, SUM(D.BYTES) / 1024 / 1024 MB  FROM DBA_DATA_FILES D WHERE D.TABLESPACE_NAME LIKE 'UNDO%' GROUP BY D.TABLESPACE_NAME,D.FILE_NAME;

创建新undo空间

  create undo tablespace undo_x datafile 'f:\ORACLE\ORADATA\XIFENFEI\undo_1-1.dbf' size 10M autoextend on next 10M maxsize 30G; 查询历史undo是否还有事务(包含回滚事务)

SELECT a.tablespace_name,
      a.segment_name,
      b.ktuxesta,
      b.ktuxecfl,
      b.ktuxeusn || '.' || b.ktuxeslt || '.' || b.ktuxesqn trans
 FROM dba_rollback_segs a, x$ktuxe b
WHERE a.segment_id = b.ktuxeusn
  AND a.tablespace_name = UPPER('&tsname')
  AND b.ktuxesta <> 'INACTIVE';

SELECT a.usn,       a.name,       b.status,       c.tablespace_name,       d.addr,       e.sid,       e.serial#,       e.username,       e.program,       e.machine,       e.osuser  FROM v$rollname        a,       v$rollstat        b,       dba_rollback_segs c,       v$transaction     d,       v$session         e WHERE a.usn = b.usn   AND a.name = c.segment_name   AND a.usn = d.xidusn   AND d.addr = e.taddr   AND b.status = 'PENDING OFFLINE';

  --因为有undo_retention参数,所以不能简单的通过确定该sql无事务就可以删除原undo   切换undo表空间(无论是否有事务,均可以切换[最好是无事务时切换],但是不能直接删除原undo表空间)

alter system set undo_tablespace=UNDOTBS2 scope=both;

在rac中运行有可能会报错,但是其实也会改当前实例的默认undo表空间。 ERROR at line 1: ORA-32008: error while processing parameter update at instance SCDB2 ORA-02097: parameter cannot be modified because specified value is invalid ORA-30013: undo tablespace 'UNDOTBS3' is currently in use如果不想报错,应该用下面一句。 alter system set undo_tablespace=UNDOTBS2  sid=' 要修改的实例 ' ;

ALTER SYSTEM SET undo_tablespace='UNDOTBS1' SCOPE=BOTH SID='boss1';

用select instance_name from  V$instance;查看SID 用show parameter undo看看现在默认undo表空间有没有改

alert日志现象,表明原undo还有事务

Sun Jun 17 20:10:45 2012
Successfully onlined Undo Tablespace 7.
[36428] **** active transactions found in undo Tablespace 2 - moved to Pending Switch-Out state.
[36428] active transactions found/affinity dissolution incompletein undo tablespace 2 during switch-out.
ALTER SYSTEM SET undo_tablespace='undo_xifenfei' SCOPE=BOTH;
 
Sun Jun 17 20:11:38 2012
[36312] **** active transactions found in undo Tablespace 2 - moved to Pending Switch-Out state.
Sun Jun 17 20:16:15 2012
[36312] **** active transactions found in undo Tablespace 2 - moved to Pending Switch-Out state.

  --只能表明有事务,就算长时间未出现类似记录,不能证明一定可以删除原undo,因为undo_retention   查询回滚段情况(原undo表空间的回滚段全部offline,可以删除相关表空间)

select tablespace_name,segment_name,status from dba_rollback_segs;

   离线原undo表空间

alter tablespace undotbs1 offline;

  确定原undo回滚段全部offline,直接删除

drop tablespace undotbs1 including contents and datafiles;

  

切换undo表空间一句话: 新建undo几乎是任何时候都可以执行切换undo表空间命令,如果要删除历史undo需要等到该undo空间所有回滚段全部offline.千万别在尚有回滚段处于online状态,强制删除数据文件.

http://blog.itpub.net/29424472/viewspace-1256645/

相关推荐