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

    You are here

    • You are here:
    • Home > Blogs > PDSERVICE's blog > Oracle 在备份和恢复中发现的ORA-376错误的常见原因和解决方案 ORA-00376: 此时无法读取文件

Oracle 在备份和恢复中发现的ORA-376错误的常见原因和解决方案 ORA-00376: 此时无法读取文件

Oracle 在备份和恢复中发现的ORA-376错误的常见原因和解决方案 ORA-00376: 此时无法读取文件

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

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

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

 

ORA-00376: 此时无法读取文件

oerr ora 376
00376, 00000, "file %s cannot be read at this time"
// *Cause:  attempting to read from a file that is not readable. Most likely
//          the file is offline.
// *Action: Check the state of the file. Bring it online
 

 

适用于:

Oracle Database – Enterprise Edition – 版本9.0.1.0 11.2.0.3 [Release 9.0.1  11.2]
本文信息适用于任何平台。

目的

整合ORA-376错误的常见原因和解决方案。 

故障排除步骤

范围&应用
——————-

遇到ORA-376的客户或需要ORA-376错误已知问题的信息的分析师。

ORA-376
=======

Oracle知道一个数据文件但无法读取它时发生ORA-376

错误描述:
—————–

Error: ORA 376 file %s cannot be read at this time

原因:尝试从不可读的文件读取。最有可能是文件是脱机的。

操作:检查文件的状态。使其联机。

如错误文本中提到的,此错误的常见原因是由于Oracle无法读取特定数据文件。这个错误伴随ORA-1110,这将给出Oracle无法读取的文件的文件名。

例如:

ORA-00376: file 28 cannot be read at this time
ORA-01110: data file 28: ‘/h04/usupport/app/oracle/oradata/v817/test.dbf’

在这里,test.dbfOracle无法读取的数据文件名称。

可能的原因和解决方案总结:
=====================================

A. 表空间或数据文件脱机。
B. 数据文件在OS级别不存在。
C. 数据文件被Backup Software锁住。
D. UNIX上错误设置ULIMIT 
E. 有活跃事务的回滚段不可用。
F. 其他可能原因。

A. 表空间或表空间中的数据文件脱机。

– 使用以下查询来查看表空间的状态:

SQL> select tablespace_name,status from dba_tablespaces;

– 使用以下查询来查看数据文件的状态。

SQL> select file#,name,status,enabled from v$datafile;

– 如果表空间脱机,你可以执行以下语句使其联机:

SQL> alter tablespace <tablespace_name> online;

– 如果在表空间的数据文件脱机,你可以执行以下语句使其联机:

SQL> alter database datafile <full_path_datafile_name> online;

在一些情况下,数据文件的状态可能是恢复。在这种情况下,必须进行媒体恢复使数据文件联机。否则会遇到ORA-1113

例如:

ORA-01113: file 28 needs media recovery
ORA-01110: data file 28: ‘/h04/app/oracle/oradata/v817/nar.dbf’

For doing the recovery, the following commands can be used:

SQL> recover datafile ‘<full_path_of_datafile>’;

SQL> alter database datafile <full_path_datafile_name> online;

在某些情况下,有可能仅从联机重做日志中恢复数据文件。

B. 数据文件在OS级别不存在。

在这种情况下,你可以drop数据文件并重建表空间。但是,这仅对非系统(包括SYSAUX)和非回滚表空间是可行的。

简要步骤为:

– 作为SYSDBA登录Oracle

– 脱机drop与表空间相关的其他数据文件

SQL> ALTER DATABASE DATAFILE ‘<datafile_name>’ OFFLINE DROP;

– Drop表空间

SQL> DROP TABLESPACE <tablespace_name> INCLUDING CONTENTS;

– 重建表空间

SQL> CREATE TABLESPACE <tablespace_name> DATAFILE ‘<datafile_name>’
SIZE <required_size>;

 

C. 由于备份软件锁住文件。

在某些平台上,备份软件可能会锁定数据文件,阻止Oracle读取数据文件。检查是否有任何备份软件运行,并使其停止,从而释放锁并尝试重新启动数据库。

D. Unix上,如果未正确设置ulimit 

如果未正确设置ulimit参数,可能导致以下错误。这尤其可能发生在Oracle Parallel Server (OPS) 实例,其中可能发生节点切换。

例如:

ORA-00376: file 29 cannot be read at this time
ORA-01110: data file 29: ‘/db/GICORP_4/axix01.dbf’
Error: 27: File too large

问题是在新的节点上的文件大小限制低于较旧节点曾经的限制,且低于数据文件大小。

在这些情况下,解决方案是增加如下所述的Unix ulimit filesize 

对于C shell
—————-

% limit filesize <number>

对于Bourne Korn shell
—————————–

$ ulimit -f <number>

一旦增加了ulimit,在使数据文件联机(如果它们脱机)后数据库可以被重启 。

E. 如果包含活跃事务的回滚段不可用。

ORA-376错误也可能会导致以下情况:

1. 数据库由于shutdown abort或系统崩溃而宕机。
2. 因为硬盘损坏,控制器问题等,在回滚段表空间数据文件丢失。
3. 在删除rollback_segments参数中的条目后,数据库随后被启动。
4. 回滚数据文件被脱机drop
5. 发出database open 命令。

在这个情况下ORA-376的原因是:

Oracle自动执行恢复使所有数据库文件为一致状态。为此,它同时需要重做日志和回滚段信息。

如果在这个过程中需要包含回滚段extent的数据文件,但它被发现是脱机的,Oracle将发出错误。

在这种情况下的解决方法是:

如果回滚数据文件可以再次可用,则

1. 将回滚段重新包括在“init.ora”文件中的。

2. Mount装载数据库。

SQL> STARTUP MOUNT;

3. 使数据文件再次联机。

SQL> ALTER DATABASE DATAFILE ‘<full_path_file_name>’ ONLINE;

4. 对数据文件执行媒体恢复。

SQL> RECOVER DATAFILE ‘<full_path_file_name>’;

5. 打开数据库。

SQL> ALTER DATABASE OPEN;

如果步骤失败且文件无法被恢复或回滚数据文件物理丢失,则参见Note:1013221.6

在这个情况下,解决方法取决于数据库最终是否被干净关闭。

F. 错误ORA-376被解决的其他一些情况包括:

1. 回滚段数据文件显示,但在数据库启动时Oracle抱怨ORA-376错误。

数据库在NOARCHIVE 日志模式且没有冷备份。

解决方法:

一个可用的解决方法是伪造恢复以查看Oracle需要什么文件来恢复数据库。如果Oracle仅需要联机重做日志,则数据库可以被恢复并打开而没有数据丢失。

SQL*PlusSVRMGL

运行以下查询来确认联机重做日志的序列号:

SQL> select v1.group#,member,sequence#,first_change#
from v$log v1, v$logfile v2
where v1.group# = v2.group#;

注意序列号和成员列是很重要的。

接下来,尝试恢复数据库,查看Oracle需要哪些文件:

SQL> recover database until cancel;

再次记下序列号。忽略建议的日志文件名。该名称将以归档日志的形式出现,但是的确是尚未归档的重做日志名称。

如果查询结果中的最低序列号与Oracle要求恢复数据库的序列号相同,则数据库可以被恢复。

只需从成员列复制正确路径和文件名,即RECOVER DATABASE命令所需的文件名。对每个联机重做日志重复此过程。

Oracle将在恢复结束时返回信息 “恢复完成。

此时你可以发出:

SQL> ALTER DATABASE OPEN;

如果发生ORA-1589 “must use RESETLOGS or NORESETLOGS option for database open” 

SQL> ALTER DATABASE OPEN NORESETLOGS;

注:可能需要一段时间来打开。

2. shutdown abort后重启服务器。
——————————————-

数据库启动失败显示以下错误:

ORA-01545: rollback segment ‘%s’ specified not available
ORA-01595: error freeing extent (%s) of rollback segment (%s))
ORA-00376: file %s cannot be read at this time

在服务器被重启之前,归档日志模式下的数据库被shutdown abort

这个问题的原因仍未确定,但以下解决方案可用:

– 立即关闭数据库:

SQL>shutdown immediate;

– 编辑init<SID>.ora 文件并从ROLLBACK_SEGMENTS参数中的回滚段列表中删除或注明comment out有问题的回滚段。

– 启动数据库。

SQL> STARTUP MOUNT;

– 通过运行以下语句找出哪些文件需要恢复:

SQL> select * from v$recover_file;

此外,你也可以查询v$datafile

通过运行以下语句找出哪些回滚段需要恢复;

SQL> select usn,status from v$rollstat where status != ‘ONLINE’;

– 恢复需要恢复的数据文件:

SQL> recover datafile ‘<full path filename>’;

– 通过运行以下语句找出哪些数据文件脱机:

SQL> select name,status
from v$datafile
where status != ‘ONLINE’;

– 使数据文件联机:

SQL> alter database datafile ‘<full path filename>’ online;

– 验证所有数据文件联机:

SQL> select file#, name, status from v$datafile;

– 通过运行以下语句找出哪些回滚段脱机:

SQL> select usn,status from v$rollstat where status != ‘ONLINE’;

– 使所有回滚段联机:

SQL> alter rollback segment <RBS NAME> online;

– 验证现在所有回滚段联机:

SQL> select usn,status from v$rollstat ;

– 立即关闭数据库:

SQL> shutdown immediate;

– 编辑 init<SID>ora文件并将有问题的回滚段重新添加或取消注明在ROLLBACK_SEGMENTS参数回滚段的列表。

– 启动数据库。

SQL> STARTUP MOUNT;

 

参考

NOTE:105758.1 – How to Automate Controlfile Backup To Trace at Database Startup or Shutdown

NOTE:104646.1 – ORA-604 ORA-376 ORA-1110 doing ALTER TABLESPACE …
NOTE:113923.1 – AIX: ORA-376 ORA-27063 IBM/AIX ERROR 11
NOTE:182648.1 – How To Recover from Loss of a READONLY Table Partition When No Backup Exists
NOTE:963102.1 – ORA-376/ORA-1110 Encountered While Dropping Old Undo Tablespace / Undo Segments

NOTE:257801.1 – Exchange Of Partitioned Data Fails With ORA-00376 When Different Schemas Are Used
NOTE:270532.1 – ORA-376, ORA-1110 while creating a table in a dictionary managed tablespace
NOTE:283846.1 – Messages in the alert.log (ORA-00376 Error 376 encountered while recovering transaction) after partial restore and open resetlogs.
NOTE:419980.1 – ORA-00376 with ‘ODM ERROR V-41-4-3-261-12 Not enough space’
NOTE:427801.1 – ORA-00376 ORA-01110 After Changing Undo Tablespace in Automatic Undo Management
NOTE:1013221.6 – RECOVERING FROM A LOST DATAFILE IN A UNDO TABLESPACE