Oracle 如何在不同情况下从丢失或被删除的数据文件中恢复

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

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

服务热线 : 13764045638 QQ号:47079569 邮箱:[email protected]

 

适用于:

Oracle Database – Personal Edition – Version 10.2.0.1 and later
Oracle Database – Enterprise Edition – Version 10.2.0.1 and later
Oracle Database – Standard Edition – Version 10.2.0.1 and later
本文适用于任何平台。

目的

本文描述了ORA-01157的多种情况以及如何避免。

范围 & 应用

本文针对Oracle Support分析员,Oracle顾问和数据库管理员。

故障排除步骤

如何在不同情况下从丢失的数据文件中恢复

在丢失数据文件或当文件无法被访问时,报告ORA-01157,伴随ORA-01110。

除此之外,你可能遇到错误ORA-07360 : sfifi: stat error, unable to
obtain information about file. 同时在background_dump_dest目录中生成一个DBWR 跟踪文件。如果尝试正常或立即关闭数据库,会导致ORA-01116,ORA-01110 ,并可能伴随ORA-07368。

本文描述了可能导致该错误的多种情况及其解决方案/其他方法。

本文通篇讨论 “备份”,但如果你有一个有效物理备用数据库,你可以也使用备用数据库的数据文件来恢复主数据库。

Oracle无法找到的数据文件

-意外在操作系统(OS)级别被重命名或移动。只需将文件还原到原来的位置,并恢复它

– 在OS级别被有意移到/删除。
你在OS跨多个磁盘重新组织数据文件布局。
在移到/重命名文件后,你需要在数据库级别重命名文件并恢复它。

Note:115424.1 How to Rename or Move Datafiles and Logfiles

被损坏/删除的数据文件

如果文件被损坏/删除,尝试启动数据库会导致ORA-01157,ORA-01110。然后根据丢失数据文件的类型,应采取不同操作。检查有问题的磁盘。可能由于有问题的磁盘导致文件损坏。替换坏的磁盘或在没有问题的磁盘上创建文件。

丢失数据文件可能在以下位置之一:

1. 临时表空间

如果数据文件属于一个临时表空间,你只需要脱机drop数据文件然后以including contents 选项drop表空间。
此后,重建临时表空间。

Note.184327.1 Common Causes and Solutions on ORA-1157 Error Found in Backup & Recovery

2. 只读表空间

在这个情况下,你需要还原只读数据文件的最近备份。不需要媒体恢复,因为只读表空间未被修改。但注意在以下情况下需要媒体恢复:

a. 当进行上次备份时表空间在read-write模式,且在之后为read-only 。

b. 当进行上次备份时表空间在只读模式,在期间设为读写模式,之后又设为只读

在任一以上情况中,你需要还原文件并使用RECOVER DATAFILE语句进行媒体恢复。应用 所有必须的归档日志,直到收到信息”Media Recovery Complete”。

Note.184327.1 Common Causes and Solutions on ORA-1157 Error Found in Backup & Recovery

3. 用户表空间

有两个可用选项:

a. 重建用户表空间。
如果表空间中的所有对象都能被重建(最近导出可用;可以使用脚本重新填充表;SQL*Loader 等)
然后,脱机drop数据文件,使用including contents选项 drop表空间。然后重建表空间并在其中重建对象。

b. 从备份中还原文件并进行媒体恢复。
数据库必须在archivelog 模式。如果数据库在NOARCHIVELOG 模式,且被应用于它的重做在你的联机重做日志范围内,你只会成功恢复数据文件。

Note.184327.1 Common Causes and Solutions on ORA-1157 Error Found in Backup & Recovery

4. 索引表空间

有两个可用选项:

a. 重建索引表空间
如果可以使用脚本或手册manual CREATE INDEX 语句简单重建索引,则最好的选择是offline drop数据文件,drop 索引表空间,并重建它和其中的所有索引。

b. 从备份中还原文件并进行媒体恢复。
如果无法简单重建索引表空间,则从有效备份中还原丢失的数据文件,然后对其执行媒体恢复。

Note.184327.1 Common Causes and Solutions on ORA-1157 Error Found in Backup & Recovery

5. 系统(和/或 Sysaux)表空间

a. 从有效备份中还原并对其执行媒体恢复。

b. 重建数据库。
如果数据文件的备份和完整数据库备份都不可用,则使用完整导出,用户级别/表级别导出,脚本,SQL*Loader ,备用数据库等来重建并重新填充数据库。then rebuild database using full export, user level/table level export, scripts, SQL*Loader, standby etc. to re-create and re-populate the database.

Note.184327.1 Common Causes and Solutions on ORA-1157 Error Found in Backup & Recovery

6. Undo表空间

 

 

在处理丢失undo表空间的丢失数据文件的情况时,你需要格外小心,避免undo段中活跃事务的丢失。

在这种情况下最好的方法是从备份中活跃数据文件并执行媒体恢复。

i.  如果数据库被干净关闭。
确保数据库在NORMAL或IMMEDIATE模式被干净关闭。
使用”undo_management=manual”更新你的init文件
重启数据库
Drop并重建undo表空间
使用”undo_management=auto”更新你的init文件
重启数据库

ii. 如果数据库未被干净关闭。
如果数据库被shutdown aborted 或 crashed,你可能无法drop数据文件,因为undo段可能包含活跃事务。
你会需要从备份中活跃文件并执行媒体恢复。

7. 丢失控制文件和联机重做日志

如果数据文件在一致状态,不需要媒体恢复,但你丢失了所有控制文件和联机重做日志,则在尝试使用脚本创建控制文件时会抱怨丢失重做日志。在这种情况下,使用create controlfile 脚本的RESETLOGS选项,然后使用 RESETLOGS 选项打开数据库。

8. 丢失数据文件且无备份

如果丢失的数据文件无备份,则你可以重建与原始文件大小相同的数据文件,然后应用从原始文件被创建为新版本丢失数据文件起被写入的所有归档重做日志。

注:请将从备份中还原和恢复作为情况2-6的首要和最佳选择。
Note:1060605.6 Lost datafile and no backup.

 

参考

NOTE:755620.1 – How to relocate database files using RMAN
NOTE:1060605.6 – Recover A Lost Datafile With No Backup
NOTE:1149946.1 – Recreating a missing datafile with no backups
NOTE:115424.1 – How to Rename or Move Datafiles and Logfiles
NOTE:184327.1 – ORA-1157 Troubleshooting
NOTE:453153.1 – Recovering the primary database’s datafile using the physical standby, and vice versa


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *