redo log详述

redo 日志主要是用来恢复数据库的,数据库恢复分二种:instance恢复与介质恢复。这二者本质区别在于“文件坏没坏”,若是坏了则为介质恢复,否则为instance恢复。instance恢复是由smon进程执行,不需人工干预,而介质恢复由DBA来做。下面了解redo log中的几个相关概念。
1、redo log特征:
1)记录数据块的变化(DML、DDL)
2)用于数据块的recover
3)以组的方式管理redo file,最少两组redo,循环使用。
4)和数据文件存放到不同的磁盘上,需读写速度快的磁盘(如采用RAID10)。
2、redo 日志组
1)最少两组,最好每组有两个成员,并存放到不同的磁盘上,大小相同,互相镜像。
2)日志在组写满时发生切换,或手工切换:alter system switch logfile。
3)在归档模式下,日志进行归档,并把相关的信息写入controlfile
3、日志切换
1)归档模式,将历史日志进行保存。
2)非归档:历史日志被覆盖。
3)产生checkpoint,通知redo log所对应的dirty block从data buffer写入到datafile,并且更新控制文件。
4、alter system checkpoint
手工生成完全检查点,将data buffer里所有的脏块写入到datafile,并通过ckpt后台进程在controlfile和datafile头部写入检查点信息
checkpoint保存我们阶段性成果,类似于word中的保存按钮,如果这时系统断电,我们从上次保存时的状态,开始重新编辑。
5、fast_start_mttr_target
启动自动检查点事件。类似word的自动保存功能。 其原理就是根据设置需恢复的秒数,不定期生成全局检查点。
fast_start_mttr_target=900参数的作用:控制恢复工作量,以减少恢复时间。
参数fast_start_mttr_target=900是指允许DBA指定数据库进行崩溃恢复需要的秒数。mttr(mean time to restoration)指平均恢复时间。
SQL> show parameter log
……
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_checkpoint_interval integer 0
log_checkpoint_timeout integer 1800
……
SQL> show parameter fast;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fast_start_io_target integer 0
fast_start_mttr_target integer 0
fast_start_parallel_rollback string LOW
恢复时间取决于读取log files的时间和处理需要恢复的数据块的时间。以上参数log_checkpoint_interval设定了恢复过程中将要被读取的重做记录的数目。fast_start_io_target控制了需要被恢复的数据块数目。然而,DBA可以通过单独设置参数来设置基于秒级的恢复时间限制。log_checkpoint_timeout限制了上一检查点和最近的重做记录之间的秒数。但他对于设置恢复时间限制来说都是不够精确的!
如何设置fast_start_mttr_target
一般来说是设为300,600,900,具体设哪个,可以先设一个最低点(最快恢复时间),再设一个最高点(最慢恢复时间),然后算其平均值接近300、600、900中的哪个,就设为哪个。
--设以1秒最快时间恢复,查看数据库最终最快恢复时间
SQL> alter system set fast_start_mttr_target=1   ; 
System altered.
SQL> select target_mttr,estimated_mttr from v$instance_recovery;
TARGET_MTTR ESTIMATED_MTTR
----------- --------------
         13 11
注意: target_mttr是依据设定的1秒,采用某算法计算得出数据库需要恢复的最快时间,而 ESTIMATED_MTTR是根据内存中的脏块计算数据库需恢复的最快时间。
--设最慢恢复时间3600(数据库恢复时间上限为1小时), 查看数据库最终最慢恢复时间
SQL> alter system set fast_start_mttr_target=3600;
System altered.
SQL> select target_mttr,estimated_mttr from v$instance_recovery;
TARGET_MTTR ESTIMATED_MTTR
----------- --------------
         32 11
SQL> select (13+32)/2 from dual;
 (13+32)/2
----------
      22.5
--均值更接近300,最后设为300即可
SQL> alter system set fast_start_mttr_target=300;
System altered.
6、案例一 数据库instance恢复演练
--创建emp1表,并插入部分数据未提交
SQL> create table emp1 as select * from scott.emp;
Table created.
SQL> insert into emp1 select * from emp1;
14 rows created.
SQL> /
28 rows created.
SQL>
56 rows created.
SQL> /
112 rows created.
SQL> /
224 rows created.
SQL> /
448 rows created.
--模拟数据库突然断电,即shutdown abort,然后再启库
[oracle@gc1 ~]$ export ORACLE_SID=PROD
[oracle@gc1 ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Apr 8 19:38:02 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 419430400 bytes
Fixed Size 1219760 bytes
Variable Size 121635664 bytes
Database Buffers 293601280 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> alter database open ; 
Database altered.
--查看断电后启库的告警日志信息
[oracle@gc1 ~]$ cd /u01/app/oracle/oradata/PROD/bdump
[oracle@gc1 bdump]$ tail -f alert_PROD.log
……

ALTER DATABASE MOUNT
Tue Apr 8 19:38:44 2014
Setting recovery target incarnation to 1
Tue Apr 8 19:38:44 2014
Successful mount of redo thread 1, with mount id 256259519
Tue Apr 8 19:38:44 2014
Database mounted in Exclusive Mode
Completed: ALTER DATABASE MOUNT
Tue Apr 8 19:39:07 2014
alter database open
Tue Apr 8 19:39:07 2014
Beginning crash recovery of 1 threads
Tue Apr 8 19:39:07 2014
Started redo scan
Tue Apr 8 19:39:07 2014
Completed redo scan
 126 redo blocks read, 26 data blocks need recovery
Tue Apr 8 19:39:07 2014
Started redo application at
 Thread 1: logseq 15, block 3288
Tue Apr 8 19:39:07 2014
Recovery of Online Redo Log: Thread 1 Group 3 Seq 15 Reading mem 0
  Mem# 0 errs 0: /u01/app/oracle/oradata/PROD/disk1/redo03.log
  Mem# 1 errs 0: /u01/app/oracle/oradata/PROD/disk2/redo03.log
Tue Apr 8 19:39:07 2014
Completed redo application
Tue Apr 8 19:39:07 2014
Completed crash recovery at
 Thread 1: logseq 15, block 3414, scn 487518
 26 data blocks read, 26 data blocks written, 126 redo blocks read
Tue Apr 8 19:39:08 2014
Thread 1 advanced to log sequence 16
Thread 1 opened at log sequence 16
  Current log# 1 seq# 16 mem# 0: /u01/app/oracle/oradata/PROD/disk1/redo01.log
  Current log# 1 seq# 16 mem# 1: /u01/app/oracle/oradata/PROD/disk2/redo01.log
Successful open of redo thread 1
Tue Apr 8 19:39:08 2014
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Successfully onlined Undo Tablespace 1.
Tue Apr 8 19:39:08 2014
SMON: enabling cache recovery
Tue Apr 8 19:39:08 2014
*********************************************************************
WARNING: The following temporary tablespaces contain no files.
         This condition can occur when a backup controlfile has
         been restored. It may be necessary to add files to these
         tablespaces. That can be done using the SQL statement:
 
         ALTER TABLESPACE ADD TEMPFILE
 
         Alternatively, if these temporary tablespaces are no longer
         needed, then they can be dropped.
           Empty temporary tablespace: TEMPTS
*********************************************************************
Tue Apr 8 19:39:08 2014
SMON: enabling tx recovery
Tue Apr 8 19:39:08 2014
Database Characterset is ZHS16GBK
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
QMNC started with pid=27, OS id=9566
Tue Apr 8 19:39:09 2014
Completed: alter database open
7、日志与日志组 status
共有四种状态,如下:
unused 新添加的日志组,还没有使用。
inactive 日志组对应的脏块已经从data buffer写入到data file,可以删除
active 日志组对应的脏块还没有从data buffer写入到data file,不能被删除。
current 当前日志组,日志组对应的脏块还没有从data buffer写入到data file,不能被删除。
在删除日志组之前,进行日志手工切换,将被删除的日志切换到inactive状态。
例:
SQL> col member for a50;
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         3 STALE ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 STALE ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
         2 STALE ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 STALE ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
6 rows selected.
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 16 104857600 2 NO CURRENT 487519 08-APR-14
         2 1 14 104857600 2 NO INACTIVE 442646 04-APR-14
         3 1 15 104857600 2 NO INACTIVE 465329 08-APR-14
8、新增日志组与日志文件
--新增日志组及部分成员
SQL> alter database add logfile group 4('/u01/app/oracle/oradata/PROD/disk1/redo04.log') size 100M;
Database altered.
--新增日志文件
SQL> alter database add logfile member '/u01/app/oracle/oradata/PROD/disk2/redo04.log' to group 4;
Database altered.
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         3 STALE ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 STALE ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
         2 STALE ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 STALE ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
         4 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo04.log NO
         4 INVALID ONLINE /u01/app/oracle/oradata/PROD/disk2/redo04.log NO
8 rows selected.
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 16 104857600 2 NO CURRENT 487519 08-APR-14
         2 1 14 104857600 2 NO INACTIVE 442646 04-APR-14
         3 1 15 104857600 2 NO INACTIVE 465329 08-APR-14
         4 1 0 104857600 2 YES  UNUSED 0
--新增日志组及所有成员
SQL> alter database add logfile group 5('/u01/app/oracle/oradata/PROD/disk1/redo05.log','/u01/app/oracle/oradata/PROD/disk2/redo05.log') size 100M;
Database altered.
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         3 STALE ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 STALE ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
         2 STALE ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 STALE ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
         4 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo04.log NO
         4 INVALID ONLINE /u01/app/oracle/oradata/PROD/disk2/redo04.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo05.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo05.log NO
10 rows selected.
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 16 104857600 2 NO CURRENT 487519 08-APR-14
         2 1 14 104857600 2 NO INACTIVE 442646 04-APR-14
         3 1 15 104857600 2 NO INACTIVE 465329 08-APR-14
         4 1 0 104857600 2 YES UNUSED 0
         5 1 0 104857600 2 YES UNUSED 0
9、日志组切换
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 16 104857600 2 NO CURRENT 487519 08-APR-14
         2 1 14 104857600 2 NO INACTIVE 442646 04-APR-14
         3 1 15 104857600 2 NO INACTIVE 465329 08-APR-14
         4 1 0 104857600 2 YES UNUSED 0
         5 1 0 104857600 2 YES UNUSED 0
SQL> alter system switch logfile;
System altered.
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 16 104857600 2 NO ACTIVE 487519 08-APR-14
         2 1 14 104857600 2 NO INACTIVE 442646 04-APR-14
         3 1 15 104857600 2 NO INACTIVE 465329 08-APR-14
         4 1 17 104857600 2 NO CURRENT 492869 08-APR-14
         5 1 0 104857600 2 YES UNUSED 0
当前日志组由1变为4。
10、dump日志文件信息
--查看当前所有日志文件
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
         4 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo04.log NO
         4 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo04.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo05.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo05.log NO
--dump日志组2中disk2的redo02.log
SQL> alter system dump logfile '/u01/app/oracle/oradata/PROD/disk2/redo02.log';
System altered.
--查看dump下来的日志文件信息
[oracle@gc1 ~]$ cd /u01/app/oracle/oradata/PROD/udump
[oracle@gc1 udump]$ ls -lt | grep prod_ora
-rw-r----- 1 oracle oinstall 1997 Apr 8 23:22 prod_ora_9941.trc
-rw-r----- 1 oracle oinstall 1875 Apr 8 19:39 prod_ora_9564.trc
-rw-r----- 1 oracle oinstall 656 Apr 8 19:38 prod_ora_9563.trc
-rw-r----- 1 oracle oinstall 599 Apr 8 19:38 prod_ora_9514.trc
-rw-r----- 1 oracle oinstall 1830 Apr 8 18:15 prod_ora_3365.trc
……
[oracle@gc1 udump]$ more prod_ora_9941.trc
/u01/app/oracle/oradata/PROD/udump/prod_ora_9941.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1
System name: Linux
Node name: gc1
Release: 2.6.18-164.el5
Version: #1 SMP Tue Aug 18 15:51:54 EDT 2009
Machine: i686
Instance name: PROD
Redo thread mounted by this instance: 1
Oracle process number: 30
Unix process pid: 9941, image: oracle@gc1 (TNS V1-V3)
*** 2014-04-08 23:22:09.688
*** SERVICE NAME:(SYS$USERS) 2014-04-08 23:22:09.661
*** SESSION ID:(278.24) 2014-04-08 23:22:09.661
 
DUMP OF REDO FROM FILE '/u01/app/oracle/oradata/PROD/disk2/redo02.log'
 Opcodes *.*
 RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
 SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
 Times: creation thru eternity
 FILE HEADER:
        Compatibility Vsn = 169869312=0xa200000
        Db ID=206258609=0xc4b41b1, Db Name='PROD'
        Activation ID=206242993=0xc4b04b1
        Control Seq=561=0x231, File size=204800=0x32000
        File Number=2, Blksiz=512, File Type=2 LOG
 descrip:"Thread 0001, Seq# 0000000019, SCN 0x000000078580-0x000000078582"
 thread: 1 nab: 0x2 seq: 0x00000013 hws: 0x2 eot: 0 dis: 0
 resetlogs count: 0x2f59e431 scn: 0x0000.00000001 (1)
 resetlogs terminal rcv count: 0x0 scn: 0x0000.00000000
 prev resetlogs count: 0x0 scn: 0x0000.00000000
 prev resetlogs terminal rcv count: 0x0 scn: 0x0000.00000000
 Low scn: 0x0000.00078580 (492928) 04/08/2014 23:17:38
 Next scn: 0x0000.00078582 (492930) 04/08/2014 23:17:41
 Enabled scn: 0x0000.00000001 (1) 09/19/2012 16:19:18
 Thread closed scn: 0x0000.00078580 (492928) 04/08/2014 23:17:38
 Disk cksum: 0x528b Calc cksum: 0x528b
 Terminal recovery stop scn: 0x0000.00000000
 Terminal recovery 01/01/1988 00:00:00
 Most recent redo scn: 0x0000.00000000
 Largest LWN: 0 blocks
 End-of-redo stream : No
 Unprotected mode
--More--(94%)
11、迁移或重命名日志文件
11.1 联机状态重命名日志文件(将/u01/app/oracle/oradata/PROD/disk1/下redo04.log改为redo44.log
--查看日志组信息
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 21 104857600 2 NO INACTIVE 492936 08-APR-14
         2 1 19 104857600 2 NO INACTIVE 492928 08-APR-14
         3 1 20 104857600 2 NO INACTIVE 492930 08-APR-14
         4 1 22 104857600 2 NO CURRENT 492946 08-APR-14
         5 1 18 104857600 2 NO INACTIVE 492922 08-APR-14
--查看日志文件信息
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
         4 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo04.log NO
         4 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo04.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo05.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo05.log NO
10 rows selected.
--对当前日志组文件重命名(前提是要先切换日志文件)
SQL> alter database drop logfile member '/u01/app/oracle/oradata/PROD/disk1/redo04.log';
alter database drop logfile member '/u01/app/oracle/oradata/PROD/disk1/redo04.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: '/u01/app/oracle/oradata/PROD/disk1/redo04.log'
ORA-00312: online log 4 thread 1: '/u01/app/oracle/oradata/PROD/disk2/redo04.log'
--进行当前日志组切换
SQL> alter system switch logfile;
System altered.
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 21 104857600 2 NO INACTIVE 492936 08-APR-14
         2 1 19 104857600 2 NO INACTIVE 492928 08-APR-14
         3 1 20 104857600 2 NO INACTIVE 492930 08-APR-14
         4 1 22 104857600 2 NO ACTIVE 492946 08-APR-14
         5 1 23 104857600 2 NO CURRENT 493273 08-APR-14
--删除要重命名的日志文件(注意删除之前应该先查看日志组状态,若非inactive,则执行一次alter system checkpoint生成全局检查点,执行提交)
SQL> alter database drop logfile member '/u01/app/oracle/oradata/PROD/disk1/redo04.log';
Database altered.
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
         4 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo04.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo05.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo05.log NO
9 rows selected.
--添加日志组成员(实现重命名)
SQL> alter database add logfile member '/u01/app/oracle/oradata/PROD/disk1/redo44.log' to group 4;
Database altered.
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
         4 INVALID ONLINE /u01/app/oracle/oradata/PROD/disk1/redo44.log NO
         4 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo04.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo05.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo05.log NO
10 rows selected.
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 21 104857600 2 NO INACTIVE 492936 08-APR-14
         2 1 19 104857600 2 NO INACTIVE 492928 08-APR-14
         3 1 20 104857600 2 NO INACTIVE 492930 08-APR-14
         4 1 22 104857600 2 NO ACTIVE 492946 08-APR-14
         5 1 23 104857600 2 NO CURRENT 493273 08-APR-14
--物理删除原日志文件
[oracle@gc1 udump]$ cd /u01/app/oracle/oradata/PROD/disk1
[oracle@gc1 disk1]$ ls
control01.ctl redo01.log redo02.log redo03.log redo04.log redo05.log redo44.log
[oracle@gc1 disk1]$ rm redo04.log
[oracle@gc1 disk1]$ ls
control01.ctl redo01.log redo02.log redo03.log redo05.log redo44.log
11.2 脱机状态,迁移或重命名日志文件(将/u01/app/oracle/oradata/PROD/disk1/下redo44.log改为redo04.log)
--关库,并启至mount状态
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 419430400 bytes
Fixed Size 1219760 bytes
Variable Size 121635664 bytes
Database Buffers 293601280 bytes
Redo Buffers 2973696 bytes
Database mounted.
注意,日志文件是在open时才打开,而执行日志文件的copy操作,必须是在文件未打开的状态,因此可在mount时,执行日志文件copy操作
--copy日志文件
[oracle@gc1 disk1]$ ls
control01.ctl redo01.log redo02.log redo03.log redo05.log redo44.log
[oracle@gc1 disk1]$ cp /u01/app/oracle/oradata/PROD/disk1/redo44.log /u01/app/oracle/oradata/PROD/disk1/redo04.log
[oracle@gc1 disk1]$ ls
control01.ctl redo01.log redo02.log redo03.log redo04.log redo05.log redo44.log
--开库,并查看当前日志信息
SQL> alter database open;
Database altered.
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 21 104857600 2 NO INACTIVE 492936 08-APR-14
         2 1 19 104857600 2 NO INACTIVE 492928 08-APR-14
         3 1 20 104857600 2 NO INACTIVE 492930 08-APR-14
         4 1 22 104857600 2 NO INACTIVE 492946 08-APR-14
         5 1 23 104857600 2 NO CURRENT 493273 08-APR-14
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
         4 INVALID ONLINE /u01/app/oracle/oradata/PROD/disk1/redo04.log NO
         4 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo04.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo05.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo05.log NO
10 rows selected.
--物理删除原日志文件
[oracle@gc1 disk1]$ ls
control01.ctl redo01.log redo02.log redo03.log redo04.log redo05.log redo44.log
[oracle@gc1 disk1]$ rm redo44.log
[oracle@gc1 disk1]$ ls
control01.ctl redo01.log redo02.log redo03.log redo04.log redo05.log
12、清空或删除日志组
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
         4 INVALID ONLINE /u01/app/oracle/oradata/PROD/disk1/redo04.log NO
         4 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo04.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo05.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo05.log NO
10 rows selected.
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 21 104857600 2 NO INACTIVE 492936 08-APR-14
         2 1 19 104857600 2 NO INACTIVE 492928 08-APR-14
         3 1 20 104857600 2 NO INACTIVE 492930 08-APR-14
         4 1 22 104857600 2 NO INACTIVE 492946 08-APR-14
         5 1 23 104857600 2 NO CURRENT 493273 08-APR-14
SQL> alter database clear logfile group 5;
alter database clear logfile group 5
*
ERROR at line 1:
ORA-01624: log 5 needed for crash recovery of instance PROD (thread 1)
ORA-00312: online log 5 thread 1: '/u01/app/oracle/oradata/PROD/disk1/redo05.log'
ORA-00312: online log 5 thread 1: '/u01/app/oracle/oradata/PROD/disk2/redo05.log'
SQL> alter database drop logfile group 5;
alter database drop logfile group 5
*
ERROR at line 1:
ORA-01623: log 5 is current log for instance PROD (thread 1) - cannot drop
ORA-00312: online log 5 thread 1: '/u01/app/oracle/oradata/PROD/disk1/redo05.log'
ORA-00312: online log 5 thread 1: '/u01/app/oracle/oradata/PROD/disk2/redo05.log'
注意:当前日志组无法清空或删除
SQL> alter database clear logfile group 4;
Database altered.
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 21 104857600 2 NO INACTIVE 492936 08-APR-14
         2 1 19 104857600 2 NO INACTIVE 492928 08-APR-14
         3 1 20 104857600 2 NO INACTIVE 492930 08-APR-14
         4 1 0 104857600 2 NO  UNUSED 492946 08-APR-14
         5 1 23 104857600 2 NO CURRENT 493273 08-APR-14
注意:清空后,日志组状态变为unused,相当于新增的日志组
SQL> alter database drop logfile group 4;
Database altered.
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 21 104857600 2 NO INACTIVE 492936 08-APR-14
         2 1 19 104857600 2 NO INACTIVE 492928 08-APR-14
         3 1 20 104857600 2 NO INACTIVE 492930 08-APR-14
         5 1 23 104857600 2 NO CURRENT 493273 08-APR-14
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo05.log NO
         5 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo05.log NO
8 rows selected.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21251711/viewspace-1139026/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21251711/viewspace-1139026/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值