请教各位专家Oracle 9i 恢复一例,进入死胡同了,谢谢!

[复制链接]
查看11 | 回复9 | 2011-11-1 16:20:28 | 显示全部楼层 |阅读模式
本帖最后由 sincereli 于 2014-9-10 11:48 编辑
单位一台win2003上的oracle 9i 数据库最近因为磁盘故障系统崩了,用的同事告诉我oracle是缺省安装,没有配归档模式,也没做过完全备份,只有一些dmp的逻辑备份文件。哎~~
没办法,我搭了一台同样配置的虚拟机安装了win2003并安装了oracle 9i,并通过工具盘将原系统中的oracle目录整个拷了出来,并将admin目录和oradata目录拷到虚拟机下面,启动sqlplus:
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on 星期二 9月 9 16:02:47 2014
Copyright (c) 1982, 2002, Oracle Corporation.All rights reserved.
SQL> conn /as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area135338868 bytes
Fixed Size
453492 bytes
Variable Size
109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers
667648 bytes
数据库装载完毕。
ORA-01122: 数据库文件 3 验证失败
ORA-01110: 数据文件 3: 'D:\ORACLE\ORADATA\ORAGEO\CWMLITE01.DBF'
ORA-01251: 文件号3的未知文件标题版本读取
SQL>
SQL> select instance_name, status from v$instance;
INSTANCE_NAMESTATUS
---------------- ------------
orageo
MOUNTED
SQL>
SQL> select * from v$recover_file;
FILE# ONLINEONLINE_ ERROR
CHANGE# TIME
---------- ------- ------- --------------- ---------- ----------
3 ONLINEONLINEWRONG FILE TYPE
0
5 ONLINEONLINEWRONG FILE TYPE
0
SQL>
SQL> select t.name tablespace, f.file# f_no, f.name datafile, f.status, f.creation_time
creation from v$tablespace t, v$datafile f where t.ts# = f.ts# order by t.name;
TABLESPACE F_NO
DATAFILE
STATUSCREATION
---------- ---- ---------------------------------------- ------- ----------
CWMLITE 3 D:\ORACLE\ORADATA\ORAGEO\CWMLITE01.DBF ONLINE12-5月 -02
DRSYS 4 D:\ORACLE\ORADATA\ORAGEO\DRSYS01.DBF ONLINE12-5月 -02
EXAMPLE 5 D:\ORACLE\ORADATA\ORAGEO\EXAMPLE01.DBF ONLINE12-5月 -02
GEOS 11 D:\ORACLE\ORADATA\ORAGEO\GEOS.DBFONLINE17-4月 -13
INDX
6 D:\ORACLE\ORADATA\ORAGEO\INDX01.DBFONLINE12-5月 -02
ODM
7 D:\ORACLE\ORADATA\ORAGEO\ODM01.DBF ONLINE12-5月 -02
SYSTEM 1 D:\ORACLE\ORADATA\ORAGEO\SYSTEM01.DBFSYSTEM12-5月 -02
TOOLS
8 D:\ORACLE\ORADATA\ORAGEO\TOOLS01.DBF ONLINE12-5月 -02
UNDOTBS1 2 D:\ORACLE\ORADATA\ORAGEO\UNDOTBS01.DBF ONLINE12-5月 -02
USERS 9 D:\ORACLE\ORADATA\ORAGEO\USERS01.DBF ONLINE12-5月 -02
XDB
10 D:\ORACLE\ORADATA\ORAGEO\XDB01.DBF ONLINE12-5月 -02
已选择12行。
SQL>
-----到这里我知道是CWMLITE01.DBF和EXAMPLE01.DBF数据文件有问题了,庆幸不是我所需要的GEOS表空间数据文件出了错。
-----所以我打算直接将这两个出了问题的数据文件离线,但是没有成功。因为数据库打不开,表空间自然也删不掉。
SQL> alter database datafile 'd:\oracle\oradata\ORAGEO\CWMLITE01.DBF' offline;
alter database datafile 'd:\oracle\oradata\ORAGEO\CWMLITE01.DBF' offline
*
ERROR 位于第 1 行:
ORA-01145: 除非启用了介质恢复,否则不允许紧急脱机
-----因为没有可用的完全备份和归档日志,也没法做介质恢复。可以直接删除该数据文件吗?
SQL> alter database datafile 'd:\oracle\oradata\ORAGEO\CWMLITE01.DBF' offline drop;
数据库已更改。
SQL> alter database datafile 'd:\oracle\oradata\ORAGEO\EXAMPLE01.DBF' offline drop;
数据库已更改。
SQL>
SQL> select * from v$recover_file;
FILE# ONLINEONLINE_ ERROR
CHANGE# TIME
----- ------- ------- --------------- ---------- ----------
3 OFFLINE OFFLINE WRONG FILE TYPE
0
5 OFFLINE OFFLINE WRONG FILE TYPE
0
SQL>
SQL> shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> conn /as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area135338868 bytes
Fixed Size
453492 bytes
Variable Size
109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers
667648 bytes
数据库装载完毕。
ORA-00368: 重做日志块中的校验和错误
ORA-00353: 日志损坏接近块 112 更改 95660348 时间 07/14/2014 09:47:23
ORA-00312: 联机日志 2 线程 1: 'D:\ORACLE\ORADATA\ORAGEO\REDO02.LOG'
SQL> select group#, sequence#, thread#, members, status from v$log;
GROUP#SEQUENCE#THREAD#MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
1368
1
1 INACTIVE
2369
1
1 CURRENT
3367
1
1 INACTIVE
SQL> select group#, status, member from v$logfile;
GROUP# STATUSMEMBER
---------- ------- ----------------------------------------
3 D:\ORACLE\ORADATA\ORAGEO\REDO03.LOG
2 D:\ORACLE\ORADATA\ORAGEO\REDO02.LOG
1 D:\ORACLE\ORADATA\ORAGEO\REDO01.LOG
-----在参数文件中添加_allow_resetlogs_corruption=TRUE,并重启数据库,运行recover database until cancel;:
SQL> recover database until cancel;
ORA-00279: 更改 95660200 (在 07/14/2014 09:46:19 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\ORA92\RDBMS\ARC00369.001
ORA-00280: 更改 95660200 对于线程 1 是按序列 # 369 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件1需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'D:\ORACLE\ORADATA\ORAGEO\SYSTEM01.DBF'
ORA-01112: 未启动介质恢复
SQL>
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01092: ORACLE 例程终止。强行断开连接
-----到这里数据库直接崩了,查看报警文件:
Media Recovery Log
ORA-279 signalled during: ALTER DATABASE RECOVERdatabase until cancel...
Tue Sep 09 23:20:34 2014
ALTER DATABASE RECOVERCANCEL
Tue Sep 09 23:20:34 2014
ORA-1547 signalled during: ALTER DATABASE RECOVERCANCEL...
Tue Sep 09 23:20:34 2014
ALTER DATABASE RECOVER CANCEL
ORA-1112 signalled during: ALTER DATABASE RECOVER CANCEL ...
Tue Sep 09 23:21:45 2014
alter database open resetlogs
Tue Sep 09 23:21:45 2014
RESETLOGS is being done without consistancy checks. This may result
in a corrupted database. The database should be recreated.
RESETLOGS after incomplete recovery UNTIL CHANGE 95660200
Resetting resetlogs activation ID 3842846172 (0xe50d2ddc)
Tue Sep 09 23:21:46 2014
Assigning activation ID 3887689109 (0xe7b96d95)
Thread 1 opened at log sequence 1
Current log# 2 seq# 1 mem# 0: D:\ORACLE\ORADATA\ORAGEO\REDO02.LOG
Successful open of redo thread 1.
Tue Sep 09 23:21:46 2014
SMON: enabling cache recovery
Tue Sep 09 23:21:46 2014
Errors in file d:\oracle\admin\orageo\udump\orageo_ora_2560.trc:
ORA-00704: 引导程序进程失败 在网上查了下,这个好像是蛮严重的错误
ORA-00604: 递归 SQL 层 1 出现错误
ORA-08103: 对象不再存在
Tue Sep 09 23:21:46 2014
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 2560
ORA-1092 signalled during: alter database open resetlogs...
-----实在搞不定了,初涉备份恢复领域,学艺不精,请各位专家帮忙看看哪里做得不对,该怎么修改,万分感激!!谢谢!

回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
帮顶,是不是可以把有问题的REDO.LOG删除,
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
不是有些Dmp文件,创建新的实例,用imp试看看...
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
将表空间 offline,在mount状态下搞下,
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
加我qq(107644445),我给你看看,能否协助处理好该库
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
是否恢复完成了?
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
diashad 发表于 2014-9-10 08:58
将表空间 offline,在mount状态下搞下,

不行,数据库打开了才能offline表空间。
SQL> alter tablespace example offline;
alter tablespace example offline
*
ERROR 位于第 1 行:
ORA-01109: 数据库未打开
SQL>
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
本帖最后由 xifenfei 于 2014-9-10 12:05 编辑
sincereli 发表于 2014-9-10 11:43
不行,数据库打开了才能offline表空间。
SQL> alter tablespace example offline;

只能open之后才能够操作表空间
offline 数据文件可以,但是我看了,你的好像都是业务的异常,不要轻易offline
使用http://www.xifenfei.com/oracle_recovery_check检查数据库,发我html文件,我看看

回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
开始的数据库数据文件报错,怀疑是数据文件本身损坏导致实例无法open,后期再offline表空间的情况下resetlogs数据库肯定是会报错的。
建议你将实例启动到mount状态下,将控制文件备份成trace脚本,并重建控制文件,在重建控制文件的时候,在脚本里不要写有问题的这两个数据文件即可。
重建控制文件见下面的教程。
http://www.eygle.com/faq/How.To. ... ate.Controlfile.htm
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
飞总要是搞不定,99%就挂了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行