冷备份你的数据库。 你在服务器端,用SVRMGRL命令
SVRMGRL> connect internal;
SVRMGRL> SHUTDOWN IMMEDIATE; -- or NORMAL
SVRMGRL> STARTUP MOUNT;
SVRMGRL> alter database datafile '/Oracle/oradata/ORCL/users01.dbf' offline drop;
SVRMGRL> ALTER DATABASE OPEN;
把这个文件在数据库删除,因为这个文件对应的表空间是专门给一般
用户用的,删除对数据库没有影响。
D:/ORACLE/ORADATA/ORCL/REDO03.LOG 被不正确的文件覆盖了
属于联机日志损坏,修复一下就好了
c:/cd oracle9/ora92/bin 总之是 bin 文件进去就行
c:/......bin>sqlplus /nolog
SQL>connect sys/sting as sysdba
SQL> shutdown abort ; ORACLE 例程已经关闭
SQL> startup nomount ; ORACLE 例程已经启动。
SQL>startup 数据库装载完毕之后会提示出错的联机日志块
进行不完全恢复:
SQL> recover database until cancel 仿佛要多做几次
以sys登录为sysdba
sqlplus /NOLOG
SQL>connect sys/用户口令as sysdba
SQL>shutdown normal
SQL>startup mount
SQL>alter database open
SQL>shutdown normal
SQL>startup
结果出现
SQL> alter database open
2 ;
alter database open
看看是哪个数据文件出现问题 ,然后不断反复尝试
SQL> alter database create datafile XXX; XXX 表示错误的数据文件号
SQL> alter database datafile XXX offline drop; 重复上述步骤,并且不断陆连接,直到不报错为止
也许能用的上的:
SQL>alter database clear unarchivelog logfile group XXX, XXX表示你的日志文件组,进行恢复
SQL>alter database open resetlogs; 从新打开数据库用日志文件
其他人的回答
方法 一
重新创建同名的dbf文件,在从备份文件里进行恢复
如果这个文件不需要了,
shutdown immediate
startup mount
alter database datafile 'c:/xxx.dbf' drop offline (这里的语法记的不是很清楚,自己查一下)
alter database open
方法 二
[Q]丢失一个数据文件,但是没有备份,怎么样打开数据库
[A]如果没有备份只能是删除这个数据文件了,会导致相应的数据丢失。
SQL>startup mount
--ARCHIVELOG模式命令
SQL>Alter database datafile 'file name' offline;
--NOARCHIVELOG模式命令
SQL>Alter database datafile 'file name' offline drop;
SQLl>Alter database open;
注意:该数据文件不能是系统数据文件
SQL>select group#,sequence#,archived,status from v$log; 查看连机日志文件的一些属性
我进行操作的步骤,如下
SQL> alter database clear unarchived logfile group 1
2 /
alter database clear unarchived logfile group 1
*
ERROR 位于第 1 行:
ORA-01624: 线程1的紧急恢复需要日志1
ORA-00312: 联机日志 1 线程 1: 'D:/ORACLE/ORADATA/OEMREP3/REDO01.LOG'
SQL> recover database until cancel
ORA-00283: 恢复会话因错误而取消
ORA-01124: 无法恢复数据文件 1 - 文件在使用中或在恢复中
ORA-01110: 数据文件 1: 'D:/ORACLE/ORADATA/OEMREP3/SYSTEM01.DBF'
先让该数据文件脱机,就可以打开数据库
C:/>svrmgrl
svrmgrl>connect internal
svrmgrl>shutdown
svrmgrl>startup mount
--ARCHIVELOG模式命令,文件名要大写
svrmgrl>alter database datafile 'C:/TEST.ORA' offline;
--NOARCHIVELOG模式命令
svrmgrl>alter database datafile 'C:/TEST.ORA' offline drop;
svrmgrl>alter database open;
--查询数据文件联、脱机状态
SQL> select file#,name,status from v$datafile;
SQL> drop tablespace test;
表空间已丢弃。
丢失联机日志文件
分两种情况处理
1、丢失的是非活动的日志文件;
2、丢失的是当前激活的日志文件。
如果是第一种情况,而发生故障的日志文件组又具有多个成员,可以先将数据库shutdown,然后用操作系统命令将损坏日志文件组中好的日志成员文件把损坏的成员文件覆盖(在同一个日志成员组中的所有日志文件的各为镜象的),如果其物理位置不可用可将其拷贝到新的驱动器上,使用alter database rename file ‘xxxx’ to ‘xxxx’改变文件位置,之后启动数据库,如果正常马上进行一个冷备份。如果损坏的日志组中只有一个日志成员,先mount上数据库,将其转换为noarchivelog模式,执行alter database add logfile member ‘xxx’ to group ‘x’给相关组增加一个成员,再执行alter database drop logfile member ‘bad_file’将损坏的日志文件删除,由于数据库的结构发生变动需要备份控制文件,之后将数据库改回archivelog模式,做一个冷备份。
如果丢失的是当前激活的日志文件,数据库又没有镜像而且当前日志组中所有成员均变为不可用。首先将数据库shutdown abort,从最近的一次全备份中恢复所有的数据文件,将数据库启动到mount状态。如果原来的日志文件物理位置不可用,使用alter database rename file ‘xxx’ to ‘xxx’改变文件的存放位置。然后,使用recover database until cancel命令来恢复数据库,直到提示最后一个归档日志运用完之后,输入cancel。之后用alter database open resetlogs打开数据库,如果没有问题,立即进行一个冷备份。注意!所有包含在损坏的redo log中的信息将会丢失,也就是说数据库崩溃前已经提交的数据有可能会丢失。这对于某些要求很高的应用将会损失惨重,因此应尽量使每个日志组具有多个日志成员,并且放置在不同的驱动器上防止发生介质故障。