在 Oracle 归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?

作者 | JiekeXu
来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)
如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看在 Oracle 归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!

在 Oracle 归档模式下直接 rm data.dbf 数据文件并重启数据库还有救吗?为何会有这样的问题,要追溯到上周一位朋友咨询的事情,他那里一个 Oracle 单机的环境因为表空间不足了,需要扩容表空间,则通过添加表空间数据文件的命令加入了一个数据文件,执行成功后呢便可以继续写入数据了。

不一会儿发现自己添加的数据文件路径不对,将其加到根文件系统了,而不是统一存放数据的目录,他想这是刚加的数据文件,发现路径不对,则直接用类似于 rm data.dbf 的命令给删除了,这个时候导致数据库宕机了【PS:不知为何他这个数据库会宕机,按理来说从操作系统删除一个数据文件不会导致 Oracle 数据库宕机的】。他肯定没有看我以前写的 案例|RAC 添加表空间误将数据文件放本地处理办法,不然也不会出现这样的问题。

一、模拟问题

因为不是我个人亲身经历的事情,没有全部的素材,这里我用我的 Oracle 单机 19.12 版本的测试环境模拟一下大概的流程。

模拟业务表空间和业务用户,且可能有数据写入。

    --模拟业务表空间
    create tablespace jiekexu_data datafile '/u01/app/oracle/oradata/TESTOGG/jiekexu_data01.dbf' size 10m;
    <br>
    --已经提前在 users 表空间创建了 jiekexu 用户,这里将其修改为新建的表空间 JIEKEXU_DATA
    <br>
    alter user jiekexu quota unlimited on jiekexu_data;
    alter user jiekexu default tablespace jiekexu_data;

    --连接到新建用户查看表及新建表模拟数据写入

    conn jiekexu/jiekexu;
    select count(*) from JiekeXu.T1;
    <br>
    COUNT(*)
    ----------
    12

    create table t2 as select * from t1;