Email: service@parnassusdata.com 7 x 24 online support!

    You are here

    • You are here:
    • Home > Blogs > PDSERVICE's blog > Oracle 从noarchive模式意外丢失数据文件,ORA-01157中恢复的提示Tips for Recovering from Accidental Loss of Datafile in NOARCHIVEMODE, ORA-01157: 无法标识/锁定数据文件 - 请参阅 DBWR 跟踪文件

Oracle 从noarchive模式意外丢失数据文件,ORA-01157中恢复的提示Tips for Recovering from Accidental Loss of Datafile in NOARCHIVEMODE, ORA-01157: 无法标识/锁定数据文件 - 请参阅 DBWR 跟踪文件

Oracle 从noarchive模式意外丢失数据文件,ORA-01157中恢复的提示Tips for Recovering from Accidental Loss of Datafile in NOARCHIVEMODE, ORA-01157: 无法标识/锁定数据文件 - 请参阅 DBWR 跟踪文件

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

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

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

 

ORA-01157: 无法标识/锁定数据文件  - 请参阅 DBWR 跟踪文件

oerr ora 1157
01157, 00000, "cannot identify/lock data file %s - see DBWR trace file"
// *Cause:  The background process was either unable to find one of the data 
//         files or failed to lock it because the file was already in use.
//         The database will prohibit access to this file but other files will
//         be unaffected. However the first instance to open the database will
//         need to access all online data files. Accompanying error from the
//         operating system describes why the file could not be identified.
// *Action: Have operating system make file available to database. Then either
//         open the database or do ALTER SYSTEM CHECK DATAFILES.
 
 

适用于:

Oracle Database – Standard Edition
Oracle Database – Personal Edition
Oracle Database – Enterprise Edition – Version 9.0.1.0 and later
Enterprise Manager for Oracle Database
本文信息适用于任何平台。

目的

此公告描述了使用克隆技术从意外丢失NOARCHIVEMODE数据库配置下的数据文件中恢复的建议。

范围

本功能针对掌握备份和恢复过程的DBA和Support Analyst。

详细信息

从noarchive模式意外丢失数据文件中恢复的提示:
======================================================================

当数据文件由于媒体故障被意外删除或丢失,

文件引用仍然存在于数据库控制文件中。尝试打开数据库失败,显示以下错误:

ORA-01157: cannot identify/lock data file 5 – see DBWR trace file
ORA-01110: data file 5: ‘/u01/oradata/V815/data/users01.dbf’

数据库保持在mounted状态(唯一打开的文件是控制文件。)

You need to restore the database from the latest good cold backup including
all the database physical structural files: controlfile(s), redolog files,
and datafiles. However, you can choose another method to quickly open a
database by dropping the missing datafile and the affected tablespace from
the database. This approach is recommended when the effected tablespace
contains: 你需要从最新的好的冷备份中还原数据库,包括所有数据库的物理结构文件:控制文件,重做日志文件,和数据文件。但是,你可以选择其他方法来快速打开数据库,通过从数据库中drop丢失的数据文件和受影响的表空间。当受影响的表空间包括以下内容,建议使用这个方法:

o 不重要的数据。
o 可以被手动重建的索引。
o 此时不重要的历史数据,且有必要尽快打开数据库以最小化宕机时间down time。之后可以通过使用克隆数据库技术来恢复丢失的数据。

注:以下是丢失的数据文件与回滚段或系统表空间无关的情况。

以下必须在数据库处于mount状态下完成:

SQL> alter database datafile ‘/u01/oradata/V815/data/users01.dbf’ offline drop;
Statement processed.
SQL> alter database open;
Statement processed.
SQL> drop tablespace users including contents;
Statement processed.

以下是关于如何使用克隆技术从被drop表空间中恢复数据的提示。

注:一些步骤涉及UNIX操作系统环境,但可适用于NT 操作系统。

使用克隆技术恢复数据的提示:
—————————————————-

1. 你需要还原与以下表空间相关的必要数据文件:system, rollback, temporary, 以及你想恢复到新目录的表空间(即,/u01/oradata/CLONE)。

如果你为冷备份使用RMAN ,使用”set newname” 命令将数据文件还原到新的位置。例如:

RMAN> run {
set newname for datafile 1 to ‘/u01/oradata/CLONE/system01.dbf’;
set newname for datafile 2 to ‘/u01/oradata/CLONE/rbs01.dbf’;
set newname for datafile 3.to ‘/u01/oradata/CLONE/temp01.dbf’;
set newname for datafile 6 to ‘/u01/oradata/CLONE/users01.dbf’;
allocate channel t1 type ‘SBT_TAPE’;
restore datafile 1,2,3,6;
}

要获取数据文件号,查询V$DATAFILE视图。

注:RMAN 将被还原的文件视为用于未来还原操作的有效副本。因此,当你不使用克隆的数据库时,使用”change” 命令的RMAN 适当语法来删除对被还原文件的引用。例如:

RMAN> change datafilecopy ‘/u01/oradata/CLONE/system01.dbf’ uncatalog;

这从目标数据库控制文件和RMAN catalog(如果存在)中删除引用reference。

2. 使用新名称,如initCLONE.ora和configCLONE.ora将你的生产init 和 config文件复制到与被还原数据文件相同的目录。

3. 将initCLONE.ora 的软链接创建到$ORACLE_HOME/dbs中。

4. 修改这两个文件的内容,以引用新的db_name=CLONE,配置文件(”ifile”参数)的新位置,和”control_files”的新位置。

5. 将ORACLE_SID 环境变量设为新实例名”CLONE”。

6. 使用create controlfile sql语句准备一个sql脚本文件。如果你在生产数据库上备份要跟踪的控制文件you backup your controlfile to trace on the production database (“alter
database backup controlfile to trace”),你可以通过一些修改来重新使用该跟踪文件。该语句 应该类似:

STARTUP NOMOUNT
CREATE CONTROLFILE SET DATABASE “CLONE” RESETLOGS NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 30
MAXINSTANCES 8
MAXLOGHISTORY 843
LOGFILE
GROUP 1 ‘/u01/oradata/CLONE/redoCLONE01.log’ SIZE 500K,
GROUP 2 ‘/u01/oradata/CLONE/redoCLONE02.log’ SIZE 500K,
GROUP 3 ‘/u01/oradata/CLONE/redoCLONE03.log’ SIZE 500K
DATAFILE
‘/u01/oradata/CLONE/system01.dbf’,
‘/u01/oradata/CLONE/rbs01.dbf’,
‘/u01/oradata/CLONE/temp01.dbf’,
‘/u01/oradata/CLONE/users01.dbf’
CHARACTER SET WE8ISO8859P1

确保LOGFILE 指向新的重做文件位置。同样适用于数据文件。此外,该语句的数据文件部分必须仅包括必要的数据文件,如此公告之前所述。

7. 启动SQL*Plus 并作为SYSDBA连接,并启动该脚本。

8. 使用以下语句打开数据库:
SQL> alter database open resetlogs;

9.当克隆数据库成功打开,你可以执行丢失对象/数据的导出并将它们导入到生产数据库。

注:Oracle 8i用户也可以使用RMAN “duplicate”命令。 这个方法在Oracle8i恢复管理器用户指南和参考版本2(8.1.6)的“使用Recovery Manager创建duplicate数据库”一章或Oracle8i的备份和恢复

指南版本8.1.5中详细介绍。然而,“duplicate”命令强制你还原所有数据库数据文件,当有人只想从一个表空间中检索数据时是不可行的。

同时参见 Note: 223543.1 How to Recover From a DROP / TRUNCATE / DELETE TABLE with RMAN

参考:
===========

Oracle8i Recovery Manager User’s Guide and Reference Release 2 (8.1.6),
chapter on “Creating a Duplicate Database with Recovery Manager.”
Oracle8i Backup and Recovery Guide Release 8.1.5.