正確切換undo

正確切換UNDO TABLESPACE

有些時候,我們需要切換undo tablespace,也就是說用一個新的undo tablespace來替換目前的undo tablespace,切換前必須保證被切換的undo tablespace上沒有活動或懸掛的事務,如果有事務活動,那麼切換將有可能導致數據庫hang. 下面給出一個切換的例子:
將現有的undo_b切換到新建的undo_c
1、確認要切換的undo tablespace
SQL> show parameter undo_tablespace
NAME                                 TS Type      VALUE
———————————— ———— ——————————
undo_tablespace                      string       UNDO_B
2、創建新的undo tablespace
SQL> create undo tablespace undo_c datafile size 10M autoextend on next 10M extent management local autoallocate;
Tablespace created.
3、確認當前undo tablespace沒有活動的事務
set linesize 120
SQL> col tablespace_name format a15 heading “Undo.ts.name”
SQL> col segment_name format a20 heading “Undo.Seg.Name”
SQL> col ktuxesta heading “Transaction|State”
SQL> col ktuxecfl format a15 heading “Transaction|desc”
SQL> col ktuxesiz heading “Transaction|Size(Blocks)”
SQL> col trans format a15 heading “Transactions|Num”
SQL> SELECT a.tablespace_name,a.segment_name,b.ktuxesta,b.ktuxecfl,b.ktuxeusn||’.'||b.ktuxeslt||’.'||b.ktuxesqn trans
  2    FROM dba_rollback_segs a,
  3         x$ktuxe b
  4    WHERE a.segment_id = b.ktuxeusn
  5      AND a.tablespace_name = UPPER(‘&tsname’)
  6      AND b.ktuxesta <> ‘INACTIVE’
  7  /
Enter value for tsname: undo_b
old   5:     AND a.tablespace_name = UPPER(‘&tsname’)
new   5:     AND a.tablespace_name = UPPER(‘undo_b’)
no rows selected
如果有活動的事務,類似於下面的輸出,必須等待所有事務結束後,在進行切換:
Enter value for tsname: undo_b
old   5:     AND a.tablespace_name = UPPER(‘&tsname’)
new   5:     AND a.tablespace_name = UPPER(‘undo_b’)
                                     Transaction      Transaction     Transactions
Undo.ts.name    Undo.Seg.Name        State            desc            Num
————— ——————– —————- ————— —————
UNDO_B          _SYSSMU27$           ACTIVE           NONE            27.5.10
4、在確認沒有活動的事務後,執行切換
SQL> alter system set undo_tablespace=undo_c;
System altered.
SQL> show parameter undo_tablespace
NAME              TYPE                             VALUE
—————-  ——————————– ——————————
undo_tablespace   string                            UNDO_C
5、確認undo_b的所有undo segment全部offline;
SQL> select file_id from dba_data_files where tablespace_name=’UNDO_B’;
   FILE_ID
———-
         7
SQL> select segment_name,status from dba_rollback_segs where file_id=7;
Undo.Seg.Name        STATUS
——————– —————-
_SYSSMU21$           OFFLINE
_SYSSMU22$           OFFLINE
_SYSSMU23$           OFFLINE
_SYSSMU24$           OFFLINE
_SYSSMU25$           OFFLINE
_SYSSMU26$           OFFLINE
_SYSSMU27$           OFFLINE
_SYSSMU28$           OFFLINE
_SYSSMU29$           OFFLINE
_SYSSMU30$           OFFLINE
10 rows selected.
這個過程還可以從alert日誌觀察:
Successfully onlined Undo Tablespace 10.
Undo Tablespace 9 successfully switched out.
這裏的9和10代表tablespace的number.
SQL> select ts#,name from v$tablespace;
       TS# Tablespace Name
———- —————
         0 SYSTEM
         1 UNDOTBS1
         2 SYSAUX
         4 USERS
         3 TEMP
         7 IMPTEST
         8 UNDO_A
         9 UNDO_B
        10 UNDO_C
切換完畢.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章