ITPub博客

首页 > 数据库 > Oracle > 【问题处理】ORA-00376 file xx cannot be read at this time

【问题处理】ORA-00376 file xx cannot be read at this time

原创 Oracle 作者:恩强Boy 时间:2021-02-03 09:52:20 0 删除 编辑

问题说明

在执行备份恢复时,出现ORA-00376 报错

ORA-00376: file 45  cannot be read at this time

ORA-01110: data file 45 : / u01/app/oracle/oradata/user02 .dbf'

ORA-376 通常和 ORA-01110 一起出现,会给出 Oracle 无法读取的文件的名称。 ORA-376 意在说明 Oracle 无法读取到该文件,文件很有可能是 offline 了。

原因分析

可能发生的原因如下

1.  表空间或数据文件offline

2.  数据文件在操作系统级别不存在

3.  数据文件被备份软件锁定

4.  对于UNIX Linux 系统, ulimit 设置不正确

5.  活动事务的回滚段不可用

6.  可能的其他原因

解决方法

解决方法需针对上述情况一一说明

情况一:表空间或数据文件offline

1)  执行下面查询,查询表空间状态

SQL> select tablespace_name,status from dba_tablespaces;

2)  执行下面查询,查询数据文件状态

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

3)  如果表空间offline ,则需要 online

SQL> alter tablespace tablespace_name online;

4)  如果数据文件offline ,则需要 online

SQL> alter database datafile file_number online;

在这种情况下,需要通过归档日志进行recover 操作,否则会报 ORA-01113 ORA-01110 错误。可以使用以下命令进行 recover

SQL> recover datafile file_number;

SQL> alter database datafile file_number online;

情况二:数据文件在操作系统级别不存在

在这种情况下,我们可以删除数据文件并重新创建表空间。这种方法只适用于非系统表空间(包括sysaux )和非 undo 表空间。

1)  offline 该表空间的其他数据文件

SQL> alter database datafile file_number offline drop;

2)  删除表空间

SQL> drop tablespace tablespace_name including contents;

3)  重新创建表空间

SQL> create tablespace tablespace_name datafile file_name size xxx;

情况三:数据文件被备份软件锁定

在这种情况下,某些平台备份软件可能会锁定数据文件,阻止了Oracle 访问该数据文件。检查是否有正在运行的备份软件,把备份软件停掉,释放锁,然后重新启动数据库。

情况四:对于UNIX Linux 系统, ulimit 设置不正确

如果没有正确设置ulimit 参数,可能会导致以下错误

ORA-00376: file 66  cannot be read at this time

ORA-01110: data file 66 : ' /u01/app/oracle/oradata/idfe01 .dbf'

Error: 27: File too large

在这种情况下,解决的方案就是增加ulimit 设置大小,如下

$ ulimit -f <number>

增加了ulimit 之后,就可以使数据文件 online 之后重启数据库。

情况五:活动事务的回滚段不可用

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

- 由于关机或系统崩溃,导致数据库关闭

- 由于磁盘损坏等硬件问题导致回滚段表空间中的数据文件丢失

- 在删除 rollback_segments 参数后,数据库最后启动

- 回滚数据文件 offline drop

- 打开数据库

在这种情况下,使用ORA-376 发生的原因是: Oracle 自动执行恢复,使所有的数据文件处于一致状态,所以它需要 redolog undo 段的信息。如果在这个过程中数据文件需要包含回滚段信息,但是发现该数据文件处于 offline 状态, Oracle 将会发出 ORA-376 错误。

这种错误发生的解决方法是:

如果回滚数据文件依然可用,执行以下命令:

1)  将回滚段重新包含在pfile 文件

2)  启动数据库至mount

SQL> startup mount;

3)  将该数据文件online

SQL> alter database datafile file_number online;

4)  执行recover

SQL> recover datafile file_number;

5)  打开数据库

SQL> alter database open;

情况六:可能的其他原因

1.  回滚段数据文件是存在的,但是Oracle 在启动数据库时候报 ORA-376 错误。数据库处于非归档模式,没有备份

在这种情况下,需要查看Oracle 需要哪些文件来恢复数据库。如果 Oracle 只需要 redologs ,那么数据库是可以恢复打开的,而不会丢失数据。

解决方法如下

1)  执行以下查询确定redologs 的序列号

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

2)  尝试恢复数据库

SQL> recover database until cancel;

3)  再次注意序列号。忽略建议的日志文件名,这个名称会以归档日志的形式出现,但这实际上是尚未归档的redolog 的名称。如果查询结果中的最低序列号与 Oracle 恢复数据库所需的序列号相同,则可以恢复数据库。只需要从 redolog 列表中复制准确的路径和文件名,作为 recover database 命令所需的文件名。对每个 redolog 重复执行此过程。直到 Oracle 在恢复结束时返回“ recovery completed ”。

4)  开启数据库

SQL> alter database open;

5)  如果报ORA-1589 错误,执行以下命令

SQL> alter database open noresetlogs;

2.  shutdown abort 然后重启服务器

在服务器重启之前,处于归档模式的数据库被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

解决方法如下

1)  正常关闭数据库

SQL> shutdown immediate;

2)  编辑pfile 文件,并从 ROLLBACK_SEGMENTS 参数中的回滚段列表中注释有问题的回滚段。

3)  启动数据库至mount

SQL> startup mount;

4)  执行以下语句查找哪些文件需要恢复

SQL> select * from v$recover_file;

5)  执行以下语句,查找需要恢复的回滚段

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

6)  恢复数据文件

SQL> recover datafile ' 绝对路径文件名' ;

7)  运行以下语句找出哪些数据文件处于offline

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

8)  将上面查询的结果online

SQL> alter database datafile file_number online;

9)  确保所有的数据文件都是online

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

10)  执行以下语句查看哪些回滚段处于offline

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

11)  将查找出的回滚段online

SQL> alter rollback segment seg_name online;

12)  确保所有回滚段都是online

SQL> select usn,status from v$rollstat;

13)  正常关闭数据库

SQL> shutdown immediate;

14)  编辑pfile 文件,取消注释掉的 ROLLBACK_SEGMENTS 参数的列

15)  启动数据库

SQL> startup;

 

 

---- end ----

 

 

 

 

 

 

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31529886/viewspace-2755626/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
勤奋,专注和练习

注册时间:2018-04-03

  • 博文量
    77
  • 访问量
    143629