久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Oracle undo 表空間管理

 憂郁_小剛 2011-05-20
Oracle 的Undo有兩種方式: 一是使用undo 表空間,,二是使用回滾段.

 
  我們通過(guò) undo_management 參數(shù)來(lái)控制使用哪種方式,,如果設(shè)為auto,就使用UNDO 表空間,,這時(shí)必須要指定一個(gè)UNDO 表空間,。 如果設(shè)為manual,系統(tǒng)啟動(dòng)后使用rollback segment方式存儲(chǔ)undo信息,。如果系統(tǒng)沒有指定undo_management,,那么系統(tǒng)默認(rèn)以manual方式啟動(dòng),即使設(shè)置了auto方式的參數(shù),,這些參數(shù)將被忽略。
當(dāng)實(shí)例啟動(dòng)的時(shí)候,,系統(tǒng)自動(dòng)選擇第一個(gè)有效的undo表空間或者是rollback segment,,如果沒有有效的可用的undo表空間或者是回滾段,系統(tǒng)使用system rollback segment,。這種情況是不被推薦的,,當(dāng)系統(tǒng)運(yùn)行在沒有undo的情況下,系統(tǒng)會(huì)在alert.log中記錄一條警告信息,。
 
SQL> show parameter undo
NAME                   TYPE        VALUE
------------------------------------ ----------- ------------------
undo_management          string      AUTO
undo_retention             integer     900
undo_tablespace            string      UNDOTBS1

參考:Oracle undo 管理
 
 

一. UNDO 表空間

下面來(lái)看一下undo 的表空間管理,。先來(lái)查看一下表空間的使用情況:

/* Formatted on 2010/6/23 9:46:58 (QP5 v5.115.810.9015) */
SELECT   a.tablespace_name,
         ROUND (a.total_size) "total_size(MB)",
         ROUND (a.total_size) - ROUND (b.free_size, 3) "used_size(MB)",
         ROUND (b.free_size, 3) "free_size(MB)",
         ROUND (b.free_size / total_size * 100, 2) || '%' free_rate
  FROM   (  SELECT   tablespace_name, SUM (bytes) / 1024 / 1024 total_size
              FROM   dba_data_files
          GROUP BY   tablespace_name) a,
         (  SELECT   tablespace_name, SUM (bytes) / 1024 / 1024 free_size
              FROM   dba_free_space
          GROUP BY   tablespace_name) b
 WHERE   a.tablespace_name = b.tablespace_name(+);

TABLESPACE_NAME      total_size(MB) used_size(MB) free_size(MB) FREE_RATE
-------------------- -------------- ------------- ------------- --------------

SYSAUX                   580       545.187        34.813  6%
UNDOTBS1                 90        23.875        66.125  73.47%
DAVE                      20          6.25         13.75  68.75%
USERS                     10         8.375         1.625  16.25%
SYSTEM                   960       951.062         8.938  93%

從結(jié)果我們看到UNDO 表空間已經(jīng)用了23.875M。 我們看一下這使用的23M空間里空閑和非空閑比例:
/* Formatted on 2010/6/23 9:49:53 (QP5 v5.115.810.9015) */
  SELECT   tablespace_name, status, SUM (bytes) / 1024 / 1024 "Bytes(M)"
    FROM   dba_undo_extents
GROUP BY   tablespace_name, status;

TABLESPACE_NAME      STATUS      Bytes(M)
-------------------- --------- ----------
UNDOTBS1             UNEXPIRED     9.1875
UNDOTBS1             EXPIRED      13.6875

我們看一下查詢的結(jié)果,,UNEXPIRED 和EXPIRED 是已使用的undo 表空間,,其中expired 說(shuō)明是已經(jīng)過(guò)期的數(shù)據(jù),也就是15分鐘(默認(rèn)情況)以外的數(shù)據(jù),,以被覆蓋,,可以認(rèn)為是空閑的。
 
在此補(bǔ)充一點(diǎn)知識(shí):
采用UNDO 表空間時(shí),,會(huì)有一個(gè)參數(shù)UNDO_RETENTION,,該參數(shù)用來(lái)指定undo 記錄保存的最長(zhǎng)時(shí)間,以秒為單位,,是個(gè)動(dòng)態(tài)參數(shù),,完全可以在實(shí)例運(yùn)行時(shí)隨時(shí)修改,通常默認(rèn)是900 秒,,也就是15 分鐘,。

undo_retention 只是指定undo 數(shù)據(jù)的過(guò)期時(shí)間,并不是說(shuō),,undo 中的數(shù)據(jù)一定會(huì)在undo表空間中保存15 分鐘,,比如說(shuō)剛一個(gè)新事務(wù)開始的時(shí)候,如果undo 表空間已經(jīng)被寫滿,,則新事務(wù)的數(shù)據(jù)會(huì)自動(dòng)覆蓋已提交事務(wù)的數(shù)據(jù),,而不管這些數(shù)據(jù)是否已過(guò)期,因此呢,,這就又關(guān)聯(lián)回了第一點(diǎn),,當(dāng)你創(chuàng)建一個(gè)自動(dòng)管理的undo 表空間時(shí),還要注意其空間大小,,要盡可能保證undo 表空間有足夠的存儲(chǔ)空間,。

undo_retention 中指定的時(shí)間一過(guò),已經(jīng)提交事務(wù)中的數(shù)據(jù)就立刻無(wú)法訪問(wèn),,它只是失效,,只要不被別的事務(wù)覆蓋,,它會(huì)仍然存在,并可隨時(shí)被flashback 特性引用,。如果你的undo表空間足夠大,,而數(shù)據(jù)庫(kù)又不是那么繁忙,那么其實(shí)undo_retention 參數(shù)的值并不會(huì)影響到你,,哪怕你設(shè)置成1,,只要沒有事務(wù)去覆蓋undo 數(shù)據(jù),它就會(huì)持續(xù)有效,。因此呢,,這里還是那句話,要注意undo 表空間的大小,,保證其有足夠的存儲(chǔ)空間,。

只有在一種情況下,undo 表空間能夠確保undo 中的數(shù)據(jù)在undo_retention 指定時(shí)間過(guò)期前一定有效,,就是為undo 表空間指定Retention Guarantee,指定之后,,oracle 對(duì)于undo 表空間中未過(guò)期的undo 數(shù)據(jù)不會(huì)覆蓋,,例如:
SQL> Alter tablespace undotbs1 retention guarantee;
 
禁止undo 表空間retention guarantee,例如:
SQL> Alter tablespace undotbs1 retention noguarantee;
 
總結(jié)一下:
UNDO 表空間是會(huì)被重用的,只有當(dāng)事務(wù)沒結(jié)束,或開了retention guarantee,或在undo_retention時(shí)間內(nèi)不能被重用,。
在undo_retention規(guī)定的時(shí)間內(nèi),,數(shù)據(jù)都是有效的,過(guò)期后都會(huì)設(shè)為無(wú)效,,狀態(tài)被改為Expired,,這些回滾段將會(huì)被看作Free Space。但是只要數(shù)據(jù)沒有被覆蓋就可以使用,。如果空間已滿,,新事務(wù)的數(shù)據(jù)會(huì)自動(dòng)覆蓋掉已經(jīng)提交的事務(wù)數(shù)據(jù),即使在undo_retention的時(shí)間內(nèi),。除非指定Retention Guarantee模式,,才能保證在undo_retention內(nèi)不被覆蓋。
 
 
二. UNDO 表空間滿了的處理方法

2.1 先模擬UNDO 表空間滿的情況

SQL>  alter system set undo_retention=10800; -- 3個(gè)小時(shí)
系統(tǒng)已更改,。
SQL> create undo tablespace undo datafile 'F:\backup\undo.dbf' size 1m ;
表空間已創(chuàng)建,。
SQL> alter tablespace undo retention guarantee;
表空間已更改。
SQL> alter system set undo_tablespace=undo;
系統(tǒng)已更改,。
SQL> create table DBA(id number);
表已創(chuàng)建,。
SQL> begin
  2  for i in 1 .. 100000 loop
  3  insert into dba values(i);
  4  commit;
  5  end loop;
  6  end;
  7  /
begin
*
第 1 行出現(xiàn)錯(cuò)誤:
ORA-30036: 無(wú)法按 8 擴(kuò)展段 (在還原表空間 'UNDO' 中)
ORA-06512: 在 line 3

2.2 處理方法
處理方法有兩種,一是添加undo 表空間的數(shù)據(jù)文件,,二是切換UNDO tablespace. 這種情況下多用在undo 表空間已經(jīng)非常大的情況,。

2.2.1 增加數(shù)據(jù)文件
SQL> ALTER TABLESPACE undo ADD DATAFILE 'F:\backup\undo02.dbf' size 100M reuse;
表空間已更改,。
SQL> begin
  2  for i in 1..100000 loop
  3  insert into dba values(1);
  4  commit;
  5  end loop;
  6  end;
  7  /
PL/SQL 過(guò)程已成功完成。
 
2.2.2 切換UNDO 表空間

1,、建立新的表空間UNDOTBS2
SQL> CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'F:\backup\undo03.dbf' size 100M reuse;
表空間已創(chuàng)建,。

2、切換到新建的UNOD表空間上來(lái),操作如下
SQL> alter system set undo_tablespace=UNDOTBS2 scope=both;
系統(tǒng)已更改,。

3,、將原來(lái)的UNDO表空間,置為脫機(jī):
SQL> alter tablespace UNDO offline;

表空間已更改。

4,、刪除原來(lái)的UNDO表空間:
SQL> drop tablespace UNDO including contents AND DATAFILES CASCADE CONSTRAINTS ;
表空間已刪除,。

如果只是drop tablespace UNDO ,則只會(huì)在刪除控制文件里的記錄,,并不會(huì)物理刪除文件,。
Drop undo表空間的時(shí)候必須是在未使用的情況下才能進(jìn)行。如果undo表空間正在使用(例如事務(wù)失敗,,但是還沒有恢復(fù)成功),,那么drop表空間命令將失敗。在drop表空間的時(shí)候可以使用including contents,。
 
 

三. UNDO 表空間損壞的恢復(fù)方法

一般Undo 表空間損壞的情況下,,數(shù)據(jù)庫(kù)都已不能正常打開了。啟動(dòng)時(shí)都會(huì)報(bào)類似如下的錯(cuò)誤:

ORA-01157: cannot identify/lock data file 12 - see DBWR trace file
ORA-01110: data file 12: '/d01/oramtest/proddata/undo01.dbf'

 要想解決問(wèn)題,,必須重建UNDO 表空間,,但是如果不open, 就不能重建創(chuàng)建undo 表空間,。 所以可以先用系統(tǒng)默認(rèn)的undo 表空間:system rollback segment 來(lái)啟動(dòng)數(shù)據(jù)庫(kù),,再創(chuàng)建UNDO 表空間。
 
3.1 創(chuàng)建pfile 文件
SQL> create pfile='F:\initorcl.ora' from spfile;
文件已創(chuàng)建,。
3.2 修改pfile文件
#*.undo_tablespace='UNDOTBS1'
#*.undo_management='AUTO'
undo_management='MANUAL'
rollback_segments='SYSTEM'

3.3 啟動(dòng)數(shù)據(jù)庫(kù)至Mount 狀態(tài)
SQL> STARTUP MOUNT pfile='F:\initorcl.ora' ;

3.4 offline drop undo 表空間
 SQL> ALTER DATABASE DATAFILE 'D:\app\Administrator\oradata\orcl\UNDOTBS01.DBF' OFFLINE DROP;

3.5 open 數(shù)據(jù)庫(kù)
SQL> ALTER DATABASE OPEN;

3.6 刪除舊的undo 表空間
SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS;  
注:該命令不會(huì)刪除物理文件,。 要想一起刪除物理文件需要 AND DATAFILES CASCADE CONSTRAINTS ;
如:  drop tablespace UNDOTBS1 including contents AND DATAFILES CASCADE CONSTRAINTS ;

3.7 創(chuàng)建新的UNDO 表空間

SQL> create undo tablespace undotbs1 datafile 'D:\app\Administrator\oradata\orcl\UNDOTBS01.DBF' size 100M ;
create undo tablespace undotbs1 datafile 'D:\app\Administrator\oradata\orcl\UNDOTBS01.DBF' size 100M
*
第 1 行出現(xiàn)錯(cuò)誤:
ORA-01119: 創(chuàng)建數(shù)據(jù)庫(kù)文件 'D:\app\Administrator\oradata\orcl\UNDOTBS01.DBF'時(shí)出錯(cuò)
ORA-27038: 所創(chuàng)建的文件已存在
OSD-04010: 指定了 <create> 選項(xiàng), 但文件已經(jīng)存在

因?yàn)槲覀冎皠h除時(shí)并沒有刪除物理文件,,所以在建同名文件時(shí)就會(huì)報(bào)錯(cuò),。 我們可以加上REUSE 參數(shù)。 只要文件不在使用,,就可以重寫已經(jīng)存在的文件,。

SQL> create undo tablespace undotbs1 datafile 'D:\app\Administrator\oradata\orcl\UNDOTBS01.DBF' size 100M reuse;
表空間已創(chuàng)建。

3.8  shutdown 數(shù)據(jù)庫(kù) 并將pfile 改回
SQL> select name,issys_modifiable from v$parameter where name='undo_management' or name='rollback_segments';
NAME             ISSYS_MOD
--------------------     ---------
rollback_segments    FALSE
undo_management    FALSE

從上面查詢的結(jié)果,,可以知道修改這2個(gè)參數(shù)必須重啟數(shù)據(jù),,所以還是shutdown 吧。

SQL> shutdown immediate

3.9 修改pfile 參數(shù)
*.undo_tablespace='UNDOTBS1'
*.undo_management='AUTO'
#undo_management='MANUAL'
#rollback_segments='SYSTEM'

3.10 用剛才修改的pfile 啟動(dòng)數(shù)據(jù)庫(kù),并創(chuàng)建spfile
SQL> startup pfile='F:\initorcl.ora' ;
SQL> create spfile from pfile='F:\initorcl.ora';

3.10 再次shutdown,,用spfile 啟動(dòng).
SQL> shutdown immediate
SQL> startup
 
 
一般數(shù)據(jù)文件損壞的情況也可以采用類似的方法,, 先啟動(dòng)到mount, 在將損壞的數(shù)據(jù)文件offline drop,。 在open 數(shù)據(jù)庫(kù),,drop 掉損壞的數(shù)據(jù)文件。 當(dāng)然這種做法有數(shù)據(jù)丟失,。 能恢復(fù)的話,,盡量恢復(fù)。
 
 
本文來(lái)自CSDN博客,,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/tianlesoftware/archive/2010/06/23/5689558.aspx

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多