ORA-1157错误解决

一.错误描述 
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错误解决,布布扣,bubuko.com

时间: 2024-08-25 06:09:03

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

【Oracle】ora-12541错误解决

ORA-12541: TNS无监听程序错误 1.在oracle安装目录下查找listener.ora和tnsnames.ora文件,然后打开 2.将host改为机器名 3.执行命令:lsnrctl stop,再执行lsnrctl start. [Oracle]ora-12541错误解决,布布扣,bubuko.com

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

[故障处理]分布式事务ORA-01591错误解决 1  BLOG文档结构图       2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 分布式事务的简单概念         ② ORA-01591错误解决   Tips: ① 本文在ITpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(x

ORA-27100 shared memory realm already exists错误解决方法

环境:win 2003   + oracle 10g win 2003服务器物理内存4G oracle10g SGA             1504M 事故背景: 调整SGA大小,因为OS的内存只有4G,建议SGA的大小不要超过60%,我调整为2G SQL> alter systemset sga_max_size=2000m scope=spfile; 重启数据库报错ORA-27100 shared memory realm already exists 分析原因:对于32位机器ORACLE

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

前言:第一次接触数据库,想下载个oracle试玩下(虽然听说一般大企业才用),到 官网下载 了个简易版 XE 版本,安装时要注意记住自己输入的数据库密码(口令)  还有安装路径不能含有空格(Do not select a directory that has spaces in its name), 安装完后什么都没反应,唯一的帮助就是开始菜单->Oracle Database Express Edition ->获取帮助    点击 阅读文档 可以到官网看基本使用说明. 基本的操作问题在 阅

关于10g DG中的ORA-19527和ORA-00312错误解决示例

这几天在搭建10g DG Windows 2008 R2的测试环境,主要是明天要去给一客户重新搭建一套生产库的DG,其中发现一些问题,特此记录一下 由于将要部署到生产环境,所以考虑在线搭建DG的方案,即不停库的情况下,而问题主要就是出在不停库时,用RAMN创建STANDBY的时候 通常在线搭建DG,主要是下面几个步骤: 1. 确保主库开启归档,并开启force logging模式 2. 主库在线修改spifle,alter system set .... scope=both;并创建pfile

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

Linux 出现telnet: connect to address 127.0.0.1: Connection refused错误解决办法 没有xinetd服务: 1./etc/init.d目录中放置了系统中各个daemon服务的脚本,xinetd是其中之一. 2.xinetd是一种特殊的daemon服务(super daemon),它本身管理了一系列的daemon服务,这些服务只有在用户调用时才由xinetd启动,它们启动速度稍慢于独立的daemon服务,这些服务在/etc/xinetd.c

This version of MySQL doesn&#39;t yet support &#39;LIMIT &amp; IN/ALL/ANY/SOME subquery&#39; 错误解决

原因是内层select语句带有limit子句. 原: update stu_score_childen A  set  A.fScore='-1' where  A.fID in (select B.fID from stu_score_childen B limit 0,50 ) 更改后的 update stu_score_childen A  set  A.fScore='-1' where  A.fID in (select C.fID from (select B.fID from st

Out of resources when opening file 错误解决

mysqldump: Got error: 23: Out of resources when opening file './mydb/tax_calculation_rate_title.MYD' (Errcode: 24) when using LOCK TABLES 看到这个后,我比较奇怪,备份时锁定表却出错,关键是这个数据库现在也没被使用啊 后来到网上查查找到了原因 在mysql配置文件 my.cnf 中 找到 open_files_limit 增加它的值就行了 我的原来是 open_

阿里云Windows server 2008服务器搭建VPN 图文教程,购买境外服务器自建vpn,Win8/win10 连接VPN被阻止,出现812错误解决方法

阿里云Windows server 2008服务器搭建VPN 图文教程(超详细) 第一步:购买阿里云服务器,本文使用的是Windows Server 2008 R2 企业版64位中文版 IP地址:47.88.151.129,所属节点:亚太(新加坡) 服务器配置:2核,4GB,带宽10Mbps 第二步: 打开服务器管理器,点击添加角色,如下图: 本帖隐藏的内容然后弹出如下图所示,点击下一步: 点击后,如下图,勾选网络策略和网络服务,然后点击下一步: 接着继续点击下一步,直到弹出如下图所示的页面,勾

no module named win32com.client 错误解决

no module named win32com.client错误解决 一.错误描述 运行import win32com.client 的时候发现有import Error  no module named win32com.client这个提示,表明该模块未安装. 二.下载模块 从  https://sourceforge.net/projects/pywin32/files/pywin32/  下载相应Python版本的模块.安装后问题即解决. pywin32-220.win-amd64-p