程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> undo表空間的切換

undo表空間的切換

編輯:關於SqlServer

被使用的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; 



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved