作者:雨竹清风
当数据库中只有两个重做日志组或者崩溃的重做日志文件属于当前重做日志文件组。这样的情况是不能通过删除重做日志组或文件再重建的方法进行维护或修复。为此应该使用重做日志文件的清除命令重新初始化重做日志文件。其命令为: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.做全备份。