redo文件管理

1.  查看數據庫版本
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
2.  查看重做日誌文件

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

4. 查看重做日誌和重做日誌組狀態

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是不能被刪除
不能刪除組內唯一成員
重做日誌文件被刪除,物理文件是沒有被刪除,需要手動去刪除物理文件
如果想刪除當前處於current或者active狀態的重做日誌文件,必須要把當前的重做日誌文件切換到inactive狀態
如果刪除重做日誌文件,儘量被刪除重做日誌處於歸檔狀態。(查看是否是歸檔狀態v$log視圖中的archived字段)

語法:

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 a RESETLOGS, 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 an ALTER DATABASE CLEAR LOGFILE statement. After the log is cleared, the status changes to UNUSED.

  • 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 inaccessible

  • STALE - File's contents are incomplete

  • DELETED - File is no longer used

  • null - File is in use


個人博客:【夢&dream】http://blog.csdn.net/life_dba
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章