中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Undo壞塊

發布時間:2020-08-09 06:17:47 來源:ITPUB博客 閱讀:118 作者:不一樣的天空w 欄目:關系型數據庫

一、概述

SQL> show parameter undo

 

NAME                                 TYPE        VALUE

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

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS1

 

1.1 undo_management被設置成MENUAL時使用系統回滾段即將undo records 記錄到SYSTEM 表空間下的SYSTEM段。

SQL> col segment_name format a25

SQL> select segment_name,tablespace_name,bytes,next_extent  from dba_segments where segment_type='ROLLBACK';

 

SEGMENT_NAME              TABLESPACE_NAME                     BYTES NEXT_EXTENT

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

SYSTEM                    SYSTEM                             393216       57344

 

  通過上面的這條語句,我們查到了這個用于rollback system segment 存在于system 表空間。 默認情況下,只有一個segment,并且它還比較小,所以,如果使用system 段來存儲undo records。肯定會影響數據庫的性能。 所以Oracle 是建議使用Undo tablespace 來管理undo records

 

1.2 undo_management設置成AUTO時使用UNDO tablespace來管理回滾段。 這個時候,我們將有多個undo segment,并且這些segment 是存放在UNDO 表空間里的。 這樣對DB的性能就會提高。

 

SQL> select segment_name,tablespace_name,bytes,next_extent  from dba_segments where segment_type='TYPE2 UNDO';

 

SEGMENT_NAME              TABLESPACE_NAME                     BYTES NEXT_EXTENT

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

_SYSSMU1_3724004606$      UNDOTBS1                          8519680       65536

_SYSSMU2_2996391332$      UNDOTBS1                          8519680       65536

_SYSSMU3_1723003836$      UNDOTBS1                          2228224       65536

_SYSSMU4_1254879796$      UNDOTBS1                          3276800       65536

_SYSSMU5_898567397$       UNDOTBS1                          8519680       65536

_SYSSMU6_1263032392$      UNDOTBS1                          8519680       65536

_SYSSMU7_2070203016$      UNDOTBS1                          8519680       65536

_SYSSMU8_517538920$       UNDOTBS1                          1179648       65536

_SYSSMU9_1650507775$      UNDOTBS1                          8519680       65536

_SYSSMU10_1197734989$     UNDOTBS1                          8519680       65536

 

10 rows selected.

 

SQL>

通過以上SQL的查詢結果,我們可以看出,有10undo segment來存放undo records

以上我們是通過dba_segment視圖查看的結果。而也可以通過v$rollstatv$rollname 兩個視圖來查看信息,這2個視圖會顯示所有rollback段的信息,包括system段和undo段。

SQL> col name format a25

SQL> select s.usn,n.name,s.extents,s.hwmsize,s.status from v$rollstat s, v$rollname n where s.usn=n.usn;

 

       USN NAME                         EXTENTS    HWMSIZE STATUS

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

         0 SYSTEM                             6     385024 ONLINE

         1 _SYSSMU1_3724004606$               3    8511488 ONLINE

         2 _SYSSMU2_2996391332$               3    8511488 ONLINE

         3 _SYSSMU3_1723003836$               4    2220032 ONLINE

         4 _SYSSMU4_1254879796$               4    3268608 ONLINE

         5 _SYSSMU5_898567397$                3    8511488 ONLINE

         6 _SYSSMU6_1263032392$               3    8511488 ONLINE

         7 _SYSSMU7_2070203016$               3    8511488 ONLINE

         8 _SYSSMU8_517538920$                3    1171456 ONLINE

         9 _SYSSMU9_1650507775$               3    8511488 ONLINE

        10 _SYSSMU10_1197734989$              3    8511488 ONLINE

 

11 rows selected.

 

SQL>

 

二、UNDO 損壞的處理

2.1 方法一,使用system segment

提到了一種方法,就是使用SYSTEM 的回滾段步驟如下:

1)用spfile 創建pfile,然后修改參數:

#*.undo_tablespace='UNDOTBS1'

#*.undo_management='AUTO'

#*.undo_tablespace

#*.undo_retention

undo_management='MANUAL'

rollback_segments='SYSTEM'

2)用修改之后的pfile,重啟DB

SQL> STARTUP MOUNT pfile='F:/initorcl.ora' ;

3)刪除原來的表空間,創建新的UNDO 表空間

SQL> drop tablespace undotbs;

SQL> create undo tablespace undotbs1 datafile '/u01/oradata/undotbs1.dbf' size 10M;

4)關閉數據庫,修改pfile參數,然后用新的pfile創建spfile,在正常啟動數據庫。

*.undo_tablespace='UNDOTBS1'

*.undo_management='AUTO'

#undo_management='MANUAL'

#rollback_segments='SYSTEM'

 

2.2. 方法二:跳過損壞的segment

在方法一中,我們使用了system segment 通過第一部分我們了解到,undo segment 有多個,我們可以通過alert log 來查看正在使用的是哪些segment,這些段有可能損壞了。 我們只需要把這些損壞的segment 跳過,先正常啟動DB,在創建新的UNDO 表空間,在切換一下。

1)修改pfile,添加參數:

*._corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$','_SYSSMU13$'

這些字段的值,我們通過alert log 查看。 也可以通過如下命令查看:

#strings system01.dbf | grep _SYSSMU | cut -d $ -f 1 | sort -u

2)用修改之后的pfile啟動DB

 因為跳過了哪些損壞的segment,所以DB 可以正常啟動。

3)創建新的UNDO 表空間,并切換過來

SQL> create undo tablespace undotbs1 datafile '/u01/oradata/undotbs1.dbf' size 10M;

SQL> alter system set undo_tablespace=undotbs1;

SQL> drop tablespace undotbs;

4)修改pfile,創建spfile,并正常啟動

刪除如下:

*._corrupted_rollback_segments='_SYSSMU11$','_SYSSMU12$','_SYSSMU13$'

 

2.3 方法三:使用rman備份恢復

startup mount

 

--檢驗備份是否有壞塊

RMAN> backup validate datafile 22;

 

--查詢信息

RMAN> select * from v$database_block_corruption where file#=22;

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO     CON_ID

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

        22      32120          1                  0 CORRUPT            1


--
修復壞塊

RMAN> blockrecover datafile 22 block 32120 from backupset;

 

--打開數據庫

alter database open;

 

注:其它文件(system/sysaux/用戶數據文件)壞塊也可用這種方式修復

 

2.4 方法四:使用參數_offline_rollback_segments_corrupted_rollback_segments

在沒有備份的情況下,

使用_offline_rollback_segments_corrupted_rollback_segments

1.先把數據文件offline,在mount狀態下執行:

 alter database datafile '/oracle/app/oracle/oradata/cus/undotbs01.dbf' offline; 

alter database open;

 

2.查詢哪些undo段是需要恢復(need recover

select segment_name,status from dba_rollback_segs where status = 'NEEDS RECOVERY';

 

3. 建一個回滾表空間,生成pfile

create undo tablespace undotbs2 datafile '/oracle/app/oracle/oradata/cus/undotbs02.dbf' size 300m;

alter system set undo_tablespace='undotbs2';

create pfile='/home/oracle/pfile.txt' from spfile;

 

4.編輯pfile,添加隱含參數

--根據第2步查詢需要恢復的undo

?*._offline_rollback_segments=('_SYSSMU3_1499641855$','_SYSSMU4_3564003469$',......)

*._corrupted_rollback_segments=('_SYSSMU3_1499641855$',_SYSSMU4_3564003469$',......)

 

5.重新啟動,刪除舊的undo

startup pfile='/home/oracle/ pfile.txt';

drop tablespace undotbs1 including contents and datafiles;

?select segment_name,status from dba_rollback_segs where status = 'NEEDS RECOVERY';


6. 去掉隱含參數,重新啟動數據庫

  pfile.txt文件去掉前面兩個隱含參數_offline_rollback_segments_corrupted_rollback_segments,然后重新啟動數據庫

shutdown immediate;

startup pfile='/home/oracle/pfile.txt';

create spfile from pfile='/home/oracle/pfile.txt';

  shutown immediate;

  startup;

總結

以上就是UNDO 出現故障的幾種處理方法,其中方法二和方法四類似,都是采用參數進行恢復。

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白朗县| 永和县| 松溪县| 金坛市| 郴州市| 莱阳市| 龙江县| 阿勒泰市| 宜州市| 宣恩县| 松桃| 崇左市| 阜平县| 应城市| 北辰区| 闽侯县| 襄城县| 班戈县| 塔城市| 青阳县| 惠来县| 桂平市| 武定县| 玉树县| 定襄县| 邳州市| 扎赉特旗| 漠河县| 四子王旗| 博野县| 循化| 定西市| 府谷县| 佛山市| 昌乐县| 贵港市| 盱眙县| 革吉县| 嘉祥县| 秀山| 郑州市|