开发之没沟通误删客户数据库数据之找数据路
Posted jhubery-code
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发之没沟通误删客户数据库数据之找数据路相关的知识,希望对你有一定的参考价值。
很悲催,以为在客户那边的数据有问题删掉就行了,结果告诉我那是客户的正常使用的数据,我也是一脸懵逼。特此警戒自己和大家,开发的沟通很重要很重要很重要。然后就开始了找回丢失数据的漫长(一天)道路。
1.首先我使用的是plsql的oracle可视化界面的空间,我先查看了下历史执行的语句记录Ctrl+e,可以看到所有近期执行的sql语句,发现并没有使用语句做删除的,是直接在数据库进行操作的,还是用语句操作的好,整还是得整规范的。另寻他路;
2.使用 Oracle Database 10g 中的闪回表特性。
2.1alter table 表名 enable row movement; 允许移动
2.2 查询删除数据的时间点的数据(也就是闪回至该时间点之前的数据)
select * from WMS_TEST as of timestamp to_timestamp(‘2016-02-26 12:10:00‘,‘yyyy-mm-dd hh24:mi:ss‘); (如果不是,则继续缩小范围)
2.3 恢复删除且已提交的数据
flashback table wms_out_end_product_item to timestamp to_timestamp(‘2016-04-1 14:30:00‘,‘yyyy-mm-dd hh24:mi:ss‘);
2.4 alter table 表名 disable row movement; 使用完之后关闭
操作了这个方法之后,确实发现在昨天晚上8点左右删的数据中的一步,在执行的过程中则报了个快照过久的异常。OMG,发现时间是过得差不多一天了,去查了一下了解到,如果oracle没有设置过快照保存的时间,最多也就一天可以,有些还没一天,看具体的环境。用这个方法找回了两天数据。
3.没退路了。只好找到原来的系统设置好的每天自动更新数据库的位置,取出了当天凌晨数据库自动的备份文件.dbm,创建一个新的 数据库,把数据导过来,再找到当时删除的记录,说干就干,做事情,解决问题,你一下解决不了,就不要多想 了,感觉改变策略执行下一个问题,这样处理问题的效率比较高,人的想法也会比较积极(跑偏了),继续先拿着他们的压缩包搭建一个数据库。导出数据库的脚本语句:
Expdp zjshnew/[email protected] directory=dir_dp dumpfile=ZHSH20171213.dmp logfile=ZJSHNEW20171213.log schemas=zjshnew
3.1先创建数据库, 数据库的名称和用户名称密码 以及表空间名与客户那边的最好保持一致,以免出错。
3.2创建表空间语句:
create tablespace zczg logging datafile ‘D:\app\Administrator\oradata\zczg\zczg.dbf‘ ---实际实例目录 size 50m autoextend on next 50m maxsize 20480m extent management local;
3.3创建数据库日志文件语句:
create temporary tablespace zczg_temp tempfile ‘D:\app\Administrator\oradata\zczg\zczg_temp.dbf‘---实际实例目录 size 50m autoextend on next 50m maxsize 20480m extent management local;
3.4创建用户语句:
create user zczg identified by zczg default tablespace zczg temporary tablespace zczg_temp;
3.5授权给用户语句:
grant connect,resource to zczg; grant dba to zczg;
3.6做一个脚本.bat,数据库导入文件:
Impdp zhgh/[email protected] directory=dir_dp dumpfile=ZHGH_DB_20170913.DMP remap_schema
=zhgh:zhgh transform=segment_attributes:n logfile=zhgh.log
以上是关于开发之没沟通误删客户数据库数据之找数据路的主要内容,如果未能解决你的问题,请参考以下文章