一.错误描述 
ORA-1157, "cannot identify/lock data file %s - see DBWR trace file" 
引起的原因: 
因为数据文件已经在被使用了从而导致数据库的后台进程不能找到相应的数据文件或者不能锁定相应的数据文件,这样数据库将禁止访问这些数据文件而其他的数据文件则没有影响。伴随这个错误操作系统将会提示是哪个数据文件不能被识别。

ORA-01157错误一般和ORA-01110错误一起出现,往往还有操作系统级别上的错误,例如ORA-07360,同时一个DBWR的trace文件会在background_dump_dest的目录下生成。例如,在Solaris的平台上,会有如下的错误信息显示: 
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file 
ORA-01110: data file 5: '/export/home/Oracle/oradata/817/users01.dbf' 
然后查看DBWR的trace文件内容,会有如下的内容: 
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file 
ORA-01110: data file 5: '/export/home /Oracle/oradata/817/users01.dbf' 
ORA-27037: unable to obtain file status 
SVR4 Error: 2: No such file or directory 
Additional information: 3

二. 通常引起ORA-1157错误的原因和解决方法 
如果你是使用Oracle9i,就用SQLPLUS代替SVRMGRL执行以下的命令。 
1. 数据文件存在,但是Oracle认不到它 
这种情况可能是在操作系统级上数据文件被重命名了或者移动到了一个新的分区或者位置,这种情况比较简单,只是需要将数据文件恢复成原始的数据文件名字或者重新命名数据文件到一个新的位置/目录就可以解决问题了。 
重新命名数据文件到一个新的位置/目录的方法: 
A. 数据库是打开状态的 
1)查看那个数据文件所在的表空间还包含有哪些数据文件,执行以下查询: 
SELECT FILE_NAME, STATUS FROM DBA_DATA_FILES 
WHERE TABLESPACE_NAME = '<YOUR_TABLESPACE_NAME>'; 
2)确定所有数据文件的状态都是可用的。 
3)把表空间变成只读表空间: 
ALTER TABLESPACE <YOUR_TABLESPACE_NAME> READ ONLY; 
4)确定在数据字典中表空间是显示为只读的: 
SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES 
WHERE TABLESPACE_NAME = '<YOUR_TABLESPACE_NAME>'; 
TABLESPACE_NAME STATUS 
------------------------------ --------- 
<YOUR_TABLESPACE_NAME> READ ONLY 
5)用操作系统命令拷贝数据文件到一个新的位置,拷贝完成后把整个表空间 
OFFLINE,这个时候用户是不能访问这个表空间的: 
ALTER TABLESPACE <YOUR_TABLESPACE_NAME> OFFLINE; 
6)重命名这个数据文件到一个新的位置了,这个操作会自动的更新控制文件中的内容: 
ALTER DATABASE RENAME FILE 
'/FULL_PATH_OF_OLD_LOCATION/AND_DATAFILE_NAME.DBF' 
TO 
'/FULL_PATH_OF_NEW_LOCATION/AND_DATAFILE_NAME.DBF'; 
7)ONLINE这个表空间: 
ALTER TABLESPACE YOUR_TABLESPACE_NAME ONLINE; 
8)把这个表空间置成可读写的状态: 
ALTER TABLESPACE YOUR_TABLESPACE_NAME READ WRITE; 
9)在操作系统级上删除原来旧的数据文件。

B.数据库是关闭状态的 
1) 先正常关闭数据库。 
2) 用操作系统命令拷贝数据文件到一个新的位置。 
3) MOUNT数据库,这样将读取控制文件,但是不会读取数据文件: 
STARTUP MOUNT 
4) 重命名这个数据文件到一个新的位置了,这个操作会自动的更新控制文件中的内容: 
ALTER DATABASE RENAME FILE 
'/FULL_PATH_OF_OLD_LOCATION/AND_DATAFILE_NAME.DBF' 
TO 
'/FULL_PATH_OF_NEW_LOCATION/AND_DATAFILE_NAME.DBF'; 
5) 打开数据库: 
ALTER DATABASE OPEN; 
2. 数据文件不存在或者对于Oracle来说是不可用的 
数据文件被物理的移走了或者损坏导致Oracle不能再认到了,例如数据文件被截断或者覆盖了,一般会出现ORA-27046、ORA-1157的错误提示: 
ORA-27046: file size is not a multiple of logical block size 
这种情况下可以有两种选择去解决问题: 
A. 重建数据文件所属的那个表空间 
这种方法比较适用于USERS、TEMP、INDEX表空间,如果数据库是正常关闭的,也就是说回滚段中没有激活的表空间事务,也推荐使用这种方法。如果是SYSTEM表空间,则要重建数据库了。 
具体步骤如下: 
1) MOUNT数据库: 
STARTUP MOUNT PFILE='<location_of_pfile>'; 
2) OFFLINE DROP数据文件: 
ALTER DATABASE DATAFILE '<full_path_file_name>' OFFLINE DROP; 
3) 打开数据库: 
ALTER DATABASE OPEN; 
4) 删除表空间: 
DROP TABLESPACE <tablespace_name> INCLUDING CONTENTS; 
5) 重建表空间: 
CREATE TABLESPACE <tablespace_name> DATAFILE 
'<datafile_full_path_name'> SIZE <required_size>; 
6) 重建表空间中所有以前存在的对象:可以使用以前创建对象的脚本或者利用最近可用的EXPORT DUMP来重建以前存在的对象。 
B.用正常的恢复过程去恢复数据文件 
这种方法比较适用于只读表空间或者那种不能用重建表空间的方法的USERS和INDEX表空间。如果是回滚段表空间,那必须要求数据库是正常关闭的才能使用这个方法。如果是SYSTEM表空间,并且备份和所有的归档日志都全的情况下,强烈建议使用这种方法去恢复的,但是如果是非归档方式,则就只能利用当前所有的联机日志进行恢复了。 
在很多的情况下,重建表空间是不可能的或者是非常费时费力的,因此,从备份和利用归档日志恢复数据文件是一种比较好的方法,尤其是对于只读表空间来说,因为没有数据的写入和更改,因此直接用备份来恢复是最快最省事的。 
具体步骤如下: 
1) 从备份中恢复丢失或者损坏的数据文件。 
2) MOUNT数据库: 
STARTUP MOUNT PFILE='<location_of_pfile>'; 
3) 执行以下的查询: 
SELECT V1.GROUP#, MEMBER, SEQUENCE#, 
FIRST_CHANGE# 
FROM V$LOG V1, V$LOGFILE V2 
WHERE V1.GROUP# = V2.GROUP#; 
这个查询将列出所有联机重做日志以及它们所代表的SEQUENCE和FIRST CHANGE NUMBER. 
4) 如果数据库是非归档状态下的,执行以下的查询: 
SELECT FILE#, CHANGE# FROM V$RECOVER_FILE; 
如果CHANGE#大于最小的联机重做日志文件的FIRST_CHANGE#,那么数据文件可以被恢复,记住恢复数据文件的时候要应用所有的联机重做日志文件,然后到第5步。 
如果CHANGE#小于最小的联机重做日志文件的FIRST_CHANGE#,那么这个数据文件将不能被恢复了,那么只能从最近的数据库全备份恢复或者重建这个数据文件所属的表空间了。 
5) 恢复数据文件: 
RECOVER DATAFILE '<full_path_file_name>'; 
6)确认所有的归档日志都被应用了直至出现"Media recovery complete"的提示信息,如果Oracle提示有一个不存在的归档日志文件,那么就可能要应用所有的联机重做日志文件来恢复直至出现"Media recovery complete"的提示信息。 
7) 打开数据库: 
ALTER DATABASE OPEN; 
3. 数据库临时表空间的数据文件的丢失 
当数据库的临时表空间的数据文件丢失也会引起ORA-01157的错误。因为数据库对临时表空间的数据文件不会发生检查点,所以这个时候数据库照样能够打开。这种情况下的解决方法是逻辑上删除临时表空间的数据文件,并且重新增加一个新的临时表空间的数据文件。 
例如: 
SELECT * FROM DBA_OBJECTS ORDER BY OBJECT_NAME; 
select * from dba_objects order by object_name; 
* ERROR at line 1: 
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file 
ORA-01110: data file 5: '/Oracle/oradata/temp01.dbf' 
ALTER DATABASE TEMPFILE ‘/Oracle/oradata/temp01.dbf‘ DROP; 
SELECT TABLESPACE_NAME,FILE_NAME FROM DBA_TEMP_FILES; 
ALTER TABLESPACE TEMP ADD TEMPFILE ‘/Oracle/oradata/temp01.dbf‘ SIZE 100M;

ORA-1157错误解决的更多相关文章

  1. Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法

    Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法 登陆数据库时提示 “ORA-01033”错误在命令窗口以s ...

  2. Oracle 数据库 Database Express Edition 11g Release 2 (11.2) 错误解决集锦(安装方面)

    前言:第一次接触数据库,想下载个oracle试玩下(虽然听说一般大企业才用),到 官网下载 了个简易版 XE 版本,安装时要注意记住自己输入的数据库密码(口令)  还有安装路径不能含有空格(Do no ...

  3. Linux 出现telnet: 127.0.0.1: Connection refused错误解决办法

    Linux 出现telnet: connect to address 127.0.0.1: Connection refused错误解决办法 没有xinetd服务: 1./etc/init.d目录中放 ...

  4. Oracle 11g R2(11.2.0.4) RAC 数据文件路径错误解决--ORA-01157 ORA-01110: 数据文件

    Oracle 11g R2(11.2.0.1) RAC  数据文件路径错误解决--ORA-01157 ORA-01110: 数据文件 oracle 11g R2(11.2.0.4) rac--scan ...

  5. 【故障处理】分布式事务ORA-01591错误解决

    [故障处理]分布式事务ORA-01591错误解决 1  BLOG文档结构图       2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你 ...

  6. SQL SERVER 9003错误解决方法 只适用于SQL2000

    SQLSERVER 9003错误解决方法 只适用于SQL2000 (只适用于SQL2000) "无法打开新数据库 'POS'.CREATE DATABASE 中止. (Microsoft S ...

  7. linux下遇见mysql启动报2002错误解决办法

    前言:目前问题解决了,但是仍不知道是什么原因造成的,在出现问题前安装uWSGI后,mysql就出现这个问题的,哪位大侠说说这是怎么回事? 正文:Linux 下 Mysql error 2002 错误解 ...

  8. Ubuntu 汉化时ubuntu software database is broken错误解决

    关于Ubuntu 汉化时的错误解决:按照网上的方法没有解决 最后 删掉thunderbird mail .这个软件,顺利解决!! 错误:thunderbird-locale-en: Depends: ...

  9. 记录centos6.8安装Oracle10.2.0.1过程中的错误解决

    [root@hadoop01 database]# ./runInstaller ./runInstaller: /opt/database/install/.oui: /lib/ld-linux.s ...

  10. New XAMPP security concept:错误解决方法

    New XAMPP security concept:错误解决方法 (2014-03-06 16:07:46) 转载▼   分类: php 在Linux上配置xampp后远程访问域名报错: New X ...

随机推荐

  1. 2015.04.30,外语,读书笔记-《Word Power Made Easy》 14 “如何谈论日常现象” SESSION 40

    1. money, and what it will buy penury(['penjuri] n. 贫穷,拮据),来自拉丁词语penuria(need,needness的意思),主要指缺乏财富资源 ...

  2. 造个简单的轮子倒是不难,但可用性健壮性高到qt这样全世界都在用,就几乎不可能了

    造个简单的轮子倒是不难,但可用性健壮性高到qt这样全世界都在用,就几乎不可能了比如自己写个事件循环实现信号槽,还真不难,我这边的架构里就这么搞了个仿osgi的事件总线嵌入式实时操作系统上能用的大型gu ...

  3. 这里是指推送通知跟NSNotification有区别:

    1.NSNotification是系统内部发出通知,一般用于内部事件的监听,或者状态的改变等等,是不可见的2.本地通知与远程通知是可见的,主要用于告知用户或者发送一些App的内容更新,推送一些相关的消 ...

  4. python绘制caffe中网络模型

    caffe-master/python/draw_net.py 实现绘制caffe中定义的网络模型功能,将.prototxt文件可视化. 需要先安装pydot和protobuf工具 通过Anacond ...

  5. 似然函数(likelihood function)

    1. 似然函数基本定义 令 X1,X2,-,Xn 为联合密度函数 f(X1,X2,-,Xn|θ),给定观测值 X1=x1,X2=x2,-,Xn=xn,关于 θ 的似然函数(likelihood fun ...

  6. 杂项:ExtJS

    ylbtech-杂项:ExtJS extjs是一种软件.自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能. ...

  7. AJAX请求 $.ajaxSetup方法的使用

    转自:https://blog.csdn.net/qq_23476319/article/details/78798885 jQuery.ajaxSetup()函数用于设置AJAX的全局默认设置. 该 ...

  8. Api接口服务的设计和安全解决方案

    这个涉及到两个方面问题:一个是接口访问认证问题,主要解决谁可以使用接口(用户登录验证.来路验证)一个是数据数据传输安全,主要解决接口数据被监听(HTTPS安全传输.敏感内容加密.数字签名) 普通网站应 ...

  9. 多元一次方程解法 C++

    #include<iostream> #include<math.h> #include<fstream> #include<stdlib.h> usi ...

  10. uni-app 自定义扫码界面

    二维码扫描,已经成为当下一款应用不可或缺,同时也是用户习以为常的功能了.uni-app 为我们提供了扫码 API ,直接调用即可. 需求场景 在实际开发中,平台提供的默认扫码界面,并不能满足一些自定义 ...