oracle體系結構梳理---redo和undo檔案解析

lff1530983327發表於2015-01-26

回滾段分類

1.系統回滾段

系統回滾段存放在系統表空間,用於記錄系統資料字典的UNDO---不可以操作,是oracle自己操作的DML 

2.非系統回滾段

undo表空間 用於存放非系統資料字典物件的UNDO

3.延遲迴滾段(defferd rollback segment

system專門一塊區域儲存offline之後的未提交資料,在online之後回滾段即會被撤銷

select * from v$waitstat; ---save undo block   segment header 延遲迴滾段的塊和塊頭

undo表空間可以存在多個,但是隻能使用一個

建立undo表空間

create undo tablespace undotbs02 datafile '/u01/oradata/orcl/undotbs2.dbf' size 20autoextend on.

裸裝置不能自動擴充套件,可以增加資料檔案

alter tablespace undotbs02 add datafile '/u01/oradata/orcl/undo2.dbf' size 20autoextend on;

drop tablespace undotbs2 INCLUDING CONTENTS AND DATAFILES;  ---因為刪除表空間一般只是邏輯上的刪除,所以該語句刪除表空間時可以將物理檔案一起刪除掉

要想刪除一個活動的UNDO TABLESPACE(當前undo),必須進行UNDO  TABLESPACE切換

alter system set undo_tablespace = undotbs2;---切換undo表空間

select tablespace_name,file_name,bytes/1024/1024,autoextensible from dba_data_files;

 

--- undo相關的資料字典和動態效能檢視

決定undo tablespace大小的三個因素

1. db_block_size引數的大小

8K

2. UNDO_RETENTION引數的大小

3每秒鐘產生的undo block的數量

select max(undoblks / ((end_time-begin_time)*24*3600)) from v$undostat;--峰值

select sum(undoblks)/sum((end_time-begin_time)*24*3600from v$undostat;---求平均值

---v$undostat V$undostat是最重要的UNDO資料字典

desc V$undostat

MAXQUERYLEN:這段統計時間內查詢最長的時間,非常重要的值

◎  MAXQUERYID:這段統計時間內查詢最長的時間SQLID,透過它來檢視SQL語句。--根據sql_idv$sqlarea中可以查到具體的sql語句

---DBA_ROLLBACK_SEGS UNDO段的基本資訊的資料字典檢視

 SEGMENT_NAME 

 OWNER 

 TABLESPACE_NAME

 SEGMENT_ID

 FILE_ID

 BLOCK_ID

 INITIAL_EXTENT

 NEXT_EXTENT

 MIN_EXTENTS

 MAX_EXTENTS

 PCT_INCREASE

 STATUS

 INSTANCE_NUM

 RELATIVE_FNO

---V$TRANSACTION 事務表動態效能檢視,它記錄了事務資訊,及回滾的資料量

---DBA_UNDO_EXTENTS 顯示了回滾表空間的每個區的資訊   SEGMENT_NAME   TABLESPACE_NAME  SEGMENT_ID FILE_ID BLOCK_ID

---V$rollstat 記錄 LATCH WAITS GETS 等資訊

---dba_hist_undostat 超過四天的資料可能會放在這裡面

-----=================================================================================

redo log檔案主要用於恢復

select max(lebsz) from x$kccle;---塊大小512K和資料檔案塊大小不一樣,所以在備份時不能一起備份

select distinct block_size from v$archived_log;----歸檔日誌檔案也是512M

redo log檔案特點:

1它記錄著所有的資料改變.

2提供了一種恢復機制

3它有組的概念,一定是成組出現,稱為redo log日誌組

4必須至少有兩組聯機重做日誌檔案

5.LGWR程式來寫入

6組裡的redo log檔案稱為member, 組裡的每個成員有相同的log sequence number(LSN)和相同的大小.

--多路複用

1)推薦至少兩個組,每組至少兩個redo log成員,兩個成員分別放在不同的磁碟上。

2)每組裡面所有的成員,都包含相同的資訊,而且大小相同。

3)每組裡面所有的成員,被LGWR同時更新。

4)每組應該包含同樣成員數量,和同樣的檔案大小,對稱。

ALTER SYSTEM SWITCH LOGFILE;---手動切換日誌組,會建立一個日誌檢查點,是增量檢查點,不是完全檢查點(在shutdown immediate normal關閉資料庫才會觸發完全檢查點)

select GROUP#, SEQUENCE#,MEMBERS,ARCHIVED,STATUS from v$log; ---檢查切換的效果

status=CURRENT 當前日誌組

 

ACTIVE --&gt

Log is active but is not the current log. It is needed for crash recovery. It  may be in use for block recovery. It may or may not be archived.

聯機重做日誌組是活動的,但是並非當前聯機重做日誌組,崩潰恢復需要該狀態的日誌,它可能用於塊恢復,它可能已經歸檔也可能未歸檔

UNUSED---

表明從未對聯機重做日誌組進行寫入,這種狀態的日誌檔案要麼而是剛增加的, 要麼是當日志不是current redo logRESETLOGS操作後的狀態

INACTIVE--

表明例項恢復不再需要聯機重做日誌組,它可能已經歸檔也可能未歸檔。

CLEARING--

表明在ALTER DATABASE CLEAR LOGFILE 命令後正在將該日誌重建為一個空日誌,日誌清除後其狀態更改為UNUSED

CLEARING_CURRENT --

表明正在清除當前日誌檔案中的已關閉執行緒,如果切換時發生某些故障,如寫入新日誌標題時的I/O錯誤,則該日誌可以停留在該狀態。

增加redo log檔案

select * from v$logfile;

STALE 

表明該檔案內容不完全,例如正在新增一個日誌檔案成員

DELETED

該檔案已不再使用

select * from v$log;

alter database add logfile group 7 ('E:\APP\ADMINISTRATOR\ORADATA\ORG11G\REDO04.LOG'size 50M;

select * from v$log;

alter database add logfile member 'E:\APP\ADMINISTRATOR\ORADATA\ORG11G\REDO04a.LOG' to group 7;---使用逗號可以同時向多個組增加多個成員

先增加組再增加組成員,刪除則要先刪除成員再刪除組

刪除一個redo log成員檔案

alter database drop logfile member 'E:\APP\ADMINISTRATOR\ORADATA\ORG11G\REDO04.LOG';---組中的最後一個成員不能被刪除

至少要保留兩組,每組至少一個檔案。否則無法刪除。不能刪除當前組 ,該檔案的資訊為歸檔完成

在刪除日誌檔案時,物理檔案並不能刪除,只是刪除了邏輯上的聯絡

刪除日誌組成員注意事項:

不能刪除組內的最後一個有效成員

如果該組是當前組,那麼在刪除該成員之前,必須強制日誌檔案切換(即不能刪除當前組成員)

如果資料庫正執行在 ARCHIVELOG 模式下,並且未將該成員所屬日誌檔案組歸檔,那麼不能刪除該成員檔案

在刪除聯機重做日誌成員時並未刪除作業系統檔案,需要手動刪除。

---刪除日誌檔案組

alter database drop logfile group 7;

刪除日誌組注意事項:

一個資料庫至少2個日誌組,不能刪除完後少於2個日誌組。

活動或當前日誌組不允許刪除

如果資料庫執行在 ARCHIVELOG 模式下,並且日誌檔案組未歸檔,那麼該組無法刪除。 

當刪除日誌組時,檔案沒有正真的刪除,需要人工刪除

清除redo log檔案

1. DROP LOGFILE MEMBER

2. ADD LOGFILE MEMBER

select * from v$log;

alter database clear logfile group 1;-----變成unused狀態

alter database clear unarchived logfile group 1;----清除的時候不歸檔

重新命名,或重分配redo log檔案

第一步:shutdown  關閉資料庫

第二步:在作業系統命令列方式下,將檔案複製到相應的位置,

第三步:startup mount

alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORG11G\REDO04.LOG' to   'E:\APP\ADMINISTRATOR\ORADATA\ORG11G\REDO04.RDO';

第五步:alter database open;

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

相關文章