ORA-01157 错误解决,原因DBWR锁定产生


[sql] 
  1. 1、故障现象  
  2. --查询视图dba_data_files时出现ORA-01157故障  
  3. SQL> select file_name,tablespace_name from dba_data_files where tablespace_name='SOE';  
  4. select file_name,tablespace_name from dba_data_files where tablespace_name='SOE'  
  5.                                       *  
  6. ERROR at line 1:  
  7. ORA-01157: cannot identify/lock data file 6 - see DBWR trace file  
  8. ORA-01110: data file 6: '/u01/oracle/db/dbs/soe.dbf'  
  9.   
  10. --尝试drop tablespace 收到同样的错误  
  11. SQL> drop tablespace soe including contents and datafiles;  
  12. drop tablespace soe including contents and datafiles  
  13. *  
  14. ERROR at line 1:  
  15. ORA-01157: cannot identify/lock data file 6 - see DBWR trace file  
  16. ORA-01110: data file 6: '/u01/oracle/db/dbs/soe.dbf'  
  17.   
  18. 2、分析  
  19. --从错误号后的文字可判断DBWR不能识别或锁定文件号6,后面的ORA-01110给出了具体的文件位置  
  20. --下面是错误号对应的具体描述  
  21. SQL> ho oerr ora 01157  
  22. 0115700000"cannot identify/lock data file %s - see DBWR trace file"  
  23. // *Cause:  The background process was either unable to find one of the data  
  24. //         files or failed to lock it because the file was already in use.  
  25. //         The database will prohibit access to this file but other files will  
  26. //         be unaffected. However the first instance to open the database will  
  27. //         need to access all online data files. Accompanying error from the  
  28. //         operating system describes why the file could not be identified.  
  29. // *Action: Have operating system make file available to databaseThen either  
  30. //         open the database or do ALTER SYSTEM CHECK DATAFILES.  
  31.   
  32. --上面的描述指出了后台进程不能寻找到数据文件或者是因为文件在被其他进程使用而DBWR无法对其锁定。  
  33. --对于象这类文件数据库将禁止对其进行访问,而其他数据文件则不受影响。  
  34. --给出的决办法是确认错误号后的数据文件是否存在或可用,以及在open状态下执行ALTER SYSTEM CHECK DATAFILES命令  
  35.   
  36. 3、解决  
  37. --尝试执行alter system check datafiles  
  38. SQL> alter system check datafiles;  
  39.   
  40. System altered.  
  41.   
  42. --执行后故障依旧如下  
  43. SQL> select file_name,tablespace_name from dba_data_files where tablespace_name='SOE';  
  44. select file_name,tablespace_name from dba_data_files where tablespace_name='SOE'  
  45.                                       *  
  46. ERROR at line 1:  
  47. ORA-01157: cannot identify/lock data file 6 - see DBWR trace file  
  48. ORA-01110: data file 6: '/u01/oracle/db/dbs/soe.dbf'  
  49.   
  50. --查看数据字典记录的信息表明当前的表空间为online状态  
  51. SQL> select tablespace_name,status,contents from dba_tablespaces where tablespace_name='SOE';  
  52.   
  53. TABLESPACE_NAME                STATUS    CONTENTS  
  54. ------------------------------ --------- ---------  
  55. SOE                            ONLINE    PERMANENT  
  56.   
  57. --查看alert日志文件,也给出了该错误提示,提示给出了tarce文件  
  58. oracle@v2048db01p:/u01/oracle/admin/SYISDB/bdump> tail -8 alert_SYISDB1.log  
  59. Additional information: 3  
  60. Tue Nov 13 09:43:17 2012  
  61. Errors in file /u01/oracle/admin/SYISDB/bdump/syisdb1_dbw0_5925.trc:  
  62. ORA-01186: file 6 failed verification tests  
  63. ORA-01157: cannot identify/lock data file 6 - see DBWR trace file  
  64. ORA-01110: data file 6: '/u01/oracle/db/dbs/soe.dbf'  
  65. Tue Nov 13 09:43:17 2012  
  66. File 6 not verified due to error ORA-01157  
  67.   
  68. --查看表空间soe对应的数据文件是否存在  
  69. oracle@v2048db01p:~> export ORACLE_SID=+ASM1  
  70. oracle@v2048db01p:~> asmcmd  
  71. ASMCMD> cd +DG2/SYISDB/DATAFILE  
  72. ASMCMD> ls  
  73. CCDATA.289.799174049  
  74. SYSAUX.260.796819341  
  75. SYSTEM.259.796819335  
  76. UNDOTBS1.261.796819339  
  77. UNDOTBS2.257.796819343  
  78. USERS.256.796819343  
  79. X.290.799234531  
  80. ccdata.dbf  
  81.   
  82. ASMCMD> ls *soe*   --#没有任何含soe的数据文件  
  83. asmcmd: entry '*soe*' does not exist in directory '+DG2/SYISDB/DATAFILE/'  
  84. ASMCMD> ls *SOE*   --#没有任何含soe的数据文件,由此可知表空间soe对应的数据文件已经丢失  
  85. asmcmd: entry '*SOE*' does not exist in directory '+DG2/SYISDB/DATAFILE/'  
  86.   
  87. --因此直接删除该表空间及数据文件,注,生产环境不建议此操作  
  88. SQL> alter database datafile 6 offline drop;  
  89.   
  90. Database altered.  
  91.   
  92. --再次查看数据字典信息,依然处于Online状态  
  93. --Author : Robinson  
  94. --Blog   : http://blog.csdn.net/robinson_0612  
  95. SQL> select tablespace_name,status,contents from dba_tablespaces where tablespace_name='SOE';  
  96.   
  97. TABLESPACE_NAME                STATUS    CONTENTS  
  98. ------------------------------ --------- ---------  
  99. SOE                            ONLINE    PERMANENT  
  100.   
  101. --下面的查询貌似也有问题,对应的数据文件在上一命令中已经清除了,而此时依旧显示AVAILABLE  
  102. SQL> col file_name format a55  
  103. SQL> set linesize 160  
  104. SQL> select file_name,tablespace_name,status  from dba_data_files where tablespace_name='SOE';  
  105.   
  106. FILE_NAME                                TABLESPACE_NAME                STATUS  
  107. ---------------------------------------- ------------------------------ ---------  
  108. /u01/oracle/db/dbs/soe.dbf               SOE                            AVAILABLE  
  109.   
  110. --尝试在该表空间创建对象,收到了ORA-01658错误  
  111. SQL> create table t tablespace soe as select * from dba_objects;  
  112. create table t tablespace soe as select * from dba_objects  
  113.                                                *  
  114. ERROR at line 1:  
  115. ORA-01658: unable to create INITIAL extent for segment in tablespace SOE  
  116.   
  117. --查看对应的错误信息  
  118. --错误信息表明没有足够的连续空间分配初始extent.  
  119. SQL> ho oerr ora 01658  
  120. 0165800000"unable to create INITIAL extent for segment in tablespace %s"  
  121. // *Cause:  Failed to find sufficient contiguous space to allocate INITIAL  
  122. //          extent for segment being created.  
  123. // *Action: Use ALTER TABLESPACE ADD DATAFILE to add additional space to the  
  124. //          tablespace or retry with a smaller value for INITIAL  
  125.   
  126. --再次查看状态,发现此时对应的数据文件为RECOVER  
  127. SQL> col file_name format a40  
  128. SQL> select file_name,tablespace_name,status,ONLINE_STATUS from dba_data_files where tablespace_name='SOE';  
  129.   
  130. FILE_NAME                                TABLESPACE_NAME                STATUS    ONLINE_  
  131. ---------------------------------------- ------------------------------ --------- -------  
  132. /u01/oracle/db/dbs/soe.dbf               SOE                            AVAILABLE RECOVER  
  133.   
  134. --查看v$recover_file视图,给出文件未找到OFFLINE FILE NOT FOUND  
  135. SQL> select * from v$recover_file;  
  136.   
  137.      FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME  
  138. ---------- ------- ------- ----------------------------------------------------------------- ---------- ------------------  
  139.          6 OFFLINE OFFLINE FILE NOT FOUND                                                             0  
  140.   
  141. --查看对应的数据文件也不存在  
  142. SQL> ho ls -hltr /u01/oracle/db/dbs/soe.dbf  
  143. ls: /u01/oracle/db/dbs/soe.dbf: No such file or directory  
  144.   
  145. --删除整个表空间及数据文件  
  146. SQL> drop tablespace soe including contents and datafiles;  
  147.   
  148. Tablespace dropped.  
  149.   
  150. --下面的查询表示表空间soe已经被彻底清除  
  151. SQL> select * from v$recover_file;  
  152.   
  153. no rows selected  
  154.   
  155. SQL>  select file_name,tablespace_name,status,ONLINE_STATUS from dba_data_files where tablespace_name='SOE';  
  156.   
  157. no rows selected  

总结:
  ORA-01157通常由后台进程DBWR锁定而产生。
  如果在恢复期间,如数据库已经mount,而一个或多个数据文件不能打开导致数据库不能open时会出现该提示。
  数据文件丢失,数据文件的许可问题,如数据文件oracle用户没有写权限等都会产生ORA-01157
  如果open状态的情形下,ORA-01157未列出的数据文件不会受到影响。

 

补充说明:
  细心的朋友应该可能已经发现当时在检查对应的数据文件的时候,只检查了ASM磁盘是否存在对应的数据文件。
  由于出错数据库为RAC,因此忽略了检查提示中的文件系统对应的数据文件。说来还是不够仔细,狂汗......
  就其原因应该是这样,在使用swingbench时,创建soe表空间时直接一路next,导致将数据文件创建到了文件系统,而文件系统是非共享的。(RAC环境)

 


更多参考:

ORA-01157错误解决

有关Oracle 网络配置相关基础以及概念性的问题请参考:
        配置ORACLE 客户端连接到数据库 
        配置非默认端口的动态服务注册 
        配置sqlnet.ora限制IP访问Oracle 
       Oracle 监听器日志配置与管理 
       设置 Oracle 监听器密码(LISTENER)
       Oracle RAC 监听配置
       ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

       Oracle RAC 客户端连接负载均衡(Load Balance)

       配置RAC负载均衡与故障转移

   

有关基于用户管理的备份和备份恢复的概念请参

    Oracle 冷备份

    Oracle 热备份

    Oracle 备份恢复概念

    Oracle 实例恢复

    Oracle 基于用户管理恢复的处理

   SYSTEM 表空间管理及备份恢复

    SYSAUX表空间管理及恢复

   Oracle 基于备份控制文件的恢复(unsing backup controlfile)

 

有关RMAN的备份恢复与管理请参

    RMAN 概述及其体系结构

    RMAN 配置、监控与管理

    RMAN 备份详解

    RMAN 还原与恢复

    RMAN catalog 的创建和使用

    基于catalog 创建RMAN存储脚本

    基于catalog 的RMAN 备份与恢复

    RMAN 备份路径困惑

 

有关ORACLE体系结构请参

    Oracle 表空间与数据文件

    Oracle 密码文件

    Oracle 参数文件

    Oracle 联机重做日志文件(ONLINE LOG FILE)

    Oracle 控制文件(CONTROLFILE)

    Oracle 归档日志

    Oracle 回滚(ROLLBACK)和撤销(UNDO)

    Oracle 数据库实例启动关闭过程

    Oracle 10g SGA 的自动化管理

    Oracle 实例和Oracle数据库(Oracle体系结构)      


  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值