深入淺出undo記載03

dotaddjj發表於2011-12-31

這裡自己無意中做了個測試:之前修改undo表空間為手工管理

Sql>alter system set undo_management=manual scope=spfile

Sql>startup force

。。。。。

SQL> insert into xiaoyu.test03 select * from xiaoyu.test03;

insert into xiaoyu.test03 select * from xiaoyu.test03

ORA-01552: 非系統表空間 'USERS' 不能使用系統回退段

SQL> select * from v$rollname;

USN NAME

---------- ------------------------------

0 SYSTEM

……

SQL> show parameter undo;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management string MANUAL

undo_retention integer 900

undo_tablespace string undotbs_test

SQL> select * from v$version where rownum=1;

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

之前網友說過系統表空間可以被用於非系統級事務,看來至少在oracle 10g中就已經不可用了,由於oracle中現在此時只有系統回滾段,事務無法執行。手工管理回滾表空間下,oracle預設不會建立回滾段和上線,而事務也不能佔用系統回滾段。不過自動管理模式下,回滾段會自動建立並上線,在10G自動管理模式下,手工建立的回滾段是無效的,而且也不會顯示在資料字典檢視中。

9Iundo_suppress_errors參數列示在AUM下手工建立回滾段是否返回出錯資訊,true為不返回出錯資訊,false返回出錯資訊,10g中該引數已經丟棄。

SQL> alter system set undo_management=auto scope=spfile;

System altered

SQL> show paramter undo;

SQL> show parameter undo;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management string AUTO

undo_retention integer 900

undo_tablespace string undotbs_test

SQL> select * from v$rollname;

USN NAME

---------- ------------------------------

0 SYSTEM

13 _SYSSMU13$

14 _SYSSMU14$

15 _SYSSMU15$

16 _SYSSMU16$

17 _SYSSMU17$

18 _SYSSMU18$

19 _SYSSMU19$

20 _SYSSMU20$

21 _SYSSMU21$

22 _SYSSMU22$

11 rows selected

正常關閉資料庫undo表空間出現問題:

記得曾經有網友說過啟動資料庫時丟失了回滾段表空間的資料檔案,但是又沒有備份資訊,由於是undo表空間儲存的都是回滾段資訊,可以考慮重建undo表空間。

Sql>shutdown immediate

物理刪除undo表空間所在資料檔案datafile 7

SQL> startup;

ORACLE 例程已經啟動。

Total System Global Area 373293056 bytes

Fixed Size 1249080 bytes

Variable Size 234881224 bytes

Database Buffers 134217728 bytes

Redo Buffers 2945024 bytes

資料庫裝載完畢。

ORA-01157: 無法標識/鎖定資料檔案 7 - 請參閱 DBWR 跟蹤檔案

ORA-01110: 資料檔案 7: 'D:UNDOTBS_TEST02.DBF'

SQL> show parameter undo;

NAME TYPE

------------------------------------ --------------------------------

VALUE

------------------------------

undo_management string

AUTO

undo_retention integer

900

undo_tablespace string

undotbs_test02

SQL> alter database datafile 7 offline drop;

資料庫已更改。

SQL> alter database open;

資料庫已更改。

此時選擇新建undo表空間,切換undo表空間

SQL>create undo tablespace undotbso datafile ‘d:oracleprocduct10.2.0oradataxiaoyuundotbs01.dbf’ size 50M;

Sql> alter system set undo_tablespace=’undotbs’

SQL> drop tablespace undotbs_test02 including contents;

需要等待原undo表空間的回滾段中的事務全部提交,事務稱為非啟用後才能刪除原undo表空間,不然會出現下述錯誤資訊,可以檢視v$rollstat檢視的xact欄位看回滾段上活動的事務數量

drop tablespace undotbs_test02 including contents

ORA-30013: 還原表空間 ' undotbs_test02' 當前正在使用中

Undo表空間過大:

oracle 9i開始選擇AUM管理時,通常undo表空間預設會選擇autoextentd on 自動擴充套件而導致undo表空間過度擴充套件而不能回收,佔用空間過多,可以考慮重建undo表空間,修改預設undo表空間,也可以在同平臺遷移資料庫時,考慮不遷移過大的undo表空間而選擇重建切換。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1057009/,如需轉載,請註明出處,否則將追究法律責任。

相關文章