Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

999

积分

1

好友

942

主题
1#
发表于 2017-4-13 20:29:07 | 查看: 1362| 回复: 0

单位一台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 Area  135338868 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_NAME    STATUS
----------------           ------------
orageo                 MOUNTED
SQL>
SQL> select * from v$recover_file;
     FILE# ONLINE  ONLINE_ ERROR              CHANGE# TIME
---------- ------- ------- --------------- ---------- ----------
         3 ONLINE  ONLINE  WRONG FILE TYPE          0
         5 ONLINE  ONLINE  WRONG 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                 STATUS  CREATION
---------- ---- ---------------------------------------- ------- ----------
CWMLITE       3 D:\ORACLE\ORADATA\ORAGEO\CWMLITE01.DBF   ONLINE  12-5月 -02
DRSYS           4 D:\ORACLE\ORADATA\ORAGEO\DRSYS01.DBF     ONLINE  12-5月 -02
EXAMPLE       5 D:\ORACLE\ORADATA\ORAGEO\EXAMPLE01.DBF   ONLINE  12-5月 -02
GEOS           11 D:\ORACLE\ORADATA\ORAGEO\GEOS.DBF        ONLINE  17-4月 -13
INDX             6 D:\ORACLE\ORADATA\ORAGEO\INDX01.DBF      ONLINE  12-5月 -02
ODM             7 D:\ORACLE\ORADATA\ORAGEO\ODM01.DBF       ONLINE  12-5月 -02
SYSTEM         1 D:\ORACLE\ORADATA\ORAGEO\SYSTEM01.DBF    SYSTEM  12-5月 -02
TOOLS          8 D:\ORACLE\ORADATA\ORAGEO\TOOLS01.DBF     ONLINE  12-5月 -02
UNDOTBS1     2 D:\ORACLE\ORADATA\ORAGEO\UNDOTBS01.DBF   ONLINE  12-5月 -02
USERS           9 D:\ORACLE\ORADATA\ORAGEO\USERS01.DBF     ONLINE  12-5月 -02
XDB            10 D:\ORACLE\ORADATA\ORAGEO\XDB01.DBF       ONLINE  12-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# ONLINE  ONLINE_ 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 Area  135338868 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
---------- ---------- ---------- ---------- ----------------
         1        368          1          1 INACTIVE
         2        369          1          1 CURRENT
         3        367          1          1 INACTIVE
SQL> select group#, status, member from v$logfile;
    GROUP# STATUS  MEMBER
---------- ------- ----------------------------------------
         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 进行的
指定日志: {<RET>=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 RECOVER  database until cancel  ...
Tue Sep 09 23:20:34 2014
ALTER DATABASE RECOVER    CANCEL  
Tue Sep 09 23:20:34 2014
ORA-1547 signalled during: ALTER DATABASE RECOVER    CANCEL  ...
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...

-----实在搞不定了,初涉备份恢复领域,学艺不精,请各位专家帮忙看看哪里做得不对,该怎么修改,万分感激!!谢谢!



不行,数据库打开了才能offline表空间。

SQL> alter tablespace example offline;
alter tablespace example offline
*
ERROR 位于第 1 行:
ORA-01109: 数据库未打开

SQL>
下载专业ORACLE数据库恢复工具PRM-DUL  For Oracle http://www.parnassusdata.com/

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638  QQ: 47079569     邮箱:service@parnassusdata.com
您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-20 13:31 , Processed in 0.044038 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569