网站首页 > 技术文章 正文
删除Oracle数据库数据一般有以下2种方式:delete、drop或truncate。下面针对这2种删除oracle数据库数据的方式探讨一下oracle数据库数据恢复方法(不考虑全库备份和利用归档日志)。
1、delete误删除的数据恢复方法。
利用oracle提供的闪回方法进行恢复。如果在删除数据后还没做大量的操作(只要被删除数据的块没被覆写),就可以利用闪回直接找回删除的数据。
具体步骤为:
a、确定删除数据的时间(最好是删除数据的时间点)。
b、用以下语句找出删除的数据:select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')
c、把删除的数据重新插入原表:insert into 表名 (select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss'))
注意要保证主键不重复。
如果表结构没有发生改变,还可以直接使用闪回整个表的方式来恢复数据(表闪回要求用户必须要有flash any table权限。)。
具体步骤:
alter table 表名 enable row movement
flashback table 表名 to timestamp to_timestamp(删除时间点',' frombyte yyyy-mm-dd hh24:mi:ss')
2、drop误删除的数据恢复方法。
oracle在删除表时没有直接将表所占的块清空,只是对该表的数据块做了可以被覆写的标志。oracle将已删除的表的信息放到了一个虚拟容器“回收站”中,所以在块未被重新使用前还可以恢复。
具体步骤:
查询这个“回收站”或者查询user_table视图来查找已被删除的表:
select table_name,dropped from user_tables
select object_name,original_name,type,droptime from user_recyclebin
在以上信息中,表名都是被重命名过的,字段table_name或者object_name就是删除后在回收站中的存放表名。
如果还能记住表名,则可以用下面语句直接恢复:
flashback table 原表名 to before drop
如果记不住了,可以直接使用回收站的表名进行恢复,然后再重命名。参照下方语句:
flashback table "回收站中的表名(如:Bin$DSbdfd4rdfdfdfegdfsf==$0)" to before drop rename to 新表名
oracle的闪回功能除了以上基本功能外,还可以闪回整个数据库。
使用数据库闪回功能让数据库回到过去某一状态。语句如下:
SQL>alter database flashback on
SQL>flashback database to scn SCNNO
SQL>flashback database to timestamp to_timestamp('时间点','yyyy-mm-dd hh24:mi:ss')
总结:
oracle数据库虽然提供以上安全机制保证了误操作后可以恢复数据,但同时也出现另外一个问题:空间占用。drop表或者delete表数据后,空间不会自动回收。
对于一些确定不使用的表,删除后可以回收空间。删除后回收空间的方法:
1、采用truncate方式进行截断。
2、在drop时加上purge选项:drop table 表名 purge
该选项还有以下用途:
通过删除recyclebin区域来永久性删除表。
原始删除表emp:
drop table emp cascade constraints purge table emp
删除当前用户的回收站:
purge recyclebin
删除全体用户在回收站的数据:
purge dba_recyclebin
猜你喜欢
- 2024-10-13 国庆节快乐--一文看懂Oracle数据库跨版本下rman备份恢复过程
- 2024-10-13 史上最全Oracle文件损坏处理办法(附实验步骤)
- 2024-10-13 数据库数据恢复-ORACLE数据库常见故障的数据恢复可能性分析
- 2024-10-13 Oracle数据库不同损坏级别的恢复详情
- 2024-10-13 不懂数据库高可用、备份与恢复,数据库优化?看这本就够了
- 2024-10-13 windows系统回收站和Oracle回收站--致力于恢复不小心删除的对象
- 2024-10-13 Oracle数据误操作全面恢复实战(r11笔记第78天)
- 2024-10-13 TRUNCATE恢复-bbed truncate如何恢复
- 2024-10-13 服务器数据恢复-服务器断电导致Oracle数据库报错的...
- 2024-10-13 一起来学习Oracle的备份恢复基础吧-1
你 发表评论:
欢迎- 06-24发现一款开源宝藏级工作流低代码快速开发平台
- 06-24程序员危险了,这是一个 无代码平台+AI+code做项目的案例
- 06-24一款全新的工作流,低代码快速开发平台
- 06-24如何用好AI,改造自己的设计工作流?
- 06-24濮阳网站开发(濮阳网站建设)
- 06-24AI 如何重塑前端开发,我们该如何适应
- 06-24应届生靠这个Java简历模板拿下了5个offer
- 06-24服务端性能测试实战3-性能测试脚本开发
- 566℃Oracle分析函数之Lag和Lead()使用
- 566℃几个Oracle空值处理函数 oracle处理null值的函数
- 550℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 545℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 543℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 536℃【数据统计分析】详解Oracle分组函数之CUBE
- 526℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 519℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)