删除用户、删除数据库表空间的操作还能恢复吗?

分类:编程技术 时间:2024-02-20 15:56 浏览:0 评论:0
0
本文主要讲解“删除用户和删除数据库表空间的操作还能恢复吗?”文章中的解释简单明了,易于学习和理解。请大家按照小编的思路慢慢深入,一起学习、理解。我们来学习一下“删除用户、删除数据库表空间的操作还能恢复吗?”!

曾经在微信群里,有人问下面这两个操作是否可以恢复?而且无需打开存档。紧接着就有人问数据库是否开启了闪回?

drop user aaacascade;drop tablespace asd 包括内容和数据文件;

PS:他没有指定flashback是闪回查询?闪回表?闪回数据库?那我们就从不了解闪回特性的角度来一一看这个问题(这里假设这个用户下载了一张表)

以下是整个分析过程:

场景一、闪回查询

SQL> create table aaa.a1(id number );已创建表。SQL> 插入 aaa.a1 值 (3);已创建 1 行。SQL> 提交;提交完成。SQL> 从 Dual 选择 dbms_flashback.get_system_change_number;GET_SYSTEM_CHANGE_NUMBER------------ ------------3575965SQL > 删除用户 aaa 级联;用户删除。SQL> select * from aaa.a1 as of scn 3575965;select * from aaa.a1 as of scn 3575965 *第 1 行出现错误:ORA-00942: 表或视图不存在

可见闪回查询无效。其实如果你对闪回查询有一点了解的话,可以先排除一下,因为闪回查询是基于undo的,而undo是受ddl影响的。 drop操作没有使用undo表空间,因此基于undo的闪回查询在这种场景下无法检索到数据。

场景2、闪回表(flashback table)

SQL>闪回表aaa.a1 to bef矿石掉落; flashback table aaa.a1 to before drop *ERROR at line 1:ORA-01435: user does not Exist

drop user 级联不会将该表放入回收站,所以无论我们如何执行flashback table ,这不会有帮助。

最后,我们再次尝试闪回数据库,看看它是否可以成为救命稻草。事实上,闪回数据库的前提是启用归档,所以抱歉,这条路行不通。

假设现在闪回数据库(闪回数据库,当然包括归档)已经开启,那么我们不小心删除的数据肯定能找回来吗?

场景3,闪回数据库(一)

SQL> select dbms_flashback.get_system_change_number from Dual;GET_SYSTEM_CHANGE_NUMBER---------- - --------------3574600SQL> 删除用户 aaa 级联;用户已删除。SQL> 删除表空间 asd,包括内容和数据文件;表空间已删除。SQL> 立即关闭;数据库已关闭。数据库已卸载。ORACLE 实例关闭d自己的.SQL>启动挂载;ORACLE实例已启动。总系统全局区域889389056字节固定大小2258360字节可变大小574622280字节数据库缓冲区306184192字节重做缓冲区6324224字节数据库安装。SQL>闪回数据库到scn 3574600; //闪回完成.SQL> alter database open read only; //以只读方式打开Database altered.SQL> select * from aaa.a1;select * from aaa.a1  product/11.2.0/db_1/dbs/UNNAMED00010'

这里是闪回的原理数据库:闪回数据库用于将数据库中的数据恢复到之前的时间点,而不是介质恢复。这里drop tablespaceincludedcontentsanddatafiles(使用includedatafile有同样的效果)会删除对应的数据文件。所以现在即使开启闪回数据库功能也无济于事。

因此,如果在上述情况下,我只执行了 drop usercascade 命令,而不执行 drop tablespace 包括数据文件(在闪回数据库中)模式),结果会有什么不同?

场景4,闪回数据库(2)

SQL> select dbms_flashback.get_system_change_number from Dual;GET_SYSTEM_CHANGE_NUMBER---------- - --------------3581891SQL> drop user db1cascade;用户被删除。SQL> shutdownimmediate;数据库关闭。数据库卸载。ORACLE实例关闭。SQL>startup mount;ORACLE实例启动。系统总计全局区域 889389056 字节固定大小 2258360 字节可变大小 574622280 字节数据库缓冲区 30618 4192 字节重做缓冲区 6324224 字节数据库已安装。SQL> 闪回数据库到 scn 3581891;闪回完成。SQL> alter database open read only;数据库更改。SQL> select * from db1.milktwo;ID NAME------------------------ ---------- -------33 kk2 hh

感谢您的阅读。以上是《删除用户和删除数据库表空间的操作能否恢复?》的内容看完这篇文章之后,我相信大家对于删除用户、删除数据库表空间的操作能否恢复的问题有了更深入的了解。具体用法需要在实践中验证。在此,小编将为您推送更多相关知识点的文章,欢迎关注!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 删除用户、删除数据库表空间的操作还能恢复吗?

用户评论