聯機重做日志操作
?
??? 接著昨天來學習一下關于redo log的操作。這些操作都是日常維護數據庫時都需要用到的,所以需要記清楚。
?
一、創建聯機重做日志
?
??? 1、創建聯機重做日志組
?
??? ALTER DATABASE ADD LOGFILE ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500K;
?
??? ALTER DATABASE ADD GROUP 10 ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500K;
?
??? 注:組號必須在1和MAXLOGFILES之間,且不要跳躍使用,否則會耗費數據庫控制文件中的空間。
?
??? 2、創建聯機重做日志成員
?
??? ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2b.rdo' TO GROUP 2;
?
??? ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2c.rdo' TO ('/oracle/dbs/log2a.rdo','/oracle/dbs/log2b.rdo');
?
??? 注:指定組中所有成員也可以表示這個組。新建的日志成員狀態為INVALID,首次使用時變成活動狀態。
?
?
二、重定位 & 重命名
?
??? ① 關閉數據庫:SHUTDOWN
?
??? ② 在操作系統中移動或重命名聯機重做日志文件
?
??? ③ 啟動并裝載數據庫:STARTUP MOUNT
?
??? ④ 使用RENAME語句
?
??? ALTER DATABASE RENAME FILE '/diska/logs/log1a.rdo','/diska/logs/log2a.rdo'
??? TO '/diskc/logs/log1c.rdo','/diskc/logs/log2c.rdo'
?
?
三、取消聯機重做日志組成員
?
??? 1、取消日志組
?
??? 要注意:
??? ① 至少需要保留兩組聯機重做日志文件
??? ② 日志組狀態為“非活動”時才可以取消,如果是“活動”的,則需要進行強制切換
??? ③ 要確保日志組已經存檔,可以查看V$LOG視圖查看是否存檔
?
??? ALTER DATABASE DROP LOGFILE GROUP 3;
?
??? 在執行DROP之后要在操作系統中刪除磁盤文件
?
??? 2、取消聯機重做日志成員
?
??? 要注意:
??? ① 可以取消原先對稱的組中的成員,使其暫時不對稱,但最好立即調整這種狀況
??? ② 實例需要至少兩個有效聯機重做日志文件,且不能取消最后一個有效成員,使用V$LOGFILE查看狀態
??? ③ 和取消組一樣,需要成員為非活動狀態,否則需要進行一次強制切換
??? ④ 確保要取消的成員已經經過存檔
?
??? ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log3c.rdo';
?
?
四、強制切換日志
?
??? ALTER SYSTEM SWITCH LOGFILE;
?
?
五、校驗重做日志文件中的塊
?
??? 設置DB_BLOCK_CHECKSUM初始化參數為TRUE,則對所有寫到磁盤上的Oracle數據塊進行校驗,包括重做數日志塊。
??? DB_BLOCK_CHECKSUM參數的默認值是FLASE
?
??? <具體原理未知>
?
??? 注:允許校驗會對系統產生額外的開銷,并且降低數據庫性能。需要監視數據庫性能以判斷校驗的代價是否過重。
?
?
六、清除聯機重做日志文件
?
??? 在聯機重做日志損壞時,可以使用CLEAR命令來初始化聯機重做日志文件
?
??? 但是要注意以下情況不能使用:
??? * 僅有兩個日志組
??? * 受到損壞的重做日志文件屬于當前組
?
??? ALTER DATABASE CLEAR LOGFILE GROUP 3;
??? ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;
?
??? 注:清除了恢復備份所需的日志文件,則不能再進行恢復,Oracle將在警報文件中寫入一條消息來描述不能恢復的備份。
?
??? 注:若清除的日志可以將脫機表空間變成聯機狀態,則需要在語句中加上UNRECOVERABLE DATAFILE子句。
??????? 因為清除該日志后再也不能把脫機表空間變成聯機狀態,所以不得不撤銷表空間或執行未完成的恢復過程。
?
?
七、查看聯機重做日志信息
?
??? V$LOG:顯示來自于控制文件的重做日志文件信息
??? V$LOGFILE:標識重做日志文件組及其成員的狀態
??? V$LOG_HISTORY:包含日志歷史信息
?
?