由于使用了一个未经验证的清除垃圾文件的程序,导致Oracle数据库的两个日志文件被非法删除(Redo01,Redo02,Redo03),导致Oracle无法连接(能启动),系统报错:
ora-01033:oracle initializationg or shutdown in progress
最开始知道问题是由于文件被误删导致的,但不知道是日志文件被删除,由于数据库应用能启动,
因此决定做一次recover操作,步骤如下:
步骤0: sqlplus /NOLOG
SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 5月 12 09:12:59 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
步骤1: SQL> connect sys/password as sysdba
已连接。
步骤2: SQL> shutdown normal
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
步骤3: SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
步骤4: SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-00313: 无法打开日志组 1 (线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'C:\ORACLE\ORADATA\NIDB\REDO01.LOG'
在操作步骤4时,发现报ORA-00313,00312错误,检查应用实例目录下,发现Redo01,Redo02,Redo03三个日志文件都被删除了,问题到此已经明朗化。首先,执行下面的语句看看group1是不是current日志组
步骤5: SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 134 NO INACTIVE
2 135 NO INACTIVE
3 136 NO CURRENT
可以发现,被删除的日志不是当前日志组的成员,解决就比较简单 了:
步骤6: SQL> alter database clear logfile group 1;
数据库已更改。
SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 0 NO UNUSED
2 534 NO INACTIVE
3 535 NO CURRENT
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-00313: 无法打开日志组 2 (线程 1) 的成员
ORA-00312: 联机日志 2 线程 1: 'C:\ORACLE\ORADATA\NIDB\REDO02.LOG'
SQL> alter database clear logfile group 2;
数据库已更改。
SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 0 NO UNUSED
2 0 NO UNUSED
3 535 NO CURRENT
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1:
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO03.LOG'
SQL> alter database clear logfile group 3;
alter database clear logfile group 3
*
第 1 行出现错误:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1:
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO03.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
由于日志文件REDO03.LOG为当前日志文件,不能用上面的方法进行恢复。
SQL> recover database until cancel;
完成介质恢复。
SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 0 NO UNUSED
2 0 NO UNUSED
3 0 NO CLEARING_CURRENT
SQL> alter database open resetlogs;
数据库已更改。
SQL> conn test/111111
已连接。
到此,恢复成功!!
相关推荐
#### 二、Oracle 数据文件误删后的初步应对措施 1. **检查错误日志**:误删除数据文件后,通常会在 Oracle 的 alert 日志中记录相关的错误信息。这些信息对于后续的恢复操作至关重要。 - 示例错误信息: ``` ORA...
本篇文章将深入探讨误删表空间文件后如何解决这一问题,以及预防此类情况的策略。 首先,当Oracle数据库遇到表空间文件丢失的情况,通常会显示错误消息,如"ORA-01110: 数据文件xxx不存在"。这是因为数据库在启动时...
下面将详细介绍这些方法,以及如何在已提交的DELETE操作后恢复数据。 首先,当执行了`DELETE`语句并提交(`COMMIT`)后,数据通常会被永久删除,除非在删除前开启了某种形式的保护机制,如事务日志或闪回功能。...
总之,当面临数据库日志文件误删的危机时,重要的是保持冷静,理解数据库恢复的基本原理,利用可用的工具和资源尽快恢复数据,同时也要防止类似问题的再次发生,例如设置严格的权限控制和定期备份策略。
首先,用`RESTORE DATABASE`命令恢复数据文件,然后使用`RECOVER DATABASE`或`RECOVER DATAFILE`命令应用归档日志,最后可能需要`ALTER DATABASE OPEN RESETLOGS;`打开数据库。 5. **UNDOTABLE空间**:Oracle的UNDO...
4. **准备分析**:使用DBMS_LOGMNR_D包的ADD_DGLOGFILE过程将要分析的日志文件添加到Log Miner的字典中。这一步确保logmnr能够理解日志中的操作。 5. **启动Log Miner**:调用DBMS_LOGMNR开始分析。DBMS_LOGMNR....
- **重做日志文件**(redo log files):记录了对数据库所做的所有修改,用于恢复操作。 - **控制文件**(control file,*.ctl):记录了数据库的物理结构信息。 - **内部文件**:可能包含数据库的一些额外配置或...
综上所述,Oracle提供了多种误删数据恢复的解决方案,从基本的闪回查询到高级的表空间闪回和ADR诊断,每种方法都有其适用场景和限制。在实际应用中,应结合具体情况选择最合适的方法,并确保有充分的准备和预防措施...
1. **识别问题**:首先,确定哪个数据文件被误删,这通常通过查看数据库错误日志或通过`SQL`查询`V$DATAFILE`视图来实现。 2. **备份检查**:检查最近的数据库备份,包括全备和增量备份,看是否包含被删除的数据...
总结来说,删除Oracle表空间数据文件是一项需要谨慎操作的任务,理解`DROP DATAFILE`、`OFFLINE`和`OFFLINE DROP`的差异,以及掌握在OS层面误删后的恢复策略,对于维护数据库的完整性和一致性至关重要。在执行这些...
在Oracle数据库中,当redo log文件填满时,当前的redo log组会切换到下一个未使用的组,而旧的日志文件则被归档,生成归档日志文件。这些文件包含自上次归档以来的所有更改,对于备库来说,它们用于将变更应用到备用...
5. **查看归档文件**:使用`ls`命令列出当前目录下的所有归档日志文件,这将帮助我们了解哪些文件可以安全删除,如图5所示。 6. **理解归档用途**:归档日志对于数据库的灾难恢复至关重要,一般建议保留一定数量的...
8. **检查残留文件**:卸载后,使用文件搜索工具检查是否存在Oracle的残留文件,特别是用户数据和日志文件,确保全部清除。 9. **系统还原**:为了确保彻底卸载,可以考虑对系统进行一次还原点设置,以便在后续发现...
这种方法对于那些希望彻底卸载Oracle软件,或者解决由于残留文件导致的安装问题的用户来说非常有用。下面将对这些步骤进行详细解析,帮助用户理解和执行。 1. **停止Oracle服务**:在开始任何卸载过程之前,确保...
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application:同样,清除与Oracle日志相关的任何条目。 #### 步骤四:删除环境变量中的Oracle路径 检查系统环境变量,尤其是CLASSPATH和PATH,...
找到Oracle的数据库文件存放位置,如`ORACLE_HOME\oradata`,删除所有的数据文件(.dbf)、控制文件(.ctl)、重做日志文件(.log)以及归档日志文件。注意,如果数据有价值,需先进行备份。 5. **清理临时文件和...
在IT领域,Oracle数据库系统是企业级应用广泛的数据管理解决方案之一。然而,有时由于各种原因,我们可能需要卸载并重新安装Oracle。本篇将详细阐述如何彻底卸载Oracle,确保下一次安装的顺利进行。 首先,理解...
1. 清理与Oracle相关的临时文件、日志文件等。 2. 检查系统根目录(如`C:\`),删除与Oracle相关的配置文件(如`ORACLE.ini`、`oradim73.ini`、`oradim80.ini`、`oraodbc.ini`等)。 3. 检查系统配置文件`WIN.INI`中...
Oracle Data Guard(DG)是Oracle数据库系统中的一种高可用性和灾难恢复解决方案,它允许在主数据库和一个或多个备用数据库之间创建和维护实时同步。在Oracle DG环境中,归档日志是实现数据保护和故障切换的关键组件...
8. **清理日志文件**:通过事件查看器删除Oracle相关的日志记录。 #### 三、Oracle 11g 正确卸载步骤详解 正确的卸载方法应该遵循Oracle官方推荐的过程,以确保卸载过程的安全和彻底性。下面详细介绍Oracle 11g的...