情形: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,用重建控制文件的方法来重建数据库(可选)
找到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,赶紧备份吧!
转载请注明:【Vegas原创】联机日志丢失,recover database until cancel不可以的解决方法 | 胖虎的工具箱-编程导航