Oracle数据库表空间文件被删除[ora-01033|ORA-01110]监听失败

本文介绍了一次Oracle数据库因误删除外部文件导致无法登录的问题及解决过程。通过一系列操作包括关闭数据库、修改数据文件状态等步骤,最终实现了数据库的正常启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天用本地数据库做表空间测试,在扩展表空间时,因为输错了扩展文件名,就把该外部文件删了。结果,提示“监听失败”,sqlplus和pl/sql developer都不能登录。经搜索查找资料,终于恢复了登录。解决方法如下:(感谢张航的博客)

(当时把文件名输错了:ALTER TABLESPACE sp001 ADD DATAFILE 'd:\sp001.bf' SIZE 100m; 事后就把sp001.bf文件删了)


[sql]  view plain copy
  1. Microsoft Windows [版本 6.1.7601]  
  2. 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。  
  3.   
  4. C:\Users\Administrator>set ORACLE_SID=orcl  
  5.   
  6. C:\Users\Administrator>sqlplus / as sysdba  
  7.   
  8. SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 10月 23 16:09:58 2012  
  9.   
  10. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  11.   
  12.   
  13. 连接到:  
  14. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production  
  15. With the Partitioning, OLAP and Data Mining options  
  16.   
  17. SQL> shutdown immediate  
  18. ORA-01109: 数据库未打开  
  19.   
  20.   
  21. 已经卸载数据库。  
  22. ORACLE 例程已经关闭。  
  23. SQL> startup  
  24. ORACLE 例程已经启动。  
  25.   
  26. Total System Global Area  293601280 bytes  
  27. Fixed Size                  1248600 bytes  
  28. Variable Size              88081064 bytes  
  29. Database Buffers          197132288 bytes  
  30. Redo Buffers                7139328 bytes  
  31. 数据库装载完毕。  
  32. ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件  
  33. ORA-01110: 数据文件 7: 'D:\TBS01.DBF'  
  34.   
  35.   
  36. SQL> shutdown immediate  
  37. ORA-01109: 数据库未打开  
  38.   
  39.   
  40. 已经卸载数据库。  
  41. ORACLE 例程已经关闭。  
  42. SQL> startup mount  
  43. ORACLE 例程已经启动。  
  44.   
  45. Total System Global Area  293601280 bytes  
  46. Fixed Size                  1248600 bytes  
  47. Variable Size              88081064 bytes  
  48. Database Buffers          197132288 bytes  
  49. Redo Buffers                7139328 bytes  
  50. 数据库装载完毕。  
  51. SQL> recover datafile 2  
  52. ORA-00283: 恢复会话因错误而取消  
  53. ORA-00264: 不要求恢复  
  54.   
  55.   
  56. SQL> recover datafile 7  
  57. ORA-00283: 恢复会话因错误而取消  
  58. ORA-01110: 数据文件 7: 'D:\TBS01.DBF'  
  59. ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件  
  60. ORA-01110: 数据文件 7: 'D:\TBS01.DBF'  
  61.   
  62.   
  63. SQL> startup  
  64. ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它  
  65. SQL> recover datafile 7  
  66. ORA-00283: 恢复会话因错误而取消  
  67. ORA-01110: 数据文件 7: 'D:\TBS01.DBF'  
  68. ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件  
  69. ORA-01110: 数据文件 7: 'D:\TBS01.DBF'  
  70.   
  71.   
  72. SQL>  select flashback_on from vdatabase  
  73.   2  ;  
  74.  select flashback_on from vdatabase  
  75.                           *  
  76. 第 1 行出现错误:  
  77. ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询  
  78.   
  79.   
  80. SQL> recover datafile 'd:/tbs01.dbf'  
  81. ORA-00283: 恢复会话因错误而取消  
  82. ORA-01110: 数据文件 7: 'D:\TBS01.DBF'  
  83. ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件  
  84. ORA-01110: 数据文件 7: 'D:\TBS01.DBF'  
  85.   
  86.   
  87. SQL> select file_name,file_id,tablespace_name from dba_data_files;  
  88. select file_name,file_id,tablespace_name from dba_data_files  
  89.                                               *  
  90. 第 1 行出现错误:  
  91. ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询  
  92.   
  93.   
  94. SQL>  col file_name format a100;  
  95. SQL> select file_name,file_id,tablespace_name from dba_data_files;  
  96. select file_name,file_id,tablespace_name from dba_data_files  
  97.                                               *  
  98. 第 1 行出现错误:  
  99. ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询  
  100.   
  101.   
  102. SQL>  startup mount;  
  103. ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它  
  104. SQL> alter session set nls_language=american;  
  105.   
  106. Session altered.  
  107.   
  108. SQL> alter database open;  
  109. alter database open  
  110. *  
  111. ERROR at line 1:  
  112. ORA-01157: cannot identify/lock data file 7 - see DBWR trace file  
  113. ORA-01110: data file 7: 'D:\TBS01.DBF'  
  114.   
  115.   
  116. SQL> startup nomount;  
  117. ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它  
  118. SQL> alter database mount;  
  119. alter database mount  
  120. *  
  121. ERROR at line 1:  
  122. ORA-01100: 数据库已装载  
  123.   
  124.   
  125. SQL> alter session set nls_language=american;  
  126.   
  127. Session altered.  
  128.   
  129. SQL> alter database datafile 'd:\TBS01.dbf' offline drop;  
  130.   
  131. Database altered.  
  132.   
  133. SQL> alter database open;  
  134. alter database open  
  135. *  
  136. ERROR at line 1:  
  137. ORA-01157: cannot identify/lock data file 8 - see DBWR trace file  
  138. ORA-01110: data file 8: 'D:\TBS02.DBF'  
  139.   
  140.   
  141. SQL> alter database datafile 'd:\TBS02.dbf' offline drop;  
  142.   
  143. Database altered.  
  144.   
  145. SQL> alter database datafile 'd:\TBS03.dbf' offline drop;  
  146.   
  147. Database altered.  
  148.   
  149. SQL> alter database datafile 'd:\TBS04.dbf' offline drop;  
  150.   
  151. Database altered.  
  152.   
  153. SQL> alter database open;  
  154. alter database open  
  155. *  
  156. ERROR at line 1:  
  157. ORA-01157: cannot identify/lock data file 11 - see DBWR trace file  
  158. ORA-01110: data file 11: 'D:\TBS05.DBF'  
  159.   
  160.   
  161. SQL> alter database datafile 'd:\TBS05.dbf' offline drop;  
  162.   
  163. Database altered.  
  164.   
  165. SQL> alter database open;  
  166.   
  167. Database altered.  
  168.   
  169. SQL>  

 

至此,修复完成,可以正常登陆。

原理:数据库启动到nomount状态,找到初始化参数文件(inittestDB.ora),根据这个定位到控制文件。控制文件中记录着数据库的文件结构信息(当然不止文件结构信息),比如:有哪些数据文件,日志文件数据文件的状态(online offline),但数据库在open 的时候并不查看offline状态下的datafile,所以将datafile offline,数据库不检查这个数据文件里,就可以打开。注意这里的数据文件只是用户数据文件,若是系统数据文件,另要考虑了。数据库启动到mount状态了,这时实例和硬盘上的数据库要关联了。处于这个状态时,可执行些管理型的任务,比如恢复。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值