【Vegas原创】联机日志丢失,recover database until cancel不可以的解决方法

2年前 (2022) 程序员胖胖胖虎阿
231 0 0

情形:RMAN做DB还原,restore后,发现redo log全部丢失,archive log也没有了

 

解决方法:重建日志文件,重建控制文件。

 

重建日志文件:

1,

SQL> SELECT NAME,OPEN_MODE,LOG_MODE FROM V$DATABASE;

NAME      OPEN_MODE  LOG_MODE
--------- ---------- ------------
HISDB     MOUNTED    ARCHIVELOG

数据库处于归档模式

 

2,

SQL> SELECT GROUP#,SEQUENCE#,STATUS FROM V$LOG;

    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1          5 INACTIVE
         3          4 INACTIVE
         2          6 CURRENT

 

3,由于GROUP 2是当前日志组,所以先删除GROUP 1 与GROUP 3,然后重建日志文件,再删除GROUP 2。就算不行,肯定能删除掉两个group,一个个的尝试删掉,重建吧~

SQL> SELECT MEMBER FROM V$LOGFILE WHERE GROUP#=1;

MEMBER
------------------------------------------------------

D:\ORACLE\PRODUCT\10.2.0\ORADATA\HISDB\REDO01.LOG

SQL>ALTER DATABASE DROP LOGFILE GROUP 1;
SQL>ALTER DATABASE DROP LOGFILE GROUP 3;
 
SQL> alter database add logfile ('F:\oracle\product\10.2.0\oradata\hisdb\redo01.
log') size 30m;
SQL> alter database add logfile ('F:\oracle\product\10.2.0\oradata\hisdb\redo03.
log') size 30m;
 

 

SQL> ALTER SYSTEM SWITCH LOGFILE;

执行此语句出错,因为数据库还未open

 

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;

 

此语句还是不行~

 

4,用重建控制文件的方法来重建数据库(可选)

SQL> alter database backup controlfile to trace;

 

 找到trace文件(udump),将刚才trace出来的control文件copy出来,更改redolog路径(必要时)执行:

 

CREATE CONTROLFILE REUSE DATABASE "HISDB" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'F:\oracle\product\10.2.0\oradata\hisdb\REDO01.LOG' SIZE 30M,
GROUP 2 'F:\oracle\product\10.2.0\oradata\hisdb\REDO02.LOG' SIZE 30M,
GROUP 3 'F:\oracle\product\10.2.0\oradata\hisdb\redo03.LOG' SIZE 30M
-- STANDBY LOGFILE
DATAFILE
'F:\oracle\product\10.2.0\oradata\hisdb\SYSTEM01.DBF',
'F:\oracle\product\10.2.0\oradata\hisdb\UNDOTBS01.DBF',
'F:\oracle\product\10.2.0\oradata\hisdb\SYSAUX01.DBF',
'F:\oracle\product\10.2.0\oradata\hisdb\USERS01.DBF',
'F:\oracle\product\10.2.0\oradata\hisdb\EXAMPLE01.DBF',
'F:\oracle\product\10.2.0\oradata\hisdb\DRSYS',
'F:\oracle\product\10.2.0\oradata\hisdb\INDX',
'F:\oracle\product\10.2.0\oradata\hisdb\RBS',
'F:\oracle\product\10.2.0\oradata\hisdb\TOOLS'
CHARACTER SET WE8ISO8859P1
;

 

5,重建logfile2(可选)

SQL> startup mount;
SQL> alter database drop logfile group 2;
SQL> alter database add logfile ('F:\oracle\product\10.2.0\oradata\hisdb\redo02.log') size 30m;

  

如果执行第四步骤,可以将不可删除的redo文件(如redo02.log)路径改为正确路径(如将C:\改到F:\),并copy、paste已经创建的redo文件(如redo01.log),rename为redo02.log,之后直接open resetlogs即可。

 

 

6,恢复及打开数据库

SQL> recover database using backup controlfile until cancel;
SQL> alter database open resetlogs;

到此处,成功了!!

 

7,开启后,重建临时表空间

 

SQL> alter tablespace temp add tempfile 'F:\oracle\product\10.2.0\oradata\hisdb\TEMP01.DBF' size 30m;

 

好了,ok了。

 

8,赶紧备份吧!

相关文章

暂无评论

暂无评论...