SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
3 ONLINE /home/oracle/app/oracle/oradata/orcl/redo03.log NO
2 ONLINE /home/oracle/app/oracle/oradata/orcl/redo02.log NO
1 ONLINE /home/oracle/app/oracle/oradata/orcl/redo01.log NO
3. 查看重做日誌組信息
SQL> select group#,bytes,members from v$log;
GROUP# BYTES MEMBERS
---------- ---------- ----------
1 52428800 1
2 52428800 1
3 52428800 1
SQL> select a.group#,a.member,b.status,b.bytes
from v$logfile a,v$log b
where a.group#=b.group#;
GROUP# MEMBER STATUS BYTES
---------- -------------------------------------------------- ---------------- ----------
3 /home/oracle/app/oracle/oradata/orcl/redo03.log CURRENT 52428800
2 /home/oracle/app/oracle/oradata/orcl/redo02.log INACTIVE 52428800
1 /home/oracle/app/oracle/oradata/orcl/redo01.log INACTIVE 52428800
4. 添加重做日誌組
每個重做日誌組可以添加一個或者多個重做日誌文件
語法:
alter database add logfile group 組序號('文件名1','文件名2',......'文件n') size 文件大小;
SQL> alter database add logfile group 4('/home/oracle/app/oracle/oradata/orcl/redo04_01.log',
'/home/oracle/app/oracle/oradata/orcl/redo04_02.log') size 100M;
SQL> select a.group#,a.member,b.bytes/1024/1024 "M",b.status
from v$logfile a,v$log b
where a.group#=b.group#;
GROUP# MEMBER M STATUS
---------- -------------------------------------------------- ---------- ----------------
3 /home/oracle/app/oracle/oradata/orcl/redo03.log 50 CURRENT
2 /home/oracle/app/oracle/oradata/orcl/redo02.log 50 INACTIVE
1 /home/oracle/app/oracle/oradata/orcl/redo01.log 50 INACTIVE
4 /home/oracle/app/oracle/oradata/orcl/redo04_01.log 100 UNUSED
4 /home/oracle/app/oracle/oradata/orcl/redo04_02.log 100 UNUSED
綠色標記:剛創建的重做日誌文件名稱,大小,狀態。其中文件名爲redo04_01.log和red04_02.log,文件大小100M,
狀態unused(因爲剛創建,重做日誌文件從未被使用)
知識擴展:redo四種狀態
current:當前活動重做日誌,進行實例恢復是必須的!
active:活動的非當前重做日誌,實例恢復時會被用到。此狀態意味checkpoint尚未完成.
inactive:非活動日誌,在實例恢復時不需要,但介質恢復時需要。
unused:日誌從未被寫入,可能剛被添加或者resetlogs後被重置
5.添加重做日誌文件
添加重置日誌文件,不需要指定文件大小,新創建的重做日誌文件大小與已經存在的重做日誌大小一致
語法:
alter database add logfile member '文件名' to group 組序號SQL> alter database add logfile member '/home/oracle/app/oracle/oradata/orcl/redo04_04.log' to group 4;
SQL> select a.group#,a.member,b.bytes/1024/1024,b.status
from v$logfile a,v$log b
where a.group#=b.group#;
GROUP# MEMBER B.BYTES/1024/1024 STATUS
---------- -------------------------------------------------- ----------------- ----------------
3 /home/oracle/app/oracle/oradata/orcl/redo03.log 50 CURRENT
2 /home/oracle/app/oracle/oradata/orcl/redo02.log 50 INACTIVE
1 /home/oracle/app/oracle/oradata/orcl/redo01.log 50 INACTIVE
4 /home/oracle/app/oracle/oradata/orcl/redo04_01.log 100 UNUSED
4 /home/oracle/app/oracle/oradata/orcl/redo04_02.log 100 UNUSED
4 /home/oracle/app/oracle/oradata/orcl/redo04_04.log 100 UNUSED
5.刪除重做日誌文件
不能刪除組內唯一成員
重做日誌文件被刪除,物理文件是沒有被刪除,需要手動去刪除物理文件
如果想刪除當前處於current或者active狀態的重做日誌文件,必須要把當前的重做日誌文件切換到inactive狀態
語法:
alter database drop logfile member '文件名'
不能刪除組內唯一成員
SQL> select a.group#,a.member,b.bytes,b.status,b.archived
from v$logfile a, v$log b
where a.group#=b.group#;
GROUP# MEMBER BYTES STATUS ARC
---------- -------------------------------------------------- ---------- ---------------- ---
3 /home/oracle/app/oracle/oradata/orcl/redo03.log 52428800 INACTIVE YES
2 /home/oracle/app/oracle/oradata/orcl/redo02.log 52428800 INACTIVE YES
1 /home/oracle/app/oracle/oradata/orcl/redo01.log 52428800 CURRENT NO
4 /home/oracle/app/oracle/oradata/orcl/redo04_01.log 104857600 INACTIVE YES
4 /home/oracle/app/oracle/oradata/orcl/redo04_02.log 104857600 INACTIVE YES
4 /home/oracle/app/oracle/oradata/orcl/redo04_04.log 104857600 INACTIVE YES
刪除重做日誌狀態爲current,會提示錯誤信息
SQL> alter database drop logfile member '/home/oracle/app/oracle/oradata/orcl/redo03.log';
alter database drop logfile member '/home/oracle/app/oracle/oradata/orcl/redo03.log'
*
ERROR at line 1:
ORA-00361: cannot remove last log member /home/oracle/app/oracle/oradata/orcl/redo03.log for group 3
如果想刪除當前處於current或者active狀態的重做日誌文件,必須要把當前的重做日誌文件切換到inactive狀態
SQL> alter system switch logfile;
System altered.
SQL> select a.group#,a.member,b.bytes/1024/1024,b.status,b.archived
2 from v$logfile a,v$log b
3 where a.group#=b.group#;
GROUP# MEMBER BYTES STATUS ARC
---------- -------------------------------------------------- ---------- ---------------- ---
3 /home/oracle/app/oracle/oradata/orcl/redo03.log 52428800 ACTIVE YES
2 /home/oracle/app/oracle/oradata/orcl/redo02.log 52428800 INACTIVE YES
1 /home/oracle/app/oracle/oradata/orcl/redo01.log 52428800 INACTIVE YES
4 /home/oracle/app/oracle/oradata/orcl/redo04_01.log 104857600 CURRENT NO
4 /home/oracle/app/oracle/oradata/orcl/redo04_02.log 104857600 CURRENT NO
4 /home/oracle/app/oracle/oradata/orcl/redo04_04.log 104857600 CURRENT NO
如果刪除重做日誌處於current或者active狀態,會報 the current log for thread 1 - cannot drop members
SQL> alter database drop logfile member '/home/oracle/app/oracle/oradata/orcl/redo04_01.log';
alter database drop logfile member '/home/oracle/app/oracle/oradata/orcl/redo04_01.log'
*
ERROR at line 1:
ORA-01609: log 4 is the current log for thread 1 - cannot drop members
ORA-00312: online log 4 thread 1: '/home/oracle/app/oracle/oradata/orcl/redo04_01.log'
ORA-00312: online log 4 thread 1: '/home/oracle/app/oracle/oradata/orcl/redo04_02.log'
ORA-00312: online log 4 thread 1: '/home/oracle/app/oracle/oradata/orcl/redo04_04.log'
重做日誌文件被刪除,物理文件是沒有被刪除,需要手動去刪除物理文件
SQL> alter system switch logfile;
System altered.
SQL> select a.group#,a.member,b.bytes/1024/1024 "M", b.status,b.archived
from v$logfile a,v$log b
where a.group#=b.group#;
GROUP# MEMBER M STATUS ARC
---------- -------------------------------------------------- ---------- ---------------- ---
3 /home/oracle/app/oracle/oradata/orcl/redo03.log 50 INACTIVE YES
2 /home/oracle/app/oracle/oradata/orcl/redo02.log 50 CURRENT NO
1 /home/oracle/app/oracle/oradata/orcl/redo01.log 50 INACTIVE YES
4 /home/oracle/app/oracle/oradata/orcl/redo04_01.log 100 INACTIVE YES
4 /home/oracle/app/oracle/oradata/orcl/redo04_02.log 100 INACTIVE YES
4 /home/oracle/app/oracle/oradata/orcl/redo04_04.log 100 INACTIVE YES
SQL> alter database drop logfile member '/home/oracle/app/oracle/oradata/orcl/redo04_01.log';
Database altered.
[oracle@localhost orcl]$ ls -ls|grep redo
51260 -rw-r----- 1 oracle oinstall 52429312 12-10 14:16 redo01.log
51260 -rw-r----- 1 oracle oinstall 52429312 12-10 14:19 redo02.log
51260 -rw-r----- 1 oracle oinstall 52429312 12-10 14:11 redo03.log
102508 -rw-r----- 1 oracle oinstall 104858112 12-10 14:16 redo04_01.log
102508 -rw-r----- 1 oracle oinstall 104858112 12-10 14:16 redo04_02.log
102508 -rw-r----- 1 oracle oinstall 104858112 12-10 13:29 redo04_03.log
102508 -rw-r----- 1 oracle oinstall 104858112 12-10 14:16 redo04_04.log
需要手動刪除物理文件哦!
rm -rf /home/oracle/app/oracle/oradata/orcl/redo04_01.log
6.刪除重做日誌組
一個實例必須要兩組重做日誌,如果重做日誌組只有兩組,不能被刪除
刪除重做日誌組,需要手動刪除物理文件(非OMF)
重做日誌組內有重做日誌文件處於current或者active狀態,不能刪除重做日誌組
如果重做日誌組內重做日誌文件有null狀態和inavtive狀態並存,只能刪除重做日誌文件狀態是inactive文件
語法:
alter database drop logfile group 組序號
重做日誌組內有重做日誌文件處於current或者active狀態,不能刪除重做日誌組
SQL> select a.group#,a.member,b.bytes/1024/1024 "M", b.status,b.archived
from v$logfile a,v$log b
where a.group#=b.group#;
GROUP# MEMBER M STATUS ARC
---------- -------------------------------------------------- ---------- ---------------- ---
3 /home/oracle/app/oracle/oradata/orcl/redo03.log 50 INACTIVE YES
2 /home/oracle/app/oracle/oradata/orcl/redo02.log 50 CURRENT NO
1 /home/oracle/app/oracle/oradata/orcl/redo01.log 50 INACTIVE YES
4 /home/oracle/app/oracle/oradata/orcl/redo04_02.log 100 INACTIVE YES
4 /home/oracle/app/oracle/oradata/orcl/redo04_04.log 100 INACTIVE YES
SQL> alter database drop logfile group 2;
alter database drop logfile group 2
*
ERROR at line 1:
ORA-01623: log 2 is current log for instance orcl (thread 1) - cannot drop
ORA-00312: online log 2 thread 1: '/home/oracle/app/oracle/oradata/orcl/redo02.log'
刪除重做日誌組,需要手動刪除物理文件(非OMF)
SQL> select a.group#,a.member,b.bytes/1024/1024 "M", b.status,b.archived
from v$logfile a,v$log b
where a.group#=b.group#;
GROUP# MEMBER M STATUS ARC
---------- -------------------------------------------------- ---------- ---------------- ---
3 /home/oracle/app/oracle/oradata/orcl/redo03.log 50 INACTIVE YES
2 /home/oracle/app/oracle/oradata/orcl/redo02.log 50 CURRENT NO
1 /home/oracle/app/oracle/oradata/orcl/redo01.log 50 INACTIVE YES
4 /home/oracle/app/oracle/oradata/orcl/redo04_02.log 100 INACTIVE YES
4 /home/oracle/app/oracle/oradata/orcl/redo04_04.log 100 INACTIVE YES
SQL> alter database drop logfile group 4 ;
Database altered.
需要手動刪除物理文件哦
[oracle@localhost orcl]$ ls -ls|grep redo
51260 -rw-r----- 1 oracle oinstall 52429312 12-10 14:16 redo01.log
51260 -rw-r----- 1 oracle oinstall 52429312 12-10 14:32 redo02.log
51260 -rw-r----- 1 oracle oinstall 52429312 12-10 14:11 redo03.log
102508 -rw-r----- 1 oracle oinstall 104858112 12-10 14:16 redo04_02.log
102508 -rw-r----- 1 oracle oinstall 104858112 12-10 14:16 redo04_04.log
一個實例必須要兩組重做日誌
SQL> select a.group#,a.member,b.bytes/1024/1024 "M", b.status,b.archived
from v$logfile a,v$log b
where a.group#=b.group#;
GROUP# MEMBER M STATUS ARC
---------- -------------------------------------------------- ---------- ---------------- ---
3 /home/oracle/app/oracle/oradata/orcl/redo03.log 50 INACTIVE YES
2 /home/oracle/app/oracle/oradata/orcl/redo02.log 50 CURRENT NO
一個實例必須要有兩組重做日組,如果刪除其中組就會報would leave less than 2 log files for instance orcl (thread 1)
SQL> alter database drop logfile group 3 ;
alter database drop logfile group 3
*
ERROR at line 1:
ORA-01567: dropping log 3 would leave less than 2 log files for instance orcl (thread 1)
ORA-00312: online log 3 thread 1: '/home/oracle/app/oracle/oradata/orcl/redo03.log'
6.清空重做日誌組
清空重做日誌:對重做日誌文件內容全部初始化,相當於刪除重做日誌文件,並重新創建重做日誌文件一個實例必須要兩組重做日誌,如果重做日誌組只有兩組,不能被被清空
重做日誌組內有重做日誌文件處於current或者active狀態,不能清空重做日誌組
SQL> select a.group#,a.member,b.bytes/1024/1024,b.status,b.archived
from v$logfile a,v$log b
where a.group#=b.group#;
GROUP# MEMBER B.BYTES/1024/1024 STATUS ARC
---------- -------------------------------------------------- ----------------- ---------------- ---
3 /home/oracle/app/oracle/oradata/orcl/redo03.log 50 INACTIVE YES
2 /home/oracle/app/oracle/oradata/orcl/redo02.log 50 CURRENT NO
5 /home/oracle/app/oracle/oradata/orcl/redo05_01.log 100 UNUSED YES
6 /home/oracle/app/oracle/oradata/orcl/redo06_01.log 100 INACTIVE NO清空重做日誌組:
SQL> alter database clear logfile group 3;
清空重做日誌文件
SQL> alter database clear logfile '/home/oracle/app/oracle/oradata/orcl/redo05_01.log';
如果重做日誌處於未歸檔狀態,必須使用unarchived 進行清空
SQL> alter database clear unarchived logfile group 6;
Database altered.
6.與重做日誌有關的動態視圖
v$log
v$logfile
v$log_history
v$log視圖中重要的字段
Status of the log member:UNUSED
- Online redo log has never been written to. This is the state of a redo log that was just added, or just after aRESETLOGS
, when it is not the current redo log.CURRENT
- Current redo log. This implies that the redo log is active. The redo log could be open or closed.ACTIVE
- 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.CLEARING
- Log is being re-created as an empty log after anALTER DATABASE CLEAR LOGFILE
statement. After the log is cleared, the status changes toUNUSED
.CLEARING_CURRENT
- Current log is being cleared of a closed thread. The log can stay in this status if there is some failure in the switch such as an I/O error writing the new log header.INACTIVE
- Log is no longer needed for instance recovery. It may be in use for media recovery. It may or may not be archived.
v$logfile視圖中重要的字段:Status of the log member:
INVALID
- File is inaccessibleSTALE
- File's contents are incompleteDELETED
- File is no longer usednull - File is in use