查看: 596|回复: 0

[原创] ORA-00376 ORA-01110 报错原因和处理思路

[复制链接]
论坛徽章:
21
娜美
日期:2017-06-26 15:18:15火眼金睛
日期:2018-04-30 22:00:00目光如炬
日期:2018-07-29 22:00:00火眼金睛
日期:2018-08-31 22:00:00目光如炬
日期:2018-09-02 22:00:00目光如炬
日期:2018-09-16 22:00:01火眼金睛
日期:2018-09-30 22:00:00目光如炬
日期:2018-10-14 22:00:00火眼金睛
日期:2018-11-30 22:00:01目光如炬
日期:2018-04-29 22:00:00
发表于 2019-12-26 09:56 | 显示全部楼层 |阅读模式
ORA-00376 ORA-01110 报错原因和处理思路

作者简介:
----------------------------------------------------------------------
@ 孙显鹏,海天起点oracle技术专家,十年从业经验
@ 精通oracle内部原理,擅长调优和解决疑难问题
@ 致力于帮助客户解决生产中的问题,提高生产效率。
@ 爱好:书法,周易,中医。微信:sunyunyi_sun
@ 易曰:精义入神,以致用也!
@ 调优乃燮理阴阳何其难也!
----------------------------------------------------------------------

(因为昨天晚上一个客户那里遇到了这个问题,现场人员无法处理)


本文测试下面报错的原因并说明报错的处理思路:
ORA-00376: file 14 cannot be read at this time
ORA-01110: data file 14: '/u01/test34.dbf'
先看看报错的解释:
[oracle@piamarydb ~]$ oerr ora 0376
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

//          a dispatcher attribute.

很明显文件被offline了,解决办法online即可,至于怎么让文件online办法很多。

[oracle@piamarydb ~]$ oerr ora 1110
01110, 00000, "data file %s: '%s'"
// *Cause:  Reporting file name for details of another error. The reported
//          name can be of the old file if a data file move operation is
//          in progress.
// *Action: See associated error message.

这个报错很著名,那需要看具体报错原因!!!

既然明白了报错原因下面我们一步一步构造这个报错,然后把文件恢复为online:

SQL> drop table tb_testdb;

Table dropped.

SQL> drop tablespace test34;

Tablespace dropped.

SQL> ! rm /u01/test34.dbf;

SQL> create tablespace test34 datafile '/u01/test34.dbf' size 20m;

Tablespace created.

SQL> ! mv /u01/test34.dbf /u01/oradata/

SQL> create table tb_testdb tablespace test34 as select * from dba_objects;

Table created.

SQL> alter system checkpoint;
alter system checkpoint
                      *
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 12161
Session ID: 1 Serial number: 5

Errors in file /u01/app/oracle/diag/rdbms/primary/primary/trace/primary_ckpt_12112.trc:
ORA-63999: data file suffered media failure
ORA-01116: error in opening database file 14
ORA-01110: data file 14: '/u01/test34.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Errors in file /u01/app/oracle/diag/rdbms/primary/primary/trace/primary_ckpt_12112.trc:
ORA-63999: data file suffered media failure
ORA-01116: error in opening database file 14
ORA-01110: data file 14: '/u01/test34.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Wed Dec 25 09:24:25 2019
System state dump requested by (instance=1, osid=12112 (CKPT)), summary=[abnormal instance termination].
System State dumped to trace file /u01/app/oracle/diag/rdbms/primary/primary/trace/primary_diag_12100.trc
CKPT (ospid: 12112): terminating the instance due to error 63999
Dumping diagnostic data in directory=[cdmp_20191225092425], requested by (instance=1, osid=12112 (CKPT)), summary=[abnormal instance termination].
Instance terminated by CKPT, pid = 12112

上面的测试说明online的数据文件一旦无法访问,在做完全检查点时oracle因无法修改数据文件头scn和其他标志位导致实例宕机!!!

把文件mv回原来位置:
SQL> ! mv /u01/oradata/test34.dbf /u01/

SQL> startup
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
SQL>
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area  626327552 bytes
Fixed Size                  2230952 bytes
Variable Size             339739992 bytes
Database Buffers          218103808 bytes
Redo Buffers               66252800 bytes
Database mounted.
Database opened.

SQL> create table tb_testdb tablespace test34 as select * from dba_objects;
create table tb_testdb tablespace test34 as select * from dba_objects
             *
ERROR at line 1:
ORA-00955: name is already used by an existing object


SQL> drop table tb_testdb;

Table dropped.

SQL> create table tb_testdb tablespace test34 as select * from dba_objects;

Table created.

SQL> alter system checkpoint;

System altered.

检查点做完以后mv文件路径:

SQL> ! mv /u01/test34.dbf /u01/oradata/

先offline 文件:
SQL> alter database datafile '/u01/test34.dbf' offline;

Database altered.

下面关闭实例,再次启动实例看看报错信息:
SQL> shu immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  626327552 bytes
Fixed Size                  2230952 bytes
Variable Size             339739992 bytes
Database Buffers          218103808 bytes
Redo Buffers               66252800 bytes
Database mounted.
Database opened.

看到了我们希望的报错信息:
SQL> select count(*) from tb_testdb;
select count(*) from tb_testdb
                     *
ERROR at line 1:
ORA-00376: file 14 cannot be read at this time
ORA-01110: data file 14: '/u01/test34.dbf'

尝试online:
SQL> alter database datafile '/u01/test34.dbf' online;
alter database datafile '/u01/test34.dbf' online
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 14 - see DBWR trace file
ORA-01110: data file 14: '/u01/test34.dbf'  同样是1110--具体问题具体对待

SQL> select status from v$datafile where file#=14;

Status
----------
RECOVER

SQL> recover datafile 14;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 14: '/u01/test34.dbf'
ORA-01157: cannot identify/lock data file 14 - see DBWR trace file   --文件路径不对报的这个错误,和上面一样
ORA-01110: data file 14: '/u01/test34.dbf'

SQL> ! mv /u01/oradata/test34.dbf /u01

SQL> recover datafile 14;
Media recovery complete.

SQL> select count(*) from tb_testdb;
select count(*) from tb_testdb
                     *
ERROR at line 1:
ORA-00376: file 14 cannot be read at this time
ORA-01110: data file 14: '/u01/test34.dbf'


SQL> delete from tb_testdb;
delete from tb_testdb
            *
ERROR at line 1:
ORA-00376: file 14 cannot be read at this time
ORA-01110: data file 14: '/u01/test34.dbf'

看看文件状态: offline,所以还是报376

SQL> select FILE#,STATUS,RECOVER,CHECKPOINT_CHANGE# from v$datafile_header;

           Tablespace
     FILE# Status     RECOVER   CHECKPOINT_CHANGE#
---------- ---------- --------- ------------------
         1 ONLINE     NO                  58201782
         2 ONLINE     NO                  58201782
         3 ONLINE     NO                  58201782
         4 ONLINE     NO                  58201782
         5 ONLINE     NO                  58201782
         6 ONLINE     NO                  58201782
         7 ONLINE     NO                  58201782
         8 ONLINE     NO                  58201782
         9 ONLINE     NO                  58201782
        10 ONLINE     NO                  58201782
        11 ONLINE     NO                  58201782
        12 ONLINE     NO                  58201782
        13 ONLINE     NO                  58201782
        14 OFFLINE    NO                  58201494

14 rows selected.

SQL> alter database datafile 14 online;

Database altered.

SQL> select count(*) from tb_testdb;

  COUNT(*)
----------
     74649

SQL> select FILE#,STATUS,RECOVER,CHECKPOINT_CHANGE# from v$datafile_header;

           Tablespace
     FILE# Status     RECOVER   CHECKPOINT_CHANGE#
---------- ---------- --------- ------------------
         1 ONLINE     NO                  58201782
         2 ONLINE     NO                  58201782
         3 ONLINE     NO                  58201782
         4 ONLINE     NO                  58201782
         5 ONLINE     NO                  58201782
         6 ONLINE     NO                  58201782
         7 ONLINE     NO                  58201782
         8 ONLINE     NO                  58201782
         9 ONLINE     NO                  58201782
        10 ONLINE     NO                  58201782
        11 ONLINE     NO                  58201782
        12 ONLINE     NO                  58201782
        13 ONLINE     NO                  58201782
        14 ONLINE     NO                  58202655

14 rows selected.

SQL> alter system checkpoint;

System altered.

SQL> select FILE#,STATUS,RECOVER,CHECKPOINT_CHANGE# from v$datafile_header;

           Tablespace
     FILE# Status     RECOVER   CHECKPOINT_CHANGE#
---------- ---------- --------- ------------------
         1 ONLINE     NO                  58202692
         2 ONLINE     NO                  58202692
         3 ONLINE     NO                  58202692
         4 ONLINE     NO                  58202692
         5 ONLINE     NO                  58202692
         6 ONLINE     NO                  58202692
         7 ONLINE     NO                  58202692
         8 ONLINE     NO                  58202692
         9 ONLINE     NO                  58202692
        10 ONLINE     NO                  58202692
        11 ONLINE     NO                  58202692
        12 ONLINE     NO                  58202692
        13 ONLINE     NO                  58202692
        14 ONLINE     NO                  58202692

14 rows selected.


SQL>
SQL> drop table tb_testdb;

Table dropped.

SQL> drop tablespace test34;

Tablespace dropped.

SQL> ! rm -f /u01/test34.dbf;


上面的测试说明该报错,是因为数据文件处于offline,我们只需要online该文件即可,
也许这个offline的数据文件需要recover来同步scn。

如果recover时缺失日志不能recover呢?那你就bbed修改下scn让该文件可以recvoer就行了。

至于怎么使用BBED 修改,我以前的文章已经说过,这里不再说明。

当然了文件介质损坏,那就介质恢复,没有备份,那估计是没办法了。所以再次强调备份很重要,非常重要!!!








您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表