专业Oracle数据库恢复技术支持

数据库作为企业的核心,如果数据库因损坏无法正常运行,导致数据丢失,将给企业带来无法挽回的经济损坏。当您的数据库出现故障,又没有有效的备份之时,我们就是您的最后一道防线,尽最大可能帮您挽救数据库,减少损失。我们有几百套Oracle数据库恢复经历;版本从ORACLE 7.3、ORACLE 8/8I,ORACLE 9I、ORACLE 10G,ORACLE 11G和ORACLE 12C;平台有Linux、Windows、AIX、HP-UNIX、SOLARIS等;客户从西藏到海南,从黑龙江到贵州遍布中国所有省份;客户有医疗、军队、政府、制造、超市、社保、医保、物流、互联网、金融、医院、政务、公安等各个行业。不管你是什么样的数据库故障,不管你找过多少个人和公司恢复没成功,我们都是你的一个值得考虑选择。我们不能承诺全国技术第一,但我们可以保证如果我们不能恢复的Oracle数据库,你的数据库几乎无人可以恢复成功。我们承诺:所有数据库恢复不成功,未达到实现承诺不收取任何费用

如果需要专业ORACLE数据库恢复技术支持,请联系我们
Phone:17813235971    Q Q:107644445QQ咨询惜分飞    E-Mail:dba@xifenfei.com

主要支持数据库恢复内容但不仅限如此
drop user 恢复
drop table 恢复
误删除表空间恢复
truncate table 恢复
误delete/update 恢复
丢失system文件数据库恢复
asm 磁盘被意外格式化恢复
bootstarp$中对象验证损坏
asm磁盘组损坏,无法正常mount
操作系统层面误删除数据文件恢复
数据库因为undo损坏/丢失无法正常启动
数据库因为某些数据块损坏不能正常工作
数据库因为ORA-600错误而不能正常启动
exp dmp文件损坏,无法正常导入数据库恢复
数据库因为控制文件损坏/丢失无法正常启动
数据库因为redo损坏/丢失导致无法正常启动
数据库因为数据文件损坏/丢失无法正常启动
数据库因为操作系统损坏,只有数据文件恢复
数据库因存储异常,导致数据库无法正常启动
数据库因为丢失归档导致数据文件无法online
数据库错误offline system文件导致无法启动
expdp dmp文件损坏,无法正常导入数据库恢复
部分asm磁盘丢失导致asm 磁盘组无法正常使用
数据库因为错误的resetlogs操作导致恢复无法继续
数据库因为断电、异常关机等原因导致不能正常启动

以下是比较典型的ORACLE故障恢复
system rollback异常恢复
ORA-00604 ORA-00607 ORA-00600[4194]

Thu Jul 26 13:21:11 2012
Recovery of Online Redo Log: Thread 1 Group 1 Seq 3994 Reading mem 0
  Mem# 0: /orasvr/mispdata/redo01.log
Block recovery completed at rba 3994.5.16, scn 0.89979533
Thu Jul 26 13:21:11 2012
Errors in file /orasvr/admin/mispdata/udump/mispdata_ora_2865.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [4194], [31], [2], [], [], [], [], []
Error 604 happened during db open, shutting down database
USER: terminating instance due to error 604
Instance terminated by USER, pid = 2865
ORA-1092 signalled during: ALTER DATABASE OPEN...

undo segment异常恢复
ORA-00704 ORA-00604 ORA-01555

Fri May  4 21:04:21 2012
select ctime, mtime, stime from obj$ where obj# = :1
Fri May  4 21:04:21 2012
Errors in file /oracle/admin/standdb/udump/perfdb_ora_1286288.trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-01555: snapshot too old: rollback segment number 40 with name "_SYSSMU40$" too small
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 1286288
ORA-1092 signalled during: alter database open resetlogs...

ORA-00704 ORA-00604 ORA-01173

MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Wed Feb 12 10:16:00 2014
SMON: enabling cache recovery
Errors in file H:\ORACLE\diag\rdbms\orcl\orcl\trace\orcl_ora_9232.trc:
ORA-01173: data dictionary indicates missing data file from system tablespace
Errors in file H:\ORACLE\diag\rdbms\orcl\orcl\trace\orcl_ora_9232.trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-01173: data dictionary indicates missing data file from system tablespace
Errors in file H:\ORACLE\diag\rdbms\orcl\orcl\trace\orcl_ora_9232.trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-01173: data dictionary indicates missing data file from system tablespace
Error 704 happened during db open, shutting down database
USER (ospid: 9232): terminating the instance due to error 704
Instance terminated by USER, pid = 9232
ORA-1092 signalled during: alter database open resetlogs...

obj$事务异常恢复
ORA-00704 ORA-00600[4000]

Thu Feb 28 19:29:10 2013
SMON: enabling cache recovery
Thu Feb 28 19:29:11 2013
Errors in file /u1/PROD/prodora/db/tech_st/10.2.0/admin/PROD_oracle/udump/prod_ora_20989.trc:
ORA-00600: internal error code, arguments: [4000], [50], [], [], [], [], [], []
Thu Feb 28 19:29:13 2013
Incremental checkpoint up to RBA [0x1.3.0], current log tail at RBA [0x1.3.0]
Thu Feb 28 19:29:13 2013
Errors in file /u1/PROD/prodora/db/tech_st/10.2.0/admin/PROD_oracle/udump/prod_ora_20989.trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00600: internal error code, arguments: [4000], [50], [], [], [], [], [], []
Thu Feb 28 19:29:13 2013
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 20989
ORA-1092 signalled during: ALTER DATABASE OPEN RESETLOGS...

IO异常恢复
ORA-01115 ORA-01110 ORA-27070 OSD-04016

Tue May 14 15:32:10 2013
Completed redo scan
 16941 redo blocks read, 1106 data blocks need recovery
Tue May 14 15:32:17 2013
Errors in file d:\oracle\product\10.2.0\admin\water\bdump\water_p002_1472.trc:
ORA-01115: IO error reading block from file 6 (block # 81951)
ORA-01110: data file 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\WATER\YD_DATA01.DBF'
ORA-27070: async read/write failed
OSD-04016: 异步 I/O 请求排队时出错。
O/S-Error: (OS 23) 数据错误(循环冗余检查)。

常见错误信息
表或者索引坏块相关错误
ORA-01578/ORA-08103/ORA-01410/ORA-08102/ORA-600 kdsgrp1/ORA-600 qertbfetchbyrowid/ORA-01499/ORA-01555/ORA-26040/ORA-27046

控制文件异常
ORA-00202/ORA-600 kccsbck_first/ORA-600 kccscf_1/ORA-600[kccsbck_first]/ORA-600 kccsbck_first/ORA-00205/ORA-600 kccpb_sanity_check_2

REDO或者UNDO异常
ORA-00376/ORA-00600 4097/ORA-01595/ORA-600 4194/ORA-600 4193/ORA-600 kcfrbd_3/ORA-00600 4137/ORA-01594/ORA-01555/ORA-00704/ORA-00604/ORA-00607/ORA-600 4000/ORA-00600[3705]/ORA-00316/ORA-00312/ORA-00327/ORA-01623/ORA-01624/ORA-01194/ORA-600 2662/ORA-00368/ORA-00353/ORA-00305/ORA-00340/ORA-00345/ORA-00354

各种ORA-600错误
ORA-600 4497/ORA-600 6947/ORA-600 2662/ORA-600 4194/ORA-600 4193/ORA-00600 4137/ORA-600 4000/ORA- 600 kcrf_resilver_log_1/ORA- 600 kdxlin:psno out of range/ORA-600 3020/ORA-600 kccpb_sanity_check_2/ORA-600 3705/ORA-600 kccscf_1/ORA-600 kghstack_free2/ORA-600 kcfrbd_3/ORA-600 ktbdchk1: bad dscn/ORA-600 2252/ORA-600 kcratr_nab_less_than_odr/ORA-600 kccsbck_first/ORA-600 kcratr1_lostwrt/ORA-600 ktspNextL1:4/ORA-600 13013/ORA-600 kdsgrp1/ORA-600 kmgs_parameter_update_timeout_1/ORA-600 kcbgtcr_1/ORA-600 kcbgtcr_1a/ORA-600 kcbgtcr_3/ORA-600 kcbgtcr_4/ORA-600 kcbgtcr_5/ORA-600 kcbgtcr_6/ORA-600 kcbgtcr_7/ORA-600 kcbgtcr_10/ORA-600 kcbgtcr_12/ORA-600 kcbgtcr_13/ORA-600 qertbfetchbyrowid/ORA-600 kmgs_parameter_update_timeout_1

为了能快速评估你的库故障,恢复难以程度,请使用Oracle Database Recovery Check检查数据库,生成html, alert日志, trace文件发我(adb@xifenfei.com)。
近期无备份数据库恢复主要案例

专业Oracle数据库恢复技术支持》有 3 条评论

  1. 惜分飞 说:
    ORA-1578 ORA-1578 is reported when a block is thought to be corrupt on read.
    ORA-1410 This error is raised when an operation refers to a ROWID in a table for which there is no such row.
    The reference to a ROWID may be implicit from a WHERE CURRENT OF clause or directly from a WHERE ROWID=… clause.
    ORA 1410 indicates the ROWID is for a BLOCK that is not part of this table.
    ORA-8103 The object has been deleted by another user since the operation began.
    If the error is reproducible, following may be the reasons:-
    a.) The header block has an invalid block type.
    b.) The data_object_id (seg/obj) stored in the block is different than the data_object_id stored in the segment header. See dba_objects.data_object_id and compare it to the decimal value stored in the block (field seg/obj).
    ORA-8102 An ORA-08102 indicates that there is a mismatch between the key(s) stored in the index and the values stored in the table. What typically happens is the index is built and at some future time, some type of corruption occurs, either in the table or index, to cause the mismatch.
    ORA-1498 Generally this is a result of an ANALYZE … VALIDATE … command.
    This error generally manifests itself when there is inconsistency in the data/Index block. Some of the block check errors that may be found:-
    a.) Row locked by a non-existent transaction
    b.) The amount of space used is not equal to block size
    c.) Transaction header lock count mismatch.
    While support are processing the tracefile it may be worth the re-running the ANALYZE after restarting the database to help show if the corruption is consistent or if it ‘moves’.
    Send the tracefile to support for analysis.
    If the ANALYZE was against an index you should check the whole object. Eg: Find the tablename and execute:
    ANALYZE TABLE xxx VALIDATE STRUCTURE CASCADE;
    ORA-1499 An error occurred when validating an index or a table using the ANALYZE command.
    One or more entries does not point to the appropriate cross-reference.
    ORA-26040 Trying to access data in block that was loaded without redo generation using the NOLOGGING/UNRECOVERABLE option.
    This Error raises always together with ORA-1578
    ORA-600 [12700] Oracle is trying to access a row using its ROWID, which has been obtained from an index.
    A mismatch was found between the index rowid and the data block it is pointing to. The rowid points to a non-existent row in the data block. The corruption can be in data and/or index blocks.
    ORA-600 [12700] can also be reported due to a consistent read (CR) problem.
    ORA-600 [3020] This is called a ‘STUCK RECOVERY’.
    There is an inconsistency between the information stored in the redo and the information stored in a database block being recovered.
    ORA-600 [4194] A mismatch has been detected between Redo records and rollback (Undo) records.
    We are validating the Undo record number relating to the change being applied against the maximum undo record number recorded in the undo block.
    This error is reported when the validation fails.
    ORA-600 [4193] A mismatch has been detected between Redo records and Rollback (Undo) records.
    We are validating the Undo block sequence number in the undo block against the Redo block sequence number relating to the change being applied.
    This error is reported when this validation fails.
    ORA-600 [4137] While backing out an undo record (i.e. at the time of rollback) we found a transaction id mis-match indicating either a corruption in the rollback segment or corruption in an object which the rollback segment is trying to apply undo records on.
    This would indicate a corrupted rollback segment.
    ORA-600 [6101] Not enough free space was found when inserting a row into an index leaf block during the application of undo.
    ORA-600 [2103] Oracle is attempting to read or update a generic entry in the control file.
    If the entry number is invalid, ORA-600 [2130] is logged.
    ORA-600 [4512] Oracle is checking the status of transaction locks within a block.
    If the lock number is greater than the number of lock entries, ORA-600 [4512] is reported followed by a stack trace, process state and block dump.
    This error possibly indicates a block corruption.
    ORA-600 [2662] A data block SCN is ahead of the current SCN.
    The ORA-600 [2662] occurs when an SCN is compared to the dependent SCN stored in a UGA variable.
    If the SCN is less than the dependent SCN then we signal the ORA-600 [2662] internal error.
    ORA-600 [4097] We are accessing a rollback segment header to see if a transaction has been committed.
    However, the xid given is in the future of the transaction table.
    This could be due to a rollback segment corruption issue OR you might be hitting the following known problem.
    ORA-600 [4000] It means that Oracle has tried to find an undo segment number in the dictionary cache and failed.
    ORA-600 [6006] Oracle is undoing an index leaf key operation. If the key is not found, ORA-00600 [6006] is logged.
    ORA-600[6006] is usually caused by a media corruption problem related to either a lost write to disk or a corruption on disk.
    ORA-600 [4552] This assertion is raised because we are trying to unlock the rows in a block, but receive an incorrect block type.
    The second argument is the block type received.
    ORA-600[6856] Oracle is checking that the row slot we are about to free is not already on the free list.
    This internal error is raised when this check fails.
    ORA-600[13011] During a delete operation we are deleting from a view via an instead-of trigger or an Index organized table and have exceeded a 5000 pass count when we raise this exception.
    ORA-600[13013] During the execution of an UPDATE statement, after several attempts (Arg [a] passcount) we are unable to get a stable set of rows that conform to the WHERE clause.
    ORA-600[13030]
    ORA-600[25012] We are trying to generate the absolute file number given a tablespace number and relative file number and cannot find a matching file number or the file number is zero.
    ORA-600[25026] Looking up/checking a tablespace
    invalid tablespace ID and/or rdba found
    ORA-600[25027] Invalid tsn and/or rfn found
    ORA-600 [kcbz_check_objd_typ_3] An object block buffer in memory is checked and is found to have the wrong object id. This is most likely due to corruption.
    ORA-600[kddummy_blkchk]

    ORA-600[kdblkcheckerror]

    ORA-600[kddummy_blkchk] is for 10.1/10.2 and ORA-600[kdblkcheckerror] for 11 onwards.
    ORA-600[ktadrprc-1]
    ORA-600[ktsircinfo_num1] This exception occurs when there are problems obtaining the row cache information correctly from sys.seg$. In most cases there is no information in sys.seg$.
    ORA-600[qertbfetchbyrowid]
    ORA-600[ktbdchk1-bad dscn] This exception is raised when we are performing a sanity check on the dependent SCN and fail.
    The dependent scn is greater than the current scn.
  2. 惜分飞 说:

    1.丢失数据文件(ORA-01157)
    SQL> startup
    ORACLE instance started.

    Total System Global Area 260046848 bytes
    Fixed Size 1266896 bytes
    Variable Size 83888944 bytes
    Database Buffers 167772160 bytes
    Redo Buffers 7118848 bytes
    Database mounted.
    ORA-01157: cannot identify/lock data file 4 – see DBWR trace file
    ORA-01110: data file 4: ‘/u01/oracle/oradata/XFF/users01.dbf’
    数据文件丢失,处理方法:
    1).使用备份还原丢失数据然后
    2).非undo,system可以offline 掉该文件继续打开数据库
    3).如果是undo需要谨慎,可能导致ORA-00376错误
    4).如果是system offline可能导致ORA-01147

    2. 丢失redo(ORA-00313)
    SQL> startup
    ORACLE instance started.

    Total System Global Area 260046848 bytes
    Fixed Size 1266896 bytes
    Variable Size 83888944 bytes
    Database Buffers 167772160 bytes
    Redo Buffers 7118848 bytes
    Database mounted.
    ORA-00313: open failed for members of log group 1 of thread 1
    ORA-00312: online log 1 thread 1: ‘/u01/oracle/oradata/XFF/redo01.log’
    ORA-27037: unable to obtain file status
    Linux Error: 2: No such file or directory
    Additional information: 3
    redo文件丢失,处理步骤:
    1).查询v$log确认该redo是否是current或者active
    2).确定该redo是否被归档
    3).如果是inactive使用clear 或者 clear unarchived
    4).如果是active或者current,需要通过不完全恢复,甚至隐含参数等方法解决

    3. 丢失undo(ORA-01092 ORA-00376)
    SQL> startup
    ORACLE instance started.

    Total System Global Area 260046848 bytes
    Fixed Size 1266896 bytes
    Variable Size 83888944 bytes
    Database Buffers 167772160 bytes
    Redo Buffers 7118848 bytes
    Database mounted.
    ORA-01157: cannot identify/lock data file 2 – see DBWR trace file
    ORA-01110: data file 2: ‘/u01/oracle/oradata/XFF/undotbs01.dbf’

    SQL> alter database datafile 2 offline drop;

    Database altered.

    SQL> alter database open;
    alter database open
    *
    ERROR at line 1:
    ORA-01092: ORACLE instance terminated. Disconnection forced

    ORA-01092是前台错误,通过查询alert日志发现后台错误主要是:
    Fri Oct 25 08:16:36 2013
    Errors in file /u01/oracle/admin/XFF/bdump/xff_smon_7437.trc:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-00376: file 2 cannot be read at this time
    ORA-01110: data file 2: ‘/u01/oracle/oradata/XFF/undotbs01.dbf’
    因为undo文件丢失,有事务无法正常回滚,从而出现该错误,需要通过使用隐含参数屏蔽事务来解决

    4. 丢失system(ORA-01147)
    SQL> startup
    ORACLE instance started.

    Total System Global Area 260046848 bytes
    Fixed Size 1266896 bytes
    Variable Size 83888944 bytes
    Database Buffers 167772160 bytes
    Redo Buffers 7118848 bytes
    Database mounted.
    ORA-01157: cannot identify/lock data file 1 – see DBWR trace file
    ORA-01110: data file 1: ‘/u01/oracle/oradata/XFF/system01.dbf’

    SQL> alter database datafile 1 offline drop;

    Database altered.

    SQL> alter database open;
    alter database open
    *
    ERROR at line 1:
    ORA-01147: SYSTEM tablespace file 1 is offline
    ORA-01110: data file 1: ‘/u01/oracle/oradata/XFF/system01.dbf’
    system表空间是系统表空间,该表空间中的数据文件不能被offline,如果该表空间数据文件丢失,数据库无法正常方法,可以考虑使用bbed模拟system文件欺骗数据库(非file# 1)或者使用dul抽取数据

    5. 丢失控制文件(ORA-00205 ORA-00202)
    SQL> startup
    ORACLE instance started.

    Total System Global Area 260046848 bytes
    Fixed Size 1266896 bytes
    Variable Size 83888944 bytes
    Database Buffers 167772160 bytes
    Redo Buffers 7118848 bytes
    ORA-00205: error in identifying control file, check alert log for more info

    ORA-00205是前台错误,具体需要结合日志分析:
    Fri Oct 25 08:35:40 2013
    ALTER DATABASE MOUNT
    Fri Oct 25 08:35:40 2013
    ORA-00202: control file: ‘/u01/oracle/oradata/XFF/control01.ctl’
    ORA-27037: unable to obtain file status
    Linux Error: 2: No such file or directory
    Additional information: 3
    这里可以看出来,是因为控制问文件丢失该值该错误,处理办法:
    1).使用备份控制文件还原
    2).查找是否还有其他控制文件,拷贝一份
    3).列举数据文件重建控制文件

    如果你在使用这些思路进行恢复遇到突发情况不能自我解决,请联系我:
    Phone:13429648788    Q Q:107644445    E-Mail:dba@xifenfei.com

  3. 惜分飞 说:

    数据库current/active redo异常的各种情况报错
    redo文件损坏报错
    Started redo scan
    Errors in file d:\app\administrator\diag\rdbms\hzyl\hzyl\trace\hzyl_ora_2960.trc (incident=214262):
    ORA-00353: 日志损坏接近块 12014 更改 9743799889 时间 12/05/2011 09:21:11
    ORA-00312: 联机日志 3 线程 1: ‘R:\ORADATA\HZYL\REDO03.LOG’
    Incident details in: d:\app\administrator\diag\rdbms\hzyl\hzyl\incident\incdir_214262\hzyl_ora_2960_i214262.trc
    Aborting crash recovery due to error 368
    Errors in file d:\app\administrator\diag\rdbms\hzyl\hzyl\trace\hzyl_ora_2960.trc:
    ORA-00368: 重做日志块中的校验和错误
    ORA-00353: 日志损坏接近块 12014 更改 9743799889 时间 12/05/2011 09:21:11
    ORA-00312: 联机日志 3 线程 1: ‘R:\ORADATA\HZYL\REDO03.LOG’
    ORA-368 signalled during: ALTER DATABASE OPEN…

    redo文件被其他实例占用报错
    Wed May 16 17:03:11 2012
    Started redo scan
    Wed May 16 17:03:11 2012
    Errors in file /oracle/admin/odsdb/udump/odsdb1_ora_2040024.trc:
    ORA-00305: log 14 of thread 1 inconsistent; belongs to another database
    ORA-00312: online log 14 thread 1: ‘/dev/rods_redo1_2_2′
    ORA-00305: log 14 of thread 1 inconsistent; belongs to another database
    ORA-00312: online log 14 thread 1: ‘/dev/rods_redo1_2_1′
    ORA-305 signalled during: ALTER DATABASE OPEN…

    存储整体异常
    Mon Oct 17 09:35:09 2011
    Errors in file /oracle/app/admin/orcl/bdump/orcl2_lgwr_348814.trc:
    ORA-00340: IO error processing online log 4 of thread 2
    ORA-00345: redo log write error block 6732 count 2
    ORA-00312: online log 4 thread 2: ‘/dev/rredo21′
    ORA-27063: number of bytes read/written is incorrect
    IBM AIX RISC System/6000 Error: 6: No such device or address
    Additional information: -1
    Additional information: 1024
    Mon Oct 17 09:35:09 2011
    LGWR: terminating instance due to error 340

    存储IO异常
    Fri Feb 21 08:44:42 2014
    Thread 1 advanced to log sequence 591 (LGWR switch)
    Current log# 1 seq# 591 mem# 0: J:\ORADATA\ORCL\REDO01.LOG
    Fri Feb 21 15:31:20 2014
    Errors in file c:\oracle\product\10.2.0\admin\orcl\bdump\orcl_lgwr_10312.trc:
    ORA-00316: log 1 of thread 1, type 286 in header is not log file
    ORA-00312: online log 1 thread 1: ‘J:\ORADATA\ORCL\REDO01.LOG’

    使用_disable_logging参数
    Sat May 14 23:16:49 2005
    Errors in file d:\oracle\admin\rman\bdump\rman_arc0_736.trc:
    ORA-16038: log 3 sequence# 72 cannot be archived
    ORA-00354: corrupt redo log block header
    ORA-00312: online log 3 thread 1: ‘D:\ORACLE\ORADATA\RMAN\REDO03.LOG’

    如果你在使用这些思路进行恢复遇到突发情况不能自行解决,请联系我们,将为您提供专业数据库技术支持:
    Phone:13429648788    Q Q:107644445    E-Mail:dba@xifenfei.com