ORA-1157与ORA-01110错误实践

2024-01-22 04:32
文章标签 实践 错误 ora 01110 1157

本文主要是介绍ORA-1157与ORA-01110错误实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在做备份实验中经常遇到相关的ORA-1157OR1110错误,相关的错误信息,无非就是数据文件,日志文件,和控制文件等一系列相关文件的问题,总体来说只要让我们把各个文件相关的关系衔接好,当然也必须让oracle系统认可我们所使用的相关文件,这ORA错误信息会大大减少!

        10.14做了个offline 不同选项的测试(NORMAL,TEMPORARY,IMMEDIATE)的实验,数据文件总是出问题,要么oracle不识别我重构的数据文件,要么就是控制文件的检查点过旧,无法OPEN数据库,总体来说做下来这些实验还是有些体会的,以下是相关的记录,共享之!

ORA-1157, "cannot identify/lock data file %s - see DBWR trace file"
引起的原因:
因为数据文件已经在被使用了从而导致数据库的后台进程不能找到相应的数据文件或者不能锁定相应的数据文件,这样数据库将禁止访问这些数据文件而其他的数据文件则没有影响。伴随这

个错误操作系统将会提示是哪个数据文件不能被识别。
ORA-01157错误一般和ORA-01110错误一起出现,往往还有操作系统级别上的错误,例如ORA-07360,同时一个DBWR的trace文件会在background_dump_dest的目录下生成。例如,在Solaris的平

台上,会有如下的错误信息显示:
more..
less..
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错误的方面详细谈谈:
二. 通常引起ORA-1157错误的原因和解决方法
如果你是使用Oracle9i,就用SQLPLUS代替SVRMGRL执行以下的命令。
1. 数据文件存在,但是Oracle认不到它
这种情况可能是在操作系统级上数据文件被重命名了或者移动到了一个新的分区或者位置,这种情况比较简单,只是需要将数据文件恢复成原始的数据文件名字或者重新命名数据文件到一个

新的位置/目录就可以解决问题了。
重新命名数据文件到一个新的位置/目录的方法:
A. 数据库是打开状态的
1)查看那个数据文件所在的表空间还包含有哪些数据文件,执行以下查询:
SELECT FILE_NAME, STATUS FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = '';
2)确定所有数据文件的状态都是可用的。
3)把表空间变成只读表空间:
ALTER TABLESPACE READ ONLY;
4)确定在数据字典中表空间是显示为只读的:
SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES
WHERE TABLESPACE_NAME = '';
TABLESPACE_NAME STATUS
------------------------------ ---------
READ ONLY
5)用操作系统命令拷贝数据文件到一个新的位置,拷贝完成后把整个表空间OFFLINE,这个时候用户是不能访问这个表空间的:
ALTER TABLESPACE 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='';
2) OFFLINE DROP数据文件:
ALTER DATABASE DATAFILE '' OFFLINE DROP;
3) 打开数据库:
ALTER DATABASE OPEN;
4) 删除表空间:
DROP TABLESPACE INCLUDING CONTENTS;
5) 重建表空间:
CREATE TABLESPACE DATAFILE
' SIZE ;
6) 重建表空间中所有以前存在的对象:可以使用以前创建对象的脚本或者利用最近可用的EXPORT DUMP来重建以前存在的对象。
B.用正常的恢复过程去恢复数据文件
这种方法比较适用于只读表空间或者那种不能用重建表空间的方法的USERS和INDEX表空间。如果是回滚段表空间,那必须要求数据库是正常关闭的才能使用这个方法。如果是SYSTEM表空间,

并且备份和所有的归档日志都全的情况下,强烈建议使用这种方法去恢复的,但是如果是非归档方式,则就只能利用当前所有的联机日志进行恢复了。
在很多的情况下,重建表空间是不可能的或者是非常费时费力的,因此,从备份和利用归档日志恢复数据文件是一种比较好的方法,尤其是对于只读表空间来说,因为没有数据的写入和更改

,因此直接用备份来恢复是最快最省事的。
具体步骤如下:
1) 从备份中恢复丢失或者损坏的数据文件。
2) MOUNT数据库:
STARTUP MOUNT 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 '';
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-01157错误
1. 当使用vxfddstat去访问快速I/O或者其它的应用,会获得"Cannot open file"的错误,而Oracle会返回如下的错误:
ORA-01157: cannot identify data file 1 - file not found
ORA-01110: data file 1: ''
这个时候用户应该去联系Veritas的技术支持,技术支持网站网址为http://support.veritas.com/。
2. 在HP-UNIX的机器上,如果系统核心参数nflock设置不是足够大的时候,这样可能会使Oracle不能锁定所需要的数据文件而导致错误:
ORA-27086: skgfglk: unable to lock file - already in use
或者错误:
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-0110: data file 4: '/Oracle/oradata/user01.dbf'


这篇关于ORA-1157与ORA-01110错误实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/631849

相关文章

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2