作者:雨竹清风

当数据库中只有两个重做日志组或者崩溃的重做日志文件属于当前重做日志文件组。这样的情况是不能通过删除重做日志组或文件再重建的方法进行维护或修复。为此应该使用重做日志文件的清除命令重新初始化重做日志文件。其命令为:alter database clear logfile group 组号;这是在重做日志文件可以归档的情况下使用的。如果重做日志文件不能归档应使用alter database clear unarchived logfile group 组号;

以下是清除重做日志文件的步骤。

1.首先用system或者sys用户以sysdba身份登录。

为安全起见应该对数据库进行脱机备份。

2.备份控制文件,重做日志文件,数据文件。首先查看文件存在的路径。

SQL> desc v$controlfile;
 名称                                          是否为空? 类型
 ---------------------------------------------- -------- ------
 STATUS                                             VARCHAR2(7)
 NAME                                               VARCHAR2(513)
 IS_RECOVERY_DEST_FILE                              VARCHAR2(3)
 BLOCK_SIZE                                         NUMBER
 FILE_SIZE_BLKS                                     NUMBER
 
SQL> col name for a55;
SQL> select  STATUS, NAME from v$controlfile;
 
STATUS  NAME                                                                    
------- -------------------------------------------------------                 
        C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL                     
        C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL                     
        C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL                     
    SQL> desc v$logfile;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- --------
 GROUP#                                             NUMBER
 STATUS                                             VARCHAR2(7)
 TYPE                                               VARCHAR2(7)
 MEMBER                                             VARCHAR2(513)
 IS_RECOVERY_DEST_FILE                              VARCHAR2(3)
 
SQL> col MEMBER for a50;
SQL> select GROUP#,STATUS,TYPE,MEMBER from v$logfile;
 
    GROUP# STATUS  TYPE    MEMBER                                               
---------- ------- ------- ------------------------------------------------   
         3 STALE   ONLINE  D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG     
         2         ONLINE  D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG     
         1 STALE   ONLINE  D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG     
 
SQL> desc dba_data_files;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ---------------------
 FILE_NAME                                          VARCHAR2(513)
 FILE_ID                                            NUMBER
 TABLESPACE_NAME                                    VARCHAR2(30)
 BYTES                                              NUMBER
 BLOCKS                                             NUMBER
 STATUS                                             VARCHAR2(9)
 RELATIVE_FNO                                       NUMBER
 AUTOEXTENSIBLE                                     VARCHAR2(3)
 MAXBYTES                                           NUMBER
 MAXBLOCKS                                          NUMBER
 INCREMENT_BY                                       NUMBER
 USER_BYTES                                         NUMBER
 USER_BLOCKS                                        NUMBER
 ONLINE_STATUS                                      VARCHAR2(7)
 
SQL> col FILE_NAME for a55;
SQL> select FILE_ID,FILE_NAME from dba_data_files;
 
   FILE_ID FILE_NAME                                                            
---------- -------------------------------------------------------              
         4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF                    
         3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF                   
         2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF                  
         1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF                   
         5 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF

      

 

3.关闭数据库

SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

4.复制控制文件,数据文件,重做日志文件

复制控制文件文件,默认安装的话控制文件,数据文件,重做日志文件都在同一个文件夹下。本例是不同文件下。

SQL> host copy  C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\*.* C:\backup\
SQL> host copy D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\*.*  C:\backup\

5.备份口令文件和参数文件

SQL> host copy D:\oracle\product\10.2.0\db_1\database\*.* C:\backup\

6.启动数据库

SQL> startup

ORACLE 例程已经启动。

Total System Global Area  167772160 bytes                                       
Fixed Size                  1247900 bytes                                       
Variable Size              75498852 bytes                                       
Database Buffers           88080384 bytes                                       
Redo Buffers                2945024 bytes

                               

数据库装载完毕。

数据库已经打开。

7.查看重做日志文件日志组和所有成员

SQL> desc v$log;

 名称                                      是否为空? 类型

----------------------------------------- -------- -------------
 GROUP#                                             NUMBER
 THREAD#                                            NUMBER
 SEQUENCE#                                          NUMBER
 BYTES                                              NUMBER
 MEMBERS                                            NUMBER
 ARCHIVED                                           VARCHAR2(3)
 STATUS                                             VARCHAR2(16)
 FIRST_CHANGE#                                      NUMBER
 FIRST_TIME                                         DATE
 
SQL> select GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED from v$log;
 
    GROUP#  SEQUENCE#    MEMBERS      BYTES STATUS           ARC                
---------- ---------- ---------- ---------- ---------------- ---                
         1         41          1   52428800 INACTIVE         NO                 
         2         42          1   52428800 CURRENT          NO                 
         3         40          1   52428800 INACTIVE         NO                 
 
SQL> col MEMBER for a50;
SQL> select GROUP#,STATUS,TYPE,MEMBER from v$logfile;
 
    GROUP# STATUS  TYPE    MEMBER                                               
---------- ------- ------- ------------------------------------------------   
         3 STALE   ONLINE  D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG     
         2         ONLINE  D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG     
         1 STALE   ONLINE  D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG

 

8.使用命令来清除一个重做日志。

SQL> alter database clear logfile group 3;

 

数据库已更改。

9.再次查看重做日志文件信息

SQL> select GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED from v$log;
 
    GROUP#  SEQUENCE#    MEMBERS      BYTES STATUS           ARC                
---------- ---------- ---------- ---------- ---------------- ---                
         1         41          1   52428800 INACTIVE         NO                 
         2         42          1   52428800 CURRENT          NO                 
         3          0          1   52428800 UNUSED           NO                 
 
SQL> col MEMBER for a50;
SQL> select GROUP#,STATUS,TYPE,MEMBER from v$logfile;
 
    GROUP# STATUS  TYPE    MEMBER                                               
---------- ------- ------- ------------------------------------------------   
         3         ONLINE  D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG     
         2         ONLINE  D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG     
         1 STALE   ONLINE  D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG

 

显示结果可知第三组的序列号变为了0,意味着初始化了此重做日志文件。因此在清除后要做一次全备份。

10.做全备份。