ITPub博客

首页 > 数据库 > Oracle > ORA-01157: cannot identify/lock data file n 故障一例

ORA-01157: cannot identify/lock data file n 故障一例

Oracle 作者:dawn009 时间:2014-02-26 18:48:10 0 删除 编辑

 -----转载于:http://blog.csdn.net/leshami/article/details/8179253
最近在使用swingbench的时候碰到了ORA-01157故障,下面是其具体描述与解决。

  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. 01157, 00000, "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. 01658, 00000, "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环境)

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

请登录后发表评论 登录
全部评论

注册时间:2013-08-15

  • 博文量
    595
  • 访问量
    4847821