这是来自这个问题。
首先我要说的是不是一个 DBA,所以我对此真的非常迷茫。
几周前,我们与其中一位 SID 失去了联系。所有其他服务均正常,但这项服务却无法使用。
当我们尝试连接时,我们收到了这条消息
ORA-01033: ORACLE 初始化或关闭正在进行中
尝试alter database open
最终
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/app/oracle/oradata/xxx/xxx_data.dbf'
我尝试关闭/重新启动数据库,但收到此消息。
Total System Global Area 566231040 bytes
Fixed Size 1220604 bytes
Variable Size 117440516 bytes
Database Buffers 444596224 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/app/oracle/oradata/xxx/xxx_data.dbf'
当一切继续相同的情况时,我删除了 dbf 文件(rm xxx_data.dbf xxx_index.dbf),然后使用重新创建它们touch xxx_data.dbf
。
我还尝试使用重新创建表空间
`CREATE TABLESPACE DATA DATAFILE XXX_DATA.DBF`
并得到
Database not open
正如我所说的,我不知道这有多糟糕,或者我距离访问我的数据库还有多远(至少对于这个 SID,其他的都在运行)。
我可以想象最后的办法就是把所有东西扔掉,然后重新创造,但我不知道该怎么做,我希望有一个破坏性较小的解决方案。
任何帮助都将不胜感激。提前致谢。
答案1
删除 dbf 文件几乎会毁掉您的数据库。您需要一些专家的帮助才能使用现有数据库。
您需要从备份中恢复。您有备份,对吗?
如果您没有备份,那么您将需要从头开始重新创建数据库,并从另一个实例导入数据。
答案2
您可以尝试打开数据库的其余部分。正如 DCookie 之前所说,删除文件 (xxx_data.dbf xxx_index.dbf) 严重损坏了您的数据库。如果您没有任何备份,并且数据对您来说真的很重要,我只能强调不要再摆弄该系统并从 Oracle 专业服务中寻求帮助的重要性。
如果您想自己尝试恢复,您可以使损坏的表空间脱机,然后从数据库的其余部分卸载数据。
export ORACLE_SID=<your_lost_SID>
sqlplus /nolog
conn / as sysdba
startup mount
select TABLESPACE_NAME , FILE# from v$datafile_header where FILE# = 6;
此时,您可以查询数据库以查找损坏的表空间的名称。现在我们将其脱机。然后启动数据库的其余部分。
alter database datafile '/u01/app/oracle/oradata/xxx/xxx_data.dbf' offline;
如果你得到如下信息:
ORA-01145: offline immediate disallowed unless media recovery enabled
您正在以 noarchivelog 模式运行数据库。在这种情况下,这真的很糟糕,您应该在这里停下来并寻求帮助!现在不要再继续了。拜托!只需关闭实例即可。也许专家可以提供帮助。
如果表空间处于脱机状态,您可以继续并使数据库的其余部分联机。
alter database open;
祝你好运!